1This is gcc.info, produced by makeinfo version 5.2 from gcc.texi.
2
3Copyright (C) 1988-2014 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-2014 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.9.2.  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 Get Help with 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 substantially
179complete support for this standard version; see
180<http://gcc.gnu.org/c99status.html> for details.  To select this
181standard, use '-std=c99' or '-std=iso9899:1999'.  (While in development,
182drafts of this standard version 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 substantially complete support for
190this standard, enabled with '-std=c11' or '-std=iso9899:2011'.  (While
191in development, drafts of this standard version were referred to as
192"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 is intended to change to '-std=gnu11' in
203some future release.  Some features that are part of the C99 standard
204are accepted as extensions in C90 mode, and some features that are part
205of the C11 standard are accepted as extensions in C90 and C99 modes.
206
207 The ISO C standard defines (in clause 4) two classes of conforming
208implementation.  A "conforming hosted implementation" supports the whole
209standard including all the library facilities; a "conforming
210freestanding implementation" is only required to provide certain library
211facilities: those in '<float.h>', '<limits.h>', '<stdarg.h>', and
212'<stddef.h>'; since AMD1, also those in '<iso646.h>'; since C99, also
213those in '<stdbool.h>' and '<stdint.h>'; and since C11, also those in
214'<stdalign.h>' and '<stdnoreturn.h>'.  In addition, complex types, added
215in C99, are not required for freestanding implementations.  The standard
216also defines two environments for programs, a "freestanding
217environment", required of all implementations and which may not have
218library facilities beyond those required of freestanding
219implementations, where the handling of program startup and termination
220are implementation-defined, and a "hosted environment", which is not
221required, in which all the library facilities are provided and startup
222is through a function 'int main (void)' or 'int main (int, char *[])'.
223An OS kernel would be a freestanding environment; a program using the
224facilities of an operating system would normally be in a hosted
225implementation.
226
227 GCC aims towards being usable as a conforming freestanding
228implementation, or as the compiler for a conforming hosted
229implementation.  By default, it will act as the compiler for a hosted
230implementation, defining '__STDC_HOSTED__' as '1' and presuming that
231when the names of ISO C functions are used, they have the semantics
232defined in the standard.  To make it act as a conforming freestanding
233implementation for a freestanding environment, use the option
234'-ffreestanding'; it will then define '__STDC_HOSTED__' to '0' and not
235make assumptions about the meanings of function names from the standard
236library, with exceptions noted below.  To build an OS kernel, you may
237well still need to make your own arrangements for linking and startup.
238*Note Options Controlling C Dialect: C Dialect Options.
239
240 GCC does not provide the library facilities required only of hosted
241implementations, nor yet all the facilities required by C99 of
242freestanding implementations on all platforms; to use the facilities of
243a hosted environment, you will need to find them elsewhere (for example,
244in the GNU C library).  *Note Standard Libraries: Standard Libraries.
245
246 Most of the compiler support routines used by GCC are present in
247'libgcc', but there are a few exceptions.  GCC requires the freestanding
248environment provide 'memcpy', 'memmove', 'memset' and 'memcmp'.
249Finally, if '__builtin_trap' is used, and the target does not implement
250the 'trap' pattern, then GCC will emit a call to 'abort'.
251
252 For references to Technical Corrigenda, Rationale documents and
253information concerning the history of C that is available online, see
254<http://gcc.gnu.org/readings.html>
255
2562.2 C++ language
257================
258
259GCC supports the original ISO C++ standard (1998) and contains
260experimental support for the second ISO C++ standard (2011).
261
262 The original ISO C++ standard was published as the ISO standard
263(ISO/IEC 14882:1998) and amended by a Technical Corrigenda published in
2642003 (ISO/IEC 14882:2003).  These standards are referred to as C++98 and
265C++03, respectively.  GCC implements the majority of C++98 ('export' is
266a notable exception) and most of the changes in C++03.  To select this
267standard in GCC, use one of the options '-ansi', '-std=c++98', or
268'-std=c++03'; to obtain all the diagnostics required by the standard,
269you should also specify '-pedantic' (or '-pedantic-errors' if you want
270them to be errors rather than warnings).
271
272 A revised ISO C++ standard was published in 2011 as ISO/IEC 14882:2011,
273and is referred to as C++11; before its publication it was commonly
274referred to as C++0x.  C++11 contains several changes to the C++
275language, most of which have been implemented in an experimental C++11
276mode in GCC.  For information regarding the C++11 features available in
277the experimental C++11 mode, see
278<http://gcc.gnu.org/projects/cxx0x.html>.  To select this standard in
279GCC, use the option '-std=c++11'; to obtain all the diagnostics required
280by the standard, you should also specify '-pedantic' (or
281'-pedantic-errors' if you want them to be errors rather than warnings).
282
283 More information about the C++ standards is available on the ISO C++
284committee's web site at <http://www.open-std.org/jtc1/sc22/wg21/>.
285
286 By default, GCC provides some extensions to the C++ language; *Note
287Options Controlling C++ Dialect: C++ Dialect Options.  Use of the '-std'
288option listed above will disable these extensions.  You may also select
289an extended version of the C++ language explicitly with '-std=gnu++98'
290(for C++98 with GNU extensions) or '-std=gnu++11' (for C++11 with GNU
291extensions).  The default, if no C++ language dialect options are given,
292is '-std=gnu++98'.
293
2942.3 Objective-C and Objective-C++ languages
295===========================================
296
297GCC supports "traditional" Objective-C (also known as "Objective-C 1.0")
298and contains support for the Objective-C exception and synchronization
299syntax.  It has also support for a number of "Objective-C 2.0" language
300extensions, including properties, fast enumeration (only for
301Objective-C), method attributes and the @optional and @required keywords
302in protocols.  GCC supports Objective-C++ and features available in
303Objective-C are also available in Objective-C++.
304
305 GCC by default uses the GNU Objective-C runtime library, which is part
306of GCC and is not the same as the Apple/NeXT Objective-C runtime library
307used on Apple systems.  There are a number of differences documented in
308this manual.  The options '-fgnu-runtime' and '-fnext-runtime' allow you
309to switch between producing output that works with the GNU Objective-C
310runtime library and output that works with the Apple/NeXT Objective-C
311runtime library.
312
313 There is no formal written standard for Objective-C or Objective-C++.
314The authoritative manual on traditional Objective-C (1.0) is
315"Object-Oriented Programming and the Objective-C Language", available at
316a number of web sites:
317   * <http://www.gnustep.org/resources/documentation/ObjectivCBook.pdf>
318     is the original NeXTstep document;
319   * <http://objc.toodarkpark.net> is the same document in another
320     format;
321   *
322     <http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/ObjectiveC/>
323     has an updated version but make sure you search for "Object
324     Oriented Programming and the Objective-C Programming Language 1.0",
325     not documentation on the newer "Objective-C 2.0" language
326
327 The Objective-C exception and synchronization syntax (that is, the
328keywords @try, @throw, @catch, @finally and @synchronized) is supported
329by GCC and is enabled with the option '-fobjc-exceptions'.  The syntax
330is briefly documented in this manual and in the Objective-C 2.0 manuals
331from Apple.
332
333 The Objective-C 2.0 language extensions and features are automatically
334enabled; they include properties (via the @property, @synthesize and
335@dynamic keywords), fast enumeration (not available in Objective-C++),
336attributes for methods (such as deprecated, noreturn, sentinel, format),
337the unused attribute for method arguments, the @package keyword for
338instance variables and the @optional and @required keywords in
339protocols.  You can disable all these Objective-C 2.0 language
340extensions with the option '-fobjc-std=objc1', which causes the compiler
341to recognize the same Objective-C language syntax recognized by GCC 4.0,
342and to produce an error if one of the new features is used.
343
344 GCC has currently no support for non-fragile instance variables.
345
346 The authoritative manual on Objective-C 2.0 is available from Apple:
347   *
348     <http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/ObjectiveC/>
349
350 For more information concerning the history of Objective-C that is
351available online, see <http://gcc.gnu.org/readings.html>
352
3532.4 Go language
354===============
355
356As of the GCC 4.7.1 release, GCC supports the Go 1 language standard,
357described at <http://golang.org/doc/go1.html>.
358
3592.5 References for other languages
360==================================
361
362*Note GNAT Reference Manual: (gnat_rm)Top, for information on standard
363conformance and compatibility of the Ada compiler.
364
365 *Note Standards: (gfortran)Standards, for details of standards
366supported by GNU Fortran.
367
368 *Note Compatibility with the Java Platform: (gcj)Compatibility, for
369details of compatibility between 'gcj' and the Java Platform.
370
371
372File: gcc.info,  Node: Invoking GCC,  Next: C Implementation,  Prev: Standards,  Up: Top
373
3743 GCC Command Options
375*********************
376
377When you invoke GCC, it normally does preprocessing, compilation,
378assembly and linking.  The "overall options" allow you to stop this
379process at an intermediate stage.  For example, the '-c' option says not
380to run the linker.  Then the output consists of object files output by
381the assembler.
382
383 Other options are passed on to one stage of processing.  Some options
384control the preprocessor and others the compiler itself.  Yet other
385options control the assembler and linker; most of these are not
386documented here, since you rarely need to use any of them.
387
388 Most of the command-line options that you can use with GCC are useful
389for C programs; when an option is only useful with another language
390(usually C++), the explanation says so explicitly.  If the description
391for a particular option does not mention a source language, you can use
392that option with all supported languages.
393
394 *Note Compiling C++ Programs: Invoking G++, for a summary of special
395options for compiling C++ programs.
396
397 The 'gcc' program accepts options and file names as operands.  Many
398options have multi-letter names; therefore multiple single-letter
399options may _not_ be grouped: '-dv' is very different from '-d -v'.
400
401 You can mix options and other arguments.  For the most part, the order
402you use doesn't matter.  Order does matter when you use several options
403of the same kind; for example, if you specify '-L' more than once, the
404directories are searched in the order specified.  Also, the placement of
405the '-l' option is significant.
406
407 Many options have long names starting with '-f' or with '-W'--for
408example, '-fmove-loop-invariants', '-Wformat' and so on.  Most of these
409have both positive and negative forms; the negative form of '-ffoo' is
410'-fno-foo'.  This manual documents only one of these two forms,
411whichever one is not the default.
412
413 *Note Option Index::, for an index to GCC's options.
414
415* Menu:
416
417* Option Summary::      Brief list of all options, without explanations.
418* Overall Options::     Controlling the kind of output:
419                        an executable, object files, assembler files,
420                        or preprocessed source.
421* Invoking G++::        Compiling C++ programs.
422* C Dialect Options::   Controlling the variant of C language compiled.
423* C++ Dialect Options:: Variations on C++.
424* Objective-C and Objective-C++ Dialect Options:: Variations on Objective-C
425                        and Objective-C++.
426* Language Independent Options:: Controlling how diagnostics should be
427                        formatted.
428* Warning Options::     How picky should the compiler be?
429* Debugging Options::   Symbol tables, measurements, and debugging dumps.
430* Optimize Options::    How much optimization?
431* Preprocessor Options:: Controlling header files and macro definitions.
432                         Also, getting dependency information for Make.
433* Assembler Options::   Passing options to the assembler.
434* Link Options::        Specifying libraries and so on.
435* Directory Options::   Where to find header files and libraries.
436                        Where to find the compiler executable files.
437* Spec Files::          How to pass switches to sub-processes.
438* Target Options::      Running a cross-compiler, or an old version of GCC.
439* Submodel Options::    Specifying minor hardware or convention variations,
440                        such as 68010 vs 68020.
441* Code Gen Options::    Specifying conventions for function calls, data layout
442                        and register usage.
443* Environment Variables:: Env vars that affect GCC.
444* Precompiled Headers:: Compiling a header once, and using it many times.
445
446
447File: gcc.info,  Node: Option Summary,  Next: Overall Options,  Up: Invoking GCC
448
4493.1 Option Summary
450==================
451
452Here is a summary of all the options, grouped by type.  Explanations are
453in the following sections.
454
455_Overall Options_
456     *Note Options Controlling the Kind of Output: Overall Options.
457          -c  -S  -E  -o FILE  -no-canonical-prefixes
458          -pipe  -pass-exit-codes
459          -x LANGUAGE  -v  -###  --help[=CLASS[,...]]  --target-help
460          --version -wrapper @FILE -fplugin=FILE -fplugin-arg-NAME=ARG
461          -fdump-ada-spec[-slim] -fada-spec-parent=UNIT -fdump-go-spec=FILE
462
463_C Language Options_
464     *Note Options Controlling C Dialect: C Dialect Options.
465          -ansi  -std=STANDARD  -fgnu89-inline
466          -aux-info FILENAME -fallow-parameterless-variadic-functions
467          -fno-asm  -fno-builtin  -fno-builtin-FUNCTION
468          -fhosted  -ffreestanding -fopenmp -fopenmp-simd -fms-extensions
469          -fplan9-extensions -trigraphs  -traditional  -traditional-cpp
470          -fallow-single-precision  -fcond-mismatch -flax-vector-conversions
471          -fsigned-bitfields  -fsigned-char
472          -funsigned-bitfields  -funsigned-char
473
474_C++ Language Options_
475     *Note Options Controlling C++ Dialect: C++ Dialect Options.
476          -fabi-version=N  -fno-access-control  -fcheck-new
477          -fconstexpr-depth=N  -ffriend-injection
478          -fno-elide-constructors
479          -fno-enforce-eh-specs
480          -ffor-scope  -fno-for-scope  -fno-gnu-keywords
481          -fno-implicit-templates
482          -fno-implicit-inline-templates
483          -fno-implement-inlines  -fms-extensions
484          -fno-nonansi-builtins  -fnothrow-opt  -fno-operator-names
485          -fno-optional-diags  -fpermissive
486          -fno-pretty-templates
487          -frepo  -fno-rtti  -fstats  -ftemplate-backtrace-limit=N
488          -ftemplate-depth=N
489          -fno-threadsafe-statics -fuse-cxa-atexit  -fno-weak  -nostdinc++
490          -fvisibility-inlines-hidden
491          -fvtable-verify=STD|PREINIT|NONE
492          -fvtv-counts -fvtv-debug
493          -fvisibility-ms-compat
494          -fext-numeric-literals
495          -Wabi  -Wconversion-null  -Wctor-dtor-privacy
496          -Wdelete-non-virtual-dtor -Wliteral-suffix -Wnarrowing
497          -Wnoexcept -Wnon-virtual-dtor  -Wreorder
498          -Weffc++  -Wstrict-null-sentinel
499          -Wno-non-template-friend  -Wold-style-cast
500          -Woverloaded-virtual  -Wno-pmf-conversions
501          -Wsign-promo
502
503_Objective-C and Objective-C++ Language Options_
504     *Note Options Controlling Objective-C and Objective-C++ Dialects:
505     Objective-C and Objective-C++ Dialect Options.
506          -fconstant-string-class=CLASS-NAME
507          -fgnu-runtime  -fnext-runtime
508          -fno-nil-receivers
509          -fobjc-abi-version=N
510          -fobjc-call-cxx-cdtors
511          -fobjc-direct-dispatch
512          -fobjc-exceptions
513          -fobjc-gc
514          -fobjc-nilcheck
515          -fobjc-std=objc1
516          -freplace-objc-classes
517          -fzero-link
518          -gen-decls
519          -Wassign-intercept
520          -Wno-protocol  -Wselector
521          -Wstrict-selector-match
522          -Wundeclared-selector
523
524_Language Independent Options_
525     *Note Options to Control Diagnostic Messages Formatting: Language
526     Independent Options.
527          -fmessage-length=N
528          -fdiagnostics-show-location=[once|every-line]
529          -fdiagnostics-color=[auto|never|always]
530          -fno-diagnostics-show-option -fno-diagnostics-show-caret
531
532_Warning Options_
533     *Note Options to Request or Suppress Warnings: Warning Options.
534          -fsyntax-only  -fmax-errors=N  -Wpedantic
535          -pedantic-errors
536          -w  -Wextra  -Wall  -Waddress  -Waggregate-return
537          -Waggressive-loop-optimizations -Warray-bounds
538          -Wno-attributes -Wno-builtin-macro-redefined
539          -Wc++-compat -Wc++11-compat -Wcast-align  -Wcast-qual
540          -Wchar-subscripts -Wclobbered  -Wcomment -Wconditionally-supported
541          -Wconversion -Wcoverage-mismatch -Wdate-time -Wdelete-incomplete -Wno-cpp
542          -Wno-deprecated -Wno-deprecated-declarations -Wdisabled-optimization
543          -Wno-div-by-zero -Wdouble-promotion -Wempty-body  -Wenum-compare
544          -Wno-endif-labels -Werror  -Werror=*
545          -Wfatal-errors  -Wfloat-equal  -Wformat  -Wformat=2
546          -Wno-format-contains-nul -Wno-format-extra-args -Wformat-nonliteral
547          -Wformat-security  -Wformat-y2k
548          -Wframe-larger-than=LEN -Wno-free-nonheap-object -Wjump-misses-init
549          -Wignored-qualifiers
550          -Wimplicit  -Wimplicit-function-declaration  -Wimplicit-int
551          -Winit-self  -Winline -Wmaybe-uninitialized
552          -Wno-int-to-pointer-cast -Wno-invalid-offsetof
553          -Winvalid-pch -Wlarger-than=LEN  -Wunsafe-loop-optimizations
554          -Wlogical-op -Wlong-long
555          -Wmain -Wmaybe-uninitialized -Wmissing-braces  -Wmissing-field-initializers
556          -Wmissing-include-dirs
557          -Wno-multichar  -Wnonnull  -Wno-overflow -Wopenmp-simd
558          -Woverlength-strings  -Wpacked  -Wpacked-bitfield-compat  -Wpadded
559          -Wparentheses  -Wpedantic-ms-format -Wno-pedantic-ms-format
560          -Wpointer-arith  -Wno-pointer-to-int-cast
561          -Wredundant-decls  -Wno-return-local-addr
562          -Wreturn-type  -Wsequence-point  -Wshadow
563          -Wsign-compare  -Wsign-conversion -Wfloat-conversion
564          -Wsizeof-pointer-memaccess
565          -Wstack-protector -Wstack-usage=LEN -Wstrict-aliasing
566          -Wstrict-aliasing=n  -Wstrict-overflow -Wstrict-overflow=N
567          -Wsuggest-attribute=[pure|const|noreturn|format]
568          -Wmissing-format-attribute
569          -Wswitch  -Wswitch-default  -Wswitch-enum -Wsync-nand
570          -Wsystem-headers  -Wtrampolines  -Wtrigraphs  -Wtype-limits  -Wundef
571          -Wuninitialized  -Wunknown-pragmas  -Wno-pragmas
572          -Wunsuffixed-float-constants  -Wunused  -Wunused-function
573          -Wunused-label  -Wunused-local-typedefs -Wunused-parameter
574          -Wno-unused-result -Wunused-value  -Wunused-variable
575          -Wunused-but-set-parameter -Wunused-but-set-variable
576          -Wuseless-cast -Wvariadic-macros -Wvector-operation-performance
577          -Wvla -Wvolatile-register-var  -Wwrite-strings -Wzero-as-null-pointer-constant
578
579_C and Objective-C-only Warning Options_
580          -Wbad-function-cast  -Wmissing-declarations
581          -Wmissing-parameter-type  -Wmissing-prototypes  -Wnested-externs
582          -Wold-style-declaration  -Wold-style-definition
583          -Wstrict-prototypes  -Wtraditional  -Wtraditional-conversion
584          -Wdeclaration-after-statement -Wpointer-sign
585
586_Debugging Options_
587     *Note Options for Debugging Your Program or GCC: Debugging Options.
588          -dLETTERS  -dumpspecs  -dumpmachine  -dumpversion
589          -fsanitize=STYLE
590          -fdbg-cnt-list -fdbg-cnt=COUNTER-VALUE-LIST
591          -fdisable-ipa-PASS_NAME
592          -fdisable-rtl-PASS_NAME
593          -fdisable-rtl-PASS-NAME=RANGE-LIST
594          -fdisable-tree-PASS_NAME
595          -fdisable-tree-PASS-NAME=RANGE-LIST
596          -fdump-noaddr -fdump-unnumbered -fdump-unnumbered-links
597          -fdump-translation-unit[-N]
598          -fdump-class-hierarchy[-N]
599          -fdump-ipa-all -fdump-ipa-cgraph -fdump-ipa-inline
600          -fdump-passes
601          -fdump-statistics
602          -fdump-tree-all
603          -fdump-tree-original[-N]
604          -fdump-tree-optimized[-N]
605          -fdump-tree-cfg -fdump-tree-alias
606          -fdump-tree-ch
607          -fdump-tree-ssa[-N] -fdump-tree-pre[-N]
608          -fdump-tree-ccp[-N] -fdump-tree-dce[-N]
609          -fdump-tree-gimple[-raw]
610          -fdump-tree-dom[-N]
611          -fdump-tree-dse[-N]
612          -fdump-tree-phiprop[-N]
613          -fdump-tree-phiopt[-N]
614          -fdump-tree-forwprop[-N]
615          -fdump-tree-copyrename[-N]
616          -fdump-tree-nrv -fdump-tree-vect
617          -fdump-tree-sink
618          -fdump-tree-sra[-N]
619          -fdump-tree-forwprop[-N]
620          -fdump-tree-fre[-N]
621          -fdump-tree-vtable-verify
622          -fdump-tree-vrp[-N]
623          -fdump-tree-storeccp[-N]
624          -fdump-final-insns=FILE
625          -fcompare-debug[=OPTS]  -fcompare-debug-second
626          -feliminate-dwarf2-dups -fno-eliminate-unused-debug-types
627          -feliminate-unused-debug-symbols -femit-class-debug-always
628          -fenable-KIND-PASS
629          -fenable-KIND-PASS=RANGE-LIST
630          -fdebug-types-section -fmem-report-wpa
631          -fmem-report -fpre-ipa-mem-report -fpost-ipa-mem-report -fprofile-arcs
632          -fopt-info
633          -fopt-info-OPTIONS[=FILE]
634          -frandom-seed=STRING -fsched-verbose=N
635          -fsel-sched-verbose -fsel-sched-dump-cfg -fsel-sched-pipelining-verbose
636          -fstack-usage  -ftest-coverage  -ftime-report -fvar-tracking
637          -fvar-tracking-assignments  -fvar-tracking-assignments-toggle
638          -g  -gLEVEL  -gtoggle  -gcoff  -gdwarf-VERSION
639          -ggdb  -grecord-gcc-switches  -gno-record-gcc-switches
640          -gstabs  -gstabs+  -gstrict-dwarf  -gno-strict-dwarf
641          -gvms  -gxcoff  -gxcoff+
642          -fno-merge-debug-strings -fno-dwarf2-cfi-asm
643          -fdebug-prefix-map=OLD=NEW
644          -femit-struct-debug-baseonly -femit-struct-debug-reduced
645          -femit-struct-debug-detailed[=SPEC-LIST]
646          -p  -pg  -print-file-name=LIBRARY  -print-libgcc-file-name
647          -print-multi-directory  -print-multi-lib  -print-multi-os-directory
648          -print-prog-name=PROGRAM  -print-search-dirs  -Q
649          -print-sysroot -print-sysroot-headers-suffix
650          -save-temps -save-temps=cwd -save-temps=obj -time[=FILE]
651
652_Optimization Options_
653     *Note Options that Control Optimization: Optimize Options.
654          -faggressive-loop-optimizations -falign-functions[=N]
655          -falign-jumps[=N]
656          -falign-labels[=N] -falign-loops[=N]
657          -fassociative-math -fauto-inc-dec -fbranch-probabilities
658          -fbranch-target-load-optimize -fbranch-target-load-optimize2
659          -fbtr-bb-exclusive -fcaller-saves
660          -fcheck-data-deps -fcombine-stack-adjustments -fconserve-stack
661          -fcompare-elim -fcprop-registers -fcrossjumping
662          -fcse-follow-jumps -fcse-skip-blocks -fcx-fortran-rules
663          -fcx-limited-range
664          -fdata-sections -fdce -fdelayed-branch
665          -fdelete-null-pointer-checks -fdevirtualize -fdevirtualize-speculatively -fdse
666          -fearly-inlining -fipa-sra -fexpensive-optimizations -ffat-lto-objects
667          -ffast-math -ffinite-math-only -ffloat-store -fexcess-precision=STYLE
668          -fforward-propagate -ffp-contract=STYLE -ffunction-sections
669          -fgcse -fgcse-after-reload -fgcse-las -fgcse-lm -fgraphite-identity
670          -fgcse-sm -fhoist-adjacent-loads -fif-conversion
671          -fif-conversion2 -findirect-inlining
672          -finline-functions -finline-functions-called-once -finline-limit=N
673          -finline-small-functions -fipa-cp -fipa-cp-clone
674          -fipa-pta -fipa-profile -fipa-pure-const -fipa-reference
675          -fira-algorithm=ALGORITHM
676          -fira-region=REGION -fira-hoist-pressure
677          -fira-loop-pressure -fno-ira-share-save-slots
678          -fno-ira-share-spill-slots -fira-verbose=N
679          -fisolate-erroneous-paths-dereference -fisolate-erroneous-paths-attribute
680          -fivopts -fkeep-inline-functions -fkeep-static-consts -flive-range-shrinkage
681          -floop-block -floop-interchange -floop-strip-mine -floop-nest-optimize
682          -floop-parallelize-all -flto -flto-compression-level
683          -flto-partition=ALG -flto-report -flto-report-wpa -fmerge-all-constants
684          -fmerge-constants -fmodulo-sched -fmodulo-sched-allow-regmoves
685          -fmove-loop-invariants -fno-branch-count-reg
686          -fno-defer-pop -fno-function-cse -fno-guess-branch-probability
687          -fno-inline -fno-math-errno -fno-peephole -fno-peephole2
688          -fno-sched-interblock -fno-sched-spec -fno-signed-zeros
689          -fno-toplevel-reorder -fno-trapping-math -fno-zero-initialized-in-bss
690          -fomit-frame-pointer -foptimize-sibling-calls
691          -fpartial-inlining -fpeel-loops -fpredictive-commoning
692          -fprefetch-loop-arrays -fprofile-report
693          -fprofile-correction -fprofile-dir=PATH -fprofile-generate
694          -fprofile-generate=PATH
695          -fprofile-use -fprofile-use=PATH -fprofile-values -fprofile-reorder-functions
696          -freciprocal-math -free -frename-registers -freorder-blocks
697          -freorder-blocks-and-partition -freorder-functions
698          -frerun-cse-after-loop -freschedule-modulo-scheduled-loops
699          -frounding-math -fsched2-use-superblocks -fsched-pressure
700          -fsched-spec-load -fsched-spec-load-dangerous
701          -fsched-stalled-insns-dep[=N] -fsched-stalled-insns[=N]
702          -fsched-group-heuristic -fsched-critical-path-heuristic
703          -fsched-spec-insn-heuristic -fsched-rank-heuristic
704          -fsched-last-insn-heuristic -fsched-dep-count-heuristic
705          -fschedule-insns -fschedule-insns2 -fsection-anchors
706          -fselective-scheduling -fselective-scheduling2
707          -fsel-sched-pipelining -fsel-sched-pipelining-outer-loops
708          -fshrink-wrap -fsignaling-nans -fsingle-precision-constant
709          -fsplit-ivs-in-unroller -fsplit-wide-types -fstack-protector
710          -fstack-protector-all -fstack-protector-strong -fstrict-aliasing
711          -fstrict-overflow -fthread-jumps -ftracer -ftree-bit-ccp
712          -ftree-builtin-call-dce -ftree-ccp -ftree-ch
713          -ftree-coalesce-inline-vars -ftree-coalesce-vars -ftree-copy-prop
714          -ftree-copyrename -ftree-dce -ftree-dominator-opts -ftree-dse
715          -ftree-forwprop -ftree-fre -ftree-loop-if-convert
716          -ftree-loop-if-convert-stores -ftree-loop-im
717          -ftree-phiprop -ftree-loop-distribution -ftree-loop-distribute-patterns
718          -ftree-loop-ivcanon -ftree-loop-linear -ftree-loop-optimize
719          -ftree-loop-vectorize
720          -ftree-parallelize-loops=N -ftree-pre -ftree-partial-pre -ftree-pta
721          -ftree-reassoc -ftree-sink -ftree-slsr -ftree-sra
722          -ftree-switch-conversion -ftree-tail-merge -ftree-ter
723          -ftree-vectorize -ftree-vrp
724          -funit-at-a-time -funroll-all-loops -funroll-loops
725          -funsafe-loop-optimizations -funsafe-math-optimizations -funswitch-loops
726          -fvariable-expansion-in-unroller -fvect-cost-model -fvpt -fweb
727          -fwhole-program -fwpa -fuse-ld=LINKER -fuse-linker-plugin
728          --param NAME=VALUE
729          -O  -O0  -O1  -O2  -O3  -Os -Ofast -Og
730
731_Preprocessor Options_
732     *Note Options Controlling the Preprocessor: Preprocessor Options.
733          -AQUESTION=ANSWER
734          -A-QUESTION[=ANSWER]
735          -C  -dD  -dI  -dM  -dN
736          -DMACRO[=DEFN]  -E  -H
737          -idirafter DIR
738          -include FILE  -imacros FILE
739          -iprefix FILE  -iwithprefix DIR
740          -iwithprefixbefore DIR  -isystem DIR
741          -imultilib DIR -isysroot DIR
742          -M  -MM  -MF  -MG  -MP  -MQ  -MT  -nostdinc
743          -P  -fdebug-cpp -ftrack-macro-expansion -fworking-directory
744          -remap -trigraphs  -undef  -UMACRO
745          -Wp,OPTION -Xpreprocessor OPTION -no-integrated-cpp
746
747_Assembler Option_
748     *Note Passing Options to the Assembler: Assembler Options.
749          -Wa,OPTION  -Xassembler OPTION
750
751_Linker Options_
752     *Note Options for Linking: Link Options.
753          OBJECT-FILE-NAME  -lLIBRARY
754          -nostartfiles  -nodefaultlibs  -nostdlib -pie -rdynamic
755          -s  -static -static-libgcc -static-libstdc++
756          -static-libasan -static-libtsan -static-liblsan -static-libubsan
757          -shared -shared-libgcc  -symbolic
758          -T SCRIPT  -Wl,OPTION  -Xlinker OPTION
759          -u SYMBOL
760
761_Directory Options_
762     *Note Options for Directory Search: Directory Options.
763          -BPREFIX -IDIR -iplugindir=DIR
764          -iquoteDIR -LDIR -specs=FILE -I-
765          --sysroot=DIR --no-sysroot-suffix
766
767_Machine Dependent Options_
768     *Note Hardware Models and Configurations: Submodel Options.
769
770     _AArch64 Options_
771          -mabi=NAME  -mbig-endian  -mlittle-endian
772          -mgeneral-regs-only
773          -mcmodel=tiny  -mcmodel=small  -mcmodel=large
774          -mstrict-align
775          -momit-leaf-frame-pointer  -mno-omit-leaf-frame-pointer
776          -mtls-dialect=desc  -mtls-dialect=traditional
777          -mfix-cortex-a53-835769  -mno-fix-cortex-a53-835769
778          -march=NAME  -mcpu=NAME  -mtune=NAME
779
780     _Adapteva Epiphany Options_
781          -mhalf-reg-file -mprefer-short-insn-regs
782          -mbranch-cost=NUM -mcmove -mnops=NUM -msoft-cmpsf
783          -msplit-lohi -mpost-inc -mpost-modify -mstack-offset=NUM
784          -mround-nearest -mlong-calls -mshort-calls -msmall16
785          -mfp-mode=MODE -mvect-double -max-vect-align=NUM
786          -msplit-vecmove-early -m1reg-REG
787
788     _ARC Options_
789          -mbarrel-shifter
790          -mcpu=CPU -mA6 -mARC600 -mA7 -mARC700
791          -mdpfp -mdpfp-compact -mdpfp-fast -mno-dpfp-lrsr
792          -mea -mno-mpy -mmul32x16 -mmul64
793          -mnorm -mspfp -mspfp-compact -mspfp-fast -msimd -msoft-float -mswap
794          -mcrc -mdsp-packa -mdvbf -mlock -mmac-d16 -mmac-24 -mrtsc -mswape
795          -mtelephony -mxy -misize -mannotate-align -marclinux -marclinux_prof
796          -mepilogue-cfi -mlong-calls -mmedium-calls -msdata
797          -mucb-mcount -mvolatile-cache
798          -malign-call -mauto-modify-reg -mbbit-peephole -mno-brcc
799          -mcase-vector-pcrel -mcompact-casesi -mno-cond-exec -mearly-cbranchsi
800          -mexpand-adddi -mindexed-loads -mlra -mlra-priority-none
801          -mlra-priority-compact mlra-priority-noncompact -mno-millicode
802          -mmixed-code -mq-class -mRcq -mRcw -msize-level=LEVEL
803          -mtune=CPU -mmultcost=NUM -munalign-prob-threshold=PROBABILITY
804
805     _ARM Options_
806          -mapcs-frame  -mno-apcs-frame
807          -mabi=NAME
808          -mapcs-stack-check  -mno-apcs-stack-check
809          -mapcs-float  -mno-apcs-float
810          -mapcs-reentrant  -mno-apcs-reentrant
811          -msched-prolog  -mno-sched-prolog
812          -mlittle-endian  -mbig-endian  -mwords-little-endian
813          -mfloat-abi=NAME
814          -mfp16-format=NAME
815          -mthumb-interwork  -mno-thumb-interwork
816          -mcpu=NAME  -march=NAME  -mfpu=NAME
817          -mstructure-size-boundary=N
818          -mabort-on-noreturn
819          -mlong-calls  -mno-long-calls
820          -msingle-pic-base  -mno-single-pic-base
821          -mpic-register=REG
822          -mnop-fun-dllimport
823          -mpoke-function-name
824          -mthumb  -marm
825          -mtpcs-frame  -mtpcs-leaf-frame
826          -mcaller-super-interworking  -mcallee-super-interworking
827          -mtp=NAME -mtls-dialect=DIALECT
828          -mword-relocations
829          -mfix-cortex-m3-ldrd
830          -munaligned-access
831          -mneon-for-64bits
832          -mslow-flash-data
833          -mrestrict-it
834
835     _AVR Options_
836          -mmcu=MCU -maccumulate-args -mbranch-cost=COST
837          -mcall-prologues -mint8 -mno-interrupts -mrelax
838          -mstrict-X -mtiny-stack -Waddr-space-convert
839
840     _Blackfin Options_
841          -mcpu=CPU[-SIREVISION]
842          -msim -momit-leaf-frame-pointer  -mno-omit-leaf-frame-pointer
843          -mspecld-anomaly  -mno-specld-anomaly  -mcsync-anomaly  -mno-csync-anomaly
844          -mlow-64k -mno-low64k  -mstack-check-l1  -mid-shared-library
845          -mno-id-shared-library  -mshared-library-id=N
846          -mleaf-id-shared-library  -mno-leaf-id-shared-library
847          -msep-data  -mno-sep-data  -mlong-calls  -mno-long-calls
848          -mfast-fp -minline-plt -mmulticore  -mcorea  -mcoreb  -msdram
849          -micplb
850
851     _C6X Options_
852          -mbig-endian  -mlittle-endian -march=CPU
853          -msim -msdata=SDATA-TYPE
854
855     _CRIS Options_
856          -mcpu=CPU  -march=CPU  -mtune=CPU
857          -mmax-stack-frame=N  -melinux-stacksize=N
858          -metrax4  -metrax100  -mpdebug  -mcc-init  -mno-side-effects
859          -mstack-align  -mdata-align  -mconst-align
860          -m32-bit  -m16-bit  -m8-bit  -mno-prologue-epilogue  -mno-gotplt
861          -melf  -maout  -melinux  -mlinux  -sim  -sim2
862          -mmul-bug-workaround  -mno-mul-bug-workaround
863
864     _CR16 Options_
865          -mmac
866          -mcr16cplus -mcr16c
867          -msim -mint32 -mbit-ops
868          -mdata-model=MODEL
869
870     _Darwin Options_
871          -all_load  -allowable_client  -arch  -arch_errors_fatal
872          -arch_only  -bind_at_load  -bundle  -bundle_loader
873          -client_name  -compatibility_version  -current_version
874          -dead_strip
875          -dependency-file  -dylib_file  -dylinker_install_name
876          -dynamic  -dynamiclib  -exported_symbols_list
877          -filelist  -flat_namespace  -force_cpusubtype_ALL
878          -force_flat_namespace  -headerpad_max_install_names
879          -iframework
880          -image_base  -init  -install_name  -keep_private_externs
881          -multi_module  -multiply_defined  -multiply_defined_unused
882          -noall_load   -no_dead_strip_inits_and_terms
883          -nofixprebinding -nomultidefs  -noprebind  -noseglinkedit
884          -pagezero_size  -prebind  -prebind_all_twolevel_modules
885          -private_bundle  -read_only_relocs  -sectalign
886          -sectobjectsymbols  -whyload  -seg1addr
887          -sectcreate  -sectobjectsymbols  -sectorder
888          -segaddr -segs_read_only_addr -segs_read_write_addr
889          -seg_addr_table  -seg_addr_table_filename  -seglinkedit
890          -segprot  -segs_read_only_addr  -segs_read_write_addr
891          -single_module  -static  -sub_library  -sub_umbrella
892          -twolevel_namespace  -umbrella  -undefined
893          -unexported_symbols_list  -weak_reference_mismatches
894          -whatsloaded -F -gused -gfull -mmacosx-version-min=VERSION
895          -mkernel -mone-byte-bool
896
897     _DEC Alpha Options_
898          -mno-fp-regs  -msoft-float
899          -mieee  -mieee-with-inexact  -mieee-conformant
900          -mfp-trap-mode=MODE  -mfp-rounding-mode=MODE
901          -mtrap-precision=MODE  -mbuild-constants
902          -mcpu=CPU-TYPE  -mtune=CPU-TYPE
903          -mbwx  -mmax  -mfix  -mcix
904          -mfloat-vax  -mfloat-ieee
905          -mexplicit-relocs  -msmall-data  -mlarge-data
906          -msmall-text  -mlarge-text
907          -mmemory-latency=TIME
908
909     _FR30 Options_
910          -msmall-model -mno-lsim
911
912     _FRV Options_
913          -mgpr-32  -mgpr-64  -mfpr-32  -mfpr-64
914          -mhard-float  -msoft-float
915          -malloc-cc  -mfixed-cc  -mdword  -mno-dword
916          -mdouble  -mno-double
917          -mmedia  -mno-media  -mmuladd  -mno-muladd
918          -mfdpic  -minline-plt -mgprel-ro  -multilib-library-pic
919          -mlinked-fp  -mlong-calls  -malign-labels
920          -mlibrary-pic  -macc-4  -macc-8
921          -mpack  -mno-pack  -mno-eflags  -mcond-move  -mno-cond-move
922          -moptimize-membar -mno-optimize-membar
923          -mscc  -mno-scc  -mcond-exec  -mno-cond-exec
924          -mvliw-branch  -mno-vliw-branch
925          -mmulti-cond-exec  -mno-multi-cond-exec  -mnested-cond-exec
926          -mno-nested-cond-exec  -mtomcat-stats
927          -mTLS -mtls
928          -mcpu=CPU
929
930     _GNU/Linux Options_
931          -mglibc -muclibc -mbionic -mandroid
932          -tno-android-cc -tno-android-ld
933
934     _H8/300 Options_
935          -mrelax  -mh  -ms  -mn  -mexr -mno-exr  -mint32  -malign-300
936
937     _HPPA Options_
938          -march=ARCHITECTURE-TYPE
939          -mdisable-fpregs  -mdisable-indexing
940          -mfast-indirect-calls  -mgas  -mgnu-ld   -mhp-ld
941          -mfixed-range=REGISTER-RANGE
942          -mjump-in-delay -mlinker-opt -mlong-calls
943          -mlong-load-store  -mno-disable-fpregs
944          -mno-disable-indexing  -mno-fast-indirect-calls  -mno-gas
945          -mno-jump-in-delay  -mno-long-load-store
946          -mno-portable-runtime  -mno-soft-float
947          -mno-space-regs  -msoft-float  -mpa-risc-1-0
948          -mpa-risc-1-1  -mpa-risc-2-0  -mportable-runtime
949          -mschedule=CPU-TYPE  -mspace-regs  -msio  -mwsio
950          -munix=UNIX-STD  -nolibdld  -static  -threads
951
952     _i386 and x86-64 Options_
953          -mtune=CPU-TYPE  -march=CPU-TYPE
954          -mtune-ctrl=FEATURE-LIST -mdump-tune-features -mno-default
955          -mfpmath=UNIT
956          -masm=DIALECT  -mno-fancy-math-387
957          -mno-fp-ret-in-387  -msoft-float
958          -mno-wide-multiply  -mrtd  -malign-double
959          -mpreferred-stack-boundary=NUM
960          -mincoming-stack-boundary=NUM
961          -mcld -mcx16 -msahf -mmovbe -mcrc32
962          -mrecip -mrecip=OPT
963          -mvzeroupper -mprefer-avx128
964          -mmmx  -msse  -msse2 -msse3 -mssse3 -msse4.1 -msse4.2 -msse4 -mavx
965          -mavx2 -mavx512f -mavx512pf -mavx512er -mavx512cd -msha
966          -maes -mpclmul -mfsgsbase -mrdrnd -mf16c -mfma -mprefetchwt1
967          -msse4a -m3dnow -mpopcnt -mabm -mbmi -mtbm -mfma4 -mxop -mlzcnt
968          -mbmi2 -mfxsr -mxsave -mxsaveopt -mrtm -mlwp -mthreads
969          -mno-align-stringops  -minline-all-stringops
970          -minline-stringops-dynamically -mstringop-strategy=ALG
971          -mmemcpy-strategy=STRATEGY -mmemset-strategy=STRATEGY
972          -mpush-args  -maccumulate-outgoing-args  -m128bit-long-double
973          -m96bit-long-double -mlong-double-64 -mlong-double-80 -mlong-double-128
974          -mregparm=NUM  -msseregparm
975          -mveclibabi=TYPE -mvect8-ret-in-mem
976          -mpc32 -mpc64 -mpc80 -mstackrealign
977          -momit-leaf-frame-pointer  -mno-red-zone -mno-tls-direct-seg-refs
978          -mcmodel=CODE-MODEL -mabi=NAME -maddress-mode=MODE
979          -m32 -m64 -mx32 -m16 -mlarge-data-threshold=NUM
980          -msse2avx -mfentry -m8bit-idiv
981          -mavx256-split-unaligned-load -mavx256-split-unaligned-store
982          -mstack-protector-guard=GUARD
983
984     _i386 and x86-64 Windows Options_
985          -mconsole -mcygwin -mno-cygwin -mdll
986          -mnop-fun-dllimport -mthread
987          -municode -mwin32 -mwindows -fno-set-stack-executable
988
989     _IA-64 Options_
990          -mbig-endian  -mlittle-endian  -mgnu-as  -mgnu-ld  -mno-pic
991          -mvolatile-asm-stop  -mregister-names  -msdata -mno-sdata
992          -mconstant-gp  -mauto-pic  -mfused-madd
993          -minline-float-divide-min-latency
994          -minline-float-divide-max-throughput
995          -mno-inline-float-divide
996          -minline-int-divide-min-latency
997          -minline-int-divide-max-throughput
998          -mno-inline-int-divide
999          -minline-sqrt-min-latency -minline-sqrt-max-throughput
1000          -mno-inline-sqrt
1001          -mdwarf2-asm -mearly-stop-bits
1002          -mfixed-range=REGISTER-RANGE -mtls-size=TLS-SIZE
1003          -mtune=CPU-TYPE -milp32 -mlp64
1004          -msched-br-data-spec -msched-ar-data-spec -msched-control-spec
1005          -msched-br-in-data-spec -msched-ar-in-data-spec -msched-in-control-spec
1006          -msched-spec-ldc -msched-spec-control-ldc
1007          -msched-prefer-non-data-spec-insns -msched-prefer-non-control-spec-insns
1008          -msched-stop-bits-after-every-cycle -msched-count-spec-in-critical-path
1009          -msel-sched-dont-check-control-spec -msched-fp-mem-deps-zero-cost
1010          -msched-max-memory-insns-hard-limit -msched-max-memory-insns=MAX-INSNS
1011
1012     _LM32 Options_
1013          -mbarrel-shift-enabled -mdivide-enabled -mmultiply-enabled
1014          -msign-extend-enabled -muser-enabled
1015
1016     _M32R/D Options_
1017          -m32r2 -m32rx -m32r
1018          -mdebug
1019          -malign-loops -mno-align-loops
1020          -missue-rate=NUMBER
1021          -mbranch-cost=NUMBER
1022          -mmodel=CODE-SIZE-MODEL-TYPE
1023          -msdata=SDATA-TYPE
1024          -mno-flush-func -mflush-func=NAME
1025          -mno-flush-trap -mflush-trap=NUMBER
1026          -G NUM
1027
1028     _M32C Options_
1029          -mcpu=CPU -msim -memregs=NUMBER
1030
1031     _M680x0 Options_
1032          -march=ARCH  -mcpu=CPU  -mtune=TUNE
1033          -m68000  -m68020  -m68020-40  -m68020-60  -m68030  -m68040
1034          -m68060  -mcpu32  -m5200  -m5206e  -m528x  -m5307  -m5407
1035          -mcfv4e  -mbitfield  -mno-bitfield  -mc68000  -mc68020
1036          -mnobitfield  -mrtd  -mno-rtd  -mdiv  -mno-div  -mshort
1037          -mno-short  -mhard-float  -m68881  -msoft-float  -mpcrel
1038          -malign-int  -mstrict-align  -msep-data  -mno-sep-data
1039          -mshared-library-id=n  -mid-shared-library  -mno-id-shared-library
1040          -mxgot -mno-xgot
1041
1042     _MCore Options_
1043          -mhardlit  -mno-hardlit  -mdiv  -mno-div  -mrelax-immediates
1044          -mno-relax-immediates  -mwide-bitfields  -mno-wide-bitfields
1045          -m4byte-functions  -mno-4byte-functions  -mcallgraph-data
1046          -mno-callgraph-data  -mslow-bytes  -mno-slow-bytes  -mno-lsim
1047          -mlittle-endian  -mbig-endian  -m210  -m340  -mstack-increment
1048
1049     _MeP Options_
1050          -mabsdiff -mall-opts -maverage -mbased=N -mbitops
1051          -mc=N -mclip -mconfig=NAME -mcop -mcop32 -mcop64 -mivc2
1052          -mdc -mdiv -meb -mel -mio-volatile -ml -mleadz -mm -mminmax
1053          -mmult -mno-opts -mrepeat -ms -msatur -msdram -msim -msimnovec -mtf
1054          -mtiny=N
1055
1056     _MicroBlaze Options_
1057          -msoft-float -mhard-float -msmall-divides -mcpu=CPU
1058          -mmemcpy -mxl-soft-mul -mxl-soft-div -mxl-barrel-shift
1059          -mxl-pattern-compare -mxl-stack-check -mxl-gp-opt -mno-clearbss
1060          -mxl-multiply-high -mxl-float-convert -mxl-float-sqrt
1061          -mbig-endian -mlittle-endian -mxl-reorder -mxl-mode-APP-MODEL
1062
1063     _MIPS Options_
1064          -EL  -EB  -march=ARCH  -mtune=ARCH
1065          -mips1  -mips2  -mips3  -mips4  -mips32  -mips32r2
1066          -mips64  -mips64r2
1067          -mips16  -mno-mips16  -mflip-mips16
1068          -minterlink-compressed -mno-interlink-compressed
1069          -minterlink-mips16  -mno-interlink-mips16
1070          -mabi=ABI  -mabicalls  -mno-abicalls
1071          -mshared  -mno-shared  -mplt  -mno-plt  -mxgot  -mno-xgot
1072          -mgp32  -mgp64  -mfp32  -mfp64  -mhard-float  -msoft-float
1073          -mno-float  -msingle-float  -mdouble-float
1074          -mabs=MODE  -mnan=ENCODING
1075          -mdsp  -mno-dsp  -mdspr2  -mno-dspr2
1076          -mmcu -mmno-mcu
1077          -meva -mno-eva
1078          -mvirt -mno-virt
1079          -mmicromips -mno-micromips
1080          -mfpu=FPU-TYPE
1081          -msmartmips  -mno-smartmips
1082          -mpaired-single  -mno-paired-single  -mdmx  -mno-mdmx
1083          -mips3d  -mno-mips3d  -mmt  -mno-mt  -mllsc  -mno-llsc
1084          -mlong64  -mlong32  -msym32  -mno-sym32
1085          -GNUM  -mlocal-sdata  -mno-local-sdata
1086          -mextern-sdata  -mno-extern-sdata  -mgpopt  -mno-gopt
1087          -membedded-data  -mno-embedded-data
1088          -muninit-const-in-rodata  -mno-uninit-const-in-rodata
1089          -mcode-readable=SETTING
1090          -msplit-addresses  -mno-split-addresses
1091          -mexplicit-relocs  -mno-explicit-relocs
1092          -mcheck-zero-division  -mno-check-zero-division
1093          -mdivide-traps  -mdivide-breaks
1094          -mmemcpy  -mno-memcpy  -mlong-calls  -mno-long-calls
1095          -mmad -mno-mad -mimadd -mno-imadd -mfused-madd  -mno-fused-madd  -nocpp
1096          -mfix-24k -mno-fix-24k
1097          -mfix-r4000  -mno-fix-r4000  -mfix-r4400  -mno-fix-r4400
1098          -mfix-r10000 -mno-fix-r10000  -mfix-rm7000 -mno-fix-rm7000
1099          -mfix-vr4120  -mno-fix-vr4120
1100          -mfix-vr4130  -mno-fix-vr4130  -mfix-sb1  -mno-fix-sb1
1101          -mflush-func=FUNC  -mno-flush-func
1102          -mbranch-cost=NUM  -mbranch-likely  -mno-branch-likely
1103          -mfp-exceptions -mno-fp-exceptions
1104          -mvr4130-align -mno-vr4130-align -msynci -mno-synci
1105          -mrelax-pic-calls -mno-relax-pic-calls -mmcount-ra-address
1106
1107     _MMIX Options_
1108          -mlibfuncs  -mno-libfuncs  -mepsilon  -mno-epsilon  -mabi=gnu
1109          -mabi=mmixware  -mzero-extend  -mknuthdiv  -mtoplevel-symbols
1110          -melf  -mbranch-predict  -mno-branch-predict  -mbase-addresses
1111          -mno-base-addresses  -msingle-exit  -mno-single-exit
1112
1113     _MN10300 Options_
1114          -mmult-bug  -mno-mult-bug
1115          -mno-am33 -mam33 -mam33-2 -mam34
1116          -mtune=CPU-TYPE
1117          -mreturn-pointer-on-d0
1118          -mno-crt0  -mrelax -mliw -msetlb
1119
1120     _Moxie Options_
1121          -meb -mel -mno-crt0
1122
1123     _MSP430 Options_
1124          -msim -masm-hex -mmcu= -mcpu= -mlarge -msmall -mrelax
1125          -mhwmult= -minrt
1126
1127     _NDS32 Options_
1128          -mbig-endian -mlittle-endian
1129          -mreduced-regs -mfull-regs
1130          -mcmov -mno-cmov
1131          -mperf-ext -mno-perf-ext
1132          -mv3push -mno-v3push
1133          -m16bit -mno-16bit
1134          -mgp-direct -mno-gp-direct
1135          -misr-vector-size=NUM
1136          -mcache-block-size=NUM
1137          -march=ARCH
1138          -mforce-fp-as-gp -mforbid-fp-as-gp
1139          -mex9 -mctor-dtor -mrelax
1140
1141     _Nios II Options_
1142          -G NUM -mgpopt -mno-gpopt -mel -meb
1143          -mno-bypass-cache -mbypass-cache
1144          -mno-cache-volatile -mcache-volatile
1145          -mno-fast-sw-div -mfast-sw-div
1146          -mhw-mul -mno-hw-mul -mhw-mulx -mno-hw-mulx -mno-hw-div -mhw-div
1147          -mcustom-INSN=N -mno-custom-INSN
1148          -mcustom-fpu-cfg=NAME
1149          -mhal -msmallc -msys-crt0=NAME -msys-lib=NAME
1150
1151     _PDP-11 Options_
1152          -mfpu  -msoft-float  -mac0  -mno-ac0  -m40  -m45  -m10
1153          -mbcopy  -mbcopy-builtin  -mint32  -mno-int16
1154          -mint16  -mno-int32  -mfloat32  -mno-float64
1155          -mfloat64  -mno-float32  -mabshi  -mno-abshi
1156          -mbranch-expensive  -mbranch-cheap
1157          -munix-asm  -mdec-asm
1158
1159     _picoChip Options_
1160          -mae=AE_TYPE -mvliw-lookahead=N
1161          -msymbol-as-address -mno-inefficient-warnings
1162
1163     _PowerPC Options_ See RS/6000 and PowerPC Options.
1164
1165     _RL78 Options_
1166          -msim -mmul=none -mmul=g13 -mmul=rl78
1167
1168     _RS/6000 and PowerPC Options_
1169          -mcpu=CPU-TYPE
1170          -mtune=CPU-TYPE
1171          -mcmodel=CODE-MODEL
1172          -mpowerpc64
1173          -maltivec  -mno-altivec
1174          -mpowerpc-gpopt  -mno-powerpc-gpopt
1175          -mpowerpc-gfxopt  -mno-powerpc-gfxopt
1176          -mmfcrf  -mno-mfcrf  -mpopcntb  -mno-popcntb -mpopcntd -mno-popcntd
1177          -mfprnd  -mno-fprnd
1178          -mcmpb -mno-cmpb -mmfpgpr -mno-mfpgpr -mhard-dfp -mno-hard-dfp
1179          -mfull-toc   -mminimal-toc  -mno-fp-in-toc  -mno-sum-in-toc
1180          -m64  -m32  -mxl-compat  -mno-xl-compat  -mpe
1181          -malign-power  -malign-natural
1182          -msoft-float  -mhard-float  -mmultiple  -mno-multiple
1183          -msingle-float -mdouble-float -msimple-fpu
1184          -mstring  -mno-string  -mupdate  -mno-update
1185          -mavoid-indexed-addresses  -mno-avoid-indexed-addresses
1186          -mfused-madd  -mno-fused-madd  -mbit-align  -mno-bit-align
1187          -mstrict-align  -mno-strict-align  -mrelocatable
1188          -mno-relocatable  -mrelocatable-lib  -mno-relocatable-lib
1189          -mtoc  -mno-toc  -mlittle  -mlittle-endian  -mbig  -mbig-endian
1190          -mdynamic-no-pic  -maltivec -mswdiv  -msingle-pic-base
1191          -mprioritize-restricted-insns=PRIORITY
1192          -msched-costly-dep=DEPENDENCE_TYPE
1193          -minsert-sched-nops=SCHEME
1194          -mcall-sysv  -mcall-netbsd
1195          -maix-struct-return  -msvr4-struct-return
1196          -mabi=ABI-TYPE -msecure-plt -mbss-plt
1197          -mblock-move-inline-limit=NUM
1198          -misel -mno-isel
1199          -misel=yes  -misel=no
1200          -mspe -mno-spe
1201          -mspe=yes  -mspe=no
1202          -mpaired
1203          -mgen-cell-microcode -mwarn-cell-microcode
1204          -mvrsave -mno-vrsave
1205          -mmulhw -mno-mulhw
1206          -mdlmzb -mno-dlmzb
1207          -mfloat-gprs=yes  -mfloat-gprs=no -mfloat-gprs=single -mfloat-gprs=double
1208          -mprototype  -mno-prototype
1209          -msim  -mmvme  -mads  -myellowknife  -memb  -msdata
1210          -msdata=OPT  -mvxworks  -G NUM  -pthread
1211          -mrecip -mrecip=OPT -mno-recip -mrecip-precision
1212          -mno-recip-precision
1213          -mveclibabi=TYPE -mfriz -mno-friz
1214          -mpointers-to-nested-functions -mno-pointers-to-nested-functions
1215          -msave-toc-indirect -mno-save-toc-indirect
1216          -mpower8-fusion -mno-mpower8-fusion -mpower8-vector -mno-power8-vector
1217          -mcrypto -mno-crypto -mdirect-move -mno-direct-move
1218          -mquad-memory -mno-quad-memory
1219          -mquad-memory-atomic -mno-quad-memory-atomic
1220          -mcompat-align-parm -mno-compat-align-parm
1221
1222     _RX Options_
1223          -m64bit-doubles  -m32bit-doubles  -fpu  -nofpu
1224          -mcpu=
1225          -mbig-endian-data -mlittle-endian-data
1226          -msmall-data
1227          -msim  -mno-sim
1228          -mas100-syntax -mno-as100-syntax
1229          -mrelax
1230          -mmax-constant-size=
1231          -mint-register=
1232          -mpid
1233          -mno-warn-multiple-fast-interrupts
1234          -msave-acc-in-interrupts
1235
1236     _S/390 and zSeries Options_
1237          -mtune=CPU-TYPE  -march=CPU-TYPE
1238          -mhard-float  -msoft-float  -mhard-dfp -mno-hard-dfp
1239          -mlong-double-64 -mlong-double-128
1240          -mbackchain  -mno-backchain -mpacked-stack  -mno-packed-stack
1241          -msmall-exec  -mno-small-exec  -mmvcle -mno-mvcle
1242          -m64  -m31  -mdebug  -mno-debug  -mesa  -mzarch
1243          -mtpf-trace -mno-tpf-trace  -mfused-madd  -mno-fused-madd
1244          -mwarn-framesize  -mwarn-dynamicstack  -mstack-size -mstack-guard
1245          -mhotpatch[=HALFWORDS] -mno-hotpatch
1246
1247     _Score Options_
1248          -meb -mel
1249          -mnhwloop
1250          -muls
1251          -mmac
1252          -mscore5 -mscore5u -mscore7 -mscore7d
1253
1254     _SH Options_
1255          -m1  -m2  -m2e
1256          -m2a-nofpu -m2a-single-only -m2a-single -m2a
1257          -m3  -m3e
1258          -m4-nofpu  -m4-single-only  -m4-single  -m4
1259          -m4a-nofpu -m4a-single-only -m4a-single -m4a -m4al
1260          -m5-64media  -m5-64media-nofpu
1261          -m5-32media  -m5-32media-nofpu
1262          -m5-compact  -m5-compact-nofpu
1263          -mb  -ml  -mdalign  -mrelax
1264          -mbigtable -mfmovd -mhitachi -mrenesas -mno-renesas -mnomacsave
1265          -mieee -mno-ieee -mbitops  -misize  -minline-ic_invalidate -mpadstruct
1266          -mspace -mprefergot  -musermode -multcost=NUMBER -mdiv=STRATEGY
1267          -mdivsi3_libfunc=NAME -mfixed-range=REGISTER-RANGE
1268          -mindexed-addressing -mgettrcost=NUMBER -mpt-fixed
1269          -maccumulate-outgoing-args -minvalid-symbols
1270          -matomic-model=ATOMIC-MODEL
1271          -mbranch-cost=NUM -mzdcbranch -mno-zdcbranch
1272          -mfused-madd -mno-fused-madd -mfsca -mno-fsca -mfsrra -mno-fsrra
1273          -mpretend-cmove -mtas
1274
1275     _Solaris 2 Options_
1276          -mclear-hwcap -mno-clear-hwcap -mimpure-text  -mno-impure-text
1277          -pthreads -pthread
1278
1279     _SPARC Options_
1280          -mcpu=CPU-TYPE
1281          -mtune=CPU-TYPE
1282          -mcmodel=CODE-MODEL
1283          -mmemory-model=MEM-MODEL
1284          -m32  -m64  -mapp-regs  -mno-app-regs
1285          -mfaster-structs  -mno-faster-structs  -mflat  -mno-flat
1286          -mfpu  -mno-fpu  -mhard-float  -msoft-float
1287          -mhard-quad-float  -msoft-quad-float
1288          -mstack-bias  -mno-stack-bias
1289          -munaligned-doubles  -mno-unaligned-doubles
1290          -muser-mode  -mno-user-mode
1291          -mv8plus  -mno-v8plus  -mvis  -mno-vis
1292          -mvis2  -mno-vis2  -mvis3  -mno-vis3
1293          -mcbcond -mno-cbcond
1294          -mfmaf  -mno-fmaf  -mpopc  -mno-popc
1295          -mfix-at697f -mfix-ut699
1296
1297     _SPU Options_
1298          -mwarn-reloc -merror-reloc
1299          -msafe-dma -munsafe-dma
1300          -mbranch-hints
1301          -msmall-mem -mlarge-mem -mstdmain
1302          -mfixed-range=REGISTER-RANGE
1303          -mea32 -mea64
1304          -maddress-space-conversion -mno-address-space-conversion
1305          -mcache-size=CACHE-SIZE
1306          -matomic-updates -mno-atomic-updates
1307
1308     _System V Options_
1309          -Qy  -Qn  -YP,PATHS  -Ym,DIR
1310
1311     _TILE-Gx Options_
1312          -mcpu=CPU -m32 -m64 -mbig-endian -mlittle-endian
1313          -mcmodel=CODE-MODEL
1314
1315     _TILEPro Options_
1316          -mcpu=CPU -m32
1317
1318     _V850 Options_
1319          -mlong-calls  -mno-long-calls  -mep  -mno-ep
1320          -mprolog-function  -mno-prolog-function  -mspace
1321          -mtda=N  -msda=N  -mzda=N
1322          -mapp-regs  -mno-app-regs
1323          -mdisable-callt  -mno-disable-callt
1324          -mv850e2v3 -mv850e2 -mv850e1 -mv850es
1325          -mv850e -mv850 -mv850e3v5
1326          -mloop
1327          -mrelax
1328          -mlong-jumps
1329          -msoft-float
1330          -mhard-float
1331          -mgcc-abi
1332          -mrh850-abi
1333          -mbig-switch
1334
1335     _VAX Options_
1336          -mg  -mgnu  -munix
1337
1338     _VMS Options_
1339          -mvms-return-codes -mdebug-main=PREFIX -mmalloc64
1340          -mpointer-size=SIZE
1341
1342     _VxWorks Options_
1343          -mrtp  -non-static  -Bstatic  -Bdynamic
1344          -Xbind-lazy  -Xbind-now
1345
1346     _x86-64 Options_ See i386 and x86-64 Options.
1347
1348     _Xstormy16 Options_
1349          -msim
1350
1351     _Xtensa Options_
1352          -mconst16 -mno-const16
1353          -mfused-madd  -mno-fused-madd
1354          -mforce-no-pic
1355          -mserialize-volatile  -mno-serialize-volatile
1356          -mtext-section-literals  -mno-text-section-literals
1357          -mtarget-align  -mno-target-align
1358          -mlongcalls  -mno-longcalls
1359
1360     _zSeries Options_ See S/390 and zSeries Options.
1361
1362_Code Generation Options_
1363     *Note Options for Code Generation Conventions: Code Gen Options.
1364          -fcall-saved-REG  -fcall-used-REG
1365          -ffixed-REG  -fexceptions
1366          -fnon-call-exceptions  -fdelete-dead-exceptions  -funwind-tables
1367          -fasynchronous-unwind-tables
1368          -fno-gnu-unique
1369          -finhibit-size-directive  -finstrument-functions
1370          -finstrument-functions-exclude-function-list=SYM,SYM,...
1371          -finstrument-functions-exclude-file-list=FILE,FILE,...
1372          -fno-common  -fno-ident
1373          -fpcc-struct-return  -fpic  -fPIC -fpie -fPIE
1374          -fno-jump-tables
1375          -frecord-gcc-switches
1376          -freg-struct-return  -fshort-enums
1377          -fshort-double  -fshort-wchar
1378          -fverbose-asm  -fpack-struct[=N]  -fstack-check
1379          -fstack-limit-register=REG  -fstack-limit-symbol=SYM
1380          -fno-stack-limit -fsplit-stack
1381          -fleading-underscore  -ftls-model=MODEL
1382          -fstack-reuse=REUSE_LEVEL
1383          -ftrapv  -fwrapv  -fbounds-check
1384          -fvisibility -fstrict-volatile-bitfields -fsync-libcalls
1385
1386
1387File: gcc.info,  Node: Overall Options,  Next: Invoking G++,  Prev: Option Summary,  Up: Invoking GCC
1388
13893.2 Options Controlling the Kind of Output
1390==========================================
1391
1392Compilation can involve up to four stages: preprocessing, compilation
1393proper, assembly and linking, always in that order.  GCC is capable of
1394preprocessing and compiling several files either into several assembler
1395input files, or into one assembler input file; then each assembler input
1396file produces an object file, and linking combines all the object files
1397(those newly compiled, and those specified as input) into an executable
1398file.
1399
1400 For any given input file, the file name suffix determines what kind of
1401compilation is done:
1402
1403'FILE.c'
1404     C source code that must be preprocessed.
1405
1406'FILE.i'
1407     C source code that should not be preprocessed.
1408
1409'FILE.ii'
1410     C++ source code that should not be preprocessed.
1411
1412'FILE.m'
1413     Objective-C source code.  Note that you must link with the
1414     'libobjc' library to make an Objective-C program work.
1415
1416'FILE.mi'
1417     Objective-C source code that should not be preprocessed.
1418
1419'FILE.mm'
1420'FILE.M'
1421     Objective-C++ source code.  Note that you must link with the
1422     'libobjc' library to make an Objective-C++ program work.  Note that
1423     '.M' refers to a literal capital M.
1424
1425'FILE.mii'
1426     Objective-C++ source code that should not be preprocessed.
1427
1428'FILE.h'
1429     C, C++, Objective-C or Objective-C++ header file to be turned into
1430     a precompiled header (default), or C, C++ header file to be turned
1431     into an Ada spec (via the '-fdump-ada-spec' switch).
1432
1433'FILE.cc'
1434'FILE.cp'
1435'FILE.cxx'
1436'FILE.cpp'
1437'FILE.CPP'
1438'FILE.c++'
1439'FILE.C'
1440     C++ source code that must be preprocessed.  Note that in '.cxx',
1441     the last two letters must both be literally 'x'.  Likewise, '.C'
1442     refers to a literal capital C.
1443
1444'FILE.mm'
1445'FILE.M'
1446     Objective-C++ source code that must be preprocessed.
1447
1448'FILE.mii'
1449     Objective-C++ source code that should not be preprocessed.
1450
1451'FILE.hh'
1452'FILE.H'
1453'FILE.hp'
1454'FILE.hxx'
1455'FILE.hpp'
1456'FILE.HPP'
1457'FILE.h++'
1458'FILE.tcc'
1459     C++ header file to be turned into a precompiled header or Ada spec.
1460
1461'FILE.f'
1462'FILE.for'
1463'FILE.ftn'
1464     Fixed form Fortran source code that should not be preprocessed.
1465
1466'FILE.F'
1467'FILE.FOR'
1468'FILE.fpp'
1469'FILE.FPP'
1470'FILE.FTN'
1471     Fixed form Fortran source code that must be preprocessed (with the
1472     traditional preprocessor).
1473
1474'FILE.f90'
1475'FILE.f95'
1476'FILE.f03'
1477'FILE.f08'
1478     Free form Fortran source code that should not be preprocessed.
1479
1480'FILE.F90'
1481'FILE.F95'
1482'FILE.F03'
1483'FILE.F08'
1484     Free form Fortran source code that must be preprocessed (with the
1485     traditional preprocessor).
1486
1487'FILE.go'
1488     Go source code.
1489
1490'FILE.ads'
1491     Ada source code file that contains a library unit declaration (a
1492     declaration of a package, subprogram, or generic, or a generic
1493     instantiation), or a library unit renaming declaration (a package,
1494     generic, or subprogram renaming declaration).  Such files are also
1495     called "specs".
1496
1497'FILE.adb'
1498     Ada source code file containing a library unit body (a subprogram
1499     or package body).  Such files are also called "bodies".
1500
1501'FILE.s'
1502     Assembler code.
1503
1504'FILE.S'
1505'FILE.sx'
1506     Assembler code that must be preprocessed.
1507
1508'OTHER'
1509     An object file to be fed straight into linking.  Any file name with
1510     no recognized suffix is treated this way.
1511
1512 You can specify the input language explicitly with the '-x' option:
1513
1514'-x LANGUAGE'
1515     Specify explicitly the LANGUAGE for the following input files
1516     (rather than letting the compiler choose a default based on the
1517     file name suffix).  This option applies to all following input
1518     files until the next '-x' option.  Possible values for LANGUAGE
1519     are:
1520          c  c-header  cpp-output
1521          c++  c++-header  c++-cpp-output
1522          objective-c  objective-c-header  objective-c-cpp-output
1523          objective-c++ objective-c++-header objective-c++-cpp-output
1524          assembler  assembler-with-cpp
1525          ada
1526          f77  f77-cpp-input f95  f95-cpp-input
1527          go
1528          java
1529
1530'-x none'
1531     Turn off any specification of a language, so that subsequent files
1532     are handled according to their file name suffixes (as they are if
1533     '-x' has not been used at all).
1534
1535'-pass-exit-codes'
1536     Normally the 'gcc' program exits with the code of 1 if any phase of
1537     the compiler returns a non-success return code.  If you specify
1538     '-pass-exit-codes', the 'gcc' program instead returns with the
1539     numerically highest error produced by any phase returning an error
1540     indication.  The C, C++, and Fortran front ends return 4 if an
1541     internal compiler error is encountered.
1542
1543 If you only want some of the stages of compilation, you can use '-x'
1544(or filename suffixes) to tell 'gcc' where to start, and one of the
1545options '-c', '-S', or '-E' to say where 'gcc' is to stop.  Note that
1546some combinations (for example, '-x cpp-output -E') instruct 'gcc' to do
1547nothing at all.
1548
1549'-c'
1550     Compile or assemble the source files, but do not link.  The linking
1551     stage simply is not done.  The ultimate output is in the form of an
1552     object file for each source file.
1553
1554     By default, the object file name for a source file is made by
1555     replacing the suffix '.c', '.i', '.s', etc., with '.o'.
1556
1557     Unrecognized input files, not requiring compilation or assembly,
1558     are ignored.
1559
1560'-S'
1561     Stop after the stage of compilation proper; do not assemble.  The
1562     output is in the form of an assembler code file for each
1563     non-assembler input file specified.
1564
1565     By default, the assembler file name for a source file is made by
1566     replacing the suffix '.c', '.i', etc., with '.s'.
1567
1568     Input files that don't require compilation are ignored.
1569
1570'-E'
1571     Stop after the preprocessing stage; do not run the compiler proper.
1572     The output is in the form of preprocessed source code, which is
1573     sent to the standard output.
1574
1575     Input files that don't require preprocessing are ignored.
1576
1577'-o FILE'
1578     Place output in file FILE.  This applies to whatever sort of output
1579     is being produced, whether it be an executable file, an object
1580     file, an assembler file or preprocessed C code.
1581
1582     If '-o' is not specified, the default is to put an executable file
1583     in 'a.out', the object file for 'SOURCE.SUFFIX' in 'SOURCE.o', its
1584     assembler file in 'SOURCE.s', a precompiled header file in
1585     'SOURCE.SUFFIX.gch', and all preprocessed C source on standard
1586     output.
1587
1588'-v'
1589     Print (on standard error output) the commands executed to run the
1590     stages of compilation.  Also print the version number of the
1591     compiler driver program and of the preprocessor and the compiler
1592     proper.
1593
1594'-###'
1595     Like '-v' except the commands are not executed and arguments are
1596     quoted unless they contain only alphanumeric characters or './-_'.
1597     This is useful for shell scripts to capture the driver-generated
1598     command lines.
1599
1600'-pipe'
1601     Use pipes rather than temporary files for communication between the
1602     various stages of compilation.  This fails to work on some systems
1603     where the assembler is unable to read from a pipe; but the GNU
1604     assembler has no trouble.
1605
1606'--help'
1607     Print (on the standard output) a description of the command-line
1608     options understood by 'gcc'.  If the '-v' option is also specified
1609     then '--help' is also passed on to the various processes invoked by
1610     'gcc', so that they can display the command-line options they
1611     accept.  If the '-Wextra' option has also been specified (prior to
1612     the '--help' option), then command-line options that have no
1613     documentation associated with them are also displayed.
1614
1615'--target-help'
1616     Print (on the standard output) a description of target-specific
1617     command-line options for each tool.  For some targets extra
1618     target-specific information may also be printed.
1619
1620'--help={CLASS|[^]QUALIFIER}[,...]'
1621     Print (on the standard output) a description of the command-line
1622     options understood by the compiler that fit into all specified
1623     classes and qualifiers.  These are the supported classes:
1624
1625     'optimizers'
1626          Display all of the optimization options supported by the
1627          compiler.
1628
1629     'warnings'
1630          Display all of the options controlling warning messages
1631          produced by the compiler.
1632
1633     'target'
1634          Display target-specific options.  Unlike the '--target-help'
1635          option however, target-specific options of the linker and
1636          assembler are not displayed.  This is because those tools do
1637          not currently support the extended '--help=' syntax.
1638
1639     'params'
1640          Display the values recognized by the '--param' option.
1641
1642     LANGUAGE
1643          Display the options supported for LANGUAGE, where LANGUAGE is
1644          the name of one of the languages supported in this version of
1645          GCC.
1646
1647     'common'
1648          Display the options that are common to all languages.
1649
1650     These are the supported qualifiers:
1651
1652     'undocumented'
1653          Display only those options that are undocumented.
1654
1655     'joined'
1656          Display options taking an argument that appears after an equal
1657          sign in the same continuous piece of text, such as:
1658          '--help=target'.
1659
1660     'separate'
1661          Display options taking an argument that appears as a separate
1662          word following the original option, such as: '-o output-file'.
1663
1664     Thus for example to display all the undocumented target-specific
1665     switches supported by the compiler, use:
1666
1667          --help=target,undocumented
1668
1669     The sense of a qualifier can be inverted by prefixing it with the
1670     '^' character, so for example to display all binary warning options
1671     (i.e., ones that are either on or off and that do not take an
1672     argument) that have a description, use:
1673
1674          --help=warnings,^joined,^undocumented
1675
1676     The argument to '--help=' should not consist solely of inverted
1677     qualifiers.
1678
1679     Combining several classes is possible, although this usually
1680     restricts the output so much that there is nothing to display.  One
1681     case where it does work, however, is when one of the classes is
1682     TARGET.  For example, to display all the target-specific
1683     optimization options, use:
1684
1685          --help=target,optimizers
1686
1687     The '--help=' option can be repeated on the command line.  Each
1688     successive use displays its requested class of options, skipping
1689     those that have already been displayed.
1690
1691     If the '-Q' option appears on the command line before the '--help='
1692     option, then the descriptive text displayed by '--help=' is
1693     changed.  Instead of describing the displayed options, an
1694     indication is given as to whether the option is enabled, disabled
1695     or set to a specific value (assuming that the compiler knows this
1696     at the point where the '--help=' option is used).
1697
1698     Here is a truncated example from the ARM port of 'gcc':
1699
1700            % gcc -Q -mabi=2 --help=target -c
1701            The following options are target specific:
1702            -mabi=                                2
1703            -mabort-on-noreturn                   [disabled]
1704            -mapcs                                [disabled]
1705
1706     The output is sensitive to the effects of previous command-line
1707     options, so for example it is possible to find out which
1708     optimizations are enabled at '-O2' by using:
1709
1710          -Q -O2 --help=optimizers
1711
1712     Alternatively you can discover which binary optimizations are
1713     enabled by '-O3' by using:
1714
1715          gcc -c -Q -O3 --help=optimizers > /tmp/O3-opts
1716          gcc -c -Q -O2 --help=optimizers > /tmp/O2-opts
1717          diff /tmp/O2-opts /tmp/O3-opts | grep enabled
1718
1719'-no-canonical-prefixes'
1720     Do not expand any symbolic links, resolve references to '/../' or
1721     '/./', or make the path absolute when generating a relative prefix.
1722
1723'--version'
1724     Display the version number and copyrights of the invoked GCC.
1725
1726'-wrapper'
1727     Invoke all subcommands under a wrapper program.  The name of the
1728     wrapper program and its parameters are passed as a comma separated
1729     list.
1730
1731          gcc -c t.c -wrapper gdb,--args
1732
1733     This invokes all subprograms of 'gcc' under 'gdb --args', thus the
1734     invocation of 'cc1' is 'gdb --args cc1 ...'.
1735
1736'-fplugin=NAME.so'
1737     Load the plugin code in file NAME.so, assumed to be a shared object
1738     to be dlopen'd by the compiler.  The base name of the shared object
1739     file is used to identify the plugin for the purposes of argument
1740     parsing (See '-fplugin-arg-NAME-KEY=VALUE' below).  Each plugin
1741     should define the callback functions specified in the Plugins API.
1742
1743'-fplugin-arg-NAME-KEY=VALUE'
1744     Define an argument called KEY with a value of VALUE for the plugin
1745     called NAME.
1746
1747'-fdump-ada-spec[-slim]'
1748     For C and C++ source and include files, generate corresponding Ada
1749     specs.  *Note (gnat_ugn)Generating Ada Bindings for C and C++
1750     headers::, which provides detailed documentation on this feature.
1751
1752'-fada-spec-parent=UNIT'
1753     In conjunction with '-fdump-ada-spec[-slim]' above, generate Ada
1754     specs as child units of parent UNIT.
1755
1756'-fdump-go-spec=FILE'
1757     For input files in any language, generate corresponding Go
1758     declarations in FILE.  This generates Go 'const', 'type', 'var',
1759     and 'func' declarations which may be a useful way to start writing
1760     a Go interface to code written in some other language.
1761
1762'@FILE'
1763     Read command-line options from FILE.  The options read are inserted
1764     in place of the original @FILE option.  If FILE does not exist, or
1765     cannot be read, then the option will be treated literally, and not
1766     removed.
1767
1768     Options in FILE are separated by whitespace.  A whitespace
1769     character may be included in an option by surrounding the entire
1770     option in either single or double quotes.  Any character (including
1771     a backslash) may be included by prefixing the character to be
1772     included with a backslash.  The FILE may itself contain additional
1773     @FILE options; any such options will be processed recursively.
1774
1775
1776File: gcc.info,  Node: Invoking G++,  Next: C Dialect Options,  Prev: Overall Options,  Up: Invoking GCC
1777
17783.3 Compiling C++ Programs
1779==========================
1780
1781C++ source files conventionally use one of the suffixes '.C', '.cc',
1782'.cpp', '.CPP', '.c++', '.cp', or '.cxx'; C++ header files often use
1783'.hh', '.hpp', '.H', or (for shared template code) '.tcc'; and
1784preprocessed C++ files use the suffix '.ii'.  GCC recognizes files with
1785these names and compiles them as C++ programs even if you call the
1786compiler the same way as for compiling C programs (usually with the name
1787'gcc').
1788
1789 However, the use of 'gcc' does not add the C++ library.  'g++' is a
1790program that calls GCC and automatically specifies linking against the
1791C++ library.  It treats '.c', '.h' and '.i' files as C++ source files
1792instead of C source files unless '-x' is used.  This program is also
1793useful when precompiling a C header file with a '.h' extension for use
1794in C++ compilations.  On many systems, 'g++' is also installed with the
1795name 'c++'.
1796
1797 When you compile C++ programs, you may specify many of the same
1798command-line options that you use for compiling programs in any
1799language; or command-line options meaningful for C and related
1800languages; or options that are meaningful only for C++ programs.  *Note
1801Options Controlling C Dialect: C Dialect Options, for explanations of
1802options for languages related to C.  *Note Options Controlling C++
1803Dialect: C++ Dialect Options, for explanations of options that are
1804meaningful only for C++ programs.
1805
1806
1807File: gcc.info,  Node: C Dialect Options,  Next: C++ Dialect Options,  Prev: Invoking G++,  Up: Invoking GCC
1808
18093.4 Options Controlling C Dialect
1810=================================
1811
1812The following options control the dialect of C (or languages derived
1813from C, such as C++, Objective-C and Objective-C++) that the compiler
1814accepts:
1815
1816'-ansi'
1817     In C mode, this is equivalent to '-std=c90'.  In C++ mode, it is
1818     equivalent to '-std=c++98'.
1819
1820     This turns off certain features of GCC that are incompatible with
1821     ISO C90 (when compiling C code), or of standard C++ (when compiling
1822     C++ code), such as the 'asm' and 'typeof' keywords, and predefined
1823     macros such as 'unix' and 'vax' that identify the type of system
1824     you are using.  It also enables the undesirable and rarely used ISO
1825     trigraph feature.  For the C compiler, it disables recognition of
1826     C++ style '//' comments as well as the 'inline' keyword.
1827
1828     The alternate keywords '__asm__', '__extension__', '__inline__' and
1829     '__typeof__' continue to work despite '-ansi'.  You would not want
1830     to use them in an ISO C program, of course, but it is useful to put
1831     them in header files that might be included in compilations done
1832     with '-ansi'.  Alternate predefined macros such as '__unix__' and
1833     '__vax__' are also available, with or without '-ansi'.
1834
1835     The '-ansi' option does not cause non-ISO programs to be rejected
1836     gratuitously.  For that, '-Wpedantic' is required in addition to
1837     '-ansi'.  *Note Warning Options::.
1838
1839     The macro '__STRICT_ANSI__' is predefined when the '-ansi' option
1840     is used.  Some header files may notice this macro and refrain from
1841     declaring certain functions or defining certain macros that the ISO
1842     standard doesn't call for; this is to avoid interfering with any
1843     programs that might use these names for other things.
1844
1845     Functions that are normally built in but do not have semantics
1846     defined by ISO C (such as 'alloca' and 'ffs') are not built-in
1847     functions when '-ansi' is used.  *Note Other built-in functions
1848     provided by GCC: Other Builtins, for details of the functions
1849     affected.
1850
1851'-std='
1852     Determine the language standard.  *Note Language Standards
1853     Supported by GCC: Standards, for details of these standard
1854     versions.  This option is currently only supported when compiling C
1855     or C++.
1856
1857     The compiler can accept several base standards, such as 'c90' or
1858     'c++98', and GNU dialects of those standards, such as 'gnu90' or
1859     'gnu++98'.  When a base standard is specified, the compiler accepts
1860     all programs following that standard plus those using GNU
1861     extensions that do not contradict it.  For example, '-std=c90'
1862     turns off certain features of GCC that are incompatible with ISO
1863     C90, such as the 'asm' and 'typeof' keywords, but not other GNU
1864     extensions that do not have a meaning in ISO C90, such as omitting
1865     the middle term of a '?:' expression.  On the other hand, when a
1866     GNU dialect of a standard is specified, all features supported by
1867     the compiler are enabled, even when those features change the
1868     meaning of the base standard.  As a result, some strict-conforming
1869     programs may be rejected.  The particular standard is used by
1870     '-Wpedantic' to identify which features are GNU extensions given
1871     that version of the standard.  For example '-std=gnu90 -Wpedantic'
1872     warns about C++ style '//' comments, while '-std=gnu99 -Wpedantic'
1873     does not.
1874
1875     A value for this option must be provided; possible values are
1876
1877     'c90'
1878     'c89'
1879     'iso9899:1990'
1880          Support all ISO C90 programs (certain GNU extensions that
1881          conflict with ISO C90 are disabled).  Same as '-ansi' for C
1882          code.
1883
1884     'iso9899:199409'
1885          ISO C90 as modified in amendment 1.
1886
1887     'c99'
1888     'c9x'
1889     'iso9899:1999'
1890     'iso9899:199x'
1891          ISO C99.  This standard is substantially completely supported,
1892          modulo bugs, extended identifiers (supported except for corner
1893          cases when '-fextended-identifiers' is used) and
1894          floating-point issues (mainly but not entirely relating to
1895          optional C99 features from Annexes F and G). See <http://gcc.gnu.org/c99status.html>
1896          for more information.  The names 'c9x' and 'iso9899:199x' are
1897          deprecated.
1898
1899     'c11'
1900     'c1x'
1901     'iso9899:2011'
1902          ISO C11, the 2011 revision of the ISO C standard.  This
1903          standard is substantially completely supported, modulo bugs,
1904          extended identifiers (supported except for corner cases when
1905          '-fextended-identifiers' is used), floating-point issues
1906          (mainly but not entirely relating to optional C11 features
1907          from Annexes F and G) and the optional Annexes K
1908          (Bounds-checking interfaces) and L (Analyzability).  The name
1909          'c1x' is deprecated.
1910
1911     'gnu90'
1912     'gnu89'
1913          GNU dialect of ISO C90 (including some C99 features).  This is
1914          the default for C code.
1915
1916     'gnu99'
1917     'gnu9x'
1918          GNU dialect of ISO C99.  The name 'gnu9x' is deprecated.
1919
1920     'gnu11'
1921     'gnu1x'
1922          GNU dialect of ISO C11.  This is intended to become the
1923          default in a future release of GCC. The name 'gnu1x' is
1924          deprecated.
1925
1926     'c++98'
1927     'c++03'
1928          The 1998 ISO C++ standard plus the 2003 technical corrigendum
1929          and some additional defect reports.  Same as '-ansi' for C++
1930          code.
1931
1932     'gnu++98'
1933     'gnu++03'
1934          GNU dialect of '-std=c++98'.  This is the default for C++
1935          code.
1936
1937     'c++11'
1938     'c++0x'
1939          The 2011 ISO C++ standard plus amendments.  The name 'c++0x'
1940          is deprecated.
1941
1942     'gnu++11'
1943     'gnu++0x'
1944          GNU dialect of '-std=c++11'.  The name 'gnu++0x' is
1945          deprecated.
1946
1947     'c++1y'
1948          The next revision of the ISO C++ standard, tentatively planned
1949          for 2014.  Support is highly experimental, and will almost
1950          certainly change in incompatible ways in future releases.
1951
1952     'gnu++1y'
1953          GNU dialect of '-std=c++1y'.  Support is highly experimental,
1954          and will almost certainly change in incompatible ways in
1955          future releases.
1956
1957'-fgnu89-inline'
1958     The option '-fgnu89-inline' tells GCC to use the traditional GNU
1959     semantics for 'inline' functions when in C99 mode.  *Note An Inline
1960     Function is As Fast As a Macro: Inline.  This option is accepted
1961     and ignored by GCC versions 4.1.3 up to but not including 4.3.  In
1962     GCC versions 4.3 and later it changes the behavior of GCC in C99
1963     mode.  Using this option is roughly equivalent to adding the
1964     'gnu_inline' function attribute to all inline functions (*note
1965     Function Attributes::).
1966
1967     The option '-fno-gnu89-inline' explicitly tells GCC to use the C99
1968     semantics for 'inline' when in C99 or gnu99 mode (i.e., it
1969     specifies the default behavior).  This option was first supported
1970     in GCC 4.3.  This option is not supported in '-std=c90' or
1971     '-std=gnu90' mode.
1972
1973     The preprocessor macros '__GNUC_GNU_INLINE__' and
1974     '__GNUC_STDC_INLINE__' may be used to check which semantics are in
1975     effect for 'inline' functions.  *Note (cpp)Common Predefined
1976     Macros::.
1977
1978'-aux-info FILENAME'
1979     Output to the given filename prototyped declarations for all
1980     functions declared and/or defined in a translation unit, including
1981     those in header files.  This option is silently ignored in any
1982     language other than C.
1983
1984     Besides declarations, the file indicates, in comments, the origin
1985     of each declaration (source file and line), whether the declaration
1986     was implicit, prototyped or unprototyped ('I', 'N' for new or 'O'
1987     for old, respectively, in the first character after the line number
1988     and the colon), and whether it came from a declaration or a
1989     definition ('C' or 'F', respectively, in the following character).
1990     In the case of function definitions, a K&R-style list of arguments
1991     followed by their declarations is also provided, inside comments,
1992     after the declaration.
1993
1994'-fallow-parameterless-variadic-functions'
1995     Accept variadic functions without named parameters.
1996
1997     Although it is possible to define such a function, this is not very
1998     useful as it is not possible to read the arguments.  This is only
1999     supported for C as this construct is allowed by C++.
2000
2001'-fno-asm'
2002     Do not recognize 'asm', 'inline' or 'typeof' as a keyword, so that
2003     code can use these words as identifiers.  You can use the keywords
2004     '__asm__', '__inline__' and '__typeof__' instead.  '-ansi' implies
2005     '-fno-asm'.
2006
2007     In C++, this switch only affects the 'typeof' keyword, since 'asm'
2008     and 'inline' are standard keywords.  You may want to use the
2009     '-fno-gnu-keywords' flag instead, which has the same effect.  In
2010     C99 mode ('-std=c99' or '-std=gnu99'), this switch only affects the
2011     'asm' and 'typeof' keywords, since 'inline' is a standard keyword
2012     in ISO C99.
2013
2014'-fno-builtin'
2015'-fno-builtin-FUNCTION'
2016     Don't recognize built-in functions that do not begin with
2017     '__builtin_' as prefix.  *Note Other built-in functions provided by
2018     GCC: Other Builtins, for details of the functions affected,
2019     including those which are not built-in functions when '-ansi' or
2020     '-std' options for strict ISO C conformance are used because they
2021     do not have an ISO standard meaning.
2022
2023     GCC normally generates special code to handle certain built-in
2024     functions more efficiently; for instance, calls to 'alloca' may
2025     become single instructions which adjust the stack directly, and
2026     calls to 'memcpy' may become inline copy loops.  The resulting code
2027     is often both smaller and faster, but since the function calls no
2028     longer appear as such, you cannot set a breakpoint on those calls,
2029     nor can you change the behavior of the functions by linking with a
2030     different library.  In addition, when a function is recognized as a
2031     built-in function, GCC may use information about that function to
2032     warn about problems with calls to that function, or to generate
2033     more efficient code, even if the resulting code still contains
2034     calls to that function.  For example, warnings are given with
2035     '-Wformat' for bad calls to 'printf' when 'printf' is built in and
2036     'strlen' is known not to modify global memory.
2037
2038     With the '-fno-builtin-FUNCTION' option only the built-in function
2039     FUNCTION is disabled.  FUNCTION must not begin with '__builtin_'.
2040     If a function is named that is not built-in in this version of GCC,
2041     this option is ignored.  There is no corresponding
2042     '-fbuiltin-FUNCTION' option; if you wish to enable built-in
2043     functions selectively when using '-fno-builtin' or
2044     '-ffreestanding', you may define macros such as:
2045
2046          #define abs(n)          __builtin_abs ((n))
2047          #define strcpy(d, s)    __builtin_strcpy ((d), (s))
2048
2049'-fhosted'
2050
2051     Assert that compilation targets a hosted environment.  This implies
2052     '-fbuiltin'.  A hosted environment is one in which the entire
2053     standard library is available, and in which 'main' has a return
2054     type of 'int'.  Examples are nearly everything except a kernel.
2055     This is equivalent to '-fno-freestanding'.
2056
2057'-ffreestanding'
2058
2059     Assert that compilation targets a freestanding environment.  This
2060     implies '-fno-builtin'.  A freestanding environment is one in which
2061     the standard library may not exist, and program startup may not
2062     necessarily be at 'main'.  The most obvious example is an OS
2063     kernel.  This is equivalent to '-fno-hosted'.
2064
2065     *Note Language Standards Supported by GCC: Standards, for details
2066     of freestanding and hosted environments.
2067
2068'-fopenmp'
2069     Enable handling of OpenMP directives '#pragma omp' in C/C++ and
2070     '!$omp' in Fortran.  When '-fopenmp' is specified, the compiler
2071     generates parallel code according to the OpenMP Application Program
2072     Interface v4.0 <http://www.openmp.org/>.  This option implies
2073     '-pthread', and thus is only supported on targets that have support
2074     for '-pthread'.  '-fopenmp' implies '-fopenmp-simd'.
2075
2076'-fopenmp-simd'
2077     Enable handling of OpenMP's SIMD directives with '#pragma omp' in
2078     C/C++ and '!$omp' in Fortran.  Other OpenMP directives are ignored.
2079
2080'-fcilkplus'
2081     Enable the usage of Cilk Plus language extension features for
2082     C/C++.  When the option '-fcilkplus' is specified, enable the usage
2083     of the Cilk Plus Language extension features for C/C++.  The
2084     present implementation follows ABI version 1.2.  This is an
2085     experimental feature that is only partially complete, and whose
2086     interface may change in future versions of GCC as the official
2087     specification changes.  Currently, all features but '_Cilk_for'
2088     have been implemented.
2089
2090'-fgnu-tm'
2091     When the option '-fgnu-tm' is specified, the compiler generates
2092     code for the Linux variant of Intel's current Transactional Memory
2093     ABI specification document (Revision 1.1, May 6 2009).  This is an
2094     experimental feature whose interface may change in future versions
2095     of GCC, as the official specification changes.  Please note that
2096     not all architectures are supported for this feature.
2097
2098     For more information on GCC's support for transactional memory,
2099     *Note The GNU Transactional Memory Library: (libitm)Enabling
2100     libitm.
2101
2102     Note that the transactional memory feature is not supported with
2103     non-call exceptions ('-fnon-call-exceptions').
2104
2105'-fms-extensions'
2106     Accept some non-standard constructs used in Microsoft header files.
2107
2108     In C++ code, this allows member names in structures to be similar
2109     to previous types declarations.
2110
2111          typedef int UOW;
2112          struct ABC {
2113            UOW UOW;
2114          };
2115
2116     Some cases of unnamed fields in structures and unions are only
2117     accepted with this option.  *Note Unnamed struct/union fields
2118     within structs/unions: Unnamed Fields, for details.
2119
2120     Note that this option is off for all targets but i?86 and x86_64
2121     targets using ms-abi.
2122'-fplan9-extensions'
2123     Accept some non-standard constructs used in Plan 9 code.
2124
2125     This enables '-fms-extensions', permits passing pointers to
2126     structures with anonymous fields to functions that expect pointers
2127     to elements of the type of the field, and permits referring to
2128     anonymous fields declared using a typedef.  *Note Unnamed
2129     struct/union fields within structs/unions: Unnamed Fields, for
2130     details.  This is only supported for C, not C++.
2131
2132'-trigraphs'
2133     Support ISO C trigraphs.  The '-ansi' option (and '-std' options
2134     for strict ISO C conformance) implies '-trigraphs'.
2135
2136'-traditional'
2137'-traditional-cpp'
2138     Formerly, these options caused GCC to attempt to emulate a
2139     pre-standard C compiler.  They are now only supported with the '-E'
2140     switch.  The preprocessor continues to support a pre-standard mode.
2141     See the GNU CPP manual for details.
2142
2143'-fcond-mismatch'
2144     Allow conditional expressions with mismatched types in the second
2145     and third arguments.  The value of such an expression is void.
2146     This option is not supported for C++.
2147
2148'-flax-vector-conversions'
2149     Allow implicit conversions between vectors with differing numbers
2150     of elements and/or incompatible element types.  This option should
2151     not be used for new code.
2152
2153'-funsigned-char'
2154     Let the type 'char' be unsigned, like 'unsigned char'.
2155
2156     Each kind of machine has a default for what 'char' should be.  It
2157     is either like 'unsigned char' by default or like 'signed char' by
2158     default.
2159
2160     Ideally, a portable program should always use 'signed char' or
2161     'unsigned char' when it depends on the signedness of an object.
2162     But many programs have been written to use plain 'char' and expect
2163     it to be signed, or expect it to be unsigned, depending on the
2164     machines they were written for.  This option, and its inverse, let
2165     you make such a program work with the opposite default.
2166
2167     The type 'char' is always a distinct type from each of 'signed
2168     char' or 'unsigned char', even though its behavior is always just
2169     like one of those two.
2170
2171'-fsigned-char'
2172     Let the type 'char' be signed, like 'signed char'.
2173
2174     Note that this is equivalent to '-fno-unsigned-char', which is the
2175     negative form of '-funsigned-char'.  Likewise, the option
2176     '-fno-signed-char' is equivalent to '-funsigned-char'.
2177
2178'-fsigned-bitfields'
2179'-funsigned-bitfields'
2180'-fno-signed-bitfields'
2181'-fno-unsigned-bitfields'
2182     These options control whether a bit-field is signed or unsigned,
2183     when the declaration does not use either 'signed' or 'unsigned'.
2184     By default, such a bit-field is signed, because this is consistent:
2185     the basic integer types such as 'int' are signed types.
2186
2187
2188File: gcc.info,  Node: C++ Dialect Options,  Next: Objective-C and Objective-C++ Dialect Options,  Prev: C Dialect Options,  Up: Invoking GCC
2189
21903.5 Options Controlling C++ Dialect
2191===================================
2192
2193This section describes the command-line options that are only meaningful
2194for C++ programs.  You can also use most of the GNU compiler options
2195regardless of what language your program is in.  For example, you might
2196compile a file 'firstClass.C' like this:
2197
2198     g++ -g -frepo -O -c firstClass.C
2199
2200In this example, only '-frepo' is an option meant only for C++ programs;
2201you can use the other options with any language supported by GCC.
2202
2203 Here is a list of options that are _only_ for compiling C++ programs:
2204
2205'-fabi-version=N'
2206     Use version N of the C++ ABI.  The default is version 2.
2207
2208     Version 0 refers to the version conforming most closely to the C++
2209     ABI specification.  Therefore, the ABI obtained using version 0
2210     will change in different versions of G++ as ABI bugs are fixed.
2211
2212     Version 1 is the version of the C++ ABI that first appeared in G++
2213     3.2.
2214
2215     Version 2 is the version of the C++ ABI that first appeared in G++
2216     3.4.
2217
2218     Version 3 corrects an error in mangling a constant address as a
2219     template argument.
2220
2221     Version 4, which first appeared in G++ 4.5, implements a standard
2222     mangling for vector types.
2223
2224     Version 5, which first appeared in G++ 4.6, corrects the mangling
2225     of attribute const/volatile on function pointer types, decltype of
2226     a plain decl, and use of a function parameter in the declaration of
2227     another parameter.
2228
2229     Version 6, which first appeared in G++ 4.7, corrects the promotion
2230     behavior of C++11 scoped enums and the mangling of template
2231     argument packs, const/static_cast, prefix ++ and -, and a class
2232     scope function used as a template argument.
2233
2234     See also '-Wabi'.
2235
2236'-fno-access-control'
2237     Turn off all access checking.  This switch is mainly useful for
2238     working around bugs in the access control code.
2239
2240'-fcheck-new'
2241     Check that the pointer returned by 'operator new' is non-null
2242     before attempting to modify the storage allocated.  This check is
2243     normally unnecessary because the C++ standard specifies that
2244     'operator new' only returns '0' if it is declared 'throw()', in
2245     which case the compiler always checks the return value even without
2246     this option.  In all other cases, when 'operator new' has a
2247     non-empty exception specification, memory exhaustion is signalled
2248     by throwing 'std::bad_alloc'.  See also 'new (nothrow)'.
2249
2250'-fconstexpr-depth=N'
2251     Set the maximum nested evaluation depth for C++11 constexpr
2252     functions to N.  A limit is needed to detect endless recursion
2253     during constant expression evaluation.  The minimum specified by
2254     the standard is 512.
2255
2256'-fdeduce-init-list'
2257     Enable deduction of a template type parameter as
2258     'std::initializer_list' from a brace-enclosed initializer list,
2259     i.e.
2260
2261          template <class T> auto forward(T t) -> decltype (realfn (t))
2262          {
2263            return realfn (t);
2264          }
2265
2266          void f()
2267          {
2268            forward({1,2}); // call forward<std::initializer_list<int>>
2269          }
2270
2271     This deduction was implemented as a possible extension to the
2272     originally proposed semantics for the C++11 standard, but was not
2273     part of the final standard, so it is disabled by default.  This
2274     option is deprecated, and may be removed in a future version of
2275     G++.
2276
2277'-ffriend-injection'
2278     Inject friend functions into the enclosing namespace, so that they
2279     are visible outside the scope of the class in which they are
2280     declared.  Friend functions were documented to work this way in the
2281     old Annotated C++ Reference Manual, and versions of G++ before 4.1
2282     always worked that way.  However, in ISO C++ a friend function that
2283     is not declared in an enclosing scope can only be found using
2284     argument dependent lookup.  This option causes friends to be
2285     injected as they were in earlier releases.
2286
2287     This option is for compatibility, and may be removed in a future
2288     release of G++.
2289
2290'-fno-elide-constructors'
2291     The C++ standard allows an implementation to omit creating a
2292     temporary that is only used to initialize another object of the
2293     same type.  Specifying this option disables that optimization, and
2294     forces G++ to call the copy constructor in all cases.
2295
2296'-fno-enforce-eh-specs'
2297     Don't generate code to check for violation of exception
2298     specifications at run time.  This option violates the C++ standard,
2299     but may be useful for reducing code size in production builds, much
2300     like defining 'NDEBUG'.  This does not give user code permission to
2301     throw exceptions in violation of the exception specifications; the
2302     compiler still optimizes based on the specifications, so throwing
2303     an unexpected exception results in undefined behavior at run time.
2304
2305'-fextern-tls-init'
2306'-fno-extern-tls-init'
2307     The C++11 and OpenMP standards allow 'thread_local' and
2308     'threadprivate' variables to have dynamic (runtime) initialization.
2309     To support this, any use of such a variable goes through a wrapper
2310     function that performs any necessary initialization.  When the use
2311     and definition of the variable are in the same translation unit,
2312     this overhead can be optimized away, but when the use is in a
2313     different translation unit there is significant overhead even if
2314     the variable doesn't actually need dynamic initialization.  If the
2315     programmer can be sure that no use of the variable in a
2316     non-defining TU needs to trigger dynamic initialization (either
2317     because the variable is statically initialized, or a use of the
2318     variable in the defining TU will be executed before any uses in
2319     another TU), they can avoid this overhead with the
2320     '-fno-extern-tls-init' option.
2321
2322     On targets that support symbol aliases, the default is
2323     '-fextern-tls-init'.  On targets that do not support symbol
2324     aliases, the default is '-fno-extern-tls-init'.
2325
2326'-ffor-scope'
2327'-fno-for-scope'
2328     If '-ffor-scope' is specified, the scope of variables declared in a
2329     for-init-statement is limited to the 'for' loop itself, as
2330     specified by the C++ standard.  If '-fno-for-scope' is specified,
2331     the scope of variables declared in a for-init-statement extends to
2332     the end of the enclosing scope, as was the case in old versions of
2333     G++, and other (traditional) implementations of C++.
2334
2335     If neither flag is given, the default is to follow the standard,
2336     but to allow and give a warning for old-style code that would
2337     otherwise be invalid, or have different behavior.
2338
2339'-fno-gnu-keywords'
2340     Do not recognize 'typeof' as a keyword, so that code can use this
2341     word as an identifier.  You can use the keyword '__typeof__'
2342     instead.  '-ansi' implies '-fno-gnu-keywords'.
2343
2344'-fno-implicit-templates'
2345     Never emit code for non-inline templates that are instantiated
2346     implicitly (i.e. by use); only emit code for explicit
2347     instantiations.  *Note Template Instantiation::, for more
2348     information.
2349
2350'-fno-implicit-inline-templates'
2351     Don't emit code for implicit instantiations of inline templates,
2352     either.  The default is to handle inlines differently so that
2353     compiles with and without optimization need the same set of
2354     explicit instantiations.
2355
2356'-fno-implement-inlines'
2357     To save space, do not emit out-of-line copies of inline functions
2358     controlled by '#pragma implementation'.  This causes linker errors
2359     if these functions are not inlined everywhere they are called.
2360
2361'-fms-extensions'
2362     Disable Wpedantic warnings about constructs used in MFC, such as
2363     implicit int and getting a pointer to member function via
2364     non-standard syntax.
2365
2366'-fno-nonansi-builtins'
2367     Disable built-in declarations of functions that are not mandated by
2368     ANSI/ISO C.  These include 'ffs', 'alloca', '_exit', 'index',
2369     'bzero', 'conjf', and other related functions.
2370
2371'-fnothrow-opt'
2372     Treat a 'throw()' exception specification as if it were a
2373     'noexcept' specification to reduce or eliminate the text size
2374     overhead relative to a function with no exception specification.
2375     If the function has local variables of types with non-trivial
2376     destructors, the exception specification actually makes the
2377     function smaller because the EH cleanups for those variables can be
2378     optimized away.  The semantic effect is that an exception thrown
2379     out of a function with such an exception specification results in a
2380     call to 'terminate' rather than 'unexpected'.
2381
2382'-fno-operator-names'
2383     Do not treat the operator name keywords 'and', 'bitand', 'bitor',
2384     'compl', 'not', 'or' and 'xor' as synonyms as keywords.
2385
2386'-fno-optional-diags'
2387     Disable diagnostics that the standard says a compiler does not need
2388     to issue.  Currently, the only such diagnostic issued by G++ is the
2389     one for a name having multiple meanings within a class.
2390
2391'-fpermissive'
2392     Downgrade some diagnostics about nonconformant code from errors to
2393     warnings.  Thus, using '-fpermissive' allows some nonconforming
2394     code to compile.
2395
2396'-fno-pretty-templates'
2397     When an error message refers to a specialization of a function
2398     template, the compiler normally prints the signature of the
2399     template followed by the template arguments and any typedefs or
2400     typenames in the signature (e.g.  'void f(T) [with T = int]' rather
2401     than 'void f(int)') so that it's clear which template is involved.
2402     When an error message refers to a specialization of a class
2403     template, the compiler omits any template arguments that match the
2404     default template arguments for that template.  If either of these
2405     behaviors make it harder to understand the error message rather
2406     than easier, you can use '-fno-pretty-templates' to disable them.
2407
2408'-frepo'
2409     Enable automatic template instantiation at link time.  This option
2410     also implies '-fno-implicit-templates'.  *Note Template
2411     Instantiation::, for more information.
2412
2413'-fno-rtti'
2414     Disable generation of information about every class with virtual
2415     functions for use by the C++ run-time type identification features
2416     ('dynamic_cast' and 'typeid').  If you don't use those parts of the
2417     language, you can save some space by using this flag.  Note that
2418     exception handling uses the same information, but G++ generates it
2419     as needed.  The 'dynamic_cast' operator can still be used for casts
2420     that do not require run-time type information, i.e. casts to 'void
2421     *' or to unambiguous base classes.
2422
2423'-fstats'
2424     Emit statistics about front-end processing at the end of the
2425     compilation.  This information is generally only useful to the G++
2426     development team.
2427
2428'-fstrict-enums'
2429     Allow the compiler to optimize using the assumption that a value of
2430     enumerated type can only be one of the values of the enumeration
2431     (as defined in the C++ standard; basically, a value that can be
2432     represented in the minimum number of bits needed to represent all
2433     the enumerators).  This assumption may not be valid if the program
2434     uses a cast to convert an arbitrary integer value to the enumerated
2435     type.
2436
2437'-ftemplate-backtrace-limit=N'
2438     Set the maximum number of template instantiation notes for a single
2439     warning or error to N.  The default value is 10.
2440
2441'-ftemplate-depth=N'
2442     Set the maximum instantiation depth for template classes to N.  A
2443     limit on the template instantiation depth is needed to detect
2444     endless recursions during template class instantiation.  ANSI/ISO
2445     C++ conforming programs must not rely on a maximum depth greater
2446     than 17 (changed to 1024 in C++11).  The default value is 900, as
2447     the compiler can run out of stack space before hitting 1024 in some
2448     situations.
2449
2450'-fno-threadsafe-statics'
2451     Do not emit the extra code to use the routines specified in the C++
2452     ABI for thread-safe initialization of local statics.  You can use
2453     this option to reduce code size slightly in code that doesn't need
2454     to be thread-safe.
2455
2456'-fuse-cxa-atexit'
2457     Register destructors for objects with static storage duration with
2458     the '__cxa_atexit' function rather than the 'atexit' function.
2459     This option is required for fully standards-compliant handling of
2460     static destructors, but only works if your C library supports
2461     '__cxa_atexit'.
2462
2463'-fno-use-cxa-get-exception-ptr'
2464     Don't use the '__cxa_get_exception_ptr' runtime routine.  This
2465     causes 'std::uncaught_exception' to be incorrect, but is necessary
2466     if the runtime routine is not available.
2467
2468'-fvisibility-inlines-hidden'
2469     This switch declares that the user does not attempt to compare
2470     pointers to inline functions or methods where the addresses of the
2471     two functions are taken in different shared objects.
2472
2473     The effect of this is that GCC may, effectively, mark inline
2474     methods with '__attribute__ ((visibility ("hidden")))' so that they
2475     do not appear in the export table of a DSO and do not require a PLT
2476     indirection when used within the DSO.  Enabling this option can
2477     have a dramatic effect on load and link times of a DSO as it
2478     massively reduces the size of the dynamic export table when the
2479     library makes heavy use of templates.
2480
2481     The behavior of this switch is not quite the same as marking the
2482     methods as hidden directly, because it does not affect static
2483     variables local to the function or cause the compiler to deduce
2484     that the function is defined in only one shared object.
2485
2486     You may mark a method as having a visibility explicitly to negate
2487     the effect of the switch for that method.  For example, if you do
2488     want to compare pointers to a particular inline method, you might
2489     mark it as having default visibility.  Marking the enclosing class
2490     with explicit visibility has no effect.
2491
2492     Explicitly instantiated inline methods are unaffected by this
2493     option as their linkage might otherwise cross a shared library
2494     boundary.  *Note Template Instantiation::.
2495
2496'-fvisibility-ms-compat'
2497     This flag attempts to use visibility settings to make GCC's C++
2498     linkage model compatible with that of Microsoft Visual Studio.
2499
2500     The flag makes these changes to GCC's linkage model:
2501
2502       1. It sets the default visibility to 'hidden', like
2503          '-fvisibility=hidden'.
2504
2505       2. Types, but not their members, are not hidden by default.
2506
2507       3. The One Definition Rule is relaxed for types without explicit
2508          visibility specifications that are defined in more than one
2509          shared object: those declarations are permitted if they are
2510          permitted when this option is not used.
2511
2512     In new code it is better to use '-fvisibility=hidden' and export
2513     those classes that are intended to be externally visible.
2514     Unfortunately it is possible for code to rely, perhaps
2515     accidentally, on the Visual Studio behavior.
2516
2517     Among the consequences of these changes are that static data
2518     members of the same type with the same name but defined in
2519     different shared objects are different, so changing one does not
2520     change the other; and that pointers to function members defined in
2521     different shared objects may not compare equal.  When this flag is
2522     given, it is a violation of the ODR to define types with the same
2523     name differently.
2524
2525'-fvtable-verify=STD|PREINIT|NONE'
2526     Turn on (or off, if using '-fvtable-verify=none') the security
2527     feature that verifies at runtime, for every virtual call that is
2528     made, that the vtable pointer through which the call is made is
2529     valid for the type of the object, and has not been corrupted or
2530     overwritten.  If an invalid vtable pointer is detected (at
2531     runtime), an error is reported and execution of the program is
2532     immediately halted.
2533
2534     This option causes runtime data structures to be built, at program
2535     start up, for verifying the vtable pointers.  The options 'std' and
2536     'preinit' control the timing of when these data structures are
2537     built.  In both cases the data structures are built before
2538     execution reaches 'main'.  The '-fvtable-verify=std' causes these
2539     data structure to be built after the shared libraries have been
2540     loaded and initialized.  '-fvtable-verify=preinit' causes them to
2541     be built before the shared libraries have been loaded and
2542     initialized.
2543
2544     If this option appears multiple times in the compiler line, with
2545     different values specified, 'none' will take highest priority over
2546     both 'std' and 'preinit'; 'preinit' will take priority over 'std'.
2547
2548'-fvtv-debug'
2549     Causes debug versions of the runtime functions for the vtable
2550     verification feature to be called.  This assumes the
2551     '-fvtable-verify=std' or '-fvtable-verify=preinit' has been used.
2552     This flag will also cause the compiler to keep track of which
2553     vtable pointers it found for each class, and record that
2554     information in the file "vtv_set_ptr_data.log", in the dump file
2555     directory on the user's machine.
2556
2557     Note: This feature APPENDS data to the log file.  If you want a
2558     fresh log file, be sure to delete any existing one.
2559
2560'-fvtv-counts'
2561     This is a debugging flag.  When used in conjunction with
2562     '-fvtable-verify=std' or '-fvtable-verify=preinit', this causes the
2563     compiler to keep track of the total number of virtual calls it
2564     encountered and the number of verifications it inserted.  It also
2565     counts the number of calls to certain runtime library functions
2566     that it inserts.  This information, for each compilation unit, is
2567     written to a file named "vtv_count_data.log", in the dump_file
2568     directory on the user's machine.  It also counts the size of the
2569     vtable pointer sets for each class, and writes this information to
2570     "vtv_class_set_sizes.log" in the same directory.
2571
2572     Note: This feature APPENDS data to the log files.  To get a fresh
2573     log files, be sure to delete any existing ones.
2574
2575'-fno-weak'
2576     Do not use weak symbol support, even if it is provided by the
2577     linker.  By default, G++ uses weak symbols if they are available.
2578     This option exists only for testing, and should not be used by
2579     end-users; it results in inferior code and has no benefits.  This
2580     option may be removed in a future release of G++.
2581
2582'-nostdinc++'
2583     Do not search for header files in the standard directories specific
2584     to C++, but do still search the other standard directories.  (This
2585     option is used when building the C++ library.)
2586
2587 In addition, these optimization, warning, and code generation options
2588have meanings only for C++ programs:
2589
2590'-Wabi (C, Objective-C, C++ and Objective-C++ only)'
2591     Warn when G++ generates code that is probably not compatible with
2592     the vendor-neutral C++ ABI.  Although an effort has been made to
2593     warn about all such cases, there are probably some cases that are
2594     not warned about, even though G++ is generating incompatible code.
2595     There may also be cases where warnings are emitted even though the
2596     code that is generated is compatible.
2597
2598     You should rewrite your code to avoid these warnings if you are
2599     concerned about the fact that code generated by G++ may not be
2600     binary compatible with code generated by other compilers.
2601
2602     The known incompatibilities in '-fabi-version=2' (the default)
2603     include:
2604
2605        * A template with a non-type template parameter of reference
2606          type is mangled incorrectly:
2607               extern int N;
2608               template <int &> struct S {};
2609               void n (S<N>) {2}
2610
2611          This is fixed in '-fabi-version=3'.
2612
2613        * SIMD vector types declared using '__attribute ((vector_size))'
2614          are mangled in a non-standard way that does not allow for
2615          overloading of functions taking vectors of different sizes.
2616
2617          The mangling is changed in '-fabi-version=4'.
2618
2619     The known incompatibilities in '-fabi-version=1' include:
2620
2621        * Incorrect handling of tail-padding for bit-fields.  G++ may
2622          attempt to pack data into the same byte as a base class.  For
2623          example:
2624
2625               struct A { virtual void f(); int f1 : 1; };
2626               struct B : public A { int f2 : 1; };
2627
2628          In this case, G++ places 'B::f2' into the same byte as
2629          'A::f1'; other compilers do not.  You can avoid this problem
2630          by explicitly padding 'A' so that its size is a multiple of
2631          the byte size on your platform; that causes G++ and other
2632          compilers to lay out 'B' identically.
2633
2634        * Incorrect handling of tail-padding for virtual bases.  G++
2635          does not use tail padding when laying out virtual bases.  For
2636          example:
2637
2638               struct A { virtual void f(); char c1; };
2639               struct B { B(); char c2; };
2640               struct C : public A, public virtual B {};
2641
2642          In this case, G++ does not place 'B' into the tail-padding for
2643          'A'; other compilers do.  You can avoid this problem by
2644          explicitly padding 'A' so that its size is a multiple of its
2645          alignment (ignoring virtual base classes); that causes G++ and
2646          other compilers to lay out 'C' identically.
2647
2648        * Incorrect handling of bit-fields with declared widths greater
2649          than that of their underlying types, when the bit-fields
2650          appear in a union.  For example:
2651
2652               union U { int i : 4096; };
2653
2654          Assuming that an 'int' does not have 4096 bits, G++ makes the
2655          union too small by the number of bits in an 'int'.
2656
2657        * Empty classes can be placed at incorrect offsets.  For
2658          example:
2659
2660               struct A {};
2661
2662               struct B {
2663                 A a;
2664                 virtual void f ();
2665               };
2666
2667               struct C : public B, public A {};
2668
2669          G++ places the 'A' base class of 'C' at a nonzero offset; it
2670          should be placed at offset zero.  G++ mistakenly believes that
2671          the 'A' data member of 'B' is already at offset zero.
2672
2673        * Names of template functions whose types involve 'typename' or
2674          template template parameters can be mangled incorrectly.
2675
2676               template <typename Q>
2677               void f(typename Q::X) {}
2678
2679               template <template <typename> class Q>
2680               void f(typename Q<int>::X) {}
2681
2682          Instantiations of these templates may be mangled incorrectly.
2683
2684     It also warns about psABI-related changes.  The known psABI changes
2685     at this point include:
2686
2687        * For SysV/x86-64, unions with 'long double' members are passed
2688          in memory as specified in psABI. For example:
2689
2690               union U {
2691                 long double ld;
2692                 int i;
2693               };
2694
2695          'union U' is always passed in memory.
2696
2697'-Wctor-dtor-privacy (C++ and Objective-C++ only)'
2698     Warn when a class seems unusable because all the constructors or
2699     destructors in that class are private, and it has neither friends
2700     nor public static member functions.  Also warn if there are no
2701     non-private methods, and there's at least one private member
2702     function that isn't a constructor or destructor.
2703
2704'-Wdelete-non-virtual-dtor (C++ and Objective-C++ only)'
2705     Warn when 'delete' is used to destroy an instance of a class that
2706     has virtual functions and non-virtual destructor.  It is unsafe to
2707     delete an instance of a derived class through a pointer to a base
2708     class if the base class does not have a virtual destructor.  This
2709     warning is enabled by '-Wall'.
2710
2711'-Wliteral-suffix (C++ and Objective-C++ only)'
2712     Warn when a string or character literal is followed by a ud-suffix
2713     which does not begin with an underscore.  As a conforming
2714     extension, GCC treats such suffixes as separate preprocessing
2715     tokens in order to maintain backwards compatibility with code that
2716     uses formatting macros from '<inttypes.h>'.  For example:
2717
2718          #define __STDC_FORMAT_MACROS
2719          #include <inttypes.h>
2720          #include <stdio.h>
2721
2722          int main() {
2723            int64_t i64 = 123;
2724            printf("My int64: %"PRId64"\n", i64);
2725          }
2726
2727     In this case, 'PRId64' is treated as a separate preprocessing
2728     token.
2729
2730     This warning is enabled by default.
2731
2732'-Wnarrowing (C++ and Objective-C++ only)'
2733     Warn when a narrowing conversion prohibited by C++11 occurs within
2734     '{ }', e.g.
2735
2736          int i = { 2.2 }; // error: narrowing from double to int
2737
2738     This flag is included in '-Wall' and '-Wc++11-compat'.
2739
2740     With '-std=c++11', '-Wno-narrowing' suppresses the diagnostic
2741     required by the standard.  Note that this does not affect the
2742     meaning of well-formed code; narrowing conversions are still
2743     considered ill-formed in SFINAE context.
2744
2745'-Wnoexcept (C++ and Objective-C++ only)'
2746     Warn when a noexcept-expression evaluates to false because of a
2747     call to a function that does not have a non-throwing exception
2748     specification (i.e.  'throw()' or 'noexcept') but is known by the
2749     compiler to never throw an exception.
2750
2751'-Wnon-virtual-dtor (C++ and Objective-C++ only)'
2752     Warn when a class has virtual functions and an accessible
2753     non-virtual destructor itself or in an accessible polymorphic base
2754     class, in which case it is possible but unsafe to delete an
2755     instance of a derived class through a pointer to the class itself
2756     or base class.  This warning is automatically enabled if '-Weffc++'
2757     is specified.
2758
2759'-Wreorder (C++ and Objective-C++ only)'
2760     Warn when the order of member initializers given in the code does
2761     not match the order in which they must be executed.  For instance:
2762
2763          struct A {
2764            int i;
2765            int j;
2766            A(): j (0), i (1) { }
2767          };
2768
2769     The compiler rearranges the member initializers for 'i' and 'j' to
2770     match the declaration order of the members, emitting a warning to
2771     that effect.  This warning is enabled by '-Wall'.
2772
2773'-fext-numeric-literals (C++ and Objective-C++ only)'
2774     Accept imaginary, fixed-point, or machine-defined literal number
2775     suffixes as GNU extensions.  When this option is turned off these
2776     suffixes are treated as C++11 user-defined literal numeric
2777     suffixes.  This is on by default for all pre-C++11 dialects and all
2778     GNU dialects: '-std=c++98', '-std=gnu++98', '-std=gnu++11',
2779     '-std=gnu++1y'.  This option is off by default for ISO C++11
2780     onwards ('-std=c++11', ...).
2781
2782 The following '-W...' options are not affected by '-Wall'.
2783
2784'-Weffc++ (C++ and Objective-C++ only)'
2785     Warn about violations of the following style guidelines from Scott
2786     Meyers' 'Effective C++' series of books:
2787
2788        * Define a copy constructor and an assignment operator for
2789          classes with dynamically-allocated memory.
2790
2791        * Prefer initialization to assignment in constructors.
2792
2793        * Have 'operator=' return a reference to '*this'.
2794
2795        * Don't try to return a reference when you must return an
2796          object.
2797
2798        * Distinguish between prefix and postfix forms of increment and
2799          decrement operators.
2800
2801        * Never overload '&&', '||', or ','.
2802
2803     This option also enables '-Wnon-virtual-dtor', which is also one of
2804     the effective C++ recommendations.  However, the check is extended
2805     to warn about the lack of virtual destructor in accessible
2806     non-polymorphic bases classes too.
2807
2808     When selecting this option, be aware that the standard library
2809     headers do not obey all of these guidelines; use 'grep -v' to
2810     filter out those warnings.
2811
2812'-Wstrict-null-sentinel (C++ and Objective-C++ only)'
2813     Warn about the use of an uncasted 'NULL' as sentinel.  When
2814     compiling only with GCC this is a valid sentinel, as 'NULL' is
2815     defined to '__null'.  Although it is a null pointer constant rather
2816     than a null pointer, it is guaranteed to be of the same size as a
2817     pointer.  But this use is not portable across different compilers.
2818
2819'-Wno-non-template-friend (C++ and Objective-C++ only)'
2820     Disable warnings when non-templatized friend functions are declared
2821     within a template.  Since the advent of explicit template
2822     specification support in G++, if the name of the friend is an
2823     unqualified-id (i.e., 'friend foo(int)'), the C++ language
2824     specification demands that the friend declare or define an
2825     ordinary, nontemplate function.  (Section 14.5.3).  Before G++
2826     implemented explicit specification, unqualified-ids could be
2827     interpreted as a particular specialization of a templatized
2828     function.  Because this non-conforming behavior is no longer the
2829     default behavior for G++, '-Wnon-template-friend' allows the
2830     compiler to check existing code for potential trouble spots and is
2831     on by default.  This new compiler behavior can be turned off with
2832     '-Wno-non-template-friend', which keeps the conformant compiler
2833     code but disables the helpful warning.
2834
2835'-Wold-style-cast (C++ and Objective-C++ only)'
2836     Warn if an old-style (C-style) cast to a non-void type is used
2837     within a C++ program.  The new-style casts ('dynamic_cast',
2838     'static_cast', 'reinterpret_cast', and 'const_cast') are less
2839     vulnerable to unintended effects and much easier to search for.
2840
2841'-Woverloaded-virtual (C++ and Objective-C++ only)'
2842     Warn when a function declaration hides virtual functions from a
2843     base class.  For example, in:
2844
2845          struct A {
2846            virtual void f();
2847          };
2848
2849          struct B: public A {
2850            void f(int);
2851          };
2852
2853     the 'A' class version of 'f' is hidden in 'B', and code like:
2854
2855          B* b;
2856          b->f();
2857
2858     fails to compile.
2859
2860'-Wno-pmf-conversions (C++ and Objective-C++ only)'
2861     Disable the diagnostic for converting a bound pointer to member
2862     function to a plain pointer.
2863
2864'-Wsign-promo (C++ and Objective-C++ only)'
2865     Warn when overload resolution chooses a promotion from unsigned or
2866     enumerated type to a signed type, over a conversion to an unsigned
2867     type of the same size.  Previous versions of G++ tried to preserve
2868     unsignedness, but the standard mandates the current behavior.
2869
2870
2871File: gcc.info,  Node: Objective-C and Objective-C++ Dialect Options,  Next: Language Independent Options,  Prev: C++ Dialect Options,  Up: Invoking GCC
2872
28733.6 Options Controlling Objective-C and Objective-C++ Dialects
2874==============================================================
2875
2876(NOTE: This manual does not describe the Objective-C and Objective-C++
2877languages themselves.  *Note Language Standards Supported by GCC:
2878Standards, for references.)
2879
2880 This section describes the command-line options that are only
2881meaningful for Objective-C and Objective-C++ programs.  You can also use
2882most of the language-independent GNU compiler options.  For example, you
2883might compile a file 'some_class.m' like this:
2884
2885     gcc -g -fgnu-runtime -O -c some_class.m
2886
2887In this example, '-fgnu-runtime' is an option meant only for Objective-C
2888and Objective-C++ programs; you can use the other options with any
2889language supported by GCC.
2890
2891 Note that since Objective-C is an extension of the C language,
2892Objective-C compilations may also use options specific to the C
2893front-end (e.g., '-Wtraditional').  Similarly, Objective-C++
2894compilations may use C++-specific options (e.g., '-Wabi').
2895
2896 Here is a list of options that are _only_ for compiling Objective-C and
2897Objective-C++ programs:
2898
2899'-fconstant-string-class=CLASS-NAME'
2900     Use CLASS-NAME as the name of the class to instantiate for each
2901     literal string specified with the syntax '@"..."'.  The default
2902     class name is 'NXConstantString' if the GNU runtime is being used,
2903     and 'NSConstantString' if the NeXT runtime is being used (see
2904     below).  The '-fconstant-cfstrings' option, if also present,
2905     overrides the '-fconstant-string-class' setting and cause '@"..."'
2906     literals to be laid out as constant CoreFoundation strings.
2907
2908'-fgnu-runtime'
2909     Generate object code compatible with the standard GNU Objective-C
2910     runtime.  This is the default for most types of systems.
2911
2912'-fnext-runtime'
2913     Generate output compatible with the NeXT runtime.  This is the
2914     default for NeXT-based systems, including Darwin and Mac OS X.  The
2915     macro '__NEXT_RUNTIME__' is predefined if (and only if) this option
2916     is used.
2917
2918'-fno-nil-receivers'
2919     Assume that all Objective-C message dispatches ('[receiver
2920     message:arg]') in this translation unit ensure that the receiver is
2921     not 'nil'.  This allows for more efficient entry points in the
2922     runtime to be used.  This option is only available in conjunction
2923     with the NeXT runtime and ABI version 0 or 1.
2924
2925'-fobjc-abi-version=N'
2926     Use version N of the Objective-C ABI for the selected runtime.
2927     This option is currently supported only for the NeXT runtime.  In
2928     that case, Version 0 is the traditional (32-bit) ABI without
2929     support for properties and other Objective-C 2.0 additions.
2930     Version 1 is the traditional (32-bit) ABI with support for
2931     properties and other Objective-C 2.0 additions.  Version 2 is the
2932     modern (64-bit) ABI. If nothing is specified, the default is
2933     Version 0 on 32-bit target machines, and Version 2 on 64-bit target
2934     machines.
2935
2936'-fobjc-call-cxx-cdtors'
2937     For each Objective-C class, check if any of its instance variables
2938     is a C++ object with a non-trivial default constructor.  If so,
2939     synthesize a special '- (id) .cxx_construct' instance method which
2940     runs non-trivial default constructors on any such instance
2941     variables, in order, and then return 'self'.  Similarly, check if
2942     any instance variable is a C++ object with a non-trivial
2943     destructor, and if so, synthesize a special '- (void)
2944     .cxx_destruct' method which runs all such default destructors, in
2945     reverse order.
2946
2947     The '- (id) .cxx_construct' and '- (void) .cxx_destruct' methods
2948     thusly generated only operate on instance variables declared in the
2949     current Objective-C class, and not those inherited from
2950     superclasses.  It is the responsibility of the Objective-C runtime
2951     to invoke all such methods in an object's inheritance hierarchy.
2952     The '- (id) .cxx_construct' methods are invoked by the runtime
2953     immediately after a new object instance is allocated; the '- (void)
2954     .cxx_destruct' methods are invoked immediately before the runtime
2955     deallocates an object instance.
2956
2957     As of this writing, only the NeXT runtime on Mac OS X 10.4 and
2958     later has support for invoking the '- (id) .cxx_construct' and '-
2959     (void) .cxx_destruct' methods.
2960
2961'-fobjc-direct-dispatch'
2962     Allow fast jumps to the message dispatcher.  On Darwin this is
2963     accomplished via the comm page.
2964
2965'-fobjc-exceptions'
2966     Enable syntactic support for structured exception handling in
2967     Objective-C, similar to what is offered by C++ and Java.  This
2968     option is required to use the Objective-C keywords '@try',
2969     '@throw', '@catch', '@finally' and '@synchronized'.  This option is
2970     available with both the GNU runtime and the NeXT runtime (but not
2971     available in conjunction with the NeXT runtime on Mac OS X 10.2 and
2972     earlier).
2973
2974'-fobjc-gc'
2975     Enable garbage collection (GC) in Objective-C and Objective-C++
2976     programs.  This option is only available with the NeXT runtime; the
2977     GNU runtime has a different garbage collection implementation that
2978     does not require special compiler flags.
2979
2980'-fobjc-nilcheck'
2981     For the NeXT runtime with version 2 of the ABI, check for a nil
2982     receiver in method invocations before doing the actual method call.
2983     This is the default and can be disabled using '-fno-objc-nilcheck'.
2984     Class methods and super calls are never checked for nil in this way
2985     no matter what this flag is set to.  Currently this flag does
2986     nothing when the GNU runtime, or an older version of the NeXT
2987     runtime ABI, is used.
2988
2989'-fobjc-std=objc1'
2990     Conform to the language syntax of Objective-C 1.0, the language
2991     recognized by GCC 4.0.  This only affects the Objective-C additions
2992     to the C/C++ language; it does not affect conformance to C/C++
2993     standards, which is controlled by the separate C/C++ dialect option
2994     flags.  When this option is used with the Objective-C or
2995     Objective-C++ compiler, any Objective-C syntax that is not
2996     recognized by GCC 4.0 is rejected.  This is useful if you need to
2997     make sure that your Objective-C code can be compiled with older
2998     versions of GCC.
2999
3000'-freplace-objc-classes'
3001     Emit a special marker instructing 'ld(1)' not to statically link in
3002     the resulting object file, and allow 'dyld(1)' to load it in at run
3003     time instead.  This is used in conjunction with the
3004     Fix-and-Continue debugging mode, where the object file in question
3005     may be recompiled and dynamically reloaded in the course of program
3006     execution, without the need to restart the program itself.
3007     Currently, Fix-and-Continue functionality is only available in
3008     conjunction with the NeXT runtime on Mac OS X 10.3 and later.
3009
3010'-fzero-link'
3011     When compiling for the NeXT runtime, the compiler ordinarily
3012     replaces calls to 'objc_getClass("...")' (when the name of the
3013     class is known at compile time) with static class references that
3014     get initialized at load time, which improves run-time performance.
3015     Specifying the '-fzero-link' flag suppresses this behavior and
3016     causes calls to 'objc_getClass("...")' to be retained.  This is
3017     useful in Zero-Link debugging mode, since it allows for individual
3018     class implementations to be modified during program execution.  The
3019     GNU runtime currently always retains calls to
3020     'objc_get_class("...")' regardless of command-line options.
3021
3022'-gen-decls'
3023     Dump interface declarations for all classes seen in the source file
3024     to a file named 'SOURCENAME.decl'.
3025
3026'-Wassign-intercept (Objective-C and Objective-C++ only)'
3027     Warn whenever an Objective-C assignment is being intercepted by the
3028     garbage collector.
3029
3030'-Wno-protocol (Objective-C and Objective-C++ only)'
3031     If a class is declared to implement a protocol, a warning is issued
3032     for every method in the protocol that is not implemented by the
3033     class.  The default behavior is to issue a warning for every method
3034     not explicitly implemented in the class, even if a method
3035     implementation is inherited from the superclass.  If you use the
3036     '-Wno-protocol' option, then methods inherited from the superclass
3037     are considered to be implemented, and no warning is issued for
3038     them.
3039
3040'-Wselector (Objective-C and Objective-C++ only)'
3041     Warn if multiple methods of different types for the same selector
3042     are found during compilation.  The check is performed on the list
3043     of methods in the final stage of compilation.  Additionally, a
3044     check is performed for each selector appearing in a
3045     '@selector(...)' expression, and a corresponding method for that
3046     selector has been found during compilation.  Because these checks
3047     scan the method table only at the end of compilation, these
3048     warnings are not produced if the final stage of compilation is not
3049     reached, for example because an error is found during compilation,
3050     or because the '-fsyntax-only' option is being used.
3051
3052'-Wstrict-selector-match (Objective-C and Objective-C++ only)'
3053     Warn if multiple methods with differing argument and/or return
3054     types are found for a given selector when attempting to send a
3055     message using this selector to a receiver of type 'id' or 'Class'.
3056     When this flag is off (which is the default behavior), the compiler
3057     omits such warnings if any differences found are confined to types
3058     that share the same size and alignment.
3059
3060'-Wundeclared-selector (Objective-C and Objective-C++ only)'
3061     Warn if a '@selector(...)' expression referring to an undeclared
3062     selector is found.  A selector is considered undeclared if no
3063     method with that name has been declared before the '@selector(...)'
3064     expression, either explicitly in an '@interface' or '@protocol'
3065     declaration, or implicitly in an '@implementation' section.  This
3066     option always performs its checks as soon as a '@selector(...)'
3067     expression is found, while '-Wselector' only performs its checks in
3068     the final stage of compilation.  This also enforces the coding
3069     style convention that methods and selectors must be declared before
3070     being used.
3071
3072'-print-objc-runtime-info'
3073     Generate C header describing the largest structure that is passed
3074     by value, if any.
3075
3076
3077File: gcc.info,  Node: Language Independent Options,  Next: Warning Options,  Prev: Objective-C and Objective-C++ Dialect Options,  Up: Invoking GCC
3078
30793.7 Options to Control Diagnostic Messages Formatting
3080=====================================================
3081
3082Traditionally, diagnostic messages have been formatted irrespective of
3083the output device's aspect (e.g. its width, ...).  You can use the
3084options described below to control the formatting algorithm for
3085diagnostic messages, e.g. how many characters per line, how often source
3086location information should be reported.  Note that some language front
3087ends may not honor these options.
3088
3089'-fmessage-length=N'
3090     Try to format error messages so that they fit on lines of about N
3091     characters.  The default is 72 characters for 'g++' and 0 for the
3092     rest of the front ends supported by GCC.  If N is zero, then no
3093     line-wrapping is done; each error message appears on a single line.
3094
3095'-fdiagnostics-show-location=once'
3096     Only meaningful in line-wrapping mode.  Instructs the diagnostic
3097     messages reporter to emit source location information _once_; that
3098     is, in case the message is too long to fit on a single physical
3099     line and has to be wrapped, the source location won't be emitted
3100     (as prefix) again, over and over, in subsequent continuation lines.
3101     This is the default behavior.
3102
3103'-fdiagnostics-show-location=every-line'
3104     Only meaningful in line-wrapping mode.  Instructs the diagnostic
3105     messages reporter to emit the same source location information (as
3106     prefix) for physical lines that result from the process of breaking
3107     a message which is too long to fit on a single line.
3108
3109'-fdiagnostics-color[=WHEN]'
3110'-fno-diagnostics-color'
3111     Use color in diagnostics.  WHEN is 'never', 'always', or 'auto'.
3112     The default is 'never' if 'GCC_COLORS' environment variable isn't
3113     present in the environment, and 'auto' otherwise.  'auto' means to
3114     use color only when the standard error is a terminal.  The forms
3115     '-fdiagnostics-color' and '-fno-diagnostics-color' are aliases for
3116     '-fdiagnostics-color=always' and '-fdiagnostics-color=never',
3117     respectively.
3118
3119     The colors are defined by the environment variable 'GCC_COLORS'.
3120     Its value is a colon-separated list of capabilities and Select
3121     Graphic Rendition (SGR) substrings.  SGR commands are interpreted
3122     by the terminal or terminal emulator.  (See the section in the
3123     documentation of your text terminal for permitted values and their
3124     meanings as character attributes.)  These substring values are
3125     integers in decimal representation and can be concatenated with
3126     semicolons.  Common values to concatenate include '1' for bold, '4'
3127     for underline, '5' for blink, '7' for inverse, '39' for default
3128     foreground color, '30' to '37' for foreground colors, '90' to '97'
3129     for 16-color mode foreground colors, '38;5;0' to '38;5;255' for
3130     88-color and 256-color modes foreground colors, '49' for default
3131     background color, '40' to '47' for background colors, '100' to
3132     '107' for 16-color mode background colors, and '48;5;0' to
3133     '48;5;255' for 88-color and 256-color modes background colors.
3134
3135     The default 'GCC_COLORS' is
3136     'error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01'
3137     where '01;31' is bold red, '01;35' is bold magenta, '01;36' is bold
3138     cyan, '01;32' is bold green and '01' is bold.  Setting 'GCC_COLORS'
3139     to the empty string disables colors.  Supported capabilities are as
3140     follows.
3141
3142     'error='
3143          SGR substring for error: markers.
3144
3145     'warning='
3146          SGR substring for warning: markers.
3147
3148     'note='
3149          SGR substring for note: markers.
3150
3151     'caret='
3152          SGR substring for caret line.
3153
3154     'locus='
3155          SGR substring for location information, 'file:line' or
3156          'file:line:column' etc.
3157
3158     'quote='
3159          SGR substring for information printed within quotes.
3160
3161'-fno-diagnostics-show-option'
3162     By default, each diagnostic emitted includes text indicating the
3163     command-line option that directly controls the diagnostic (if such
3164     an option is known to the diagnostic machinery).  Specifying the
3165     '-fno-diagnostics-show-option' flag suppresses that behavior.
3166
3167'-fno-diagnostics-show-caret'
3168     By default, each diagnostic emitted includes the original source
3169     line and a caret '^' indicating the column.  This option suppresses
3170     this information.
3171
3172
3173File: gcc.info,  Node: Warning Options,  Next: Debugging Options,  Prev: Language Independent Options,  Up: Invoking GCC
3174
31753.8 Options to Request or Suppress Warnings
3176===========================================
3177
3178Warnings are diagnostic messages that report constructions that are not
3179inherently erroneous but that are risky or suggest there may have been
3180an error.
3181
3182 The following language-independent options do not enable specific
3183warnings but control the kinds of diagnostics produced by GCC.
3184
3185'-fsyntax-only'
3186     Check the code for syntax errors, but don't do anything beyond
3187     that.
3188
3189'-fmax-errors=N'
3190     Limits the maximum number of error messages to N, at which point
3191     GCC bails out rather than attempting to continue processing the
3192     source code.  If N is 0 (the default), there is no limit on the
3193     number of error messages produced.  If '-Wfatal-errors' is also
3194     specified, then '-Wfatal-errors' takes precedence over this option.
3195
3196'-w'
3197     Inhibit all warning messages.
3198
3199'-Werror'
3200     Make all warnings into errors.
3201
3202'-Werror='
3203     Make the specified warning into an error.  The specifier for a
3204     warning is appended; for example '-Werror=switch' turns the
3205     warnings controlled by '-Wswitch' into errors.  This switch takes a
3206     negative form, to be used to negate '-Werror' for specific
3207     warnings; for example '-Wno-error=switch' makes '-Wswitch' warnings
3208     not be errors, even when '-Werror' is in effect.
3209
3210     The warning message for each controllable warning includes the
3211     option that controls the warning.  That option can then be used
3212     with '-Werror=' and '-Wno-error=' as described above.  (Printing of
3213     the option in the warning message can be disabled using the
3214     '-fno-diagnostics-show-option' flag.)
3215
3216     Note that specifying '-Werror='FOO automatically implies '-W'FOO.
3217     However, '-Wno-error='FOO does not imply anything.
3218
3219'-Wfatal-errors'
3220     This option causes the compiler to abort compilation on the first
3221     error occurred rather than trying to keep going and printing
3222     further error messages.
3223
3224 You can request many specific warnings with options beginning with
3225'-W', for example '-Wimplicit' to request warnings on implicit
3226declarations.  Each of these specific warning options also has a
3227negative form beginning '-Wno-' to turn off warnings; for example,
3228'-Wno-implicit'.  This manual lists only one of the two forms, whichever
3229is not the default.  For further language-specific options also refer to
3230*note C++ Dialect Options:: and *note Objective-C and Objective-C++
3231Dialect Options::.
3232
3233 When an unrecognized warning option is requested (e.g.,
3234'-Wunknown-warning'), GCC emits a diagnostic stating that the option is
3235not recognized.  However, if the '-Wno-' form is used, the behavior is
3236slightly different: no diagnostic is produced for '-Wno-unknown-warning'
3237unless other diagnostics are being produced.  This allows the use of new
3238'-Wno-' options with old compilers, but if something goes wrong, the
3239compiler warns that an unrecognized option is present.
3240
3241'-Wpedantic'
3242'-pedantic'
3243     Issue all the warnings demanded by strict ISO C and ISO C++; reject
3244     all programs that use forbidden extensions, and some other programs
3245     that do not follow ISO C and ISO C++.  For ISO C, follows the
3246     version of the ISO C standard specified by any '-std' option used.
3247
3248     Valid ISO C and ISO C++ programs should compile properly with or
3249     without this option (though a rare few require '-ansi' or a '-std'
3250     option specifying the required version of ISO C).  However, without
3251     this option, certain GNU extensions and traditional C and C++
3252     features are supported as well.  With this option, they are
3253     rejected.
3254
3255     '-Wpedantic' does not cause warning messages for use of the
3256     alternate keywords whose names begin and end with '__'.  Pedantic
3257     warnings are also disabled in the expression that follows
3258     '__extension__'.  However, only system header files should use
3259     these escape routes; application programs should avoid them.  *Note
3260     Alternate Keywords::.
3261
3262     Some users try to use '-Wpedantic' to check programs for strict ISO
3263     C conformance.  They soon find that it does not do quite what they
3264     want: it finds some non-ISO practices, but not all--only those for
3265     which ISO C _requires_ a diagnostic, and some others for which
3266     diagnostics have been added.
3267
3268     A feature to report any failure to conform to ISO C might be useful
3269     in some instances, but would require considerable additional work
3270     and would be quite different from '-Wpedantic'.  We don't have
3271     plans to support such a feature in the near future.
3272
3273     Where the standard specified with '-std' represents a GNU extended
3274     dialect of C, such as 'gnu90' or 'gnu99', there is a corresponding
3275     "base standard", the version of ISO C on which the GNU extended
3276     dialect is based.  Warnings from '-Wpedantic' are given where they
3277     are required by the base standard.  (It does not make sense for
3278     such warnings to be given only for features not in the specified
3279     GNU C dialect, since by definition the GNU dialects of C include
3280     all features the compiler supports with the given option, and there
3281     would be nothing to warn about.)
3282
3283'-pedantic-errors'
3284     Like '-Wpedantic', except that errors are produced rather than
3285     warnings.
3286
3287'-Wall'
3288     This enables all the warnings about constructions that some users
3289     consider questionable, and that are easy to avoid (or modify to
3290     prevent the warning), even in conjunction with macros.  This also
3291     enables some language-specific warnings described in *note C++
3292     Dialect Options:: and *note Objective-C and Objective-C++ Dialect
3293     Options::.
3294
3295     '-Wall' turns on the following warning flags:
3296
3297          -Waddress
3298          -Warray-bounds (only with -O2)
3299          -Wc++11-compat
3300          -Wchar-subscripts
3301          -Wenum-compare (in C/ObjC; this is on by default in C++)
3302          -Wimplicit-int (C and Objective-C only)
3303          -Wimplicit-function-declaration (C and Objective-C only)
3304          -Wcomment
3305          -Wformat
3306          -Wmain (only for C/ObjC and unless -ffreestanding)
3307          -Wmaybe-uninitialized
3308          -Wmissing-braces (only for C/ObjC)
3309          -Wnonnull
3310          -Wopenmp-simd
3311          -Wparentheses
3312          -Wpointer-sign
3313          -Wreorder
3314          -Wreturn-type
3315          -Wsequence-point
3316          -Wsign-compare (only in C++)
3317          -Wstrict-aliasing
3318          -Wstrict-overflow=1
3319          -Wswitch
3320          -Wtrigraphs
3321          -Wuninitialized
3322          -Wunknown-pragmas
3323          -Wunused-function
3324          -Wunused-label
3325          -Wunused-value
3326          -Wunused-variable
3327          -Wvolatile-register-var
3328
3329
3330     Note that some warning flags are not implied by '-Wall'.  Some of
3331     them warn about constructions that users generally do not consider
3332     questionable, but which occasionally you might wish to check for;
3333     others warn about constructions that are necessary or hard to avoid
3334     in some cases, and there is no simple way to modify the code to
3335     suppress the warning.  Some of them are enabled by '-Wextra' but
3336     many of them must be enabled individually.
3337
3338'-Wextra'
3339     This enables some extra warning flags that are not enabled by
3340     '-Wall'.  (This option used to be called '-W'.  The older name is
3341     still supported, but the newer name is more descriptive.)
3342
3343          -Wclobbered
3344          -Wempty-body
3345          -Wignored-qualifiers
3346          -Wmissing-field-initializers
3347          -Wmissing-parameter-type (C only)
3348          -Wold-style-declaration (C only)
3349          -Woverride-init
3350          -Wsign-compare
3351          -Wtype-limits
3352          -Wuninitialized
3353          -Wunused-parameter (only with -Wunused or -Wall)
3354          -Wunused-but-set-parameter (only with -Wunused or -Wall)
3355
3356
3357     The option '-Wextra' also prints warning messages for the following
3358     cases:
3359
3360        * A pointer is compared against integer zero with '<', '<=',
3361          '>', or '>='.
3362
3363        * (C++ only) An enumerator and a non-enumerator both appear in a
3364          conditional expression.
3365
3366        * (C++ only) Ambiguous virtual bases.
3367
3368        * (C++ only) Subscripting an array that has been declared
3369          'register'.
3370
3371        * (C++ only) Taking the address of a variable that has been
3372          declared 'register'.
3373
3374        * (C++ only) A base class is not initialized in a derived
3375          class's copy constructor.
3376
3377'-Wchar-subscripts'
3378     Warn if an array subscript has type 'char'.  This is a common cause
3379     of error, as programmers often forget that this type is signed on
3380     some machines.  This warning is enabled by '-Wall'.
3381
3382'-Wcomment'
3383     Warn whenever a comment-start sequence '/*' appears in a '/*'
3384     comment, or whenever a Backslash-Newline appears in a '//' comment.
3385     This warning is enabled by '-Wall'.
3386
3387'-Wno-coverage-mismatch'
3388     Warn if feedback profiles do not match when using the
3389     '-fprofile-use' option.  If a source file is changed between
3390     compiling with '-fprofile-gen' and with '-fprofile-use', the files
3391     with the profile feedback can fail to match the source file and GCC
3392     cannot use the profile feedback information.  By default, this
3393     warning is enabled and is treated as an error.
3394     '-Wno-coverage-mismatch' can be used to disable the warning or
3395     '-Wno-error=coverage-mismatch' can be used to disable the error.
3396     Disabling the error for this warning can result in poorly optimized
3397     code and is useful only in the case of very minor changes such as
3398     bug fixes to an existing code-base.  Completely disabling the
3399     warning is not recommended.
3400
3401'-Wno-cpp'
3402     (C, Objective-C, C++, Objective-C++ and Fortran only)
3403
3404     Suppress warning messages emitted by '#warning' directives.
3405
3406'-Wdouble-promotion (C, C++, Objective-C and Objective-C++ only)'
3407     Give a warning when a value of type 'float' is implicitly promoted
3408     to 'double'.  CPUs with a 32-bit "single-precision" floating-point
3409     unit implement 'float' in hardware, but emulate 'double' in
3410     software.  On such a machine, doing computations using 'double'
3411     values is much more expensive because of the overhead required for
3412     software emulation.
3413
3414     It is easy to accidentally do computations with 'double' because
3415     floating-point literals are implicitly of type 'double'.  For
3416     example, in:
3417          float area(float radius)
3418          {
3419             return 3.14159 * radius * radius;
3420          }
3421     the compiler performs the entire computation with 'double' because
3422     the floating-point literal is a 'double'.
3423
3424'-Wformat'
3425'-Wformat=N'
3426     Check calls to 'printf' and 'scanf', etc., to make sure that the
3427     arguments supplied have types appropriate to the format string
3428     specified, and that the conversions specified in the format string
3429     make sense.  This includes standard functions, and others specified
3430     by format attributes (*note Function Attributes::), in the
3431     'printf', 'scanf', 'strftime' and 'strfmon' (an X/Open extension,
3432     not in the C standard) families (or other target-specific
3433     families).  Which functions are checked without format attributes
3434     having been specified depends on the standard version selected, and
3435     such checks of functions without the attribute specified are
3436     disabled by '-ffreestanding' or '-fno-builtin'.
3437
3438     The formats are checked against the format features supported by
3439     GNU libc version 2.2.  These include all ISO C90 and C99 features,
3440     as well as features from the Single Unix Specification and some BSD
3441     and GNU extensions.  Other library implementations may not support
3442     all these features; GCC does not support warning about features
3443     that go beyond a particular library's limitations.  However, if
3444     '-Wpedantic' is used with '-Wformat', warnings are given about
3445     format features not in the selected standard version (but not for
3446     'strfmon' formats, since those are not in any version of the C
3447     standard).  *Note Options Controlling C Dialect: C Dialect Options.
3448
3449     '-Wformat=1'
3450     '-Wformat'
3451          Option '-Wformat' is equivalent to '-Wformat=1', and
3452          '-Wno-format' is equivalent to '-Wformat=0'.  Since '-Wformat'
3453          also checks for null format arguments for several functions,
3454          '-Wformat' also implies '-Wnonnull'.  Some aspects of this
3455          level of format checking can be disabled by the options:
3456          '-Wno-format-contains-nul', '-Wno-format-extra-args', and
3457          '-Wno-format-zero-length'.  '-Wformat' is enabled by '-Wall'.
3458
3459     '-Wno-format-contains-nul'
3460          If '-Wformat' is specified, do not warn about format strings
3461          that contain NUL bytes.
3462
3463     '-Wno-format-extra-args'
3464          If '-Wformat' is specified, do not warn about excess arguments
3465          to a 'printf' or 'scanf' format function.  The C standard
3466          specifies that such arguments are ignored.
3467
3468          Where the unused arguments lie between used arguments that are
3469          specified with '$' operand number specifications, normally
3470          warnings are still given, since the implementation could not
3471          know what type to pass to 'va_arg' to skip the unused
3472          arguments.  However, in the case of 'scanf' formats, this
3473          option suppresses the warning if the unused arguments are all
3474          pointers, since the Single Unix Specification says that such
3475          unused arguments are allowed.
3476
3477     '-Wno-format-zero-length'
3478          If '-Wformat' is specified, do not warn about zero-length
3479          formats.  The C standard specifies that zero-length formats
3480          are allowed.
3481
3482     '-Wformat=2'
3483          Enable '-Wformat' plus additional format checks.  Currently
3484          equivalent to '-Wformat -Wformat-nonliteral -Wformat-security
3485          -Wformat-y2k'.
3486
3487     '-Wformat-nonliteral'
3488          If '-Wformat' is specified, also warn if the format string is
3489          not a string literal and so cannot be checked, unless the
3490          format function takes its format arguments as a 'va_list'.
3491
3492     '-Wformat-security'
3493          If '-Wformat' is specified, also warn about uses of format
3494          functions that represent possible security problems.  At
3495          present, this warns about calls to 'printf' and 'scanf'
3496          functions where the format string is not a string literal and
3497          there are no format arguments, as in 'printf (foo);'.  This
3498          may be a security hole if the format string came from
3499          untrusted input and contains '%n'.  (This is currently a
3500          subset of what '-Wformat-nonliteral' warns about, but in
3501          future warnings may be added to '-Wformat-security' that are
3502          not included in '-Wformat-nonliteral'.)
3503
3504     '-Wformat-y2k'
3505          If '-Wformat' is specified, also warn about 'strftime' formats
3506          that may yield only a two-digit year.
3507
3508'-Wnonnull'
3509     Warn about passing a null pointer for arguments marked as requiring
3510     a non-null value by the 'nonnull' function attribute.
3511
3512     '-Wnonnull' is included in '-Wall' and '-Wformat'.  It can be
3513     disabled with the '-Wno-nonnull' option.
3514
3515'-Winit-self (C, C++, Objective-C and Objective-C++ only)'
3516     Warn about uninitialized variables that are initialized with
3517     themselves.  Note this option can only be used with the
3518     '-Wuninitialized' option.
3519
3520     For example, GCC warns about 'i' being uninitialized in the
3521     following snippet only when '-Winit-self' has been specified:
3522          int f()
3523          {
3524            int i = i;
3525            return i;
3526          }
3527
3528     This warning is enabled by '-Wall' in C++.
3529
3530'-Wimplicit-int (C and Objective-C only)'
3531     Warn when a declaration does not specify a type.  This warning is
3532     enabled by '-Wall'.
3533
3534'-Wimplicit-function-declaration (C and Objective-C only)'
3535     Give a warning whenever a function is used before being declared.
3536     In C99 mode ('-std=c99' or '-std=gnu99'), this warning is enabled
3537     by default and it is made into an error by '-pedantic-errors'.
3538     This warning is also enabled by '-Wall'.
3539
3540'-Wimplicit (C and Objective-C only)'
3541     Same as '-Wimplicit-int' and '-Wimplicit-function-declaration'.
3542     This warning is enabled by '-Wall'.
3543
3544'-Wignored-qualifiers (C and C++ only)'
3545     Warn if the return type of a function has a type qualifier such as
3546     'const'.  For ISO C such a type qualifier has no effect, since the
3547     value returned by a function is not an lvalue.  For C++, the
3548     warning is only emitted for scalar types or 'void'.  ISO C
3549     prohibits qualified 'void' return types on function definitions, so
3550     such return types always receive a warning even without this
3551     option.
3552
3553     This warning is also enabled by '-Wextra'.
3554
3555'-Wmain'
3556     Warn if the type of 'main' is suspicious.  'main' should be a
3557     function with external linkage, returning int, taking either zero
3558     arguments, two, or three arguments of appropriate types.  This
3559     warning is enabled by default in C++ and is enabled by either
3560     '-Wall' or '-Wpedantic'.
3561
3562'-Wmissing-braces'
3563     Warn if an aggregate or union initializer is not fully bracketed.
3564     In the following example, the initializer for 'a' is not fully
3565     bracketed, but that for 'b' is fully bracketed.  This warning is
3566     enabled by '-Wall' in C.
3567
3568          int a[2][2] = { 0, 1, 2, 3 };
3569          int b[2][2] = { { 0, 1 }, { 2, 3 } };
3570
3571     This warning is enabled by '-Wall'.
3572
3573'-Wmissing-include-dirs (C, C++, Objective-C and Objective-C++ only)'
3574     Warn if a user-supplied include directory does not exist.
3575
3576'-Wparentheses'
3577     Warn if parentheses are omitted in certain contexts, such as when
3578     there is an assignment in a context where a truth value is
3579     expected, or when operators are nested whose precedence people
3580     often get confused about.
3581
3582     Also warn if a comparison like 'x<=y<=z' appears; this is
3583     equivalent to '(x<=y ? 1 : 0) <= z', which is a different
3584     interpretation from that of ordinary mathematical notation.
3585
3586     Also warn about constructions where there may be confusion to which
3587     'if' statement an 'else' branch belongs.  Here is an example of
3588     such a case:
3589
3590          {
3591            if (a)
3592              if (b)
3593                foo ();
3594            else
3595              bar ();
3596          }
3597
3598     In C/C++, every 'else' branch belongs to the innermost possible
3599     'if' statement, which in this example is 'if (b)'.  This is often
3600     not what the programmer expected, as illustrated in the above
3601     example by indentation the programmer chose.  When there is the
3602     potential for this confusion, GCC issues a warning when this flag
3603     is specified.  To eliminate the warning, add explicit braces around
3604     the innermost 'if' statement so there is no way the 'else' can
3605     belong to the enclosing 'if'.  The resulting code looks like this:
3606
3607          {
3608            if (a)
3609              {
3610                if (b)
3611                  foo ();
3612                else
3613                  bar ();
3614              }
3615          }
3616
3617     Also warn for dangerous uses of the GNU extension to '?:' with
3618     omitted middle operand.  When the condition in the '?': operator is
3619     a boolean expression, the omitted value is always 1.  Often
3620     programmers expect it to be a value computed inside the conditional
3621     expression instead.
3622
3623     This warning is enabled by '-Wall'.
3624
3625'-Wsequence-point'
3626     Warn about code that may have undefined semantics because of
3627     violations of sequence point rules in the C and C++ standards.
3628
3629     The C and C++ standards define the order in which expressions in a
3630     C/C++ program are evaluated in terms of "sequence points", which
3631     represent a partial ordering between the execution of parts of the
3632     program: those executed before the sequence point, and those
3633     executed after it.  These occur after the evaluation of a full
3634     expression (one which is not part of a larger expression), after
3635     the evaluation of the first operand of a '&&', '||', '? :' or ','
3636     (comma) operator, before a function is called (but after the
3637     evaluation of its arguments and the expression denoting the called
3638     function), and in certain other places.  Other than as expressed by
3639     the sequence point rules, the order of evaluation of subexpressions
3640     of an expression is not specified.  All these rules describe only a
3641     partial order rather than a total order, since, for example, if two
3642     functions are called within one expression with no sequence point
3643     between them, the order in which the functions are called is not
3644     specified.  However, the standards committee have ruled that
3645     function calls do not overlap.
3646
3647     It is not specified when between sequence points modifications to
3648     the values of objects take effect.  Programs whose behavior depends
3649     on this have undefined behavior; the C and C++ standards specify
3650     that "Between the previous and next sequence point an object shall
3651     have its stored value modified at most once by the evaluation of an
3652     expression.  Furthermore, the prior value shall be read only to
3653     determine the value to be stored.".  If a program breaks these
3654     rules, the results on any particular implementation are entirely
3655     unpredictable.
3656
3657     Examples of code with undefined behavior are 'a = a++;', 'a[n] =
3658     b[n++]' and 'a[i++] = i;'.  Some more complicated cases are not
3659     diagnosed by this option, and it may give an occasional false
3660     positive result, but in general it has been found fairly effective
3661     at detecting this sort of problem in programs.
3662
3663     The standard is worded confusingly, therefore there is some debate
3664     over the precise meaning of the sequence point rules in subtle
3665     cases.  Links to discussions of the problem, including proposed
3666     formal definitions, may be found on the GCC readings page, at
3667     <http://gcc.gnu.org/readings.html>.
3668
3669     This warning is enabled by '-Wall' for C and C++.
3670
3671'-Wno-return-local-addr'
3672     Do not warn about returning a pointer (or in C++, a reference) to a
3673     variable that goes out of scope after the function returns.
3674
3675'-Wreturn-type'
3676     Warn whenever a function is defined with a return type that
3677     defaults to 'int'.  Also warn about any 'return' statement with no
3678     return value in a function whose return type is not 'void' (falling
3679     off the end of the function body is considered returning without a
3680     value), and about a 'return' statement with an expression in a
3681     function whose return type is 'void'.
3682
3683     For C++, a function without return type always produces a
3684     diagnostic message, even when '-Wno-return-type' is specified.  The
3685     only exceptions are 'main' and functions defined in system headers.
3686
3687     This warning is enabled by '-Wall'.
3688
3689'-Wswitch'
3690     Warn whenever a 'switch' statement has an index of enumerated type
3691     and lacks a 'case' for one or more of the named codes of that
3692     enumeration.  (The presence of a 'default' label prevents this
3693     warning.)  'case' labels outside the enumeration range also provoke
3694     warnings when this option is used (even if there is a 'default'
3695     label).  This warning is enabled by '-Wall'.
3696
3697'-Wswitch-default'
3698     Warn whenever a 'switch' statement does not have a 'default' case.
3699
3700'-Wswitch-enum'
3701     Warn whenever a 'switch' statement has an index of enumerated type
3702     and lacks a 'case' for one or more of the named codes of that
3703     enumeration.  'case' labels outside the enumeration range also
3704     provoke warnings when this option is used.  The only difference
3705     between '-Wswitch' and this option is that this option gives a
3706     warning about an omitted enumeration code even if there is a
3707     'default' label.
3708
3709'-Wsync-nand (C and C++ only)'
3710     Warn when '__sync_fetch_and_nand' and '__sync_nand_and_fetch'
3711     built-in functions are used.  These functions changed semantics in
3712     GCC 4.4.
3713
3714'-Wtrigraphs'
3715     Warn if any trigraphs are encountered that might change the meaning
3716     of the program (trigraphs within comments are not warned about).
3717     This warning is enabled by '-Wall'.
3718
3719'-Wunused-but-set-parameter'
3720     Warn whenever a function parameter is assigned to, but otherwise
3721     unused (aside from its declaration).
3722
3723     To suppress this warning use the 'unused' attribute (*note Variable
3724     Attributes::).
3725
3726     This warning is also enabled by '-Wunused' together with '-Wextra'.
3727
3728'-Wunused-but-set-variable'
3729     Warn whenever a local variable is assigned to, but otherwise unused
3730     (aside from its declaration).  This warning is enabled by '-Wall'.
3731
3732     To suppress this warning use the 'unused' attribute (*note Variable
3733     Attributes::).
3734
3735     This warning is also enabled by '-Wunused', which is enabled by
3736     '-Wall'.
3737
3738'-Wunused-function'
3739     Warn whenever a static function is declared but not defined or a
3740     non-inline static function is unused.  This warning is enabled by
3741     '-Wall'.
3742
3743'-Wunused-label'
3744     Warn whenever a label is declared but not used.  This warning is
3745     enabled by '-Wall'.
3746
3747     To suppress this warning use the 'unused' attribute (*note Variable
3748     Attributes::).
3749
3750'-Wunused-local-typedefs (C, Objective-C, C++ and Objective-C++ only)'
3751     Warn when a typedef locally defined in a function is not used.
3752     This warning is enabled by '-Wall'.
3753
3754'-Wunused-parameter'
3755     Warn whenever a function parameter is unused aside from its
3756     declaration.
3757
3758     To suppress this warning use the 'unused' attribute (*note Variable
3759     Attributes::).
3760
3761'-Wno-unused-result'
3762     Do not warn if a caller of a function marked with attribute
3763     'warn_unused_result' (*note Function Attributes::) does not use its
3764     return value.  The default is '-Wunused-result'.
3765
3766'-Wunused-variable'
3767     Warn whenever a local variable or non-constant static variable is
3768     unused aside from its declaration.  This warning is enabled by
3769     '-Wall'.
3770
3771     To suppress this warning use the 'unused' attribute (*note Variable
3772     Attributes::).
3773
3774'-Wunused-value'
3775     Warn whenever a statement computes a result that is explicitly not
3776     used.  To suppress this warning cast the unused expression to
3777     'void'.  This includes an expression-statement or the left-hand
3778     side of a comma expression that contains no side effects.  For
3779     example, an expression such as 'x[i,j]' causes a warning, while
3780     'x[(void)i,j]' does not.
3781
3782     This warning is enabled by '-Wall'.
3783
3784'-Wunused'
3785     All the above '-Wunused' options combined.
3786
3787     In order to get a warning about an unused function parameter, you
3788     must either specify '-Wextra -Wunused' (note that '-Wall' implies
3789     '-Wunused'), or separately specify '-Wunused-parameter'.
3790
3791'-Wuninitialized'
3792     Warn if an automatic variable is used without first being
3793     initialized or if a variable may be clobbered by a 'setjmp' call.
3794     In C++, warn if a non-static reference or non-static 'const' member
3795     appears in a class without constructors.
3796
3797     If you want to warn about code that uses the uninitialized value of
3798     the variable in its own initializer, use the '-Winit-self' option.
3799
3800     These warnings occur for individual uninitialized or clobbered
3801     elements of structure, union or array variables as well as for
3802     variables that are uninitialized or clobbered as a whole.  They do
3803     not occur for variables or elements declared 'volatile'.  Because
3804     these warnings depend on optimization, the exact variables or
3805     elements for which there are warnings depends on the precise
3806     optimization options and version of GCC used.
3807
3808     Note that there may be no warning about a variable that is used
3809     only to compute a value that itself is never used, because such
3810     computations may be deleted by data flow analysis before the
3811     warnings are printed.
3812
3813'-Wmaybe-uninitialized'
3814     For an automatic variable, if there exists a path from the function
3815     entry to a use of the variable that is initialized, but there exist
3816     some other paths for which the variable is not initialized, the
3817     compiler emits a warning if it cannot prove the uninitialized paths
3818     are not executed at run time.  These warnings are made optional
3819     because GCC is not smart enough to see all the reasons why the code
3820     might be correct in spite of appearing to have an error.  Here is
3821     one example of how this can happen:
3822
3823          {
3824            int x;
3825            switch (y)
3826              {
3827              case 1: x = 1;
3828                break;
3829              case 2: x = 4;
3830                break;
3831              case 3: x = 5;
3832              }
3833            foo (x);
3834          }
3835
3836     If the value of 'y' is always 1, 2 or 3, then 'x' is always
3837     initialized, but GCC doesn't know this.  To suppress the warning,
3838     you need to provide a default case with assert(0) or similar code.
3839
3840     This option also warns when a non-volatile automatic variable might
3841     be changed by a call to 'longjmp'.  These warnings as well are
3842     possible only in optimizing compilation.
3843
3844     The compiler sees only the calls to 'setjmp'.  It cannot know where
3845     'longjmp' will be called; in fact, a signal handler could call it
3846     at any point in the code.  As a result, you may get a warning even
3847     when there is in fact no problem because 'longjmp' cannot in fact
3848     be called at the place that would cause a problem.
3849
3850     Some spurious warnings can be avoided if you declare all the
3851     functions you use that never return as 'noreturn'.  *Note Function
3852     Attributes::.
3853
3854     This warning is enabled by '-Wall' or '-Wextra'.
3855
3856'-Wunknown-pragmas'
3857     Warn when a '#pragma' directive is encountered that is not
3858     understood by GCC.  If this command-line option is used, warnings
3859     are even issued for unknown pragmas in system header files.  This
3860     is not the case if the warnings are only enabled by the '-Wall'
3861     command-line option.
3862
3863'-Wno-pragmas'
3864     Do not warn about misuses of pragmas, such as incorrect parameters,
3865     invalid syntax, or conflicts between pragmas.  See also
3866     '-Wunknown-pragmas'.
3867
3868'-Wstrict-aliasing'
3869     This option is only active when '-fstrict-aliasing' is active.  It
3870     warns about code that might break the strict aliasing rules that
3871     the compiler is using for optimization.  The warning does not catch
3872     all cases, but does attempt to catch the more common pitfalls.  It
3873     is included in '-Wall'.  It is equivalent to '-Wstrict-aliasing=3'
3874
3875'-Wstrict-aliasing=n'
3876     This option is only active when '-fstrict-aliasing' is active.  It
3877     warns about code that might break the strict aliasing rules that
3878     the compiler is using for optimization.  Higher levels correspond
3879     to higher accuracy (fewer false positives).  Higher levels also
3880     correspond to more effort, similar to the way '-O' works.
3881     '-Wstrict-aliasing' is equivalent to '-Wstrict-aliasing=3'.
3882
3883     Level 1: Most aggressive, quick, least accurate.  Possibly useful
3884     when higher levels do not warn but '-fstrict-aliasing' still breaks
3885     the code, as it has very few false negatives.  However, it has many
3886     false positives.  Warns for all pointer conversions between
3887     possibly incompatible types, even if never dereferenced.  Runs in
3888     the front end only.
3889
3890     Level 2: Aggressive, quick, not too precise.  May still have many
3891     false positives (not as many as level 1 though), and few false
3892     negatives (but possibly more than level 1).  Unlike level 1, it
3893     only warns when an address is taken.  Warns about incomplete types.
3894     Runs in the front end only.
3895
3896     Level 3 (default for '-Wstrict-aliasing'): Should have very few
3897     false positives and few false negatives.  Slightly slower than
3898     levels 1 or 2 when optimization is enabled.  Takes care of the
3899     common pun+dereference pattern in the front end:
3900     '*(int*)&some_float'.  If optimization is enabled, it also runs in
3901     the back end, where it deals with multiple statement cases using
3902     flow-sensitive points-to information.  Only warns when the
3903     converted pointer is dereferenced.  Does not warn about incomplete
3904     types.
3905
3906'-Wstrict-overflow'
3907'-Wstrict-overflow=N'
3908     This option is only active when '-fstrict-overflow' is active.  It
3909     warns about cases where the compiler optimizes based on the
3910     assumption that signed overflow does not occur.  Note that it does
3911     not warn about all cases where the code might overflow: it only
3912     warns about cases where the compiler implements some optimization.
3913     Thus this warning depends on the optimization level.
3914
3915     An optimization that assumes that signed overflow does not occur is
3916     perfectly safe if the values of the variables involved are such
3917     that overflow never does, in fact, occur.  Therefore this warning
3918     can easily give a false positive: a warning about code that is not
3919     actually a problem.  To help focus on important issues, several
3920     warning levels are defined.  No warnings are issued for the use of
3921     undefined signed overflow when estimating how many iterations a
3922     loop requires, in particular when determining whether a loop will
3923     be executed at all.
3924
3925     '-Wstrict-overflow=1'
3926          Warn about cases that are both questionable and easy to avoid.
3927          For example, with '-fstrict-overflow', the compiler simplifies
3928          'x + 1 > x' to '1'.  This level of '-Wstrict-overflow' is
3929          enabled by '-Wall'; higher levels are not, and must be
3930          explicitly requested.
3931
3932     '-Wstrict-overflow=2'
3933          Also warn about other cases where a comparison is simplified
3934          to a constant.  For example: 'abs (x) >= 0'.  This can only be
3935          simplified when '-fstrict-overflow' is in effect, because 'abs
3936          (INT_MIN)' overflows to 'INT_MIN', which is less than zero.
3937          '-Wstrict-overflow' (with no level) is the same as
3938          '-Wstrict-overflow=2'.
3939
3940     '-Wstrict-overflow=3'
3941          Also warn about other cases where a comparison is simplified.
3942          For example: 'x + 1 > 1' is simplified to 'x > 0'.
3943
3944     '-Wstrict-overflow=4'
3945          Also warn about other simplifications not covered by the above
3946          cases.  For example: '(x * 10) / 5' is simplified to 'x * 2'.
3947
3948     '-Wstrict-overflow=5'
3949          Also warn about cases where the compiler reduces the magnitude
3950          of a constant involved in a comparison.  For example: 'x + 2 >
3951          y' is simplified to 'x + 1 >= y'.  This is reported only at
3952          the highest warning level because this simplification applies
3953          to many comparisons, so this warning level gives a very large
3954          number of false positives.
3955
3956'-Wsuggest-attribute=[pure|const|noreturn|format]'
3957     Warn for cases where adding an attribute may be beneficial.  The
3958     attributes currently supported are listed below.
3959
3960     '-Wsuggest-attribute=pure'
3961     '-Wsuggest-attribute=const'
3962     '-Wsuggest-attribute=noreturn'
3963
3964          Warn about functions that might be candidates for attributes
3965          'pure', 'const' or 'noreturn'.  The compiler only warns for
3966          functions visible in other compilation units or (in the case
3967          of 'pure' and 'const') if it cannot prove that the function
3968          returns normally.  A function returns normally if it doesn't
3969          contain an infinite loop or return abnormally by throwing,
3970          calling 'abort()' or trapping.  This analysis requires option
3971          '-fipa-pure-const', which is enabled by default at '-O' and
3972          higher.  Higher optimization levels improve the accuracy of
3973          the analysis.
3974
3975     '-Wsuggest-attribute=format'
3976     '-Wmissing-format-attribute'
3977
3978          Warn about function pointers that might be candidates for
3979          'format' attributes.  Note these are only possible candidates,
3980          not absolute ones.  GCC guesses that function pointers with
3981          'format' attributes that are used in assignment,
3982          initialization, parameter passing or return statements should
3983          have a corresponding 'format' attribute in the resulting type.
3984          I.e. the left-hand side of the assignment or initialization,
3985          the type of the parameter variable, or the return type of the
3986          containing function respectively should also have a 'format'
3987          attribute to avoid the warning.
3988
3989          GCC also warns about function definitions that might be
3990          candidates for 'format' attributes.  Again, these are only
3991          possible candidates.  GCC guesses that 'format' attributes
3992          might be appropriate for any function that calls a function
3993          like 'vprintf' or 'vscanf', but this might not always be the
3994          case, and some functions for which 'format' attributes are
3995          appropriate may not be detected.
3996
3997'-Warray-bounds'
3998     This option is only active when '-ftree-vrp' is active (default for
3999     '-O2' and above).  It warns about subscripts to arrays that are
4000     always out of bounds.  This warning is enabled by '-Wall'.
4001
4002'-Wno-div-by-zero'
4003     Do not warn about compile-time integer division by zero.
4004     Floating-point division by zero is not warned about, as it can be a
4005     legitimate way of obtaining infinities and NaNs.
4006
4007'-Wsystem-headers'
4008     Print warning messages for constructs found in system header files.
4009     Warnings from system headers are normally suppressed, on the
4010     assumption that they usually do not indicate real problems and
4011     would only make the compiler output harder to read.  Using this
4012     command-line option tells GCC to emit warnings from system headers
4013     as if they occurred in user code.  However, note that using '-Wall'
4014     in conjunction with this option does _not_ warn about unknown
4015     pragmas in system headers--for that, '-Wunknown-pragmas' must also
4016     be used.
4017
4018'-Wtrampolines'
4019     Warn about trampolines generated for pointers to nested functions.
4020
4021     A trampoline is a small piece of data or code that is created at
4022     run time on the stack when the address of a nested function is
4023     taken, and is used to call the nested function indirectly.  For
4024     some targets, it is made up of data only and thus requires no
4025     special treatment.  But, for most targets, it is made up of code
4026     and thus requires the stack to be made executable in order for the
4027     program to work properly.
4028
4029'-Wfloat-equal'
4030     Warn if floating-point values are used in equality comparisons.
4031
4032     The idea behind this is that sometimes it is convenient (for the
4033     programmer) to consider floating-point values as approximations to
4034     infinitely precise real numbers.  If you are doing this, then you
4035     need to compute (by analyzing the code, or in some other way) the
4036     maximum or likely maximum error that the computation introduces,
4037     and allow for it when performing comparisons (and when producing
4038     output, but that's a different problem).  In particular, instead of
4039     testing for equality, you should check to see whether the two
4040     values have ranges that overlap; and this is done with the
4041     relational operators, so equality comparisons are probably
4042     mistaken.
4043
4044'-Wtraditional (C and Objective-C only)'
4045     Warn about certain constructs that behave differently in
4046     traditional and ISO C.  Also warn about ISO C constructs that have
4047     no traditional C equivalent, and/or problematic constructs that
4048     should be avoided.
4049
4050        * Macro parameters that appear within string literals in the
4051          macro body.  In traditional C macro replacement takes place
4052          within string literals, but in ISO C it does not.
4053
4054        * In traditional C, some preprocessor directives did not exist.
4055          Traditional preprocessors only considered a line to be a
4056          directive if the '#' appeared in column 1 on the line.
4057          Therefore '-Wtraditional' warns about directives that
4058          traditional C understands but ignores because the '#' does not
4059          appear as the first character on the line.  It also suggests
4060          you hide directives like '#pragma' not understood by
4061          traditional C by indenting them.  Some traditional
4062          implementations do not recognize '#elif', so this option
4063          suggests avoiding it altogether.
4064
4065        * A function-like macro that appears without arguments.
4066
4067        * The unary plus operator.
4068
4069        * The 'U' integer constant suffix, or the 'F' or 'L'
4070          floating-point constant suffixes.  (Traditional C does support
4071          the 'L' suffix on integer constants.)  Note, these suffixes
4072          appear in macros defined in the system headers of most modern
4073          systems, e.g. the '_MIN'/'_MAX' macros in '<limits.h>'.  Use
4074          of these macros in user code might normally lead to spurious
4075          warnings, however GCC's integrated preprocessor has enough
4076          context to avoid warning in these cases.
4077
4078        * A function declared external in one block and then used after
4079          the end of the block.
4080
4081        * A 'switch' statement has an operand of type 'long'.
4082
4083        * A non-'static' function declaration follows a 'static' one.
4084          This construct is not accepted by some traditional C
4085          compilers.
4086
4087        * The ISO type of an integer constant has a different width or
4088          signedness from its traditional type.  This warning is only
4089          issued if the base of the constant is ten.  I.e. hexadecimal
4090          or octal values, which typically represent bit patterns, are
4091          not warned about.
4092
4093        * Usage of ISO string concatenation is detected.
4094
4095        * Initialization of automatic aggregates.
4096
4097        * Identifier conflicts with labels.  Traditional C lacks a
4098          separate namespace for labels.
4099
4100        * Initialization of unions.  If the initializer is zero, the
4101          warning is omitted.  This is done under the assumption that
4102          the zero initializer in user code appears conditioned on e.g.
4103          '__STDC__' to avoid missing initializer warnings and relies on
4104          default initialization to zero in the traditional C case.
4105
4106        * Conversions by prototypes between fixed/floating-point values
4107          and vice versa.  The absence of these prototypes when
4108          compiling with traditional C causes serious problems.  This is
4109          a subset of the possible conversion warnings; for the full set
4110          use '-Wtraditional-conversion'.
4111
4112        * Use of ISO C style function definitions.  This warning
4113          intentionally is _not_ issued for prototype declarations or
4114          variadic functions because these ISO C features appear in your
4115          code when using libiberty's traditional C compatibility
4116          macros, 'PARAMS' and 'VPARAMS'.  This warning is also bypassed
4117          for nested functions because that feature is already a GCC
4118          extension and thus not relevant to traditional C
4119          compatibility.
4120
4121'-Wtraditional-conversion (C and Objective-C only)'
4122     Warn if a prototype causes a type conversion that is different from
4123     what would happen to the same argument in the absence of a
4124     prototype.  This includes conversions of fixed point to floating
4125     and vice versa, and conversions changing the width or signedness of
4126     a fixed-point argument except when the same as the default
4127     promotion.
4128
4129'-Wdeclaration-after-statement (C and Objective-C only)'
4130     Warn when a declaration is found after a statement in a block.
4131     This construct, known from C++, was introduced with ISO C99 and is
4132     by default allowed in GCC.  It is not supported by ISO C90 and was
4133     not supported by GCC versions before GCC 3.0.  *Note Mixed
4134     Declarations::.
4135
4136'-Wundef'
4137     Warn if an undefined identifier is evaluated in an '#if' directive.
4138
4139'-Wno-endif-labels'
4140     Do not warn whenever an '#else' or an '#endif' are followed by
4141     text.
4142
4143'-Wshadow'
4144     Warn whenever a local variable or type declaration shadows another
4145     variable, parameter, type, or class member (in C++), or whenever a
4146     built-in function is shadowed.  Note that in C++, the compiler
4147     warns if a local variable shadows an explicit typedef, but not if
4148     it shadows a struct/class/enum.
4149
4150'-Wlarger-than=LEN'
4151     Warn whenever an object of larger than LEN bytes is defined.
4152
4153'-Wframe-larger-than=LEN'
4154     Warn if the size of a function frame is larger than LEN bytes.  The
4155     computation done to determine the stack frame size is approximate
4156     and not conservative.  The actual requirements may be somewhat
4157     greater than LEN even if you do not get a warning.  In addition,
4158     any space allocated via 'alloca', variable-length arrays, or
4159     related constructs is not included by the compiler when determining
4160     whether or not to issue a warning.
4161
4162'-Wno-free-nonheap-object'
4163     Do not warn when attempting to free an object that was not
4164     allocated on the heap.
4165
4166'-Wstack-usage=LEN'
4167     Warn if the stack usage of a function might be larger than LEN
4168     bytes.  The computation done to determine the stack usage is
4169     conservative.  Any space allocated via 'alloca', variable-length
4170     arrays, or related constructs is included by the compiler when
4171     determining whether or not to issue a warning.
4172
4173     The message is in keeping with the output of '-fstack-usage'.
4174
4175        * If the stack usage is fully static but exceeds the specified
4176          amount, it's:
4177
4178                 warning: stack usage is 1120 bytes
4179        * If the stack usage is (partly) dynamic but bounded, it's:
4180
4181                 warning: stack usage might be 1648 bytes
4182        * If the stack usage is (partly) dynamic and not bounded, it's:
4183
4184                 warning: stack usage might be unbounded
4185
4186'-Wunsafe-loop-optimizations'
4187     Warn if the loop cannot be optimized because the compiler cannot
4188     assume anything on the bounds of the loop indices.  With
4189     '-funsafe-loop-optimizations' warn if the compiler makes such
4190     assumptions.
4191
4192'-Wno-pedantic-ms-format (MinGW targets only)'
4193     When used in combination with '-Wformat' and '-pedantic' without
4194     GNU extensions, this option disables the warnings about non-ISO
4195     'printf' / 'scanf' format width specifiers 'I32', 'I64', and 'I'
4196     used on Windows targets, which depend on the MS runtime.
4197
4198'-Wpointer-arith'
4199     Warn about anything that depends on the "size of" a function type
4200     or of 'void'.  GNU C assigns these types a size of 1, for
4201     convenience in calculations with 'void *' pointers and pointers to
4202     functions.  In C++, warn also when an arithmetic operation involves
4203     'NULL'.  This warning is also enabled by '-Wpedantic'.
4204
4205'-Wtype-limits'
4206     Warn if a comparison is always true or always false due to the
4207     limited range of the data type, but do not warn for constant
4208     expressions.  For example, warn if an unsigned variable is compared
4209     against zero with '<' or '>='.  This warning is also enabled by
4210     '-Wextra'.
4211
4212'-Wbad-function-cast (C and Objective-C only)'
4213     Warn whenever a function call is cast to a non-matching type.  For
4214     example, warn if 'int malloc()' is cast to 'anything *'.
4215
4216'-Wc++-compat (C and Objective-C only)'
4217     Warn about ISO C constructs that are outside of the common subset
4218     of ISO C and ISO C++, e.g. request for implicit conversion from
4219     'void *' to a pointer to non-'void' type.
4220
4221'-Wc++11-compat (C++ and Objective-C++ only)'
4222     Warn about C++ constructs whose meaning differs between ISO C++
4223     1998 and ISO C++ 2011, e.g., identifiers in ISO C++ 1998 that are
4224     keywords in ISO C++ 2011.  This warning turns on '-Wnarrowing' and
4225     is enabled by '-Wall'.
4226
4227'-Wcast-qual'
4228     Warn whenever a pointer is cast so as to remove a type qualifier
4229     from the target type.  For example, warn if a 'const char *' is
4230     cast to an ordinary 'char *'.
4231
4232     Also warn when making a cast that introduces a type qualifier in an
4233     unsafe way.  For example, casting 'char **' to 'const char **' is
4234     unsafe, as in this example:
4235
4236            /* p is char ** value.  */
4237            const char **q = (const char **) p;
4238            /* Assignment of readonly string to const char * is OK.  */
4239            *q = "string";
4240            /* Now char** pointer points to read-only memory.  */
4241            **p = 'b';
4242
4243'-Wcast-align'
4244     Warn whenever a pointer is cast such that the required alignment of
4245     the target is increased.  For example, warn if a 'char *' is cast
4246     to an 'int *' on machines where integers can only be accessed at
4247     two- or four-byte boundaries.
4248
4249'-Wwrite-strings'
4250     When compiling C, give string constants the type 'const
4251     char[LENGTH]' so that copying the address of one into a non-'const'
4252     'char *' pointer produces a warning.  These warnings help you find
4253     at compile time code that can try to write into a string constant,
4254     but only if you have been very careful about using 'const' in
4255     declarations and prototypes.  Otherwise, it is just a nuisance.
4256     This is why we did not make '-Wall' request these warnings.
4257
4258     When compiling C++, warn about the deprecated conversion from
4259     string literals to 'char *'.  This warning is enabled by default
4260     for C++ programs.
4261
4262'-Wclobbered'
4263     Warn for variables that might be changed by 'longjmp' or 'vfork'.
4264     This warning is also enabled by '-Wextra'.
4265
4266'-Wconditionally-supported (C++ and Objective-C++ only)'
4267     Warn for conditionally-supported (C++11 [intro.defs]) constructs.
4268
4269'-Wconversion'
4270     Warn for implicit conversions that may alter a value.  This
4271     includes conversions between real and integer, like 'abs (x)' when
4272     'x' is 'double'; conversions between signed and unsigned, like
4273     'unsigned ui = -1'; and conversions to smaller types, like 'sqrtf
4274     (M_PI)'.  Do not warn for explicit casts like 'abs ((int) x)' and
4275     'ui = (unsigned) -1', or if the value is not changed by the
4276     conversion like in 'abs (2.0)'.  Warnings about conversions between
4277     signed and unsigned integers can be disabled by using
4278     '-Wno-sign-conversion'.
4279
4280     For C++, also warn for confusing overload resolution for
4281     user-defined conversions; and conversions that never use a type
4282     conversion operator: conversions to 'void', the same type, a base
4283     class or a reference to them.  Warnings about conversions between
4284     signed and unsigned integers are disabled by default in C++ unless
4285     '-Wsign-conversion' is explicitly enabled.
4286
4287'-Wno-conversion-null (C++ and Objective-C++ only)'
4288     Do not warn for conversions between 'NULL' and non-pointer types.
4289     '-Wconversion-null' is enabled by default.
4290
4291'-Wzero-as-null-pointer-constant (C++ and Objective-C++ only)'
4292     Warn when a literal '0' is used as null pointer constant.  This can
4293     be useful to facilitate the conversion to 'nullptr' in C++11.
4294
4295'-Wdate-time'
4296     Warn when macros '__TIME__', '__DATE__' or '__TIMESTAMP__' are
4297     encountered as they might prevent bit-wise-identical reproducible
4298     compilations.
4299
4300'-Wdelete-incomplete (C++ and Objective-C++ only)'
4301     Warn when deleting a pointer to incomplete type, which may cause
4302     undefined behavior at runtime.  This warning is enabled by default.
4303
4304'-Wuseless-cast (C++ and Objective-C++ only)'
4305     Warn when an expression is casted to its own type.
4306
4307'-Wempty-body'
4308     Warn if an empty body occurs in an 'if', 'else' or 'do while'
4309     statement.  This warning is also enabled by '-Wextra'.
4310
4311'-Wenum-compare'
4312     Warn about a comparison between values of different enumerated
4313     types.  In C++ enumeral mismatches in conditional expressions are
4314     also diagnosed and the warning is enabled by default.  In C this
4315     warning is enabled by '-Wall'.
4316
4317'-Wjump-misses-init (C, Objective-C only)'
4318     Warn if a 'goto' statement or a 'switch' statement jumps forward
4319     across the initialization of a variable, or jumps backward to a
4320     label after the variable has been initialized.  This only warns
4321     about variables that are initialized when they are declared.  This
4322     warning is only supported for C and Objective-C; in C++ this sort
4323     of branch is an error in any case.
4324
4325     '-Wjump-misses-init' is included in '-Wc++-compat'.  It can be
4326     disabled with the '-Wno-jump-misses-init' option.
4327
4328'-Wsign-compare'
4329     Warn when a comparison between signed and unsigned values could
4330     produce an incorrect result when the signed value is converted to
4331     unsigned.  This warning is also enabled by '-Wextra'; to get the
4332     other warnings of '-Wextra' without this warning, use '-Wextra
4333     -Wno-sign-compare'.
4334
4335'-Wsign-conversion'
4336     Warn for implicit conversions that may change the sign of an
4337     integer value, like assigning a signed integer expression to an
4338     unsigned integer variable.  An explicit cast silences the warning.
4339     In C, this option is enabled also by '-Wconversion'.
4340
4341'-Wfloat-conversion'
4342     Warn for implicit conversions that reduce the precision of a real
4343     value.  This includes conversions from real to integer, and from
4344     higher precision real to lower precision real values.  This option
4345     is also enabled by '-Wconversion'.
4346
4347'-Wsizeof-pointer-memaccess'
4348     Warn for suspicious length parameters to certain string and memory
4349     built-in functions if the argument uses 'sizeof'.  This warning
4350     warns e.g. about 'memset (ptr, 0, sizeof (ptr));' if 'ptr' is not
4351     an array, but a pointer, and suggests a possible fix, or about
4352     'memcpy (&foo, ptr, sizeof (&foo));'.  This warning is enabled by
4353     '-Wall'.
4354
4355'-Waddress'
4356     Warn about suspicious uses of memory addresses.  These include
4357     using the address of a function in a conditional expression, such
4358     as 'void func(void); if (func)', and comparisons against the memory
4359     address of a string literal, such as 'if (x == "abc")'.  Such uses
4360     typically indicate a programmer error: the address of a function
4361     always evaluates to true, so their use in a conditional usually
4362     indicate that the programmer forgot the parentheses in a function
4363     call; and comparisons against string literals result in unspecified
4364     behavior and are not portable in C, so they usually indicate that
4365     the programmer intended to use 'strcmp'.  This warning is enabled
4366     by '-Wall'.
4367
4368'-Wlogical-op'
4369     Warn about suspicious uses of logical operators in expressions.
4370     This includes using logical operators in contexts where a bit-wise
4371     operator is likely to be expected.
4372
4373'-Waggregate-return'
4374     Warn if any functions that return structures or unions are defined
4375     or called.  (In languages where you can return an array, this also
4376     elicits a warning.)
4377
4378'-Wno-aggressive-loop-optimizations'
4379     Warn if in a loop with constant number of iterations the compiler
4380     detects undefined behavior in some statement during one or more of
4381     the iterations.
4382
4383'-Wno-attributes'
4384     Do not warn if an unexpected '__attribute__' is used, such as
4385     unrecognized attributes, function attributes applied to variables,
4386     etc.  This does not stop errors for incorrect use of supported
4387     attributes.
4388
4389'-Wno-builtin-macro-redefined'
4390     Do not warn if certain built-in macros are redefined.  This
4391     suppresses warnings for redefinition of '__TIMESTAMP__',
4392     '__TIME__', '__DATE__', '__FILE__', and '__BASE_FILE__'.
4393
4394'-Wstrict-prototypes (C and Objective-C only)'
4395     Warn if a function is declared or defined without specifying the
4396     argument types.  (An old-style function definition is permitted
4397     without a warning if preceded by a declaration that specifies the
4398     argument types.)
4399
4400'-Wold-style-declaration (C and Objective-C only)'
4401     Warn for obsolescent usages, according to the C Standard, in a
4402     declaration.  For example, warn if storage-class specifiers like
4403     'static' are not the first things in a declaration.  This warning
4404     is also enabled by '-Wextra'.
4405
4406'-Wold-style-definition (C and Objective-C only)'
4407     Warn if an old-style function definition is used.  A warning is
4408     given even if there is a previous prototype.
4409
4410'-Wmissing-parameter-type (C and Objective-C only)'
4411     A function parameter is declared without a type specifier in
4412     K&R-style functions:
4413
4414          void foo(bar) { }
4415
4416     This warning is also enabled by '-Wextra'.
4417
4418'-Wmissing-prototypes (C and Objective-C only)'
4419     Warn if a global function is defined without a previous prototype
4420     declaration.  This warning is issued even if the definition itself
4421     provides a prototype.  Use this option to detect global functions
4422     that do not have a matching prototype declaration in a header file.
4423     This option is not valid for C++ because all function declarations
4424     provide prototypes and a non-matching declaration will declare an
4425     overload rather than conflict with an earlier declaration.  Use
4426     '-Wmissing-declarations' to detect missing declarations in C++.
4427
4428'-Wmissing-declarations'
4429     Warn if a global function is defined without a previous
4430     declaration.  Do so even if the definition itself provides a
4431     prototype.  Use this option to detect global functions that are not
4432     declared in header files.  In C, no warnings are issued for
4433     functions with previous non-prototype declarations; use
4434     '-Wmissing-prototype' to detect missing prototypes.  In C++, no
4435     warnings are issued for function templates, or for inline
4436     functions, or for functions in anonymous namespaces.
4437
4438'-Wmissing-field-initializers'
4439     Warn if a structure's initializer has some fields missing.  For
4440     example, the following code causes such a warning, because 'x.h' is
4441     implicitly zero:
4442
4443          struct s { int f, g, h; };
4444          struct s x = { 3, 4 };
4445
4446     This option does not warn about designated initializers, so the
4447     following modification does not trigger a warning:
4448
4449          struct s { int f, g, h; };
4450          struct s x = { .f = 3, .g = 4 };
4451
4452     This warning is included in '-Wextra'.  To get other '-Wextra'
4453     warnings without this one, use '-Wextra
4454     -Wno-missing-field-initializers'.
4455
4456'-Wno-multichar'
4457     Do not warn if a multicharacter constant (''FOOF'') is used.
4458     Usually they indicate a typo in the user's code, as they have
4459     implementation-defined values, and should not be used in portable
4460     code.
4461
4462'-Wnormalized=<none|id|nfc|nfkc>'
4463     In ISO C and ISO C++, two identifiers are different if they are
4464     different sequences of characters.  However, sometimes when
4465     characters outside the basic ASCII character set are used, you can
4466     have two different character sequences that look the same.  To
4467     avoid confusion, the ISO 10646 standard sets out some
4468     "normalization rules" which when applied ensure that two sequences
4469     that look the same are turned into the same sequence.  GCC can warn
4470     you if you are using identifiers that have not been normalized;
4471     this option controls that warning.
4472
4473     There are four levels of warning supported by GCC.  The default is
4474     '-Wnormalized=nfc', which warns about any identifier that is not in
4475     the ISO 10646 "C" normalized form, "NFC". NFC is the recommended
4476     form for most uses.
4477
4478     Unfortunately, there are some characters allowed in identifiers by
4479     ISO C and ISO C++ that, when turned into NFC, are not allowed in
4480     identifiers.  That is, there's no way to use these symbols in
4481     portable ISO C or C++ and have all your identifiers in NFC.
4482     '-Wnormalized=id' suppresses the warning for these characters.  It
4483     is hoped that future versions of the standards involved will
4484     correct this, which is why this option is not the default.
4485
4486     You can switch the warning off for all characters by writing
4487     '-Wnormalized=none'.  You should only do this if you are using some
4488     other normalization scheme (like "D"), because otherwise you can
4489     easily create bugs that are literally impossible to see.
4490
4491     Some characters in ISO 10646 have distinct meanings but look
4492     identical in some fonts or display methodologies, especially once
4493     formatting has been applied.  For instance '\u207F', "SUPERSCRIPT
4494     LATIN SMALL LETTER N", displays just like a regular 'n' that has
4495     been placed in a superscript.  ISO 10646 defines the "NFKC"
4496     normalization scheme to convert all these into a standard form as
4497     well, and GCC warns if your code is not in NFKC if you use
4498     '-Wnormalized=nfkc'.  This warning is comparable to warning about
4499     every identifier that contains the letter O because it might be
4500     confused with the digit 0, and so is not the default, but may be
4501     useful as a local coding convention if the programming environment
4502     cannot be fixed to display these characters distinctly.
4503
4504'-Wno-deprecated'
4505     Do not warn about usage of deprecated features.  *Note Deprecated
4506     Features::.
4507
4508'-Wno-deprecated-declarations'
4509     Do not warn about uses of functions (*note Function Attributes::),
4510     variables (*note Variable Attributes::), and types (*note Type
4511     Attributes::) marked as deprecated by using the 'deprecated'
4512     attribute.
4513
4514'-Wno-overflow'
4515     Do not warn about compile-time overflow in constant expressions.
4516
4517'-Wopenmp-simd'
4518     Warn if the vectorizer cost model overrides the OpenMP or the Cilk
4519     Plus simd directive set by user.  The '-fsimd-cost-model=unlimited'
4520     can be used to relax the cost model.
4521
4522'-Woverride-init (C and Objective-C only)'
4523     Warn if an initialized field without side effects is overridden
4524     when using designated initializers (*note Designated Initializers:
4525     Designated Inits.).
4526
4527     This warning is included in '-Wextra'.  To get other '-Wextra'
4528     warnings without this one, use '-Wextra -Wno-override-init'.
4529
4530'-Wpacked'
4531     Warn if a structure is given the packed attribute, but the packed
4532     attribute has no effect on the layout or size of the structure.
4533     Such structures may be mis-aligned for little benefit.  For
4534     instance, in this code, the variable 'f.x' in 'struct bar' is
4535     misaligned even though 'struct bar' does not itself have the packed
4536     attribute:
4537
4538          struct foo {
4539            int x;
4540            char a, b, c, d;
4541          } __attribute__((packed));
4542          struct bar {
4543            char z;
4544            struct foo f;
4545          };
4546
4547'-Wpacked-bitfield-compat'
4548     The 4.1, 4.2 and 4.3 series of GCC ignore the 'packed' attribute on
4549     bit-fields of type 'char'.  This has been fixed in GCC 4.4 but the
4550     change can lead to differences in the structure layout.  GCC
4551     informs you when the offset of such a field has changed in GCC 4.4.
4552     For example there is no longer a 4-bit padding between field 'a'
4553     and 'b' in this structure:
4554
4555          struct foo
4556          {
4557            char a:4;
4558            char b:8;
4559          } __attribute__ ((packed));
4560
4561     This warning is enabled by default.  Use
4562     '-Wno-packed-bitfield-compat' to disable this warning.
4563
4564'-Wpadded'
4565     Warn if padding is included in a structure, either to align an
4566     element of the structure or to align the whole structure.
4567     Sometimes when this happens it is possible to rearrange the fields
4568     of the structure to reduce the padding and so make the structure
4569     smaller.
4570
4571'-Wredundant-decls'
4572     Warn if anything is declared more than once in the same scope, even
4573     in cases where multiple declaration is valid and changes nothing.
4574
4575'-Wnested-externs (C and Objective-C only)'
4576     Warn if an 'extern' declaration is encountered within a function.
4577
4578'-Wno-inherited-variadic-ctor'
4579     Suppress warnings about use of C++11 inheriting constructors when
4580     the base class inherited from has a C variadic constructor; the
4581     warning is on by default because the ellipsis is not inherited.
4582
4583'-Winline'
4584     Warn if a function that is declared as inline cannot be inlined.
4585     Even with this option, the compiler does not warn about failures to
4586     inline functions declared in system headers.
4587
4588     The compiler uses a variety of heuristics to determine whether or
4589     not to inline a function.  For example, the compiler takes into
4590     account the size of the function being inlined and the amount of
4591     inlining that has already been done in the current function.
4592     Therefore, seemingly insignificant changes in the source program
4593     can cause the warnings produced by '-Winline' to appear or
4594     disappear.
4595
4596'-Wno-invalid-offsetof (C++ and Objective-C++ only)'
4597     Suppress warnings from applying the 'offsetof' macro to a non-POD
4598     type.  According to the 1998 ISO C++ standard, applying 'offsetof'
4599     to a non-POD type is undefined.  In existing C++ implementations,
4600     however, 'offsetof' typically gives meaningful results even when
4601     applied to certain kinds of non-POD types (such as a simple
4602     'struct' that fails to be a POD type only by virtue of having a
4603     constructor).  This flag is for users who are aware that they are
4604     writing nonportable code and who have deliberately chosen to ignore
4605     the warning about it.
4606
4607     The restrictions on 'offsetof' may be relaxed in a future version
4608     of the C++ standard.
4609
4610'-Wno-int-to-pointer-cast'
4611     Suppress warnings from casts to pointer type of an integer of a
4612     different size.  In C++, casting to a pointer type of smaller size
4613     is an error.  'Wint-to-pointer-cast' is enabled by default.
4614
4615'-Wno-pointer-to-int-cast (C and Objective-C only)'
4616     Suppress warnings from casts from a pointer to an integer type of a
4617     different size.
4618
4619'-Winvalid-pch'
4620     Warn if a precompiled header (*note Precompiled Headers::) is found
4621     in the search path but can't be used.
4622
4623'-Wlong-long'
4624     Warn if 'long long' type is used.  This is enabled by either
4625     '-Wpedantic' or '-Wtraditional' in ISO C90 and C++98 modes.  To
4626     inhibit the warning messages, use '-Wno-long-long'.
4627
4628'-Wvariadic-macros'
4629     Warn if variadic macros are used in pedantic ISO C90 mode, or the
4630     GNU alternate syntax when in pedantic ISO C99 mode.  This is
4631     default.  To inhibit the warning messages, use
4632     '-Wno-variadic-macros'.
4633
4634'-Wvarargs'
4635     Warn upon questionable usage of the macros used to handle variable
4636     arguments like 'va_start'.  This is default.  To inhibit the
4637     warning messages, use '-Wno-varargs'.
4638
4639'-Wvector-operation-performance'
4640     Warn if vector operation is not implemented via SIMD capabilities
4641     of the architecture.  Mainly useful for the performance tuning.
4642     Vector operation can be implemented 'piecewise', which means that
4643     the scalar operation is performed on every vector element; 'in
4644     parallel', which means that the vector operation is implemented
4645     using scalars of wider type, which normally is more performance
4646     efficient; and 'as a single scalar', which means that vector fits
4647     into a scalar type.
4648
4649'-Wno-virtual-move-assign'
4650     Suppress warnings about inheriting from a virtual base with a
4651     non-trivial C++11 move assignment operator.  This is dangerous
4652     because if the virtual base is reachable along more than one path,
4653     it will be moved multiple times, which can mean both objects end up
4654     in the moved-from state.  If the move assignment operator is
4655     written to avoid moving from a moved-from object, this warning can
4656     be disabled.
4657
4658'-Wvla'
4659     Warn if variable length array is used in the code.  '-Wno-vla'
4660     prevents the '-Wpedantic' warning of the variable length array.
4661
4662'-Wvolatile-register-var'
4663     Warn if a register variable is declared volatile.  The volatile
4664     modifier does not inhibit all optimizations that may eliminate
4665     reads and/or writes to register variables.  This warning is enabled
4666     by '-Wall'.
4667
4668'-Wdisabled-optimization'
4669     Warn if a requested optimization pass is disabled.  This warning
4670     does not generally indicate that there is anything wrong with your
4671     code; it merely indicates that GCC's optimizers are unable to
4672     handle the code effectively.  Often, the problem is that your code
4673     is too big or too complex; GCC refuses to optimize programs when
4674     the optimization itself is likely to take inordinate amounts of
4675     time.
4676
4677'-Wpointer-sign (C and Objective-C only)'
4678     Warn for pointer argument passing or assignment with different
4679     signedness.  This option is only supported for C and Objective-C.
4680     It is implied by '-Wall' and by '-Wpedantic', which can be disabled
4681     with '-Wno-pointer-sign'.
4682
4683'-Wstack-protector'
4684     This option is only active when '-fstack-protector' is active.  It
4685     warns about functions that are not protected against stack
4686     smashing.
4687
4688'-Woverlength-strings'
4689     Warn about string constants that are longer than the "minimum
4690     maximum" length specified in the C standard.  Modern compilers
4691     generally allow string constants that are much longer than the
4692     standard's minimum limit, but very portable programs should avoid
4693     using longer strings.
4694
4695     The limit applies _after_ string constant concatenation, and does
4696     not count the trailing NUL.  In C90, the limit was 509 characters;
4697     in C99, it was raised to 4095.  C++98 does not specify a normative
4698     minimum maximum, so we do not diagnose overlength strings in C++.
4699
4700     This option is implied by '-Wpedantic', and can be disabled with
4701     '-Wno-overlength-strings'.
4702
4703'-Wunsuffixed-float-constants (C and Objective-C only)'
4704
4705     Issue a warning for any floating constant that does not have a
4706     suffix.  When used together with '-Wsystem-headers' it warns about
4707     such constants in system header files.  This can be useful when
4708     preparing code to use with the 'FLOAT_CONST_DECIMAL64' pragma from
4709     the decimal floating-point extension to C99.
4710
4711
4712File: gcc.info,  Node: Debugging Options,  Next: Optimize Options,  Prev: Warning Options,  Up: Invoking GCC
4713
47143.9 Options for Debugging Your Program or GCC
4715=============================================
4716
4717GCC has various special options that are used for debugging either your
4718program or GCC:
4719
4720'-g'
4721     Produce debugging information in the operating system's native
4722     format (stabs, COFF, XCOFF, or DWARF 2).  GDB can work with this
4723     debugging information.
4724
4725     On most systems that use stabs format, '-g' enables use of extra
4726     debugging information that only GDB can use; this extra information
4727     makes debugging work better in GDB but probably makes other
4728     debuggers crash or refuse to read the program.  If you want to
4729     control for certain whether to generate the extra information, use
4730     '-gstabs+', '-gstabs', '-gxcoff+', '-gxcoff', or '-gvms' (see
4731     below).
4732
4733     GCC allows you to use '-g' with '-O'.  The shortcuts taken by
4734     optimized code may occasionally produce surprising results: some
4735     variables you declared may not exist at all; flow of control may
4736     briefly move where you did not expect it; some statements may not
4737     be executed because they compute constant results or their values
4738     are already at hand; some statements may execute in different
4739     places because they have been moved out of loops.
4740
4741     Nevertheless it proves possible to debug optimized output.  This
4742     makes it reasonable to use the optimizer for programs that might
4743     have bugs.
4744
4745     The following options are useful when GCC is generated with the
4746     capability for more than one debugging format.
4747
4748'-gsplit-dwarf'
4749     Separate as much dwarf debugging information as possible into a
4750     separate output file with the extension .dwo.  This option allows
4751     the build system to avoid linking files with debug information.  To
4752     be useful, this option requires a debugger capable of reading .dwo
4753     files.
4754
4755'-ggdb'
4756     Produce debugging information for use by GDB.  This means to use
4757     the most expressive format available (DWARF 2, stabs, or the native
4758     format if neither of those are supported), including GDB extensions
4759     if at all possible.
4760
4761'-gpubnames'
4762     Generate dwarf .debug_pubnames and .debug_pubtypes sections.
4763
4764'-ggnu-pubnames'
4765     Generate .debug_pubnames and .debug_pubtypes sections in a format
4766     suitable for conversion into a GDB index.  This option is only
4767     useful with a linker that can produce GDB index version 7.
4768
4769'-gstabs'
4770     Produce debugging information in stabs format (if that is
4771     supported), without GDB extensions.  This is the format used by DBX
4772     on most BSD systems.  On MIPS, Alpha and System V Release 4 systems
4773     this option produces stabs debugging output that is not understood
4774     by DBX or SDB.  On System V Release 4 systems this option requires
4775     the GNU assembler.
4776
4777'-feliminate-unused-debug-symbols'
4778     Produce debugging information in stabs format (if that is
4779     supported), for only symbols that are actually used.
4780
4781'-femit-class-debug-always'
4782     Instead of emitting debugging information for a C++ class in only
4783     one object file, emit it in all object files using the class.  This
4784     option should be used only with debuggers that are unable to handle
4785     the way GCC normally emits debugging information for classes
4786     because using this option increases the size of debugging
4787     information by as much as a factor of two.
4788
4789'-fdebug-types-section'
4790     When using DWARF Version 4 or higher, type DIEs can be put into
4791     their own '.debug_types' section instead of making them part of the
4792     '.debug_info' section.  It is more efficient to put them in a
4793     separate comdat sections since the linker can then remove
4794     duplicates.  But not all DWARF consumers support '.debug_types'
4795     sections yet and on some objects '.debug_types' produces larger
4796     instead of smaller debugging information.
4797
4798'-gstabs+'
4799     Produce debugging information in stabs format (if that is
4800     supported), using GNU extensions understood only by the GNU
4801     debugger (GDB).  The use of these extensions is likely to make
4802     other debuggers crash or refuse to read the program.
4803
4804'-gcoff'
4805     Produce debugging information in COFF format (if that is
4806     supported).  This is the format used by SDB on most System V
4807     systems prior to System V Release 4.
4808
4809'-gxcoff'
4810     Produce debugging information in XCOFF format (if that is
4811     supported).  This is the format used by the DBX debugger on IBM
4812     RS/6000 systems.
4813
4814'-gxcoff+'
4815     Produce debugging information in XCOFF format (if that is
4816     supported), using GNU extensions understood only by the GNU
4817     debugger (GDB).  The use of these extensions is likely to make
4818     other debuggers crash or refuse to read the program, and may cause
4819     assemblers other than the GNU assembler (GAS) to fail with an
4820     error.
4821
4822'-gdwarf-VERSION'
4823     Produce debugging information in DWARF format (if that is
4824     supported).  The value of VERSION may be either 2, 3 or 4; the
4825     default version for most targets is 4.
4826
4827     Note that with DWARF Version 2, some ports require and always use
4828     some non-conflicting DWARF 3 extensions in the unwind tables.
4829
4830     Version 4 may require GDB 7.0 and '-fvar-tracking-assignments' for
4831     maximum benefit.
4832
4833'-grecord-gcc-switches'
4834     This switch causes the command-line options used to invoke the
4835     compiler that may affect code generation to be appended to the
4836     DW_AT_producer attribute in DWARF debugging information.  The
4837     options are concatenated with spaces separating them from each
4838     other and from the compiler version.  See also
4839     '-frecord-gcc-switches' for another way of storing compiler options
4840     into the object file.  This is the default.
4841
4842'-gno-record-gcc-switches'
4843     Disallow appending command-line options to the DW_AT_producer
4844     attribute in DWARF debugging information.
4845
4846'-gstrict-dwarf'
4847     Disallow using extensions of later DWARF standard version than
4848     selected with '-gdwarf-VERSION'.  On most targets using
4849     non-conflicting DWARF extensions from later standard versions is
4850     allowed.
4851
4852'-gno-strict-dwarf'
4853     Allow using extensions of later DWARF standard version than
4854     selected with '-gdwarf-VERSION'.
4855
4856'-gvms'
4857     Produce debugging information in Alpha/VMS debug format (if that is
4858     supported).  This is the format used by DEBUG on Alpha/VMS systems.
4859
4860'-gLEVEL'
4861'-ggdbLEVEL'
4862'-gstabsLEVEL'
4863'-gcoffLEVEL'
4864'-gxcoffLEVEL'
4865'-gvmsLEVEL'
4866     Request debugging information and also use LEVEL to specify how
4867     much information.  The default level is 2.
4868
4869     Level 0 produces no debug information at all.  Thus, '-g0' negates
4870     '-g'.
4871
4872     Level 1 produces minimal information, enough for making backtraces
4873     in parts of the program that you don't plan to debug.  This
4874     includes descriptions of functions and external variables, and line
4875     number tables, but no information about local variables.
4876
4877     Level 3 includes extra information, such as all the macro
4878     definitions present in the program.  Some debuggers support macro
4879     expansion when you use '-g3'.
4880
4881     '-gdwarf-2' does not accept a concatenated debug level, because GCC
4882     used to support an option '-gdwarf' that meant to generate debug
4883     information in version 1 of the DWARF format (which is very
4884     different from version 2), and it would have been too confusing.
4885     That debug format is long obsolete, but the option cannot be
4886     changed now.  Instead use an additional '-gLEVEL' option to change
4887     the debug level for DWARF.
4888
4889'-gtoggle'
4890     Turn off generation of debug info, if leaving out this option
4891     generates it, or turn it on at level 2 otherwise.  The position of
4892     this argument in the command line does not matter; it takes effect
4893     after all other options are processed, and it does so only once, no
4894     matter how many times it is given.  This is mainly intended to be
4895     used with '-fcompare-debug'.
4896
4897'-fsanitize=address'
4898     Enable AddressSanitizer, a fast memory error detector.  Memory
4899     access instructions will be instrumented to detect out-of-bounds
4900     and use-after-free bugs.  See
4901     <http://code.google.com/p/address-sanitizer/> for more details.
4902     The run-time behavior can be influenced using the 'ASAN_OPTIONS'
4903     environment variable; see
4904     <https://code.google.com/p/address-sanitizer/wiki/Flags#Run-time_flags>
4905     for a list of supported options.
4906
4907'-fsanitize=kernel-address'
4908     Enable AddressSanitizer for Linux kernel.  See
4909     <http://code.google.com/p/address-sanitizer/wiki/AddressSanitizerForKernel>
4910     for more details.
4911
4912'-fsanitize=thread'
4913     Enable ThreadSanitizer, a fast data race detector.  Memory access
4914     instructions will be instrumented to detect data race bugs.  See
4915     <http://code.google.com/p/thread-sanitizer/> for more details.  The
4916     run-time behavior can be influenced using the 'TSAN_OPTIONS'
4917     environment variable; see
4918     <https://code.google.com/p/thread-sanitizer/wiki/Flags> for a list
4919     of supported options.
4920
4921'-fsanitize=leak'
4922     Enable LeakSanitizer, a memory leak detector.  This option only
4923     matters for linking of executables and if neither
4924     '-fsanitize=address' nor '-fsanitize=thread' is used.  In that case
4925     it will link the executable against a library that overrides
4926     'malloc' and other allocator functions.  See
4927     <https://code.google.com/p/address-sanitizer/wiki/LeakSanitizer>
4928     for more details.  The run-time behavior can be influenced using
4929     the 'LSAN_OPTIONS' environment variable.
4930
4931'-fsanitize=undefined'
4932     Enable UndefinedBehaviorSanitizer, a fast undefined behavior
4933     detector.  Various computations will be instrumented to detect
4934     undefined behavior at runtime.  Current suboptions are:
4935
4936     '-fsanitize=shift'
4937
4938          This option enables checking that the result of a shift
4939          operation is not undefined.  Note that what exactly is
4940          considered undefined differs slightly between C and C++, as
4941          well as between ISO C90 and C99, etc.
4942
4943     '-fsanitize=integer-divide-by-zero'
4944
4945          Detect integer division by zero as well as 'INT_MIN / -1'
4946          division.
4947
4948     '-fsanitize=unreachable'
4949
4950          With this option, the compiler will turn the
4951          '__builtin_unreachable' call into a diagnostics message call
4952          instead.  When reaching the '__builtin_unreachable' call, the
4953          behavior is undefined.
4954
4955     '-fsanitize=vla-bound'
4956
4957          This option instructs the compiler to check that the size of a
4958          variable length array is positive.  This option does not have
4959          any effect in '-std=c++1y' mode, as the standard requires the
4960          exception be thrown instead.
4961
4962     '-fsanitize=null'
4963
4964          This option enables pointer checking.  Particularly, the
4965          application built with this option turned on will issue an
4966          error message when it tries to dereference a NULL pointer, or
4967          if a reference (possibly an rvalue reference) is bound to a
4968          NULL pointer.
4969
4970     '-fsanitize=return'
4971
4972          This option enables return statement checking.  Programs built
4973          with this option turned on will issue an error message when
4974          the end of a non-void function is reached without actually
4975          returning a value.  This option works in C++ only.
4976
4977     '-fsanitize=signed-integer-overflow'
4978
4979          This option enables signed integer overflow checking.  We
4980          check that the result of '+', '*', and both unary and binary
4981          '-' does not overflow in the signed arithmetics.  Note,
4982          integer promotion rules must be taken into account.  That is,
4983          the following is not an overflow:
4984               signed char a = SCHAR_MAX;
4985               a++;
4986
4987     While '-ftrapv' causes traps for signed overflows to be emitted,
4988     '-fsanitize=undefined' gives a diagnostic message.  This currently
4989     works only for the C family of languages.
4990
4991'-fdump-final-insns[=FILE]'
4992     Dump the final internal representation (RTL) to FILE.  If the
4993     optional argument is omitted (or if FILE is '.'), the name of the
4994     dump file is determined by appending '.gkd' to the compilation
4995     output file name.
4996
4997'-fcompare-debug[=OPTS]'
4998     If no error occurs during compilation, run the compiler a second
4999     time, adding OPTS and '-fcompare-debug-second' to the arguments
5000     passed to the second compilation.  Dump the final internal
5001     representation in both compilations, and print an error if they
5002     differ.
5003
5004     If the equal sign is omitted, the default '-gtoggle' is used.
5005
5006     The environment variable 'GCC_COMPARE_DEBUG', if defined, non-empty
5007     and nonzero, implicitly enables '-fcompare-debug'.  If
5008     'GCC_COMPARE_DEBUG' is defined to a string starting with a dash,
5009     then it is used for OPTS, otherwise the default '-gtoggle' is used.
5010
5011     '-fcompare-debug=', with the equal sign but without OPTS, is
5012     equivalent to '-fno-compare-debug', which disables the dumping of
5013     the final representation and the second compilation, preventing
5014     even 'GCC_COMPARE_DEBUG' from taking effect.
5015
5016     To verify full coverage during '-fcompare-debug' testing, set
5017     'GCC_COMPARE_DEBUG' to say '-fcompare-debug-not-overridden', which
5018     GCC rejects as an invalid option in any actual compilation (rather
5019     than preprocessing, assembly or linking).  To get just a warning,
5020     setting 'GCC_COMPARE_DEBUG' to '-w%n-fcompare-debug not overridden'
5021     will do.
5022
5023'-fcompare-debug-second'
5024     This option is implicitly passed to the compiler for the second
5025     compilation requested by '-fcompare-debug', along with options to
5026     silence warnings, and omitting other options that would cause
5027     side-effect compiler outputs to files or to the standard output.
5028     Dump files and preserved temporary files are renamed so as to
5029     contain the '.gk' additional extension during the second
5030     compilation, to avoid overwriting those generated by the first.
5031
5032     When this option is passed to the compiler driver, it causes the
5033     _first_ compilation to be skipped, which makes it useful for little
5034     other than debugging the compiler proper.
5035
5036'-feliminate-dwarf2-dups'
5037     Compress DWARF 2 debugging information by eliminating duplicated
5038     information about each symbol.  This option only makes sense when
5039     generating DWARF 2 debugging information with '-gdwarf-2'.
5040
5041'-femit-struct-debug-baseonly'
5042     Emit debug information for struct-like types only when the base
5043     name of the compilation source file matches the base name of file
5044     in which the struct is defined.
5045
5046     This option substantially reduces the size of debugging
5047     information, but at significant potential loss in type information
5048     to the debugger.  See '-femit-struct-debug-reduced' for a less
5049     aggressive option.  See '-femit-struct-debug-detailed' for more
5050     detailed control.
5051
5052     This option works only with DWARF 2.
5053
5054'-femit-struct-debug-reduced'
5055     Emit debug information for struct-like types only when the base
5056     name of the compilation source file matches the base name of file
5057     in which the type is defined, unless the struct is a template or
5058     defined in a system header.
5059
5060     This option significantly reduces the size of debugging
5061     information, with some potential loss in type information to the
5062     debugger.  See '-femit-struct-debug-baseonly' for a more aggressive
5063     option.  See '-femit-struct-debug-detailed' for more detailed
5064     control.
5065
5066     This option works only with DWARF 2.
5067
5068'-femit-struct-debug-detailed[=SPEC-LIST]'
5069     Specify the struct-like types for which the compiler generates
5070     debug information.  The intent is to reduce duplicate struct debug
5071     information between different object files within the same program.
5072
5073     This option is a detailed version of '-femit-struct-debug-reduced'
5074     and '-femit-struct-debug-baseonly', which serves for most needs.
5075
5076     A specification has the syntax
5077     ['dir:'|'ind:']['ord:'|'gen:']('any'|'sys'|'base'|'none')
5078
5079     The optional first word limits the specification to structs that
5080     are used directly ('dir:') or used indirectly ('ind:').  A struct
5081     type is used directly when it is the type of a variable, member.
5082     Indirect uses arise through pointers to structs.  That is, when use
5083     of an incomplete struct is valid, the use is indirect.  An example
5084     is 'struct one direct; struct two * indirect;'.
5085
5086     The optional second word limits the specification to ordinary
5087     structs ('ord:') or generic structs ('gen:').  Generic structs are
5088     a bit complicated to explain.  For C++, these are non-explicit
5089     specializations of template classes, or non-template classes within
5090     the above.  Other programming languages have generics, but
5091     '-femit-struct-debug-detailed' does not yet implement them.
5092
5093     The third word specifies the source files for those structs for
5094     which the compiler should emit debug information.  The values
5095     'none' and 'any' have the normal meaning.  The value 'base' means
5096     that the base of name of the file in which the type declaration
5097     appears must match the base of the name of the main compilation
5098     file.  In practice, this means that when compiling 'foo.c', debug
5099     information is generated for types declared in that file and
5100     'foo.h', but not other header files.  The value 'sys' means those
5101     types satisfying 'base' or declared in system or compiler headers.
5102
5103     You may need to experiment to determine the best settings for your
5104     application.
5105
5106     The default is '-femit-struct-debug-detailed=all'.
5107
5108     This option works only with DWARF 2.
5109
5110'-fno-merge-debug-strings'
5111     Direct the linker to not merge together strings in the debugging
5112     information that are identical in different object files.  Merging
5113     is not supported by all assemblers or linkers.  Merging decreases
5114     the size of the debug information in the output file at the cost of
5115     increasing link processing time.  Merging is enabled by default.
5116
5117'-fdebug-prefix-map=OLD=NEW'
5118     When compiling files in directory 'OLD', record debugging
5119     information describing them as in 'NEW' instead.
5120
5121'-fno-dwarf2-cfi-asm'
5122     Emit DWARF 2 unwind info as compiler generated '.eh_frame' section
5123     instead of using GAS '.cfi_*' directives.
5124
5125'-p'
5126     Generate extra code to write profile information suitable for the
5127     analysis program 'prof'.  You must use this option when compiling
5128     the source files you want data about, and you must also use it when
5129     linking.
5130
5131'-pg'
5132     Generate extra code to write profile information suitable for the
5133     analysis program 'gprof'.  You must use this option when compiling
5134     the source files you want data about, and you must also use it when
5135     linking.
5136
5137'-Q'
5138     Makes the compiler print out each function name as it is compiled,
5139     and print some statistics about each pass when it finishes.
5140
5141'-ftime-report'
5142     Makes the compiler print some statistics about the time consumed by
5143     each pass when it finishes.
5144
5145'-fmem-report'
5146     Makes the compiler print some statistics about permanent memory
5147     allocation when it finishes.
5148
5149'-fmem-report-wpa'
5150     Makes the compiler print some statistics about permanent memory
5151     allocation for the WPA phase only.
5152
5153'-fpre-ipa-mem-report'
5154'-fpost-ipa-mem-report'
5155     Makes the compiler print some statistics about permanent memory
5156     allocation before or after interprocedural optimization.
5157
5158'-fprofile-report'
5159     Makes the compiler print some statistics about consistency of the
5160     (estimated) profile and effect of individual passes.
5161
5162'-fstack-usage'
5163     Makes the compiler output stack usage information for the program,
5164     on a per-function basis.  The filename for the dump is made by
5165     appending '.su' to the AUXNAME.  AUXNAME is generated from the name
5166     of the output file, if explicitly specified and it is not an
5167     executable, otherwise it is the basename of the source file.  An
5168     entry is made up of three fields:
5169
5170        * The name of the function.
5171        * A number of bytes.
5172        * One or more qualifiers: 'static', 'dynamic', 'bounded'.
5173
5174     The qualifier 'static' means that the function manipulates the
5175     stack statically: a fixed number of bytes are allocated for the
5176     frame on function entry and released on function exit; no stack
5177     adjustments are otherwise made in the function.  The second field
5178     is this fixed number of bytes.
5179
5180     The qualifier 'dynamic' means that the function manipulates the
5181     stack dynamically: in addition to the static allocation described
5182     above, stack adjustments are made in the body of the function, for
5183     example to push/pop arguments around function calls.  If the
5184     qualifier 'bounded' is also present, the amount of these
5185     adjustments is bounded at compile time and the second field is an
5186     upper bound of the total amount of stack used by the function.  If
5187     it is not present, the amount of these adjustments is not bounded
5188     at compile time and the second field only represents the bounded
5189     part.
5190
5191'-fprofile-arcs'
5192     Add code so that program flow "arcs" are instrumented.  During
5193     execution the program records how many times each branch and call
5194     is executed and how many times it is taken or returns.  When the
5195     compiled program exits it saves this data to a file called
5196     'AUXNAME.gcda' for each source file.  The data may be used for
5197     profile-directed optimizations ('-fbranch-probabilities'), or for
5198     test coverage analysis ('-ftest-coverage').  Each object file's
5199     AUXNAME is generated from the name of the output file, if
5200     explicitly specified and it is not the final executable, otherwise
5201     it is the basename of the source file.  In both cases any suffix is
5202     removed (e.g. 'foo.gcda' for input file 'dir/foo.c', or
5203     'dir/foo.gcda' for output file specified as '-o dir/foo.o').  *Note
5204     Cross-profiling::.
5205
5206'--coverage'
5207
5208     This option is used to compile and link code instrumented for
5209     coverage analysis.  The option is a synonym for '-fprofile-arcs'
5210     '-ftest-coverage' (when compiling) and '-lgcov' (when linking).
5211     See the documentation for those options for more details.
5212
5213        * Compile the source files with '-fprofile-arcs' plus
5214          optimization and code generation options.  For test coverage
5215          analysis, use the additional '-ftest-coverage' option.  You do
5216          not need to profile every source file in a program.
5217
5218        * Link your object files with '-lgcov' or '-fprofile-arcs' (the
5219          latter implies the former).
5220
5221        * Run the program on a representative workload to generate the
5222          arc profile information.  This may be repeated any number of
5223          times.  You can run concurrent instances of your program, and
5224          provided that the file system supports locking, the data files
5225          will be correctly updated.  Also 'fork' calls are detected and
5226          correctly handled (double counting will not happen).
5227
5228        * For profile-directed optimizations, compile the source files
5229          again with the same optimization and code generation options
5230          plus '-fbranch-probabilities' (*note Options that Control
5231          Optimization: Optimize Options.).
5232
5233        * For test coverage analysis, use 'gcov' to produce human
5234          readable information from the '.gcno' and '.gcda' files.
5235          Refer to the 'gcov' documentation for further information.
5236
5237     With '-fprofile-arcs', for each function of your program GCC
5238     creates a program flow graph, then finds a spanning tree for the
5239     graph.  Only arcs that are not on the spanning tree have to be
5240     instrumented: the compiler adds code to count the number of times
5241     that these arcs are executed.  When an arc is the only exit or only
5242     entrance to a block, the instrumentation code can be added to the
5243     block; otherwise, a new basic block must be created to hold the
5244     instrumentation code.
5245
5246'-ftest-coverage'
5247     Produce a notes file that the 'gcov' code-coverage utility (*note
5248     'gcov'--a Test Coverage Program: Gcov.) can use to show program
5249     coverage.  Each source file's note file is called 'AUXNAME.gcno'.
5250     Refer to the '-fprofile-arcs' option above for a description of
5251     AUXNAME and instructions on how to generate test coverage data.
5252     Coverage data matches the source files more closely if you do not
5253     optimize.
5254
5255'-fdbg-cnt-list'
5256     Print the name and the counter upper bound for all debug counters.
5257
5258'-fdbg-cnt=COUNTER-VALUE-LIST'
5259     Set the internal debug counter upper bound.  COUNTER-VALUE-LIST is
5260     a comma-separated list of NAME:VALUE pairs which sets the upper
5261     bound of each debug counter NAME to VALUE.  All debug counters have
5262     the initial upper bound of 'UINT_MAX'; thus 'dbg_cnt()' returns
5263     true always unless the upper bound is set by this option.  For
5264     example, with '-fdbg-cnt=dce:10,tail_call:0', 'dbg_cnt(dce)'
5265     returns true only for first 10 invocations.
5266
5267'-fenable-KIND-PASS'
5268'-fdisable-KIND-PASS=RANGE-LIST'
5269
5270     This is a set of options that are used to explicitly disable/enable
5271     optimization passes.  These options are intended for use for
5272     debugging GCC. Compiler users should use regular options for
5273     enabling/disabling passes instead.
5274
5275     '-fdisable-ipa-PASS'
5276          Disable IPA pass PASS.  PASS is the pass name.  If the same
5277          pass is statically invoked in the compiler multiple times, the
5278          pass name should be appended with a sequential number starting
5279          from 1.
5280
5281     '-fdisable-rtl-PASS'
5282     '-fdisable-rtl-PASS=RANGE-LIST'
5283          Disable RTL pass PASS.  PASS is the pass name.  If the same
5284          pass is statically invoked in the compiler multiple times, the
5285          pass name should be appended with a sequential number starting
5286          from 1.  RANGE-LIST is a comma-separated list of function
5287          ranges or assembler names.  Each range is a number pair
5288          separated by a colon.  The range is inclusive in both ends.
5289          If the range is trivial, the number pair can be simplified as
5290          a single number.  If the function's call graph node's UID
5291          falls within one of the specified ranges, the PASS is disabled
5292          for that function.  The UID is shown in the function header of
5293          a dump file, and the pass names can be dumped by using option
5294          '-fdump-passes'.
5295
5296     '-fdisable-tree-PASS'
5297     '-fdisable-tree-PASS=RANGE-LIST'
5298          Disable tree pass PASS.  See '-fdisable-rtl' for the
5299          description of option arguments.
5300
5301     '-fenable-ipa-PASS'
5302          Enable IPA pass PASS.  PASS is the pass name.  If the same
5303          pass is statically invoked in the compiler multiple times, the
5304          pass name should be appended with a sequential number starting
5305          from 1.
5306
5307     '-fenable-rtl-PASS'
5308     '-fenable-rtl-PASS=RANGE-LIST'
5309          Enable RTL pass PASS.  See '-fdisable-rtl' for option argument
5310          description and examples.
5311
5312     '-fenable-tree-PASS'
5313     '-fenable-tree-PASS=RANGE-LIST'
5314          Enable tree pass PASS.  See '-fdisable-rtl' for the
5315          description of option arguments.
5316
5317     Here are some examples showing uses of these options.
5318
5319
5320          # disable ccp1 for all functions
5321             -fdisable-tree-ccp1
5322          # disable complete unroll for function whose cgraph node uid is 1
5323             -fenable-tree-cunroll=1
5324          # disable gcse2 for functions at the following ranges [1,1],
5325          # [300,400], and [400,1000]
5326          # disable gcse2 for functions foo and foo2
5327             -fdisable-rtl-gcse2=foo,foo2
5328          # disable early inlining
5329             -fdisable-tree-einline
5330          # disable ipa inlining
5331             -fdisable-ipa-inline
5332          # enable tree full unroll
5333             -fenable-tree-unroll
5334
5335
5336'-dLETTERS'
5337'-fdump-rtl-PASS'
5338'-fdump-rtl-PASS=FILENAME'
5339     Says to make debugging dumps during compilation at times specified
5340     by LETTERS.  This is used for debugging the RTL-based passes of the
5341     compiler.  The file names for most of the dumps are made by
5342     appending a pass number and a word to the DUMPNAME, and the files
5343     are created in the directory of the output file.  In case of
5344     '=FILENAME' option, the dump is output on the given file instead of
5345     the pass numbered dump files.  Note that the pass number is
5346     computed statically as passes get registered into the pass manager.
5347     Thus the numbering is not related to the dynamic order of execution
5348     of passes.  In particular, a pass installed by a plugin could have
5349     a number over 200 even if it executed quite early.  DUMPNAME is
5350     generated from the name of the output file, if explicitly specified
5351     and it is not an executable, otherwise it is the basename of the
5352     source file.  These switches may have different effects when '-E'
5353     is used for preprocessing.
5354
5355     Debug dumps can be enabled with a '-fdump-rtl' switch or some '-d'
5356     option LETTERS.  Here are the possible letters for use in PASS and
5357     LETTERS, and their meanings:
5358
5359     '-fdump-rtl-alignments'
5360          Dump after branch alignments have been computed.
5361
5362     '-fdump-rtl-asmcons'
5363          Dump after fixing rtl statements that have unsatisfied in/out
5364          constraints.
5365
5366     '-fdump-rtl-auto_inc_dec'
5367          Dump after auto-inc-dec discovery.  This pass is only run on
5368          architectures that have auto inc or auto dec instructions.
5369
5370     '-fdump-rtl-barriers'
5371          Dump after cleaning up the barrier instructions.
5372
5373     '-fdump-rtl-bbpart'
5374          Dump after partitioning hot and cold basic blocks.
5375
5376     '-fdump-rtl-bbro'
5377          Dump after block reordering.
5378
5379     '-fdump-rtl-btl1'
5380     '-fdump-rtl-btl2'
5381          '-fdump-rtl-btl1' and '-fdump-rtl-btl2' enable dumping after
5382          the two branch target load optimization passes.
5383
5384     '-fdump-rtl-bypass'
5385          Dump after jump bypassing and control flow optimizations.
5386
5387     '-fdump-rtl-combine'
5388          Dump after the RTL instruction combination pass.
5389
5390     '-fdump-rtl-compgotos'
5391          Dump after duplicating the computed gotos.
5392
5393     '-fdump-rtl-ce1'
5394     '-fdump-rtl-ce2'
5395     '-fdump-rtl-ce3'
5396          '-fdump-rtl-ce1', '-fdump-rtl-ce2', and '-fdump-rtl-ce3'
5397          enable dumping after the three if conversion passes.
5398
5399     '-fdump-rtl-cprop_hardreg'
5400          Dump after hard register copy propagation.
5401
5402     '-fdump-rtl-csa'
5403          Dump after combining stack adjustments.
5404
5405     '-fdump-rtl-cse1'
5406     '-fdump-rtl-cse2'
5407          '-fdump-rtl-cse1' and '-fdump-rtl-cse2' enable dumping after
5408          the two common subexpression elimination passes.
5409
5410     '-fdump-rtl-dce'
5411          Dump after the standalone dead code elimination passes.
5412
5413     '-fdump-rtl-dbr'
5414          Dump after delayed branch scheduling.
5415
5416     '-fdump-rtl-dce1'
5417     '-fdump-rtl-dce2'
5418          '-fdump-rtl-dce1' and '-fdump-rtl-dce2' enable dumping after
5419          the two dead store elimination passes.
5420
5421     '-fdump-rtl-eh'
5422          Dump after finalization of EH handling code.
5423
5424     '-fdump-rtl-eh_ranges'
5425          Dump after conversion of EH handling range regions.
5426
5427     '-fdump-rtl-expand'
5428          Dump after RTL generation.
5429
5430     '-fdump-rtl-fwprop1'
5431     '-fdump-rtl-fwprop2'
5432          '-fdump-rtl-fwprop1' and '-fdump-rtl-fwprop2' enable dumping
5433          after the two forward propagation passes.
5434
5435     '-fdump-rtl-gcse1'
5436     '-fdump-rtl-gcse2'
5437          '-fdump-rtl-gcse1' and '-fdump-rtl-gcse2' enable dumping after
5438          global common subexpression elimination.
5439
5440     '-fdump-rtl-init-regs'
5441          Dump after the initialization of the registers.
5442
5443     '-fdump-rtl-initvals'
5444          Dump after the computation of the initial value sets.
5445
5446     '-fdump-rtl-into_cfglayout'
5447          Dump after converting to cfglayout mode.
5448
5449     '-fdump-rtl-ira'
5450          Dump after iterated register allocation.
5451
5452     '-fdump-rtl-jump'
5453          Dump after the second jump optimization.
5454
5455     '-fdump-rtl-loop2'
5456          '-fdump-rtl-loop2' enables dumping after the rtl loop
5457          optimization passes.
5458
5459     '-fdump-rtl-mach'
5460          Dump after performing the machine dependent reorganization
5461          pass, if that pass exists.
5462
5463     '-fdump-rtl-mode_sw'
5464          Dump after removing redundant mode switches.
5465
5466     '-fdump-rtl-rnreg'
5467          Dump after register renumbering.
5468
5469     '-fdump-rtl-outof_cfglayout'
5470          Dump after converting from cfglayout mode.
5471
5472     '-fdump-rtl-peephole2'
5473          Dump after the peephole pass.
5474
5475     '-fdump-rtl-postreload'
5476          Dump after post-reload optimizations.
5477
5478     '-fdump-rtl-pro_and_epilogue'
5479          Dump after generating the function prologues and epilogues.
5480
5481     '-fdump-rtl-sched1'
5482     '-fdump-rtl-sched2'
5483          '-fdump-rtl-sched1' and '-fdump-rtl-sched2' enable dumping
5484          after the basic block scheduling passes.
5485
5486     '-fdump-rtl-ree'
5487          Dump after sign/zero extension elimination.
5488
5489     '-fdump-rtl-seqabstr'
5490          Dump after common sequence discovery.
5491
5492     '-fdump-rtl-shorten'
5493          Dump after shortening branches.
5494
5495     '-fdump-rtl-sibling'
5496          Dump after sibling call optimizations.
5497
5498     '-fdump-rtl-split1'
5499     '-fdump-rtl-split2'
5500     '-fdump-rtl-split3'
5501     '-fdump-rtl-split4'
5502     '-fdump-rtl-split5'
5503          '-fdump-rtl-split1', '-fdump-rtl-split2', '-fdump-rtl-split3',
5504          '-fdump-rtl-split4' and '-fdump-rtl-split5' enable dumping
5505          after five rounds of instruction splitting.
5506
5507     '-fdump-rtl-sms'
5508          Dump after modulo scheduling.  This pass is only run on some
5509          architectures.
5510
5511     '-fdump-rtl-stack'
5512          Dump after conversion from GCC's "flat register file"
5513          registers to the x87's stack-like registers.  This pass is
5514          only run on x86 variants.
5515
5516     '-fdump-rtl-subreg1'
5517     '-fdump-rtl-subreg2'
5518          '-fdump-rtl-subreg1' and '-fdump-rtl-subreg2' enable dumping
5519          after the two subreg expansion passes.
5520
5521     '-fdump-rtl-unshare'
5522          Dump after all rtl has been unshared.
5523
5524     '-fdump-rtl-vartrack'
5525          Dump after variable tracking.
5526
5527     '-fdump-rtl-vregs'
5528          Dump after converting virtual registers to hard registers.
5529
5530     '-fdump-rtl-web'
5531          Dump after live range splitting.
5532
5533     '-fdump-rtl-regclass'
5534     '-fdump-rtl-subregs_of_mode_init'
5535     '-fdump-rtl-subregs_of_mode_finish'
5536     '-fdump-rtl-dfinit'
5537     '-fdump-rtl-dfinish'
5538          These dumps are defined but always produce empty files.
5539
5540     '-da'
5541     '-fdump-rtl-all'
5542          Produce all the dumps listed above.
5543
5544     '-dA'
5545          Annotate the assembler output with miscellaneous debugging
5546          information.
5547
5548     '-dD'
5549          Dump all macro definitions, at the end of preprocessing, in
5550          addition to normal output.
5551
5552     '-dH'
5553          Produce a core dump whenever an error occurs.
5554
5555     '-dp'
5556          Annotate the assembler output with a comment indicating which
5557          pattern and alternative is used.  The length of each
5558          instruction is also printed.
5559
5560     '-dP'
5561          Dump the RTL in the assembler output as a comment before each
5562          instruction.  Also turns on '-dp' annotation.
5563
5564     '-dx'
5565          Just generate RTL for a function instead of compiling it.
5566          Usually used with '-fdump-rtl-expand'.
5567
5568'-fdump-noaddr'
5569     When doing debugging dumps, suppress address output.  This makes it
5570     more feasible to use diff on debugging dumps for compiler
5571     invocations with different compiler binaries and/or different text
5572     / bss / data / heap / stack / dso start locations.
5573
5574'-fdump-unnumbered'
5575     When doing debugging dumps, suppress instruction numbers and
5576     address output.  This makes it more feasible to use diff on
5577     debugging dumps for compiler invocations with different options, in
5578     particular with and without '-g'.
5579
5580'-fdump-unnumbered-links'
5581     When doing debugging dumps (see '-d' option above), suppress
5582     instruction numbers for the links to the previous and next
5583     instructions in a sequence.
5584
5585'-fdump-translation-unit (C++ only)'
5586'-fdump-translation-unit-OPTIONS (C++ only)'
5587     Dump a representation of the tree structure for the entire
5588     translation unit to a file.  The file name is made by appending
5589     '.tu' to the source file name, and the file is created in the same
5590     directory as the output file.  If the '-OPTIONS' form is used,
5591     OPTIONS controls the details of the dump as described for the
5592     '-fdump-tree' options.
5593
5594'-fdump-class-hierarchy (C++ only)'
5595'-fdump-class-hierarchy-OPTIONS (C++ only)'
5596     Dump a representation of each class's hierarchy and virtual
5597     function table layout to a file.  The file name is made by
5598     appending '.class' to the source file name, and the file is created
5599     in the same directory as the output file.  If the '-OPTIONS' form
5600     is used, OPTIONS controls the details of the dump as described for
5601     the '-fdump-tree' options.
5602
5603'-fdump-ipa-SWITCH'
5604     Control the dumping at various stages of inter-procedural analysis
5605     language tree to a file.  The file name is generated by appending a
5606     switch specific suffix to the source file name, and the file is
5607     created in the same directory as the output file.  The following
5608     dumps are possible:
5609
5610     'all'
5611          Enables all inter-procedural analysis dumps.
5612
5613     'cgraph'
5614          Dumps information about call-graph optimization, unused
5615          function removal, and inlining decisions.
5616
5617     'inline'
5618          Dump after function inlining.
5619
5620'-fdump-passes'
5621     Dump the list of optimization passes that are turned on and off by
5622     the current command-line options.
5623
5624'-fdump-statistics-OPTION'
5625     Enable and control dumping of pass statistics in a separate file.
5626     The file name is generated by appending a suffix ending in
5627     '.statistics' to the source file name, and the file is created in
5628     the same directory as the output file.  If the '-OPTION' form is
5629     used, '-stats' causes counters to be summed over the whole
5630     compilation unit while '-details' dumps every event as the passes
5631     generate them.  The default with no option is to sum counters for
5632     each function compiled.
5633
5634'-fdump-tree-SWITCH'
5635'-fdump-tree-SWITCH-OPTIONS'
5636'-fdump-tree-SWITCH-OPTIONS=FILENAME'
5637     Control the dumping at various stages of processing the
5638     intermediate language tree to a file.  The file name is generated
5639     by appending a switch-specific suffix to the source file name, and
5640     the file is created in the same directory as the output file.  In
5641     case of '=FILENAME' option, the dump is output on the given file
5642     instead of the auto named dump files.  If the '-OPTIONS' form is
5643     used, OPTIONS is a list of '-' separated options which control the
5644     details of the dump.  Not all options are applicable to all dumps;
5645     those that are not meaningful are ignored.  The following options
5646     are available
5647
5648     'address'
5649          Print the address of each node.  Usually this is not
5650          meaningful as it changes according to the environment and
5651          source file.  Its primary use is for tying up a dump file with
5652          a debug environment.
5653     'asmname'
5654          If 'DECL_ASSEMBLER_NAME' has been set for a given decl, use
5655          that in the dump instead of 'DECL_NAME'.  Its primary use is
5656          ease of use working backward from mangled names in the
5657          assembly file.
5658     'slim'
5659          When dumping front-end intermediate representations, inhibit
5660          dumping of members of a scope or body of a function merely
5661          because that scope has been reached.  Only dump such items
5662          when they are directly reachable by some other path.
5663
5664          When dumping pretty-printed trees, this option inhibits
5665          dumping the bodies of control structures.
5666
5667          When dumping RTL, print the RTL in slim (condensed) form
5668          instead of the default LISP-like representation.
5669     'raw'
5670          Print a raw representation of the tree.  By default, trees are
5671          pretty-printed into a C-like representation.
5672     'details'
5673          Enable more detailed dumps (not honored by every dump option).
5674          Also include information from the optimization passes.
5675     'stats'
5676          Enable dumping various statistics about the pass (not honored
5677          by every dump option).
5678     'blocks'
5679          Enable showing basic block boundaries (disabled in raw dumps).
5680     'graph'
5681          For each of the other indicated dump files
5682          ('-fdump-rtl-PASS'), dump a representation of the control flow
5683          graph suitable for viewing with GraphViz to
5684          'FILE.PASSID.PASS.dot'.  Each function in the file is
5685          pretty-printed as a subgraph, so that GraphViz can render them
5686          all in a single plot.
5687
5688          This option currently only works for RTL dumps, and the RTL is
5689          always dumped in slim form.
5690     'vops'
5691          Enable showing virtual operands for every statement.
5692     'lineno'
5693          Enable showing line numbers for statements.
5694     'uid'
5695          Enable showing the unique ID ('DECL_UID') for each variable.
5696     'verbose'
5697          Enable showing the tree dump for each statement.
5698     'eh'
5699          Enable showing the EH region number holding each statement.
5700     'scev'
5701          Enable showing scalar evolution analysis details.
5702     'optimized'
5703          Enable showing optimization information (only available in
5704          certain passes).
5705     'missed'
5706          Enable showing missed optimization information (only available
5707          in certain passes).
5708     'notes'
5709          Enable other detailed optimization information (only available
5710          in certain passes).
5711     '=FILENAME'
5712          Instead of an auto named dump file, output into the given file
5713          name.  The file names 'stdout' and 'stderr' are treated
5714          specially and are considered already open standard streams.
5715          For example,
5716
5717               gcc -O2 -ftree-vectorize -fdump-tree-vect-blocks=foo.dump
5718                    -fdump-tree-pre=stderr file.c
5719
5720          outputs vectorizer dump into 'foo.dump', while the PRE dump is
5721          output on to 'stderr'.  If two conflicting dump filenames are
5722          given for the same pass, then the latter option overrides the
5723          earlier one.
5724
5725     'all'
5726          Turn on all options, except 'raw', 'slim', 'verbose' and
5727          'lineno'.
5728
5729     'optall'
5730          Turn on all optimization options, i.e., 'optimized', 'missed',
5731          and 'note'.
5732
5733     The following tree dumps are possible:
5734
5735     'original'
5736          Dump before any tree based optimization, to 'FILE.original'.
5737
5738     'optimized'
5739          Dump after all tree based optimization, to 'FILE.optimized'.
5740
5741     'gimple'
5742          Dump each function before and after the gimplification pass to
5743          a file.  The file name is made by appending '.gimple' to the
5744          source file name.
5745
5746     'cfg'
5747          Dump the control flow graph of each function to a file.  The
5748          file name is made by appending '.cfg' to the source file name.
5749
5750     'ch'
5751          Dump each function after copying loop headers.  The file name
5752          is made by appending '.ch' to the source file name.
5753
5754     'ssa'
5755          Dump SSA related information to a file.  The file name is made
5756          by appending '.ssa' to the source file name.
5757
5758     'alias'
5759          Dump aliasing information for each function.  The file name is
5760          made by appending '.alias' to the source file name.
5761
5762     'ccp'
5763          Dump each function after CCP.  The file name is made by
5764          appending '.ccp' to the source file name.
5765
5766     'storeccp'
5767          Dump each function after STORE-CCP.  The file name is made by
5768          appending '.storeccp' to the source file name.
5769
5770     'pre'
5771          Dump trees after partial redundancy elimination.  The file
5772          name is made by appending '.pre' to the source file name.
5773
5774     'fre'
5775          Dump trees after full redundancy elimination.  The file name
5776          is made by appending '.fre' to the source file name.
5777
5778     'copyprop'
5779          Dump trees after copy propagation.  The file name is made by
5780          appending '.copyprop' to the source file name.
5781
5782     'store_copyprop'
5783          Dump trees after store copy-propagation.  The file name is
5784          made by appending '.store_copyprop' to the source file name.
5785
5786     'dce'
5787          Dump each function after dead code elimination.  The file name
5788          is made by appending '.dce' to the source file name.
5789
5790     'sra'
5791          Dump each function after performing scalar replacement of
5792          aggregates.  The file name is made by appending '.sra' to the
5793          source file name.
5794
5795     'sink'
5796          Dump each function after performing code sinking.  The file
5797          name is made by appending '.sink' to the source file name.
5798
5799     'dom'
5800          Dump each function after applying dominator tree
5801          optimizations.  The file name is made by appending '.dom' to
5802          the source file name.
5803
5804     'dse'
5805          Dump each function after applying dead store elimination.  The
5806          file name is made by appending '.dse' to the source file name.
5807
5808     'phiopt'
5809          Dump each function after optimizing PHI nodes into
5810          straightline code.  The file name is made by appending
5811          '.phiopt' to the source file name.
5812
5813     'forwprop'
5814          Dump each function after forward propagating single use
5815          variables.  The file name is made by appending '.forwprop' to
5816          the source file name.
5817
5818     'copyrename'
5819          Dump each function after applying the copy rename
5820          optimization.  The file name is made by appending
5821          '.copyrename' to the source file name.
5822
5823     'nrv'
5824          Dump each function after applying the named return value
5825          optimization on generic trees.  The file name is made by
5826          appending '.nrv' to the source file name.
5827
5828     'vect'
5829          Dump each function after applying vectorization of loops.  The
5830          file name is made by appending '.vect' to the source file
5831          name.
5832
5833     'slp'
5834          Dump each function after applying vectorization of basic
5835          blocks.  The file name is made by appending '.slp' to the
5836          source file name.
5837
5838     'vrp'
5839          Dump each function after Value Range Propagation (VRP). The
5840          file name is made by appending '.vrp' to the source file name.
5841
5842     'all'
5843          Enable all the available tree dumps with the flags provided in
5844          this option.
5845
5846'-fopt-info'
5847'-fopt-info-OPTIONS'
5848'-fopt-info-OPTIONS=FILENAME'
5849     Controls optimization dumps from various optimization passes.  If
5850     the '-OPTIONS' form is used, OPTIONS is a list of '-' separated
5851     options to select the dump details and optimizations.  If OPTIONS
5852     is not specified, it defaults to 'optimized' for details and
5853     'optall' for optimization groups.  If the FILENAME is not
5854     specified, it defaults to 'stderr'.  Note that the output FILENAME
5855     will be overwritten in case of multiple translation units.  If a
5856     combined output from multiple translation units is desired,
5857     'stderr' should be used instead.
5858
5859     The options can be divided into two groups, 1) options describing
5860     the verbosity of the dump, and 2) options describing which
5861     optimizations should be included.  The options from both the groups
5862     can be freely mixed as they are non-overlapping.  However, in case
5863     of any conflicts, the latter options override the earlier options
5864     on the command line.  Though multiple -fopt-info options are
5865     accepted, only one of them can have '=filename'.  If other
5866     filenames are provided then all but the first one are ignored.
5867
5868     The dump verbosity has the following options
5869
5870     'optimized'
5871          Print information when an optimization is successfully
5872          applied.  It is up to a pass to decide which information is
5873          relevant.  For example, the vectorizer passes print the source
5874          location of loops which got successfully vectorized.
5875     'missed'
5876          Print information about missed optimizations.  Individual
5877          passes control which information to include in the output.
5878          For example,
5879
5880               gcc -O2 -ftree-vectorize -fopt-info-vec-missed
5881
5882          will print information about missed optimization opportunities
5883          from vectorization passes on stderr.
5884     'note'
5885          Print verbose information about optimizations, such as certain
5886          transformations, more detailed messages about decisions etc.
5887     'all'
5888          Print detailed optimization information.  This includes
5889          OPTIMIZED, MISSED, and NOTE.
5890
5891     The second set of options describes a group of optimizations and
5892     may include one or more of the following.
5893
5894     'ipa'
5895          Enable dumps from all interprocedural optimizations.
5896     'loop'
5897          Enable dumps from all loop optimizations.
5898     'inline'
5899          Enable dumps from all inlining optimizations.
5900     'vec'
5901          Enable dumps from all vectorization optimizations.
5902     'optall'
5903          Enable dumps from all optimizations.  This is a superset of
5904          the optimization groups listed above.
5905
5906     For example,
5907          gcc -O3 -fopt-info-missed=missed.all
5908
5909     outputs missed optimization report from all the passes into
5910     'missed.all'.
5911
5912     As another example,
5913          gcc -O3 -fopt-info-inline-optimized-missed=inline.txt
5914
5915     will output information about missed optimizations as well as
5916     optimized locations from all the inlining passes into 'inline.txt'.
5917
5918     If the FILENAME is provided, then the dumps from all the applicable
5919     optimizations are concatenated into the 'filename'.  Otherwise the
5920     dump is output onto 'stderr'.  If OPTIONS is omitted, it defaults
5921     to 'all-optall', which means dump all available optimization info
5922     from all the passes.  In the following example, all optimization
5923     info is output on to 'stderr'.
5924
5925          gcc -O3 -fopt-info
5926
5927     Note that '-fopt-info-vec-missed' behaves the same as
5928     '-fopt-info-missed-vec'.
5929
5930     As another example, consider
5931
5932          gcc -fopt-info-vec-missed=vec.miss -fopt-info-loop-optimized=loop.opt
5933
5934     Here the two output filenames 'vec.miss' and 'loop.opt' are in
5935     conflict since only one output file is allowed.  In this case, only
5936     the first option takes effect and the subsequent options are
5937     ignored.  Thus only the 'vec.miss' is produced which contains dumps
5938     from the vectorizer about missed opportunities.
5939
5940'-frandom-seed=STRING'
5941     This option provides a seed that GCC uses in place of random
5942     numbers in generating certain symbol names that have to be
5943     different in every compiled file.  It is also used to place unique
5944     stamps in coverage data files and the object files that produce
5945     them.  You can use the '-frandom-seed' option to produce
5946     reproducibly identical object files.
5947
5948     The STRING should be different for every file you compile.
5949
5950'-fsched-verbose=N'
5951     On targets that use instruction scheduling, this option controls
5952     the amount of debugging output the scheduler prints.  This
5953     information is written to standard error, unless
5954     '-fdump-rtl-sched1' or '-fdump-rtl-sched2' is specified, in which
5955     case it is output to the usual dump listing file, '.sched1' or
5956     '.sched2' respectively.  However for N greater than nine, the
5957     output is always printed to standard error.
5958
5959     For N greater than zero, '-fsched-verbose' outputs the same
5960     information as '-fdump-rtl-sched1' and '-fdump-rtl-sched2'.  For N
5961     greater than one, it also output basic block probabilities,
5962     detailed ready list information and unit/insn info.  For N greater
5963     than two, it includes RTL at abort point, control-flow and regions
5964     info.  And for N over four, '-fsched-verbose' also includes
5965     dependence info.
5966
5967'-save-temps'
5968'-save-temps=cwd'
5969     Store the usual "temporary" intermediate files permanently; place
5970     them in the current directory and name them based on the source
5971     file.  Thus, compiling 'foo.c' with '-c -save-temps' produces files
5972     'foo.i' and 'foo.s', as well as 'foo.o'.  This creates a
5973     preprocessed 'foo.i' output file even though the compiler now
5974     normally uses an integrated preprocessor.
5975
5976     When used in combination with the '-x' command-line option,
5977     '-save-temps' is sensible enough to avoid over writing an input
5978     source file with the same extension as an intermediate file.  The
5979     corresponding intermediate file may be obtained by renaming the
5980     source file before using '-save-temps'.
5981
5982     If you invoke GCC in parallel, compiling several different source
5983     files that share a common base name in different subdirectories or
5984     the same source file compiled for multiple output destinations, it
5985     is likely that the different parallel compilers will interfere with
5986     each other, and overwrite the temporary files.  For instance:
5987
5988          gcc -save-temps -o outdir1/foo.o indir1/foo.c&
5989          gcc -save-temps -o outdir2/foo.o indir2/foo.c&
5990
5991     may result in 'foo.i' and 'foo.o' being written to simultaneously
5992     by both compilers.
5993
5994'-save-temps=obj'
5995     Store the usual "temporary" intermediate files permanently.  If the
5996     '-o' option is used, the temporary files are based on the object
5997     file.  If the '-o' option is not used, the '-save-temps=obj' switch
5998     behaves like '-save-temps'.
5999
6000     For example:
6001
6002          gcc -save-temps=obj -c foo.c
6003          gcc -save-temps=obj -c bar.c -o dir/xbar.o
6004          gcc -save-temps=obj foobar.c -o dir2/yfoobar
6005
6006     creates 'foo.i', 'foo.s', 'dir/xbar.i', 'dir/xbar.s',
6007     'dir2/yfoobar.i', 'dir2/yfoobar.s', and 'dir2/yfoobar.o'.
6008
6009'-time[=FILE]'
6010     Report the CPU time taken by each subprocess in the compilation
6011     sequence.  For C source files, this is the compiler proper and
6012     assembler (plus the linker if linking is done).
6013
6014     Without the specification of an output file, the output looks like
6015     this:
6016
6017          # cc1 0.12 0.01
6018          # as 0.00 0.01
6019
6020     The first number on each line is the "user time", that is time
6021     spent executing the program itself.  The second number is "system
6022     time", time spent executing operating system routines on behalf of
6023     the program.  Both numbers are in seconds.
6024
6025     With the specification of an output file, the output is appended to
6026     the named file, and it looks like this:
6027
6028          0.12 0.01 cc1 OPTIONS
6029          0.00 0.01 as OPTIONS
6030
6031     The "user time" and the "system time" are moved before the program
6032     name, and the options passed to the program are displayed, so that
6033     one can later tell what file was being compiled, and with which
6034     options.
6035
6036'-fvar-tracking'
6037     Run variable tracking pass.  It computes where variables are stored
6038     at each position in code.  Better debugging information is then
6039     generated (if the debugging information format supports this
6040     information).
6041
6042     It is enabled by default when compiling with optimization ('-Os',
6043     '-O', '-O2', ...), debugging information ('-g') and the debug info
6044     format supports it.
6045
6046'-fvar-tracking-assignments'
6047     Annotate assignments to user variables early in the compilation and
6048     attempt to carry the annotations over throughout the compilation
6049     all the way to the end, in an attempt to improve debug information
6050     while optimizing.  Use of '-gdwarf-4' is recommended along with it.
6051
6052     It can be enabled even if var-tracking is disabled, in which case
6053     annotations are created and maintained, but discarded at the end.
6054
6055'-fvar-tracking-assignments-toggle'
6056     Toggle '-fvar-tracking-assignments', in the same way that
6057     '-gtoggle' toggles '-g'.
6058
6059'-print-file-name=LIBRARY'
6060     Print the full absolute name of the library file LIBRARY that would
6061     be used when linking--and don't do anything else.  With this
6062     option, GCC does not compile or link anything; it just prints the
6063     file name.
6064
6065'-print-multi-directory'
6066     Print the directory name corresponding to the multilib selected by
6067     any other switches present in the command line.  This directory is
6068     supposed to exist in 'GCC_EXEC_PREFIX'.
6069
6070'-print-multi-lib'
6071     Print the mapping from multilib directory names to compiler
6072     switches that enable them.  The directory name is separated from
6073     the switches by ';', and each switch starts with an '@' instead of
6074     the '-', without spaces between multiple switches.  This is
6075     supposed to ease shell processing.
6076
6077'-print-multi-os-directory'
6078     Print the path to OS libraries for the selected multilib, relative
6079     to some 'lib' subdirectory.  If OS libraries are present in the
6080     'lib' subdirectory and no multilibs are used, this is usually just
6081     '.', if OS libraries are present in 'libSUFFIX' sibling directories
6082     this prints e.g. '../lib64', '../lib' or '../lib32', or if OS
6083     libraries are present in 'lib/SUBDIR' subdirectories it prints e.g.
6084     'amd64', 'sparcv9' or 'ev6'.
6085
6086'-print-multiarch'
6087     Print the path to OS libraries for the selected multiarch, relative
6088     to some 'lib' subdirectory.
6089
6090'-print-prog-name=PROGRAM'
6091     Like '-print-file-name', but searches for a program such as 'cpp'.
6092
6093'-print-libgcc-file-name'
6094     Same as '-print-file-name=libgcc.a'.
6095
6096     This is useful when you use '-nostdlib' or '-nodefaultlibs' but you
6097     do want to link with 'libgcc.a'.  You can do:
6098
6099          gcc -nostdlib FILES... `gcc -print-libgcc-file-name`
6100
6101'-print-search-dirs'
6102     Print the name of the configured installation directory and a list
6103     of program and library directories 'gcc' searches--and don't do
6104     anything else.
6105
6106     This is useful when 'gcc' prints the error message 'installation
6107     problem, cannot exec cpp0: No such file or directory'.  To resolve
6108     this you either need to put 'cpp0' and the other compiler
6109     components where 'gcc' expects to find them, or you can set the
6110     environment variable 'GCC_EXEC_PREFIX' to the directory where you
6111     installed them.  Don't forget the trailing '/'.  *Note Environment
6112     Variables::.
6113
6114'-print-sysroot'
6115     Print the target sysroot directory that is used during compilation.
6116     This is the target sysroot specified either at configure time or
6117     using the '--sysroot' option, possibly with an extra suffix that
6118     depends on compilation options.  If no target sysroot is specified,
6119     the option prints nothing.
6120
6121'-print-sysroot-headers-suffix'
6122     Print the suffix added to the target sysroot when searching for
6123     headers, or give an error if the compiler is not configured with
6124     such a suffix--and don't do anything else.
6125
6126'-dumpmachine'
6127     Print the compiler's target machine (for example,
6128     'i686-pc-linux-gnu')--and don't do anything else.
6129
6130'-dumpversion'
6131     Print the compiler version (for example, '3.0')--and don't do
6132     anything else.
6133
6134'-dumpspecs'
6135     Print the compiler's built-in specs--and don't do anything else.
6136     (This is used when GCC itself is being built.)  *Note Spec Files::.
6137
6138'-fno-eliminate-unused-debug-types'
6139     Normally, when producing DWARF 2 output, GCC avoids producing debug
6140     symbol output for types that are nowhere used in the source file
6141     being compiled.  Sometimes it is useful to have GCC emit debugging
6142     information for all types declared in a compilation unit,
6143     regardless of whether or not they are actually used in that
6144     compilation unit, for example if, in the debugger, you want to cast
6145     a value to a type that is not actually used in your program (but is
6146     declared).  More often, however, this results in a significant
6147     amount of wasted space.
6148
6149
6150File: gcc.info,  Node: Optimize Options,  Next: Preprocessor Options,  Prev: Debugging Options,  Up: Invoking GCC
6151
61523.10 Options That Control Optimization
6153======================================
6154
6155These options control various sorts of optimizations.
6156
6157 Without any optimization option, the compiler's goal is to reduce the
6158cost of compilation and to make debugging produce the expected results.
6159Statements are independent: if you stop the program with a breakpoint
6160between statements, you can then assign a new value to any variable or
6161change the program counter to any other statement in the function and
6162get exactly the results you expect from the source code.
6163
6164 Turning on optimization flags makes the compiler attempt to improve the
6165performance and/or code size at the expense of compilation time and
6166possibly the ability to debug the program.
6167
6168 The compiler performs optimization based on the knowledge it has of the
6169program.  Compiling multiple files at once to a single output file mode
6170allows the compiler to use information gained from all of the files when
6171compiling each of them.
6172
6173 Not all optimizations are controlled directly by a flag.  Only
6174optimizations that have a flag are listed in this section.
6175
6176 Most optimizations are only enabled if an '-O' level is set on the
6177command line.  Otherwise they are disabled, even if individual
6178optimization flags are specified.
6179
6180 Depending on the target and how GCC was configured, a slightly
6181different set of optimizations may be enabled at each '-O' level than
6182those listed here.  You can invoke GCC with '-Q --help=optimizers' to
6183find out the exact set of optimizations that are enabled at each level.
6184*Note Overall Options::, for examples.
6185
6186'-O'
6187'-O1'
6188     Optimize.  Optimizing compilation takes somewhat more time, and a
6189     lot more memory for a large function.
6190
6191     With '-O', the compiler tries to reduce code size and execution
6192     time, without performing any optimizations that take a great deal
6193     of compilation time.
6194
6195     '-O' turns on the following optimization flags:
6196          -fauto-inc-dec
6197          -fcompare-elim
6198          -fcprop-registers
6199          -fdce
6200          -fdefer-pop
6201          -fdelayed-branch
6202          -fdse
6203          -fguess-branch-probability
6204          -fif-conversion2
6205          -fif-conversion
6206          -fipa-pure-const
6207          -fipa-profile
6208          -fipa-reference
6209          -fmerge-constants
6210          -fsplit-wide-types
6211          -ftree-bit-ccp
6212          -ftree-builtin-call-dce
6213          -ftree-ccp
6214          -ftree-ch
6215          -ftree-copyrename
6216          -ftree-dce
6217          -ftree-dominator-opts
6218          -ftree-dse
6219          -ftree-forwprop
6220          -ftree-fre
6221          -ftree-phiprop
6222          -ftree-slsr
6223          -ftree-sra
6224          -ftree-pta
6225          -ftree-ter
6226          -funit-at-a-time
6227
6228     '-O' also turns on '-fomit-frame-pointer' on machines where doing
6229     so does not interfere with debugging.
6230
6231'-O2'
6232     Optimize even more.  GCC performs nearly all supported
6233     optimizations that do not involve a space-speed tradeoff.  As
6234     compared to '-O', this option increases both compilation time and
6235     the performance of the generated code.
6236
6237     '-O2' turns on all optimization flags specified by '-O'.  It also
6238     turns on the following optimization flags:
6239          -fthread-jumps
6240          -falign-functions  -falign-jumps
6241          -falign-loops  -falign-labels
6242          -fcaller-saves
6243          -fcrossjumping
6244          -fcse-follow-jumps  -fcse-skip-blocks
6245          -fdelete-null-pointer-checks
6246          -fdevirtualize -fdevirtualize-speculatively
6247          -fexpensive-optimizations
6248          -fgcse  -fgcse-lm
6249          -fhoist-adjacent-loads
6250          -finline-small-functions
6251          -findirect-inlining
6252          -fipa-sra
6253          -fisolate-erroneous-paths-dereference
6254          -foptimize-sibling-calls
6255          -fpartial-inlining
6256          -fpeephole2
6257          -freorder-blocks  -freorder-functions
6258          -frerun-cse-after-loop
6259          -fsched-interblock  -fsched-spec
6260          -fschedule-insns  -fschedule-insns2
6261          -fstrict-aliasing -fstrict-overflow
6262          -ftree-switch-conversion -ftree-tail-merge
6263          -ftree-pre
6264          -ftree-vrp
6265
6266     Please note the warning under '-fgcse' about invoking '-O2' on
6267     programs that use computed gotos.
6268
6269'-O3'
6270     Optimize yet more.  '-O3' turns on all optimizations specified by
6271     '-O2' and also turns on the '-finline-functions',
6272     '-funswitch-loops', '-fpredictive-commoning',
6273     '-fgcse-after-reload', '-ftree-loop-vectorize',
6274     '-ftree-slp-vectorize', '-fvect-cost-model', '-ftree-partial-pre'
6275     and '-fipa-cp-clone' options.
6276
6277'-O0'
6278     Reduce compilation time and make debugging produce the expected
6279     results.  This is the default.
6280
6281'-Os'
6282     Optimize for size.  '-Os' enables all '-O2' optimizations that do
6283     not typically increase code size.  It also performs further
6284     optimizations designed to reduce code size.
6285
6286     '-Os' disables the following optimization flags:
6287          -falign-functions  -falign-jumps  -falign-loops
6288          -falign-labels  -freorder-blocks  -freorder-blocks-and-partition
6289          -fprefetch-loop-arrays
6290
6291'-Ofast'
6292     Disregard strict standards compliance.  '-Ofast' enables all '-O3'
6293     optimizations.  It also enables optimizations that are not valid
6294     for all standard-compliant programs.  It turns on '-ffast-math' and
6295     the Fortran-specific '-fno-protect-parens' and '-fstack-arrays'.
6296
6297'-Og'
6298     Optimize debugging experience.  '-Og' enables optimizations that do
6299     not interfere with debugging.  It should be the optimization level
6300     of choice for the standard edit-compile-debug cycle, offering a
6301     reasonable level of optimization while maintaining fast compilation
6302     and a good debugging experience.
6303
6304     If you use multiple '-O' options, with or without level numbers,
6305     the last such option is the one that is effective.
6306
6307 Options of the form '-fFLAG' specify machine-independent flags.  Most
6308flags have both positive and negative forms; the negative form of
6309'-ffoo' is '-fno-foo'.  In the table below, only one of the forms is
6310listed--the one you typically use.  You can figure out the other form by
6311either removing 'no-' or adding it.
6312
6313 The following options control specific optimizations.  They are either
6314activated by '-O' options or are related to ones that are.  You can use
6315the following flags in the rare cases when "fine-tuning" of
6316optimizations to be performed is desired.
6317
6318'-fno-defer-pop'
6319     Always pop the arguments to each function call as soon as that
6320     function returns.  For machines that must pop arguments after a
6321     function call, the compiler normally lets arguments accumulate on
6322     the stack for several function calls and pops them all at once.
6323
6324     Disabled at levels '-O', '-O2', '-O3', '-Os'.
6325
6326'-fforward-propagate'
6327     Perform a forward propagation pass on RTL.  The pass tries to
6328     combine two instructions and checks if the result can be
6329     simplified.  If loop unrolling is active, two passes are performed
6330     and the second is scheduled after loop unrolling.
6331
6332     This option is enabled by default at optimization levels '-O',
6333     '-O2', '-O3', '-Os'.
6334
6335'-ffp-contract=STYLE'
6336     '-ffp-contract=off' disables floating-point expression contraction.
6337     '-ffp-contract=fast' enables floating-point expression contraction
6338     such as forming of fused multiply-add operations if the target has
6339     native support for them.  '-ffp-contract=on' enables floating-point
6340     expression contraction if allowed by the language standard.  This
6341     is currently not implemented and treated equal to
6342     '-ffp-contract=off'.
6343
6344     The default is '-ffp-contract=fast'.
6345
6346'-fomit-frame-pointer'
6347     Don't keep the frame pointer in a register for functions that don't
6348     need one.  This avoids the instructions to save, set up and restore
6349     frame pointers; it also makes an extra register available in many
6350     functions.  *It also makes debugging impossible on some machines.*
6351
6352     On some machines, such as the VAX, this flag has no effect, because
6353     the standard calling sequence automatically handles the frame
6354     pointer and nothing is saved by pretending it doesn't exist.  The
6355     machine-description macro 'FRAME_POINTER_REQUIRED' controls whether
6356     a target machine supports this flag.  *Note Register Usage:
6357     (gccint)Registers.
6358
6359     Starting with GCC version 4.6, the default setting (when not
6360     optimizing for size) for 32-bit GNU/Linux x86 and 32-bit Darwin x86
6361     targets has been changed to '-fomit-frame-pointer'.  The default
6362     can be reverted to '-fno-omit-frame-pointer' by configuring GCC
6363     with the '--enable-frame-pointer' configure option.
6364
6365     Enabled at levels '-O', '-O2', '-O3', '-Os'.
6366
6367'-foptimize-sibling-calls'
6368     Optimize sibling and tail recursive calls.
6369
6370     Enabled at levels '-O2', '-O3', '-Os'.
6371
6372'-fno-inline'
6373     Do not expand any functions inline apart from those marked with the
6374     'always_inline' attribute.  This is the default when not
6375     optimizing.
6376
6377     Single functions can be exempted from inlining by marking them with
6378     the 'noinline' attribute.
6379
6380'-finline-small-functions'
6381     Integrate functions into their callers when their body is smaller
6382     than expected function call code (so overall size of program gets
6383     smaller).  The compiler heuristically decides which functions are
6384     simple enough to be worth integrating in this way.  This inlining
6385     applies to all functions, even those not declared inline.
6386
6387     Enabled at level '-O2'.
6388
6389'-findirect-inlining'
6390     Inline also indirect calls that are discovered to be known at
6391     compile time thanks to previous inlining.  This option has any
6392     effect only when inlining itself is turned on by the
6393     '-finline-functions' or '-finline-small-functions' options.
6394
6395     Enabled at level '-O2'.
6396
6397'-finline-functions'
6398     Consider all functions for inlining, even if they are not declared
6399     inline.  The compiler heuristically decides which functions are
6400     worth integrating in this way.
6401
6402     If all calls to a given function are integrated, and the function
6403     is declared 'static', then the function is normally not output as
6404     assembler code in its own right.
6405
6406     Enabled at level '-O3'.
6407
6408'-finline-functions-called-once'
6409     Consider all 'static' functions called once for inlining into their
6410     caller even if they are not marked 'inline'.  If a call to a given
6411     function is integrated, then the function is not output as
6412     assembler code in its own right.
6413
6414     Enabled at levels '-O1', '-O2', '-O3' and '-Os'.
6415
6416'-fearly-inlining'
6417     Inline functions marked by 'always_inline' and functions whose body
6418     seems smaller than the function call overhead early before doing
6419     '-fprofile-generate' instrumentation and real inlining pass.  Doing
6420     so makes profiling significantly cheaper and usually inlining
6421     faster on programs having large chains of nested wrapper functions.
6422
6423     Enabled by default.
6424
6425'-fipa-sra'
6426     Perform interprocedural scalar replacement of aggregates, removal
6427     of unused parameters and replacement of parameters passed by
6428     reference by parameters passed by value.
6429
6430     Enabled at levels '-O2', '-O3' and '-Os'.
6431
6432'-finline-limit=N'
6433     By default, GCC limits the size of functions that can be inlined.
6434     This flag allows coarse control of this limit.  N is the size of
6435     functions that can be inlined in number of pseudo instructions.
6436
6437     Inlining is actually controlled by a number of parameters, which
6438     may be specified individually by using '--param NAME=VALUE'.  The
6439     '-finline-limit=N' option sets some of these parameters as follows:
6440
6441     'max-inline-insns-single'
6442          is set to N/2.
6443     'max-inline-insns-auto'
6444          is set to N/2.
6445
6446     See below for a documentation of the individual parameters
6447     controlling inlining and for the defaults of these parameters.
6448
6449     _Note:_ there may be no value to '-finline-limit' that results in
6450     default behavior.
6451
6452     _Note:_ pseudo instruction represents, in this particular context,
6453     an abstract measurement of function's size.  In no way does it
6454     represent a count of assembly instructions and as such its exact
6455     meaning might change from one release to an another.
6456
6457'-fno-keep-inline-dllexport'
6458     This is a more fine-grained version of '-fkeep-inline-functions',
6459     which applies only to functions that are declared using the
6460     'dllexport' attribute or declspec (*Note Declaring Attributes of
6461     Functions: Function Attributes.)
6462
6463'-fkeep-inline-functions'
6464     In C, emit 'static' functions that are declared 'inline' into the
6465     object file, even if the function has been inlined into all of its
6466     callers.  This switch does not affect functions using the 'extern
6467     inline' extension in GNU C90.  In C++, emit any and all inline
6468     functions into the object file.
6469
6470'-fkeep-static-consts'
6471     Emit variables declared 'static const' when optimization isn't
6472     turned on, even if the variables aren't referenced.
6473
6474     GCC enables this option by default.  If you want to force the
6475     compiler to check if a variable is referenced, regardless of
6476     whether or not optimization is turned on, use the
6477     '-fno-keep-static-consts' option.
6478
6479'-fmerge-constants'
6480     Attempt to merge identical constants (string constants and
6481     floating-point constants) across compilation units.
6482
6483     This option is the default for optimized compilation if the
6484     assembler and linker support it.  Use '-fno-merge-constants' to
6485     inhibit this behavior.
6486
6487     Enabled at levels '-O', '-O2', '-O3', '-Os'.
6488
6489'-fmerge-all-constants'
6490     Attempt to merge identical constants and identical variables.
6491
6492     This option implies '-fmerge-constants'.  In addition to
6493     '-fmerge-constants' this considers e.g. even constant initialized
6494     arrays or initialized constant variables with integral or
6495     floating-point types.  Languages like C or C++ require each
6496     variable, including multiple instances of the same variable in
6497     recursive calls, to have distinct locations, so using this option
6498     results in non-conforming behavior.
6499
6500'-fmodulo-sched'
6501     Perform swing modulo scheduling immediately before the first
6502     scheduling pass.  This pass looks at innermost loops and reorders
6503     their instructions by overlapping different iterations.
6504
6505'-fmodulo-sched-allow-regmoves'
6506     Perform more aggressive SMS-based modulo scheduling with register
6507     moves allowed.  By setting this flag certain anti-dependences edges
6508     are deleted, which triggers the generation of reg-moves based on
6509     the life-range analysis.  This option is effective only with
6510     '-fmodulo-sched' enabled.
6511
6512'-fno-branch-count-reg'
6513     Do not use "decrement and branch" instructions on a count register,
6514     but instead generate a sequence of instructions that decrement a
6515     register, compare it against zero, then branch based upon the
6516     result.  This option is only meaningful on architectures that
6517     support such instructions, which include x86, PowerPC, IA-64 and
6518     S/390.
6519
6520     The default is '-fbranch-count-reg'.
6521
6522'-fno-function-cse'
6523     Do not put function addresses in registers; make each instruction
6524     that calls a constant function contain the function's address
6525     explicitly.
6526
6527     This option results in less efficient code, but some strange hacks
6528     that alter the assembler output may be confused by the
6529     optimizations performed when this option is not used.
6530
6531     The default is '-ffunction-cse'
6532
6533'-fno-zero-initialized-in-bss'
6534     If the target supports a BSS section, GCC by default puts variables
6535     that are initialized to zero into BSS.  This can save space in the
6536     resulting code.
6537
6538     This option turns off this behavior because some programs
6539     explicitly rely on variables going to the data section--e.g., so
6540     that the resulting executable can find the beginning of that
6541     section and/or make assumptions based on that.
6542
6543     The default is '-fzero-initialized-in-bss'.
6544
6545'-fthread-jumps'
6546     Perform optimizations that check to see if a jump branches to a
6547     location where another comparison subsumed by the first is found.
6548     If so, the first branch is redirected to either the destination of
6549     the second branch or a point immediately following it, depending on
6550     whether the condition is known to be true or false.
6551
6552     Enabled at levels '-O2', '-O3', '-Os'.
6553
6554'-fsplit-wide-types'
6555     When using a type that occupies multiple registers, such as 'long
6556     long' on a 32-bit system, split the registers apart and allocate
6557     them independently.  This normally generates better code for those
6558     types, but may make debugging more difficult.
6559
6560     Enabled at levels '-O', '-O2', '-O3', '-Os'.
6561
6562'-fcse-follow-jumps'
6563     In common subexpression elimination (CSE), scan through jump
6564     instructions when the target of the jump is not reached by any
6565     other path.  For example, when CSE encounters an 'if' statement
6566     with an 'else' clause, CSE follows the jump when the condition
6567     tested is false.
6568
6569     Enabled at levels '-O2', '-O3', '-Os'.
6570
6571'-fcse-skip-blocks'
6572     This is similar to '-fcse-follow-jumps', but causes CSE to follow
6573     jumps that conditionally skip over blocks.  When CSE encounters a
6574     simple 'if' statement with no else clause, '-fcse-skip-blocks'
6575     causes CSE to follow the jump around the body of the 'if'.
6576
6577     Enabled at levels '-O2', '-O3', '-Os'.
6578
6579'-frerun-cse-after-loop'
6580     Re-run common subexpression elimination after loop optimizations
6581     are performed.
6582
6583     Enabled at levels '-O2', '-O3', '-Os'.
6584
6585'-fgcse'
6586     Perform a global common subexpression elimination pass.  This pass
6587     also performs global constant and copy propagation.
6588
6589     _Note:_ When compiling a program using computed gotos, a GCC
6590     extension, you may get better run-time performance if you disable
6591     the global common subexpression elimination pass by adding
6592     '-fno-gcse' to the command line.
6593
6594     Enabled at levels '-O2', '-O3', '-Os'.
6595
6596'-fgcse-lm'
6597     When '-fgcse-lm' is enabled, global common subexpression
6598     elimination attempts to move loads that are only killed by stores
6599     into themselves.  This allows a loop containing a load/store
6600     sequence to be changed to a load outside the loop, and a copy/store
6601     within the loop.
6602
6603     Enabled by default when '-fgcse' is enabled.
6604
6605'-fgcse-sm'
6606     When '-fgcse-sm' is enabled, a store motion pass is run after
6607     global common subexpression elimination.  This pass attempts to
6608     move stores out of loops.  When used in conjunction with
6609     '-fgcse-lm', loops containing a load/store sequence can be changed
6610     to a load before the loop and a store after the loop.
6611
6612     Not enabled at any optimization level.
6613
6614'-fgcse-las'
6615     When '-fgcse-las' is enabled, the global common subexpression
6616     elimination pass eliminates redundant loads that come after stores
6617     to the same memory location (both partial and full redundancies).
6618
6619     Not enabled at any optimization level.
6620
6621'-fgcse-after-reload'
6622     When '-fgcse-after-reload' is enabled, a redundant load elimination
6623     pass is performed after reload.  The purpose of this pass is to
6624     clean up redundant spilling.
6625
6626'-faggressive-loop-optimizations'
6627     This option tells the loop optimizer to use language constraints to
6628     derive bounds for the number of iterations of a loop.  This assumes
6629     that loop code does not invoke undefined behavior by for example
6630     causing signed integer overflows or out-of-bound array accesses.
6631     The bounds for the number of iterations of a loop are used to guide
6632     loop unrolling and peeling and loop exit test optimizations.  This
6633     option is enabled by default.
6634
6635'-funsafe-loop-optimizations'
6636     This option tells the loop optimizer to assume that loop indices do
6637     not overflow, and that loops with nontrivial exit condition are not
6638     infinite.  This enables a wider range of loop optimizations even if
6639     the loop optimizer itself cannot prove that these assumptions are
6640     valid.  If you use '-Wunsafe-loop-optimizations', the compiler
6641     warns you if it finds this kind of loop.
6642
6643'-fcrossjumping'
6644     Perform cross-jumping transformation.  This transformation unifies
6645     equivalent code and saves code size.  The resulting code may or may
6646     not perform better than without cross-jumping.
6647
6648     Enabled at levels '-O2', '-O3', '-Os'.
6649
6650'-fauto-inc-dec'
6651     Combine increments or decrements of addresses with memory accesses.
6652     This pass is always skipped on architectures that do not have
6653     instructions to support this.  Enabled by default at '-O' and
6654     higher on architectures that support this.
6655
6656'-fdce'
6657     Perform dead code elimination (DCE) on RTL.  Enabled by default at
6658     '-O' and higher.
6659
6660'-fdse'
6661     Perform dead store elimination (DSE) on RTL.  Enabled by default at
6662     '-O' and higher.
6663
6664'-fif-conversion'
6665     Attempt to transform conditional jumps into branch-less
6666     equivalents.  This includes use of conditional moves, min, max, set
6667     flags and abs instructions, and some tricks doable by standard
6668     arithmetics.  The use of conditional execution on chips where it is
6669     available is controlled by 'if-conversion2'.
6670
6671     Enabled at levels '-O', '-O2', '-O3', '-Os'.
6672
6673'-fif-conversion2'
6674     Use conditional execution (where available) to transform
6675     conditional jumps into branch-less equivalents.
6676
6677     Enabled at levels '-O', '-O2', '-O3', '-Os'.
6678
6679'-fdeclone-ctor-dtor'
6680     The C++ ABI requires multiple entry points for constructors and
6681     destructors: one for a base subobject, one for a complete object,
6682     and one for a virtual destructor that calls operator delete
6683     afterwards.  For a hierarchy with virtual bases, the base and
6684     complete variants are clones, which means two copies of the
6685     function.  With this option, the base and complete variants are
6686     changed to be thunks that call a common implementation.
6687
6688     Enabled by '-Os'.
6689
6690'-fdelete-null-pointer-checks'
6691     Assume that programs cannot safely dereference null pointers, and
6692     that no code or data element resides there.  This enables simple
6693     constant folding optimizations at all optimization levels.  In
6694     addition, other optimization passes in GCC use this flag to control
6695     global dataflow analyses that eliminate useless checks for null
6696     pointers; these assume that if a pointer is checked after it has
6697     already been dereferenced, it cannot be null.
6698
6699     Note however that in some environments this assumption is not true.
6700     Use '-fno-delete-null-pointer-checks' to disable this optimization
6701     for programs that depend on that behavior.
6702
6703     Some targets, especially embedded ones, disable this option at all
6704     levels.  Otherwise it is enabled at all levels: '-O0', '-O1',
6705     '-O2', '-O3', '-Os'.  Passes that use the information are enabled
6706     independently at different optimization levels.
6707
6708'-fdevirtualize'
6709     Attempt to convert calls to virtual functions to direct calls.
6710     This is done both within a procedure and interprocedurally as part
6711     of indirect inlining ('-findirect-inlining') and interprocedural
6712     constant propagation ('-fipa-cp').  Enabled at levels '-O2', '-O3',
6713     '-Os'.
6714
6715'-fdevirtualize-speculatively'
6716     Attempt to convert calls to virtual functions to speculative direct
6717     calls.  Based on the analysis of the type inheritance graph,
6718     determine for a given call the set of likely targets.  If the set
6719     is small, preferably of size 1, change the call into an conditional
6720     deciding on direct and indirect call.  The speculative calls enable
6721     more optimizations, such as inlining.  When they seem useless after
6722     further optimization, they are converted back into original form.
6723
6724'-fexpensive-optimizations'
6725     Perform a number of minor optimizations that are relatively
6726     expensive.
6727
6728     Enabled at levels '-O2', '-O3', '-Os'.
6729
6730'-free'
6731     Attempt to remove redundant extension instructions.  This is
6732     especially helpful for the x86-64 architecture, which implicitly
6733     zero-extends in 64-bit registers after writing to their lower
6734     32-bit half.
6735
6736     Enabled for Alpha, AArch64 and x86 at levels '-O2', '-O3', '-Os'.
6737
6738'-flive-range-shrinkage'
6739     Attempt to decrease register pressure through register live range
6740     shrinkage.  This is helpful for fast processors with small or
6741     moderate size register sets.
6742
6743'-fira-algorithm=ALGORITHM'
6744     Use the specified coloring algorithm for the integrated register
6745     allocator.  The ALGORITHM argument can be 'priority', which
6746     specifies Chow's priority coloring, or 'CB', which specifies
6747     Chaitin-Briggs coloring.  Chaitin-Briggs coloring is not
6748     implemented for all architectures, but for those targets that do
6749     support it, it is the default because it generates better code.
6750
6751'-fira-region=REGION'
6752     Use specified regions for the integrated register allocator.  The
6753     REGION argument should be one of the following:
6754
6755     'all'
6756          Use all loops as register allocation regions.  This can give
6757          the best results for machines with a small and/or irregular
6758          register set.
6759
6760     'mixed'
6761          Use all loops except for loops with small register pressure as
6762          the regions.  This value usually gives the best results in
6763          most cases and for most architectures, and is enabled by
6764          default when compiling with optimization for speed ('-O',
6765          '-O2', ...).
6766
6767     'one'
6768          Use all functions as a single region.  This typically results
6769          in the smallest code size, and is enabled by default for '-Os'
6770          or '-O0'.
6771
6772'-fira-hoist-pressure'
6773     Use IRA to evaluate register pressure in the code hoisting pass for
6774     decisions to hoist expressions.  This option usually results in
6775     smaller code, but it can slow the compiler down.
6776
6777     This option is enabled at level '-Os' for all targets.
6778
6779'-fira-loop-pressure'
6780     Use IRA to evaluate register pressure in loops for decisions to
6781     move loop invariants.  This option usually results in generation of
6782     faster and smaller code on machines with large register files (>=
6783     32 registers), but it can slow the compiler down.
6784
6785     This option is enabled at level '-O3' for some targets.
6786
6787'-fno-ira-share-save-slots'
6788     Disable sharing of stack slots used for saving call-used hard
6789     registers living through a call.  Each hard register gets a
6790     separate stack slot, and as a result function stack frames are
6791     larger.
6792
6793'-fno-ira-share-spill-slots'
6794     Disable sharing of stack slots allocated for pseudo-registers.
6795     Each pseudo-register that does not get a hard register gets a
6796     separate stack slot, and as a result function stack frames are
6797     larger.
6798
6799'-fira-verbose=N'
6800     Control the verbosity of the dump file for the integrated register
6801     allocator.  The default value is 5.  If the value N is greater or
6802     equal to 10, the dump output is sent to stderr using the same
6803     format as N minus 10.
6804
6805'-fdelayed-branch'
6806     If supported for the target machine, attempt to reorder
6807     instructions to exploit instruction slots available after delayed
6808     branch instructions.
6809
6810     Enabled at levels '-O', '-O2', '-O3', '-Os'.
6811
6812'-fschedule-insns'
6813     If supported for the target machine, attempt to reorder
6814     instructions to eliminate execution stalls due to required data
6815     being unavailable.  This helps machines that have slow floating
6816     point or memory load instructions by allowing other instructions to
6817     be issued until the result of the load or floating-point
6818     instruction is required.
6819
6820     Enabled at levels '-O2', '-O3'.
6821
6822'-fschedule-insns2'
6823     Similar to '-fschedule-insns', but requests an additional pass of
6824     instruction scheduling after register allocation has been done.
6825     This is especially useful on machines with a relatively small
6826     number of registers and where memory load instructions take more
6827     than one cycle.
6828
6829     Enabled at levels '-O2', '-O3', '-Os'.
6830
6831'-fno-sched-interblock'
6832     Don't schedule instructions across basic blocks.  This is normally
6833     enabled by default when scheduling before register allocation, i.e.
6834     with '-fschedule-insns' or at '-O2' or higher.
6835
6836'-fno-sched-spec'
6837     Don't allow speculative motion of non-load instructions.  This is
6838     normally enabled by default when scheduling before register
6839     allocation, i.e. with '-fschedule-insns' or at '-O2' or higher.
6840
6841'-fsched-pressure'
6842     Enable register pressure sensitive insn scheduling before register
6843     allocation.  This only makes sense when scheduling before register
6844     allocation is enabled, i.e. with '-fschedule-insns' or at '-O2' or
6845     higher.  Usage of this option can improve the generated code and
6846     decrease its size by preventing register pressure increase above
6847     the number of available hard registers and subsequent spills in
6848     register allocation.
6849
6850'-fsched-spec-load'
6851     Allow speculative motion of some load instructions.  This only
6852     makes sense when scheduling before register allocation, i.e. with
6853     '-fschedule-insns' or at '-O2' or higher.
6854
6855'-fsched-spec-load-dangerous'
6856     Allow speculative motion of more load instructions.  This only
6857     makes sense when scheduling before register allocation, i.e. with
6858     '-fschedule-insns' or at '-O2' or higher.
6859
6860'-fsched-stalled-insns'
6861'-fsched-stalled-insns=N'
6862     Define how many insns (if any) can be moved prematurely from the
6863     queue of stalled insns into the ready list during the second
6864     scheduling pass.  '-fno-sched-stalled-insns' means that no insns
6865     are moved prematurely, '-fsched-stalled-insns=0' means there is no
6866     limit on how many queued insns can be moved prematurely.
6867     '-fsched-stalled-insns' without a value is equivalent to
6868     '-fsched-stalled-insns=1'.
6869
6870'-fsched-stalled-insns-dep'
6871'-fsched-stalled-insns-dep=N'
6872     Define how many insn groups (cycles) are examined for a dependency
6873     on a stalled insn that is a candidate for premature removal from
6874     the queue of stalled insns.  This has an effect only during the
6875     second scheduling pass, and only if '-fsched-stalled-insns' is
6876     used.  '-fno-sched-stalled-insns-dep' is equivalent to
6877     '-fsched-stalled-insns-dep=0'.  '-fsched-stalled-insns-dep' without
6878     a value is equivalent to '-fsched-stalled-insns-dep=1'.
6879
6880'-fsched2-use-superblocks'
6881     When scheduling after register allocation, use superblock
6882     scheduling.  This allows motion across basic block boundaries,
6883     resulting in faster schedules.  This option is experimental, as not
6884     all machine descriptions used by GCC model the CPU closely enough
6885     to avoid unreliable results from the algorithm.
6886
6887     This only makes sense when scheduling after register allocation,
6888     i.e. with '-fschedule-insns2' or at '-O2' or higher.
6889
6890'-fsched-group-heuristic'
6891     Enable the group heuristic in the scheduler.  This heuristic favors
6892     the instruction that belongs to a schedule group.  This is enabled
6893     by default when scheduling is enabled, i.e. with '-fschedule-insns'
6894     or '-fschedule-insns2' or at '-O2' or higher.
6895
6896'-fsched-critical-path-heuristic'
6897     Enable the critical-path heuristic in the scheduler.  This
6898     heuristic favors instructions on the critical path.  This is
6899     enabled by default when scheduling is enabled, i.e. with
6900     '-fschedule-insns' or '-fschedule-insns2' or at '-O2' or higher.
6901
6902'-fsched-spec-insn-heuristic'
6903     Enable the speculative instruction heuristic in the scheduler.
6904     This heuristic favors speculative instructions with greater
6905     dependency weakness.  This is enabled by default when scheduling is
6906     enabled, i.e. with '-fschedule-insns' or '-fschedule-insns2' or at
6907     '-O2' or higher.
6908
6909'-fsched-rank-heuristic'
6910     Enable the rank heuristic in the scheduler.  This heuristic favors
6911     the instruction belonging to a basic block with greater size or
6912     frequency.  This is enabled by default when scheduling is enabled,
6913     i.e. with '-fschedule-insns' or '-fschedule-insns2' or at '-O2' or
6914     higher.
6915
6916'-fsched-last-insn-heuristic'
6917     Enable the last-instruction heuristic in the scheduler.  This
6918     heuristic favors the instruction that is less dependent on the last
6919     instruction scheduled.  This is enabled by default when scheduling
6920     is enabled, i.e. with '-fschedule-insns' or '-fschedule-insns2' or
6921     at '-O2' or higher.
6922
6923'-fsched-dep-count-heuristic'
6924     Enable the dependent-count heuristic in the scheduler.  This
6925     heuristic favors the instruction that has more instructions
6926     depending on it.  This is enabled by default when scheduling is
6927     enabled, i.e. with '-fschedule-insns' or '-fschedule-insns2' or at
6928     '-O2' or higher.
6929
6930'-freschedule-modulo-scheduled-loops'
6931     Modulo scheduling is performed before traditional scheduling.  If a
6932     loop is modulo scheduled, later scheduling passes may change its
6933     schedule.  Use this option to control that behavior.
6934
6935'-fselective-scheduling'
6936     Schedule instructions using selective scheduling algorithm.
6937     Selective scheduling runs instead of the first scheduler pass.
6938
6939'-fselective-scheduling2'
6940     Schedule instructions using selective scheduling algorithm.
6941     Selective scheduling runs instead of the second scheduler pass.
6942
6943'-fsel-sched-pipelining'
6944     Enable software pipelining of innermost loops during selective
6945     scheduling.  This option has no effect unless one of
6946     '-fselective-scheduling' or '-fselective-scheduling2' is turned on.
6947
6948'-fsel-sched-pipelining-outer-loops'
6949     When pipelining loops during selective scheduling, also pipeline
6950     outer loops.  This option has no effect unless
6951     '-fsel-sched-pipelining' is turned on.
6952
6953'-fshrink-wrap'
6954     Emit function prologues only before parts of the function that need
6955     it, rather than at the top of the function.  This flag is enabled
6956     by default at '-O' and higher.
6957
6958'-fcaller-saves'
6959     Enable allocation of values to registers that are clobbered by
6960     function calls, by emitting extra instructions to save and restore
6961     the registers around such calls.  Such allocation is done only when
6962     it seems to result in better code.
6963
6964     This option is always enabled by default on certain machines,
6965     usually those which have no call-preserved registers to use
6966     instead.
6967
6968     Enabled at levels '-O2', '-O3', '-Os'.
6969
6970'-fcombine-stack-adjustments'
6971     Tracks stack adjustments (pushes and pops) and stack memory
6972     references and then tries to find ways to combine them.
6973
6974     Enabled by default at '-O1' and higher.
6975
6976'-fconserve-stack'
6977     Attempt to minimize stack usage.  The compiler attempts to use less
6978     stack space, even if that makes the program slower.  This option
6979     implies setting the 'large-stack-frame' parameter to 100 and the
6980     'large-stack-frame-growth' parameter to 400.
6981
6982'-ftree-reassoc'
6983     Perform reassociation on trees.  This flag is enabled by default at
6984     '-O' and higher.
6985
6986'-ftree-pre'
6987     Perform partial redundancy elimination (PRE) on trees.  This flag
6988     is enabled by default at '-O2' and '-O3'.
6989
6990'-ftree-partial-pre'
6991     Make partial redundancy elimination (PRE) more aggressive.  This
6992     flag is enabled by default at '-O3'.
6993
6994'-ftree-forwprop'
6995     Perform forward propagation on trees.  This flag is enabled by
6996     default at '-O' and higher.
6997
6998'-ftree-fre'
6999     Perform full redundancy elimination (FRE) on trees.  The difference
7000     between FRE and PRE is that FRE only considers expressions that are
7001     computed on all paths leading to the redundant computation.  This
7002     analysis is faster than PRE, though it exposes fewer redundancies.
7003     This flag is enabled by default at '-O' and higher.
7004
7005'-ftree-phiprop'
7006     Perform hoisting of loads from conditional pointers on trees.  This
7007     pass is enabled by default at '-O' and higher.
7008
7009'-fhoist-adjacent-loads'
7010     Speculatively hoist loads from both branches of an if-then-else if
7011     the loads are from adjacent locations in the same structure and the
7012     target architecture has a conditional move instruction.  This flag
7013     is enabled by default at '-O2' and higher.
7014
7015'-ftree-copy-prop'
7016     Perform copy propagation on trees.  This pass eliminates
7017     unnecessary copy operations.  This flag is enabled by default at
7018     '-O' and higher.
7019
7020'-fipa-pure-const'
7021     Discover which functions are pure or constant.  Enabled by default
7022     at '-O' and higher.
7023
7024'-fipa-reference'
7025     Discover which static variables do not escape the compilation unit.
7026     Enabled by default at '-O' and higher.
7027
7028'-fipa-pta'
7029     Perform interprocedural pointer analysis and interprocedural
7030     modification and reference analysis.  This option can cause
7031     excessive memory and compile-time usage on large compilation units.
7032     It is not enabled by default at any optimization level.
7033
7034'-fipa-profile'
7035     Perform interprocedural profile propagation.  The functions called
7036     only from cold functions are marked as cold.  Also functions
7037     executed once (such as 'cold', 'noreturn', static constructors or
7038     destructors) are identified.  Cold functions and loop less parts of
7039     functions executed once are then optimized for size.  Enabled by
7040     default at '-O' and higher.
7041
7042'-fipa-cp'
7043     Perform interprocedural constant propagation.  This optimization
7044     analyzes the program to determine when values passed to functions
7045     are constants and then optimizes accordingly.  This optimization
7046     can substantially increase performance if the application has
7047     constants passed to functions.  This flag is enabled by default at
7048     '-O2', '-Os' and '-O3'.
7049
7050'-fipa-cp-clone'
7051     Perform function cloning to make interprocedural constant
7052     propagation stronger.  When enabled, interprocedural constant
7053     propagation performs function cloning when externally visible
7054     function can be called with constant arguments.  Because this
7055     optimization can create multiple copies of functions, it may
7056     significantly increase code size (see '--param
7057     ipcp-unit-growth=VALUE').  This flag is enabled by default at
7058     '-O3'.
7059
7060'-fisolate-erroneous-paths-dereference'
7061     Detect paths which trigger erroneous or undefined behaviour due to
7062     dereferencing a NULL pointer.  Isolate those paths from the main
7063     control flow and turn the statement with erroneous or undefined
7064     behaviour into a trap.
7065
7066'-fisolate-erroneous-paths-attribute'
7067     Detect paths which trigger erroneous or undefined behaviour due a
7068     NULL value being used in a way which is forbidden by a
7069     'returns_nonnull' or 'nonnull' attribute.  Isolate those paths from
7070     the main control flow and turn the statement with erroneous or
7071     undefined behaviour into a trap.  This is not currently enabled,
7072     but may be enabled by '-O2' in the future.
7073
7074'-ftree-sink'
7075     Perform forward store motion on trees.  This flag is enabled by
7076     default at '-O' and higher.
7077
7078'-ftree-bit-ccp'
7079     Perform sparse conditional bit constant propagation on trees and
7080     propagate pointer alignment information.  This pass only operates
7081     on local scalar variables and is enabled by default at '-O' and
7082     higher.  It requires that '-ftree-ccp' is enabled.
7083
7084'-ftree-ccp'
7085     Perform sparse conditional constant propagation (CCP) on trees.
7086     This pass only operates on local scalar variables and is enabled by
7087     default at '-O' and higher.
7088
7089'-ftree-switch-conversion'
7090     Perform conversion of simple initializations in a switch to
7091     initializations from a scalar array.  This flag is enabled by
7092     default at '-O2' and higher.
7093
7094'-ftree-tail-merge'
7095     Look for identical code sequences.  When found, replace one with a
7096     jump to the other.  This optimization is known as tail merging or
7097     cross jumping.  This flag is enabled by default at '-O2' and
7098     higher.  The compilation time in this pass can be limited using
7099     'max-tail-merge-comparisons' parameter and
7100     'max-tail-merge-iterations' parameter.
7101
7102'-ftree-dce'
7103     Perform dead code elimination (DCE) on trees.  This flag is enabled
7104     by default at '-O' and higher.
7105
7106'-ftree-builtin-call-dce'
7107     Perform conditional dead code elimination (DCE) for calls to
7108     built-in functions that may set 'errno' but are otherwise
7109     side-effect free.  This flag is enabled by default at '-O2' and
7110     higher if '-Os' is not also specified.
7111
7112'-ftree-dominator-opts'
7113     Perform a variety of simple scalar cleanups (constant/copy
7114     propagation, redundancy elimination, range propagation and
7115     expression simplification) based on a dominator tree traversal.
7116     This also performs jump threading (to reduce jumps to jumps).  This
7117     flag is enabled by default at '-O' and higher.
7118
7119'-ftree-dse'
7120     Perform dead store elimination (DSE) on trees.  A dead store is a
7121     store into a memory location that is later overwritten by another
7122     store without any intervening loads.  In this case the earlier
7123     store can be deleted.  This flag is enabled by default at '-O' and
7124     higher.
7125
7126'-ftree-ch'
7127     Perform loop header copying on trees.  This is beneficial since it
7128     increases effectiveness of code motion optimizations.  It also
7129     saves one jump.  This flag is enabled by default at '-O' and
7130     higher.  It is not enabled for '-Os', since it usually increases
7131     code size.
7132
7133'-ftree-loop-optimize'
7134     Perform loop optimizations on trees.  This flag is enabled by
7135     default at '-O' and higher.
7136
7137'-ftree-loop-linear'
7138     Perform loop interchange transformations on tree.  Same as
7139     '-floop-interchange'.  To use this code transformation, GCC has to
7140     be configured with '--with-ppl' and '--with-cloog' to enable the
7141     Graphite loop transformation infrastructure.
7142
7143'-floop-interchange'
7144     Perform loop interchange transformations on loops.  Interchanging
7145     two nested loops switches the inner and outer loops.  For example,
7146     given a loop like:
7147          DO J = 1, M
7148            DO I = 1, N
7149              A(J, I) = A(J, I) * C
7150            ENDDO
7151          ENDDO
7152     loop interchange transforms the loop as if it were written:
7153          DO I = 1, N
7154            DO J = 1, M
7155              A(J, I) = A(J, I) * C
7156            ENDDO
7157          ENDDO
7158     which can be beneficial when 'N' is larger than the caches, because
7159     in Fortran, the elements of an array are stored in memory
7160     contiguously by column, and the original loop iterates over rows,
7161     potentially creating at each access a cache miss.  This
7162     optimization applies to all the languages supported by GCC and is
7163     not limited to Fortran.  To use this code transformation, GCC has
7164     to be configured with '--with-ppl' and '--with-cloog' to enable the
7165     Graphite loop transformation infrastructure.
7166
7167'-floop-strip-mine'
7168     Perform loop strip mining transformations on loops.  Strip mining
7169     splits a loop into two nested loops.  The outer loop has strides
7170     equal to the strip size and the inner loop has strides of the
7171     original loop within a strip.  The strip length can be changed
7172     using the 'loop-block-tile-size' parameter.  For example, given a
7173     loop like:
7174          DO I = 1, N
7175            A(I) = A(I) + C
7176          ENDDO
7177     loop strip mining transforms the loop as if it were written:
7178          DO II = 1, N, 51
7179            DO I = II, min (II + 50, N)
7180              A(I) = A(I) + C
7181            ENDDO
7182          ENDDO
7183     This optimization applies to all the languages supported by GCC and
7184     is not limited to Fortran.  To use this code transformation, GCC
7185     has to be configured with '--with-ppl' and '--with-cloog' to enable
7186     the Graphite loop transformation infrastructure.
7187
7188'-floop-block'
7189     Perform loop blocking transformations on loops.  Blocking strip
7190     mines each loop in the loop nest such that the memory accesses of
7191     the element loops fit inside caches.  The strip length can be
7192     changed using the 'loop-block-tile-size' parameter.  For example,
7193     given a loop like:
7194          DO I = 1, N
7195            DO J = 1, M
7196              A(J, I) = B(I) + C(J)
7197            ENDDO
7198          ENDDO
7199     loop blocking transforms the loop as if it were written:
7200          DO II = 1, N, 51
7201            DO JJ = 1, M, 51
7202              DO I = II, min (II + 50, N)
7203                DO J = JJ, min (JJ + 50, M)
7204                  A(J, I) = B(I) + C(J)
7205                ENDDO
7206              ENDDO
7207            ENDDO
7208          ENDDO
7209     which can be beneficial when 'M' is larger than the caches, because
7210     the innermost loop iterates over a smaller amount of data which can
7211     be kept in the caches.  This optimization applies to all the
7212     languages supported by GCC and is not limited to Fortran.  To use
7213     this code transformation, GCC has to be configured with
7214     '--with-ppl' and '--with-cloog' to enable the Graphite loop
7215     transformation infrastructure.
7216
7217'-fgraphite-identity'
7218     Enable the identity transformation for graphite.  For every SCoP we
7219     generate the polyhedral representation and transform it back to
7220     gimple.  Using '-fgraphite-identity' we can check the costs or
7221     benefits of the GIMPLE -> GRAPHITE -> GIMPLE transformation.  Some
7222     minimal optimizations are also performed by the code generator
7223     CLooG, like index splitting and dead code elimination in loops.
7224
7225'-floop-nest-optimize'
7226     Enable the ISL based loop nest optimizer.  This is a generic loop
7227     nest optimizer based on the Pluto optimization algorithms.  It
7228     calculates a loop structure optimized for data-locality and
7229     parallelism.  This option is experimental.
7230
7231'-floop-parallelize-all'
7232     Use the Graphite data dependence analysis to identify loops that
7233     can be parallelized.  Parallelize all the loops that can be
7234     analyzed to not contain loop carried dependences without checking
7235     that it is profitable to parallelize the loops.
7236
7237'-fcheck-data-deps'
7238     Compare the results of several data dependence analyzers.  This
7239     option is used for debugging the data dependence analyzers.
7240
7241'-ftree-loop-if-convert'
7242     Attempt to transform conditional jumps in the innermost loops to
7243     branch-less equivalents.  The intent is to remove control-flow from
7244     the innermost loops in order to improve the ability of the
7245     vectorization pass to handle these loops.  This is enabled by
7246     default if vectorization is enabled.
7247
7248'-ftree-loop-if-convert-stores'
7249     Attempt to also if-convert conditional jumps containing memory
7250     writes.  This transformation can be unsafe for multi-threaded
7251     programs as it transforms conditional memory writes into
7252     unconditional memory writes.  For example,
7253          for (i = 0; i < N; i++)
7254            if (cond)
7255              A[i] = expr;
7256     is transformed to
7257          for (i = 0; i < N; i++)
7258            A[i] = cond ? expr : A[i];
7259     potentially producing data races.
7260
7261'-ftree-loop-distribution'
7262     Perform loop distribution.  This flag can improve cache performance
7263     on big loop bodies and allow further loop optimizations, like
7264     parallelization or vectorization, to take place.  For example, the
7265     loop
7266          DO I = 1, N
7267            A(I) = B(I) + C
7268            D(I) = E(I) * F
7269          ENDDO
7270     is transformed to
7271          DO I = 1, N
7272             A(I) = B(I) + C
7273          ENDDO
7274          DO I = 1, N
7275             D(I) = E(I) * F
7276          ENDDO
7277
7278'-ftree-loop-distribute-patterns'
7279     Perform loop distribution of patterns that can be code generated
7280     with calls to a library.  This flag is enabled by default at '-O3'.
7281
7282     This pass distributes the initialization loops and generates a call
7283     to memset zero.  For example, the loop
7284          DO I = 1, N
7285            A(I) = 0
7286            B(I) = A(I) + I
7287          ENDDO
7288     is transformed to
7289          DO I = 1, N
7290             A(I) = 0
7291          ENDDO
7292          DO I = 1, N
7293             B(I) = A(I) + I
7294          ENDDO
7295     and the initialization loop is transformed into a call to memset
7296     zero.
7297
7298'-ftree-loop-im'
7299     Perform loop invariant motion on trees.  This pass moves only
7300     invariants that are hard to handle at RTL level (function calls,
7301     operations that expand to nontrivial sequences of insns).  With
7302     '-funswitch-loops' it also moves operands of conditions that are
7303     invariant out of the loop, so that we can use just trivial
7304     invariantness analysis in loop unswitching.  The pass also includes
7305     store motion.
7306
7307'-ftree-loop-ivcanon'
7308     Create a canonical counter for number of iterations in loops for
7309     which determining number of iterations requires complicated
7310     analysis.  Later optimizations then may determine the number
7311     easily.  Useful especially in connection with unrolling.
7312
7313'-fivopts'
7314     Perform induction variable optimizations (strength reduction,
7315     induction variable merging and induction variable elimination) on
7316     trees.
7317
7318'-ftree-parallelize-loops=n'
7319     Parallelize loops, i.e., split their iteration space to run in n
7320     threads.  This is only possible for loops whose iterations are
7321     independent and can be arbitrarily reordered.  The optimization is
7322     only profitable on multiprocessor machines, for loops that are
7323     CPU-intensive, rather than constrained e.g. by memory bandwidth.
7324     This option implies '-pthread', and thus is only supported on
7325     targets that have support for '-pthread'.
7326
7327'-ftree-pta'
7328     Perform function-local points-to analysis on trees.  This flag is
7329     enabled by default at '-O' and higher.
7330
7331'-ftree-sra'
7332     Perform scalar replacement of aggregates.  This pass replaces
7333     structure references with scalars to prevent committing structures
7334     to memory too early.  This flag is enabled by default at '-O' and
7335     higher.
7336
7337'-ftree-copyrename'
7338     Perform copy renaming on trees.  This pass attempts to rename
7339     compiler temporaries to other variables at copy locations, usually
7340     resulting in variable names which more closely resemble the
7341     original variables.  This flag is enabled by default at '-O' and
7342     higher.
7343
7344'-ftree-coalesce-inlined-vars'
7345     Tell the copyrename pass (see '-ftree-copyrename') to attempt to
7346     combine small user-defined variables too, but only if they were
7347     inlined from other functions.  It is a more limited form of
7348     '-ftree-coalesce-vars'.  This may harm debug information of such
7349     inlined variables, but it will keep variables of the inlined-into
7350     function apart from each other, such that they are more likely to
7351     contain the expected values in a debugging session.  This was the
7352     default in GCC versions older than 4.7.
7353
7354'-ftree-coalesce-vars'
7355     Tell the copyrename pass (see '-ftree-copyrename') to attempt to
7356     combine small user-defined variables too, instead of just compiler
7357     temporaries.  This may severely limit the ability to debug an
7358     optimized program compiled with '-fno-var-tracking-assignments'.
7359     In the negated form, this flag prevents SSA coalescing of user
7360     variables, including inlined ones.  This option is enabled by
7361     default.
7362
7363'-ftree-ter'
7364     Perform temporary expression replacement during the SSA->normal
7365     phase.  Single use/single def temporaries are replaced at their use
7366     location with their defining expression.  This results in
7367     non-GIMPLE code, but gives the expanders much more complex trees to
7368     work on resulting in better RTL generation.  This is enabled by
7369     default at '-O' and higher.
7370
7371'-ftree-slsr'
7372     Perform straight-line strength reduction on trees.  This recognizes
7373     related expressions involving multiplications and replaces them by
7374     less expensive calculations when possible.  This is enabled by
7375     default at '-O' and higher.
7376
7377'-ftree-vectorize'
7378     Perform vectorization on trees.  This flag enables
7379     '-ftree-loop-vectorize' and '-ftree-slp-vectorize' if not
7380     explicitly specified.
7381
7382'-ftree-loop-vectorize'
7383     Perform loop vectorization on trees.  This flag is enabled by
7384     default at '-O3' and when '-ftree-vectorize' is enabled.
7385
7386'-ftree-slp-vectorize'
7387     Perform basic block vectorization on trees.  This flag is enabled
7388     by default at '-O3' and when '-ftree-vectorize' is enabled.
7389
7390'-fvect-cost-model=MODEL'
7391     Alter the cost model used for vectorization.  The MODEL argument
7392     should be one of 'unlimited', 'dynamic' or 'cheap'.  With the
7393     'unlimited' model the vectorized code-path is assumed to be
7394     profitable while with the 'dynamic' model a runtime check will
7395     guard the vectorized code-path to enable it only for iteration
7396     counts that will likely execute faster than when executing the
7397     original scalar loop.  The 'cheap' model will disable vectorization
7398     of loops where doing so would be cost prohibitive for example due
7399     to required runtime checks for data dependence or alignment but
7400     otherwise is equal to the 'dynamic' model.  The default cost model
7401     depends on other optimization flags and is either 'dynamic' or
7402     'cheap'.
7403
7404'-fsimd-cost-model=MODEL'
7405     Alter the cost model used for vectorization of loops marked with
7406     the OpenMP or Cilk Plus simd directive.  The MODEL argument should
7407     be one of 'unlimited', 'dynamic', 'cheap'.  All values of MODEL
7408     have the same meaning as described in '-fvect-cost-model' and by
7409     default a cost model defined with '-fvect-cost-model' is used.
7410
7411'-ftree-vrp'
7412     Perform Value Range Propagation on trees.  This is similar to the
7413     constant propagation pass, but instead of values, ranges of values
7414     are propagated.  This allows the optimizers to remove unnecessary
7415     range checks like array bound checks and null pointer checks.  This
7416     is enabled by default at '-O2' and higher.  Null pointer check
7417     elimination is only done if '-fdelete-null-pointer-checks' is
7418     enabled.
7419
7420'-ftracer'
7421     Perform tail duplication to enlarge superblock size.  This
7422     transformation simplifies the control flow of the function allowing
7423     other optimizations to do a better job.
7424
7425'-funroll-loops'
7426     Unroll loops whose number of iterations can be determined at
7427     compile time or upon entry to the loop.  '-funroll-loops' implies
7428     '-frerun-cse-after-loop'.  This option makes code larger, and may
7429     or may not make it run faster.
7430
7431'-funroll-all-loops'
7432     Unroll all loops, even if their number of iterations is uncertain
7433     when the loop is entered.  This usually makes programs run more
7434     slowly.  '-funroll-all-loops' implies the same options as
7435     '-funroll-loops',
7436
7437'-fsplit-ivs-in-unroller'
7438     Enables expression of values of induction variables in later
7439     iterations of the unrolled loop using the value in the first
7440     iteration.  This breaks long dependency chains, thus improving
7441     efficiency of the scheduling passes.
7442
7443     A combination of '-fweb' and CSE is often sufficient to obtain the
7444     same effect.  However, that is not reliable in cases where the loop
7445     body is more complicated than a single basic block.  It also does
7446     not work at all on some architectures due to restrictions in the
7447     CSE pass.
7448
7449     This optimization is enabled by default.
7450
7451'-fvariable-expansion-in-unroller'
7452     With this option, the compiler creates multiple copies of some
7453     local variables when unrolling a loop, which can result in superior
7454     code.
7455
7456'-fpartial-inlining'
7457     Inline parts of functions.  This option has any effect only when
7458     inlining itself is turned on by the '-finline-functions' or
7459     '-finline-small-functions' options.
7460
7461     Enabled at level '-O2'.
7462
7463'-fpredictive-commoning'
7464     Perform predictive commoning optimization, i.e., reusing
7465     computations (especially memory loads and stores) performed in
7466     previous iterations of loops.
7467
7468     This option is enabled at level '-O3'.
7469
7470'-fprefetch-loop-arrays'
7471     If supported by the target machine, generate instructions to
7472     prefetch memory to improve the performance of loops that access
7473     large arrays.
7474
7475     This option may generate better or worse code; results are highly
7476     dependent on the structure of loops within the source code.
7477
7478     Disabled at level '-Os'.
7479
7480'-fno-peephole'
7481'-fno-peephole2'
7482     Disable any machine-specific peephole optimizations.  The
7483     difference between '-fno-peephole' and '-fno-peephole2' is in how
7484     they are implemented in the compiler; some targets use one, some
7485     use the other, a few use both.
7486
7487     '-fpeephole' is enabled by default.  '-fpeephole2' enabled at
7488     levels '-O2', '-O3', '-Os'.
7489
7490'-fno-guess-branch-probability'
7491     Do not guess branch probabilities using heuristics.
7492
7493     GCC uses heuristics to guess branch probabilities if they are not
7494     provided by profiling feedback ('-fprofile-arcs').  These
7495     heuristics are based on the control flow graph.  If some branch
7496     probabilities are specified by '__builtin_expect', then the
7497     heuristics are used to guess branch probabilities for the rest of
7498     the control flow graph, taking the '__builtin_expect' info into
7499     account.  The interactions between the heuristics and
7500     '__builtin_expect' can be complex, and in some cases, it may be
7501     useful to disable the heuristics so that the effects of
7502     '__builtin_expect' are easier to understand.
7503
7504     The default is '-fguess-branch-probability' at levels '-O', '-O2',
7505     '-O3', '-Os'.
7506
7507'-freorder-blocks'
7508     Reorder basic blocks in the compiled function in order to reduce
7509     number of taken branches and improve code locality.
7510
7511     Enabled at levels '-O2', '-O3'.
7512
7513'-freorder-blocks-and-partition'
7514     In addition to reordering basic blocks in the compiled function, in
7515     order to reduce number of taken branches, partitions hot and cold
7516     basic blocks into separate sections of the assembly and .o files,
7517     to improve paging and cache locality performance.
7518
7519     This optimization is automatically turned off in the presence of
7520     exception handling, for linkonce sections, for functions with a
7521     user-defined section attribute and on any architecture that does
7522     not support named sections.
7523
7524     Enabled for x86 at levels '-O2', '-O3'.
7525
7526'-freorder-functions'
7527     Reorder functions in the object file in order to improve code
7528     locality.  This is implemented by using special subsections
7529     '.text.hot' for most frequently executed functions and
7530     '.text.unlikely' for unlikely executed functions.  Reordering is
7531     done by the linker so object file format must support named
7532     sections and linker must place them in a reasonable way.
7533
7534     Also profile feedback must be available to make this option
7535     effective.  See '-fprofile-arcs' for details.
7536
7537     Enabled at levels '-O2', '-O3', '-Os'.
7538
7539'-fstrict-aliasing'
7540     Allow the compiler to assume the strictest aliasing rules
7541     applicable to the language being compiled.  For C (and C++), this
7542     activates optimizations based on the type of expressions.  In
7543     particular, an object of one type is assumed never to reside at the
7544     same address as an object of a different type, unless the types are
7545     almost the same.  For example, an 'unsigned int' can alias an
7546     'int', but not a 'void*' or a 'double'.  A character type may alias
7547     any other type.
7548
7549     Pay special attention to code like this:
7550          union a_union {
7551            int i;
7552            double d;
7553          };
7554
7555          int f() {
7556            union a_union t;
7557            t.d = 3.0;
7558            return t.i;
7559          }
7560     The practice of reading from a different union member than the one
7561     most recently written to (called "type-punning") is common.  Even
7562     with '-fstrict-aliasing', type-punning is allowed, provided the
7563     memory is accessed through the union type.  So, the code above
7564     works as expected.  *Note Structures unions enumerations and
7565     bit-fields implementation::.  However, this code might not:
7566          int f() {
7567            union a_union t;
7568            int* ip;
7569            t.d = 3.0;
7570            ip = &t.i;
7571            return *ip;
7572          }
7573
7574     Similarly, access by taking the address, casting the resulting
7575     pointer and dereferencing the result has undefined behavior, even
7576     if the cast uses a union type, e.g.:
7577          int f() {
7578            double d = 3.0;
7579            return ((union a_union *) &d)->i;
7580          }
7581
7582     The '-fstrict-aliasing' option is enabled at levels '-O2', '-O3',
7583     '-Os'.
7584
7585'-fstrict-overflow'
7586     Allow the compiler to assume strict signed overflow rules,
7587     depending on the language being compiled.  For C (and C++) this
7588     means that overflow when doing arithmetic with signed numbers is
7589     undefined, which means that the compiler may assume that it does
7590     not happen.  This permits various optimizations.  For example, the
7591     compiler assumes that an expression like 'i + 10 > i' is always
7592     true for signed 'i'.  This assumption is only valid if signed
7593     overflow is undefined, as the expression is false if 'i + 10'
7594     overflows when using twos complement arithmetic.  When this option
7595     is in effect any attempt to determine whether an operation on
7596     signed numbers overflows must be written carefully to not actually
7597     involve overflow.
7598
7599     This option also allows the compiler to assume strict pointer
7600     semantics: given a pointer to an object, if adding an offset to
7601     that pointer does not produce a pointer to the same object, the
7602     addition is undefined.  This permits the compiler to conclude that
7603     'p + u > p' is always true for a pointer 'p' and unsigned integer
7604     'u'.  This assumption is only valid because pointer wraparound is
7605     undefined, as the expression is false if 'p + u' overflows using
7606     twos complement arithmetic.
7607
7608     See also the '-fwrapv' option.  Using '-fwrapv' means that integer
7609     signed overflow is fully defined: it wraps.  When '-fwrapv' is
7610     used, there is no difference between '-fstrict-overflow' and
7611     '-fno-strict-overflow' for integers.  With '-fwrapv' certain types
7612     of overflow are permitted.  For example, if the compiler gets an
7613     overflow when doing arithmetic on constants, the overflowed value
7614     can still be used with '-fwrapv', but not otherwise.
7615
7616     The '-fstrict-overflow' option is enabled at levels '-O2', '-O3',
7617     '-Os'.
7618
7619'-falign-functions'
7620'-falign-functions=N'
7621     Align the start of functions to the next power-of-two greater than
7622     N, skipping up to N bytes.  For instance, '-falign-functions=32'
7623     aligns functions to the next 32-byte boundary, but
7624     '-falign-functions=24' aligns to the next 32-byte boundary only if
7625     this can be done by skipping 23 bytes or less.
7626
7627     '-fno-align-functions' and '-falign-functions=1' are equivalent and
7628     mean that functions are not aligned.
7629
7630     Some assemblers only support this flag when N is a power of two; in
7631     that case, it is rounded up.
7632
7633     If N is not specified or is zero, use a machine-dependent default.
7634
7635     Enabled at levels '-O2', '-O3'.
7636
7637'-falign-labels'
7638'-falign-labels=N'
7639     Align all branch targets to a power-of-two boundary, skipping up to
7640     N bytes like '-falign-functions'.  This option can easily make code
7641     slower, because it must insert dummy operations for when the branch
7642     target is reached in the usual flow of the code.
7643
7644     '-fno-align-labels' and '-falign-labels=1' are equivalent and mean
7645     that labels are not aligned.
7646
7647     If '-falign-loops' or '-falign-jumps' are applicable and are
7648     greater than this value, then their values are used instead.
7649
7650     If N is not specified or is zero, use a machine-dependent default
7651     which is very likely to be '1', meaning no alignment.
7652
7653     Enabled at levels '-O2', '-O3'.
7654
7655'-falign-loops'
7656'-falign-loops=N'
7657     Align loops to a power-of-two boundary, skipping up to N bytes like
7658     '-falign-functions'.  If the loops are executed many times, this
7659     makes up for any execution of the dummy operations.
7660
7661     '-fno-align-loops' and '-falign-loops=1' are equivalent and mean
7662     that loops are not aligned.
7663
7664     If N is not specified or is zero, use a machine-dependent default.
7665
7666     Enabled at levels '-O2', '-O3'.
7667
7668'-falign-jumps'
7669'-falign-jumps=N'
7670     Align branch targets to a power-of-two boundary, for branch targets
7671     where the targets can only be reached by jumping, skipping up to N
7672     bytes like '-falign-functions'.  In this case, no dummy operations
7673     need be executed.
7674
7675     '-fno-align-jumps' and '-falign-jumps=1' are equivalent and mean
7676     that loops are not aligned.
7677
7678     If N is not specified or is zero, use a machine-dependent default.
7679
7680     Enabled at levels '-O2', '-O3'.
7681
7682'-funit-at-a-time'
7683     This option is left for compatibility reasons.  '-funit-at-a-time'
7684     has no effect, while '-fno-unit-at-a-time' implies
7685     '-fno-toplevel-reorder' and '-fno-section-anchors'.
7686
7687     Enabled by default.
7688
7689'-fno-toplevel-reorder'
7690     Do not reorder top-level functions, variables, and 'asm'
7691     statements.  Output them in the same order that they appear in the
7692     input file.  When this option is used, unreferenced static
7693     variables are not removed.  This option is intended to support
7694     existing code that relies on a particular ordering.  For new code,
7695     it is better to use attributes when possible.
7696
7697     Enabled at level '-O0'.  When disabled explicitly, it also implies
7698     '-fno-section-anchors', which is otherwise enabled at '-O0' on some
7699     targets.
7700
7701'-fweb'
7702     Constructs webs as commonly used for register allocation purposes
7703     and assign each web individual pseudo register.  This allows the
7704     register allocation pass to operate on pseudos directly, but also
7705     strengthens several other optimization passes, such as CSE, loop
7706     optimizer and trivial dead code remover.  It can, however, make
7707     debugging impossible, since variables no longer stay in a "home
7708     register".
7709
7710     Enabled by default with '-funroll-loops'.
7711
7712'-fwhole-program'
7713     Assume that the current compilation unit represents the whole
7714     program being compiled.  All public functions and variables with
7715     the exception of 'main' and those merged by attribute
7716     'externally_visible' become static functions and in effect are
7717     optimized more aggressively by interprocedural optimizers.
7718
7719     This option should not be used in combination with '-flto'.
7720     Instead relying on a linker plugin should provide safer and more
7721     precise information.
7722
7723'-flto[=N]'
7724     This option runs the standard link-time optimizer.  When invoked
7725     with source code, it generates GIMPLE (one of GCC's internal
7726     representations) and writes it to special ELF sections in the
7727     object file.  When the object files are linked together, all the
7728     function bodies are read from these ELF sections and instantiated
7729     as if they had been part of the same translation unit.
7730
7731     To use the link-time optimizer, '-flto' and optimization options
7732     should be specified at compile time and during the final link.  For
7733     example:
7734
7735          gcc -c -O2 -flto foo.c
7736          gcc -c -O2 -flto bar.c
7737          gcc -o myprog -flto -O2 foo.o bar.o
7738
7739     The first two invocations to GCC save a bytecode representation of
7740     GIMPLE into special ELF sections inside 'foo.o' and 'bar.o'.  The
7741     final invocation reads the GIMPLE bytecode from 'foo.o' and
7742     'bar.o', merges the two files into a single internal image, and
7743     compiles the result as usual.  Since both 'foo.o' and 'bar.o' are
7744     merged into a single image, this causes all the interprocedural
7745     analyses and optimizations in GCC to work across the two files as
7746     if they were a single one.  This means, for example, that the
7747     inliner is able to inline functions in 'bar.o' into functions in
7748     'foo.o' and vice-versa.
7749
7750     Another (simpler) way to enable link-time optimization is:
7751
7752          gcc -o myprog -flto -O2 foo.c bar.c
7753
7754     The above generates bytecode for 'foo.c' and 'bar.c', merges them
7755     together into a single GIMPLE representation and optimizes them as
7756     usual to produce 'myprog'.
7757
7758     The only important thing to keep in mind is that to enable
7759     link-time optimizations you need to use the GCC driver to perform
7760     the link-step.  GCC then automatically performs link-time
7761     optimization if any of the objects involved were compiled with the
7762     '-flto'.  You generally should specify the optimization options to
7763     be used for link-time optimization though GCC will try to be clever
7764     at guessing an optimization level to use from the options used at
7765     compile-time if you fail to specify one at link-time.  You can
7766     always override the automatic decision to do link-time optimization
7767     at link-time by passing '-fno-lto' to the link command.
7768
7769     To make whole program optimization effective, it is necessary to
7770     make certain whole program assumptions.  The compiler needs to know
7771     what functions and variables can be accessed by libraries and
7772     runtime outside of the link-time optimized unit.  When supported by
7773     the linker, the linker plugin (see '-fuse-linker-plugin') passes
7774     information to the compiler about used and externally visible
7775     symbols.  When the linker plugin is not available,
7776     '-fwhole-program' should be used to allow the compiler to make
7777     these assumptions, which leads to more aggressive optimization
7778     decisions.
7779
7780     When '-fuse-linker-plugin' is not enabled then, when a file is
7781     compiled with '-flto', the generated object file is larger than a
7782     regular object file because it contains GIMPLE bytecodes and the
7783     usual final code (see '-ffat-lto-objects'.  This means that object
7784     files with LTO information can be linked as normal object files; if
7785     '-fno-lto' is passed to the linker, no interprocedural
7786     optimizations are applied.  Note that when '-fno-fat-lto-objects'
7787     is enabled the compile-stage is faster but you cannot perform a
7788     regular, non-LTO link on them.
7789
7790     Additionally, the optimization flags used to compile individual
7791     files are not necessarily related to those used at link time.  For
7792     instance,
7793
7794          gcc -c -O0 -ffat-lto-objects -flto foo.c
7795          gcc -c -O0 -ffat-lto-objects -flto bar.c
7796          gcc -o myprog -O3 foo.o bar.o
7797
7798     This produces individual object files with unoptimized assembler
7799     code, but the resulting binary 'myprog' is optimized at '-O3'.  If,
7800     instead, the final binary is generated with '-fno-lto', then
7801     'myprog' is not optimized.
7802
7803     When producing the final binary, GCC only applies link-time
7804     optimizations to those files that contain bytecode.  Therefore, you
7805     can mix and match object files and libraries with GIMPLE bytecodes
7806     and final object code.  GCC automatically selects which files to
7807     optimize in LTO mode and which files to link without further
7808     processing.
7809
7810     There are some code generation flags preserved by GCC when
7811     generating bytecodes, as they need to be used during the final link
7812     stage.  Generally options specified at link-time override those
7813     specified at compile-time.
7814
7815     If you do not specify an optimization level option '-O' at
7816     link-time then GCC will compute one based on the optimization
7817     levels used when compiling the object files.  The highest
7818     optimization level will win here.
7819
7820     Currently, the following options and their setting are take from
7821     the first object file that explicitely specified it: '-fPIC',
7822     '-fpic', '-fpie', '-fcommon', '-fexceptions',
7823     '-fnon-call-exceptions', '-fgnu-tm' and all the '-m' target flags.
7824
7825     Certain ABI changing flags are required to match in all
7826     compilation-units and trying to override this at link-time with a
7827     conflicting value is ignored.  This includes options such as
7828     '-freg-struct-return' and '-fpcc-struct-return'.
7829
7830     Other options such as '-ffp-contract', '-fno-strict-overflow',
7831     '-fwrapv', '-fno-trapv' or '-fno-strict-aliasing' are passed
7832     through to the link stage and merged conservatively for conflicting
7833     translation units.  Specifically '-fno-strict-overflow', '-fwrapv'
7834     and '-fno-trapv' take precedence and for example
7835     '-ffp-contract=off' takes precedence over '-ffp-contract=fast'.
7836     You can override them at linke-time.
7837
7838     It is recommended that you compile all the files participating in
7839     the same link with the same options and also specify those options
7840     at link time.
7841
7842     If LTO encounters objects with C linkage declared with incompatible
7843     types in separate translation units to be linked together
7844     (undefined behavior according to ISO C99 6.2.7), a non-fatal
7845     diagnostic may be issued.  The behavior is still undefined at run
7846     time.  Similar diagnostics may be raised for other languages.
7847
7848     Another feature of LTO is that it is possible to apply
7849     interprocedural optimizations on files written in different
7850     languages:
7851
7852          gcc -c -flto foo.c
7853          g++ -c -flto bar.cc
7854          gfortran -c -flto baz.f90
7855          g++ -o myprog -flto -O3 foo.o bar.o baz.o -lgfortran
7856
7857     Notice that the final link is done with 'g++' to get the C++
7858     runtime libraries and '-lgfortran' is added to get the Fortran
7859     runtime libraries.  In general, when mixing languages in LTO mode,
7860     you should use the same link command options as when mixing
7861     languages in a regular (non-LTO) compilation.
7862
7863     If object files containing GIMPLE bytecode are stored in a library
7864     archive, say 'libfoo.a', it is possible to extract and use them in
7865     an LTO link if you are using a linker with plugin support.  To
7866     create static libraries suitable for LTO, use 'gcc-ar' and
7867     'gcc-ranlib' instead of 'ar' and 'ranlib'; to show the symbols of
7868     object files with GIMPLE bytecode, use 'gcc-nm'.  Those commands
7869     require that 'ar', 'ranlib' and 'nm' have been compiled with plugin
7870     support.  At link time, use the the flag '-fuse-linker-plugin' to
7871     ensure that the library participates in the LTO optimization
7872     process:
7873
7874          gcc -o myprog -O2 -flto -fuse-linker-plugin a.o b.o -lfoo
7875
7876     With the linker plugin enabled, the linker extracts the needed
7877     GIMPLE files from 'libfoo.a' and passes them on to the running GCC
7878     to make them part of the aggregated GIMPLE image to be optimized.
7879
7880     If you are not using a linker with plugin support and/or do not
7881     enable the linker plugin, then the objects inside 'libfoo.a' are
7882     extracted and linked as usual, but they do not participate in the
7883     LTO optimization process.  In order to make a static library
7884     suitable for both LTO optimization and usual linkage, compile its
7885     object files with '-flto' '-ffat-lto-objects'.
7886
7887     Link-time optimizations do not require the presence of the whole
7888     program to operate.  If the program does not require any symbols to
7889     be exported, it is possible to combine '-flto' and
7890     '-fwhole-program' to allow the interprocedural optimizers to use
7891     more aggressive assumptions which may lead to improved optimization
7892     opportunities.  Use of '-fwhole-program' is not needed when linker
7893     plugin is active (see '-fuse-linker-plugin').
7894
7895     The current implementation of LTO makes no attempt to generate
7896     bytecode that is portable between different types of hosts.  The
7897     bytecode files are versioned and there is a strict version check,
7898     so bytecode files generated in one version of GCC will not work
7899     with an older or newer version of GCC.
7900
7901     Link-time optimization does not work well with generation of
7902     debugging information.  Combining '-flto' with '-g' is currently
7903     experimental and expected to produce unexpected results.
7904
7905     If you specify the optional N, the optimization and code generation
7906     done at link time is executed in parallel using N parallel jobs by
7907     utilizing an installed 'make' program.  The environment variable
7908     'MAKE' may be used to override the program used.  The default value
7909     for N is 1.
7910
7911     You can also specify '-flto=jobserver' to use GNU make's job server
7912     mode to determine the number of parallel jobs.  This is useful when
7913     the Makefile calling GCC is already executing in parallel.  You
7914     must prepend a '+' to the command recipe in the parent Makefile for
7915     this to work.  This option likely only works if 'MAKE' is GNU make.
7916
7917'-flto-partition=ALG'
7918     Specify the partitioning algorithm used by the link-time optimizer.
7919     The value is either '1to1' to specify a partitioning mirroring the
7920     original source files or 'balanced' to specify partitioning into
7921     equally sized chunks (whenever possible) or 'max' to create new
7922     partition for every symbol where possible.  Specifying 'none' as an
7923     algorithm disables partitioning and streaming completely.  The
7924     default value is 'balanced'.  While '1to1' can be used as an
7925     workaround for various code ordering issues, the 'max' partitioning
7926     is intended for internal testing only.
7927
7928'-flto-compression-level=N'
7929     This option specifies the level of compression used for
7930     intermediate language written to LTO object files, and is only
7931     meaningful in conjunction with LTO mode ('-flto').  Valid values
7932     are 0 (no compression) to 9 (maximum compression).  Values outside
7933     this range are clamped to either 0 or 9.  If the option is not
7934     given, a default balanced compression setting is used.
7935
7936'-flto-report'
7937     Prints a report with internal details on the workings of the
7938     link-time optimizer.  The contents of this report vary from version
7939     to version.  It is meant to be useful to GCC developers when
7940     processing object files in LTO mode (via '-flto').
7941
7942     Disabled by default.
7943
7944'-flto-report-wpa'
7945     Like '-flto-report', but only print for the WPA phase of Link Time
7946     Optimization.
7947
7948'-fuse-linker-plugin'
7949     Enables the use of a linker plugin during link-time optimization.
7950     This option relies on plugin support in the linker, which is
7951     available in gold or in GNU ld 2.21 or newer.
7952
7953     This option enables the extraction of object files with GIMPLE
7954     bytecode out of library archives.  This improves the quality of
7955     optimization by exposing more code to the link-time optimizer.
7956     This information specifies what symbols can be accessed externally
7957     (by non-LTO object or during dynamic linking).  Resulting code
7958     quality improvements on binaries (and shared libraries that use
7959     hidden visibility) are similar to '-fwhole-program'.  See '-flto'
7960     for a description of the effect of this flag and how to use it.
7961
7962     This option is enabled by default when LTO support in GCC is
7963     enabled and GCC was configured for use with a linker supporting
7964     plugins (GNU ld 2.21 or newer or gold).
7965
7966'-ffat-lto-objects'
7967     Fat LTO objects are object files that contain both the intermediate
7968     language and the object code.  This makes them usable for both LTO
7969     linking and normal linking.  This option is effective only when
7970     compiling with '-flto' and is ignored at link time.
7971
7972     '-fno-fat-lto-objects' improves compilation time over plain LTO,
7973     but requires the complete toolchain to be aware of LTO. It requires
7974     a linker with linker plugin support for basic functionality.
7975     Additionally, 'nm', 'ar' and 'ranlib' need to support linker
7976     plugins to allow a full-featured build environment (capable of
7977     building static libraries etc).  GCC provides the 'gcc-ar',
7978     'gcc-nm', 'gcc-ranlib' wrappers to pass the right options to these
7979     tools.  With non fat LTO makefiles need to be modified to use them.
7980
7981     The default is '-fno-fat-lto-objects' on targets with linker plugin
7982     support.
7983
7984'-fcompare-elim'
7985     After register allocation and post-register allocation instruction
7986     splitting, identify arithmetic instructions that compute processor
7987     flags similar to a comparison operation based on that arithmetic.
7988     If possible, eliminate the explicit comparison operation.
7989
7990     This pass only applies to certain targets that cannot explicitly
7991     represent the comparison operation before register allocation is
7992     complete.
7993
7994     Enabled at levels '-O', '-O2', '-O3', '-Os'.
7995
7996'-fuse-ld=bfd'
7997     Use the 'bfd' linker instead of the default linker.
7998
7999'-fuse-ld=gold'
8000     Use the 'gold' linker instead of the default linker.
8001
8002'-fcprop-registers'
8003     After register allocation and post-register allocation instruction
8004     splitting, perform a copy-propagation pass to try to reduce
8005     scheduling dependencies and occasionally eliminate the copy.
8006
8007     Enabled at levels '-O', '-O2', '-O3', '-Os'.
8008
8009'-fprofile-correction'
8010     Profiles collected using an instrumented binary for multi-threaded
8011     programs may be inconsistent due to missed counter updates.  When
8012     this option is specified, GCC uses heuristics to correct or smooth
8013     out such inconsistencies.  By default, GCC emits an error message
8014     when an inconsistent profile is detected.
8015
8016'-fprofile-dir=PATH'
8017
8018     Set the directory to search for the profile data files in to PATH.
8019     This option affects only the profile data generated by
8020     '-fprofile-generate', '-ftest-coverage', '-fprofile-arcs' and used
8021     by '-fprofile-use' and '-fbranch-probabilities' and its related
8022     options.  Both absolute and relative paths can be used.  By
8023     default, GCC uses the current directory as PATH, thus the profile
8024     data file appears in the same directory as the object file.
8025
8026'-fprofile-generate'
8027'-fprofile-generate=PATH'
8028
8029     Enable options usually used for instrumenting application to
8030     produce profile useful for later recompilation with profile
8031     feedback based optimization.  You must use '-fprofile-generate'
8032     both when compiling and when linking your program.
8033
8034     The following options are enabled: '-fprofile-arcs',
8035     '-fprofile-values', '-fvpt'.
8036
8037     If PATH is specified, GCC looks at the PATH to find the profile
8038     feedback data files.  See '-fprofile-dir'.
8039
8040'-fprofile-use'
8041'-fprofile-use=PATH'
8042     Enable profile feedback directed optimizations, and optimizations
8043     generally profitable only with profile feedback available.
8044
8045     The following options are enabled: '-fbranch-probabilities',
8046     '-fvpt', '-funroll-loops', '-fpeel-loops', '-ftracer',
8047     '-ftree-vectorize', 'ftree-loop-distribute-patterns'
8048
8049     By default, GCC emits an error message if the feedback profiles do
8050     not match the source code.  This error can be turned into a warning
8051     by using '-Wcoverage-mismatch'.  Note this may result in poorly
8052     optimized code.
8053
8054     If PATH is specified, GCC looks at the PATH to find the profile
8055     feedback data files.  See '-fprofile-dir'.
8056
8057 The following options control compiler behavior regarding
8058floating-point arithmetic.  These options trade off between speed and
8059correctness.  All must be specifically enabled.
8060
8061'-ffloat-store'
8062     Do not store floating-point variables in registers, and inhibit
8063     other options that might change whether a floating-point value is
8064     taken from a register or memory.
8065
8066     This option prevents undesirable excess precision on machines such
8067     as the 68000 where the floating registers (of the 68881) keep more
8068     precision than a 'double' is supposed to have.  Similarly for the
8069     x86 architecture.  For most programs, the excess precision does
8070     only good, but a few programs rely on the precise definition of
8071     IEEE floating point.  Use '-ffloat-store' for such programs, after
8072     modifying them to store all pertinent intermediate computations
8073     into variables.
8074
8075'-fexcess-precision=STYLE'
8076     This option allows further control over excess precision on
8077     machines where floating-point registers have more precision than
8078     the IEEE 'float' and 'double' types and the processor does not
8079     support operations rounding to those types.  By default,
8080     '-fexcess-precision=fast' is in effect; this means that operations
8081     are carried out in the precision of the registers and that it is
8082     unpredictable when rounding to the types specified in the source
8083     code takes place.  When compiling C, if
8084     '-fexcess-precision=standard' is specified then excess precision
8085     follows the rules specified in ISO C99; in particular, both casts
8086     and assignments cause values to be rounded to their semantic types
8087     (whereas '-ffloat-store' only affects assignments).  This option is
8088     enabled by default for C if a strict conformance option such as
8089     '-std=c99' is used.
8090
8091     '-fexcess-precision=standard' is not implemented for languages
8092     other than C, and has no effect if '-funsafe-math-optimizations' or
8093     '-ffast-math' is specified.  On the x86, it also has no effect if
8094     '-mfpmath=sse' or '-mfpmath=sse+387' is specified; in the former
8095     case, IEEE semantics apply without excess precision, and in the
8096     latter, rounding is unpredictable.
8097
8098'-ffast-math'
8099     Sets '-fno-math-errno', '-funsafe-math-optimizations',
8100     '-ffinite-math-only', '-fno-rounding-math', '-fno-signaling-nans'
8101     and '-fcx-limited-range'.
8102
8103     This option causes the preprocessor macro '__FAST_MATH__' to be
8104     defined.
8105
8106     This option is not turned on by any '-O' option besides '-Ofast'
8107     since it can result in incorrect output for programs that depend on
8108     an exact implementation of IEEE or ISO rules/specifications for
8109     math functions.  It may, however, yield faster code for programs
8110     that do not require the guarantees of these specifications.
8111
8112'-fno-math-errno'
8113     Do not set 'errno' after calling math functions that are executed
8114     with a single instruction, e.g., 'sqrt'.  A program that relies on
8115     IEEE exceptions for math error handling may want to use this flag
8116     for speed while maintaining IEEE arithmetic compatibility.
8117
8118     This option is not turned on by any '-O' option since it can result
8119     in incorrect output for programs that depend on an exact
8120     implementation of IEEE or ISO rules/specifications for math
8121     functions.  It may, however, yield faster code for programs that do
8122     not require the guarantees of these specifications.
8123
8124     The default is '-fmath-errno'.
8125
8126     On Darwin systems, the math library never sets 'errno'.  There is
8127     therefore no reason for the compiler to consider the possibility
8128     that it might, and '-fno-math-errno' is the default.
8129
8130'-funsafe-math-optimizations'
8131
8132     Allow optimizations for floating-point arithmetic that (a) assume
8133     that arguments and results are valid and (b) may violate IEEE or
8134     ANSI standards.  When used at link-time, it may include libraries
8135     or startup files that change the default FPU control word or other
8136     similar optimizations.
8137
8138     This option is not turned on by any '-O' option since it can result
8139     in incorrect output for programs that depend on an exact
8140     implementation of IEEE or ISO rules/specifications for math
8141     functions.  It may, however, yield faster code for programs that do
8142     not require the guarantees of these specifications.  Enables
8143     '-fno-signed-zeros', '-fno-trapping-math', '-fassociative-math' and
8144     '-freciprocal-math'.
8145
8146     The default is '-fno-unsafe-math-optimizations'.
8147
8148'-fassociative-math'
8149
8150     Allow re-association of operands in series of floating-point
8151     operations.  This violates the ISO C and C++ language standard by
8152     possibly changing computation result.  NOTE: re-ordering may change
8153     the sign of zero as well as ignore NaNs and inhibit or create
8154     underflow or overflow (and thus cannot be used on code that relies
8155     on rounding behavior like '(x + 2**52) - 2**52'.  May also reorder
8156     floating-point comparisons and thus may not be used when ordered
8157     comparisons are required.  This option requires that both
8158     '-fno-signed-zeros' and '-fno-trapping-math' be in effect.
8159     Moreover, it doesn't make much sense with '-frounding-math'.  For
8160     Fortran the option is automatically enabled when both
8161     '-fno-signed-zeros' and '-fno-trapping-math' are in effect.
8162
8163     The default is '-fno-associative-math'.
8164
8165'-freciprocal-math'
8166
8167     Allow the reciprocal of a value to be used instead of dividing by
8168     the value if this enables optimizations.  For example 'x / y' can
8169     be replaced with 'x * (1/y)', which is useful if '(1/y)' is subject
8170     to common subexpression elimination.  Note that this loses
8171     precision and increases the number of flops operating on the value.
8172
8173     The default is '-fno-reciprocal-math'.
8174
8175'-ffinite-math-only'
8176     Allow optimizations for floating-point arithmetic that assume that
8177     arguments and results are not NaNs or +-Infs.
8178
8179     This option is not turned on by any '-O' option since it can result
8180     in incorrect output for programs that depend on an exact
8181     implementation of IEEE or ISO rules/specifications for math
8182     functions.  It may, however, yield faster code for programs that do
8183     not require the guarantees of these specifications.
8184
8185     The default is '-fno-finite-math-only'.
8186
8187'-fno-signed-zeros'
8188     Allow optimizations for floating-point arithmetic that ignore the
8189     signedness of zero.  IEEE arithmetic specifies the behavior of
8190     distinct +0.0 and -0.0 values, which then prohibits simplification
8191     of expressions such as x+0.0 or 0.0*x (even with
8192     '-ffinite-math-only').  This option implies that the sign of a zero
8193     result isn't significant.
8194
8195     The default is '-fsigned-zeros'.
8196
8197'-fno-trapping-math'
8198     Compile code assuming that floating-point operations cannot
8199     generate user-visible traps.  These traps include division by zero,
8200     overflow, underflow, inexact result and invalid operation.  This
8201     option requires that '-fno-signaling-nans' be in effect.  Setting
8202     this option may allow faster code if one relies on "non-stop" IEEE
8203     arithmetic, for example.
8204
8205     This option should never be turned on by any '-O' option since it
8206     can result in incorrect output for programs that depend on an exact
8207     implementation of IEEE or ISO rules/specifications for math
8208     functions.
8209
8210     The default is '-ftrapping-math'.
8211
8212'-frounding-math'
8213     Disable transformations and optimizations that assume default
8214     floating-point rounding behavior.  This is round-to-zero for all
8215     floating point to integer conversions, and round-to-nearest for all
8216     other arithmetic truncations.  This option should be specified for
8217     programs that change the FP rounding mode dynamically, or that may
8218     be executed with a non-default rounding mode.  This option disables
8219     constant folding of floating-point expressions at compile time
8220     (which may be affected by rounding mode) and arithmetic
8221     transformations that are unsafe in the presence of sign-dependent
8222     rounding modes.
8223
8224     The default is '-fno-rounding-math'.
8225
8226     This option is experimental and does not currently guarantee to
8227     disable all GCC optimizations that are affected by rounding mode.
8228     Future versions of GCC may provide finer control of this setting
8229     using C99's 'FENV_ACCESS' pragma.  This command-line option will be
8230     used to specify the default state for 'FENV_ACCESS'.
8231
8232'-fsignaling-nans'
8233     Compile code assuming that IEEE signaling NaNs may generate
8234     user-visible traps during floating-point operations.  Setting this
8235     option disables optimizations that may change the number of
8236     exceptions visible with signaling NaNs.  This option implies
8237     '-ftrapping-math'.
8238
8239     This option causes the preprocessor macro '__SUPPORT_SNAN__' to be
8240     defined.
8241
8242     The default is '-fno-signaling-nans'.
8243
8244     This option is experimental and does not currently guarantee to
8245     disable all GCC optimizations that affect signaling NaN behavior.
8246
8247'-fsingle-precision-constant'
8248     Treat floating-point constants as single precision instead of
8249     implicitly converting them to double-precision constants.
8250
8251'-fcx-limited-range'
8252     When enabled, this option states that a range reduction step is not
8253     needed when performing complex division.  Also, there is no
8254     checking whether the result of a complex multiplication or division
8255     is 'NaN + I*NaN', with an attempt to rescue the situation in that
8256     case.  The default is '-fno-cx-limited-range', but is enabled by
8257     '-ffast-math'.
8258
8259     This option controls the default setting of the ISO C99
8260     'CX_LIMITED_RANGE' pragma.  Nevertheless, the option applies to all
8261     languages.
8262
8263'-fcx-fortran-rules'
8264     Complex multiplication and division follow Fortran rules.  Range
8265     reduction is done as part of complex division, but there is no
8266     checking whether the result of a complex multiplication or division
8267     is 'NaN + I*NaN', with an attempt to rescue the situation in that
8268     case.
8269
8270     The default is '-fno-cx-fortran-rules'.
8271
8272 The following options control optimizations that may improve
8273performance, but are not enabled by any '-O' options.  This section
8274includes experimental options that may produce broken code.
8275
8276'-fbranch-probabilities'
8277     After running a program compiled with '-fprofile-arcs' (*note
8278     Options for Debugging Your Program or 'gcc': Debugging Options.),
8279     you can compile it a second time using '-fbranch-probabilities', to
8280     improve optimizations based on the number of times each branch was
8281     taken.  When a program compiled with '-fprofile-arcs' exits, it
8282     saves arc execution counts to a file called 'SOURCENAME.gcda' for
8283     each source file.  The information in this data file is very
8284     dependent on the structure of the generated code, so you must use
8285     the same source code and the same optimization options for both
8286     compilations.
8287
8288     With '-fbranch-probabilities', GCC puts a 'REG_BR_PROB' note on
8289     each 'JUMP_INSN' and 'CALL_INSN'.  These can be used to improve
8290     optimization.  Currently, they are only used in one place: in
8291     'reorg.c', instead of guessing which path a branch is most likely
8292     to take, the 'REG_BR_PROB' values are used to exactly determine
8293     which path is taken more often.
8294
8295'-fprofile-values'
8296     If combined with '-fprofile-arcs', it adds code so that some data
8297     about values of expressions in the program is gathered.
8298
8299     With '-fbranch-probabilities', it reads back the data gathered from
8300     profiling values of expressions for usage in optimizations.
8301
8302     Enabled with '-fprofile-generate' and '-fprofile-use'.
8303
8304'-fprofile-reorder-functions'
8305     Function reordering based on profile instrumentation collects first
8306     time of execution of a function and orders these functions in
8307     ascending order.
8308
8309     Enabled with '-fprofile-use'.
8310
8311'-fvpt'
8312     If combined with '-fprofile-arcs', this option instructs the
8313     compiler to add code to gather information about values of
8314     expressions.
8315
8316     With '-fbranch-probabilities', it reads back the data gathered and
8317     actually performs the optimizations based on them.  Currently the
8318     optimizations include specialization of division operations using
8319     the knowledge about the value of the denominator.
8320
8321'-frename-registers'
8322     Attempt to avoid false dependencies in scheduled code by making use
8323     of registers left over after register allocation.  This
8324     optimization most benefits processors with lots of registers.
8325     Depending on the debug information format adopted by the target,
8326     however, it can make debugging impossible, since variables no
8327     longer stay in a "home register".
8328
8329     Enabled by default with '-funroll-loops' and '-fpeel-loops'.
8330
8331'-ftracer'
8332     Perform tail duplication to enlarge superblock size.  This
8333     transformation simplifies the control flow of the function allowing
8334     other optimizations to do a better job.
8335
8336     Enabled with '-fprofile-use'.
8337
8338'-funroll-loops'
8339     Unroll loops whose number of iterations can be determined at
8340     compile time or upon entry to the loop.  '-funroll-loops' implies
8341     '-frerun-cse-after-loop', '-fweb' and '-frename-registers'.  It
8342     also turns on complete loop peeling (i.e. complete removal of loops
8343     with a small constant number of iterations).  This option makes
8344     code larger, and may or may not make it run faster.
8345
8346     Enabled with '-fprofile-use'.
8347
8348'-funroll-all-loops'
8349     Unroll all loops, even if their number of iterations is uncertain
8350     when the loop is entered.  This usually makes programs run more
8351     slowly.  '-funroll-all-loops' implies the same options as
8352     '-funroll-loops'.
8353
8354'-fpeel-loops'
8355     Peels loops for which there is enough information that they do not
8356     roll much (from profile feedback).  It also turns on complete loop
8357     peeling (i.e. complete removal of loops with small constant number
8358     of iterations).
8359
8360     Enabled with '-fprofile-use'.
8361
8362'-fmove-loop-invariants'
8363     Enables the loop invariant motion pass in the RTL loop optimizer.
8364     Enabled at level '-O1'
8365
8366'-funswitch-loops'
8367     Move branches with loop invariant conditions out of the loop, with
8368     duplicates of the loop on both branches (modified according to
8369     result of the condition).
8370
8371'-ffunction-sections'
8372'-fdata-sections'
8373     Place each function or data item into its own section in the output
8374     file if the target supports arbitrary sections.  The name of the
8375     function or the name of the data item determines the section's name
8376     in the output file.
8377
8378     Use these options on systems where the linker can perform
8379     optimizations to improve locality of reference in the instruction
8380     space.  Most systems using the ELF object format and SPARC
8381     processors running Solaris 2 have linkers with such optimizations.
8382     AIX may have these optimizations in the future.
8383
8384     Only use these options when there are significant benefits from
8385     doing so.  When you specify these options, the assembler and linker
8386     create larger object and executable files and are also slower.  You
8387     cannot use 'gprof' on all systems if you specify this option, and
8388     you may have problems with debugging if you specify both this
8389     option and '-g'.
8390
8391'-fbranch-target-load-optimize'
8392     Perform branch target register load optimization before prologue /
8393     epilogue threading.  The use of target registers can typically be
8394     exposed only during reload, thus hoisting loads out of loops and
8395     doing inter-block scheduling needs a separate optimization pass.
8396
8397'-fbranch-target-load-optimize2'
8398     Perform branch target register load optimization after prologue /
8399     epilogue threading.
8400
8401'-fbtr-bb-exclusive'
8402     When performing branch target register load optimization, don't
8403     reuse branch target registers within any basic block.
8404
8405'-fstack-protector'
8406     Emit extra code to check for buffer overflows, such as stack
8407     smashing attacks.  This is done by adding a guard variable to
8408     functions with vulnerable objects.  This includes functions that
8409     call 'alloca', and functions with buffers larger than 8 bytes.  The
8410     guards are initialized when a function is entered and then checked
8411     when the function exits.  If a guard check fails, an error message
8412     is printed and the program exits.
8413
8414'-fstack-protector-all'
8415     Like '-fstack-protector' except that all functions are protected.
8416
8417'-fstack-protector-strong'
8418     Like '-fstack-protector' but includes additional functions to be
8419     protected -- those that have local array definitions, or have
8420     references to local frame addresses.
8421
8422'-fsection-anchors'
8423     Try to reduce the number of symbolic address calculations by using
8424     shared "anchor" symbols to address nearby objects.  This
8425     transformation can help to reduce the number of GOT entries and GOT
8426     accesses on some targets.
8427
8428     For example, the implementation of the following function 'foo':
8429
8430          static int a, b, c;
8431          int foo (void) { return a + b + c; }
8432
8433     usually calculates the addresses of all three variables, but if you
8434     compile it with '-fsection-anchors', it accesses the variables from
8435     a common anchor point instead.  The effect is similar to the
8436     following pseudocode (which isn't valid C):
8437
8438          int foo (void)
8439          {
8440            register int *xr = &x;
8441            return xr[&a - &x] + xr[&b - &x] + xr[&c - &x];
8442          }
8443
8444     Not all targets support this option.
8445
8446'--param NAME=VALUE'
8447     In some places, GCC uses various constants to control the amount of
8448     optimization that is done.  For example, GCC does not inline
8449     functions that contain more than a certain number of instructions.
8450     You can control some of these constants on the command line using
8451     the '--param' option.
8452
8453     The names of specific parameters, and the meaning of the values,
8454     are tied to the internals of the compiler, and are subject to
8455     change without notice in future releases.
8456
8457     In each case, the VALUE is an integer.  The allowable choices for
8458     NAME are:
8459
8460     'predictable-branch-outcome'
8461          When branch is predicted to be taken with probability lower
8462          than this threshold (in percent), then it is considered well
8463          predictable.  The default is 10.
8464
8465     'max-crossjump-edges'
8466          The maximum number of incoming edges to consider for
8467          cross-jumping.  The algorithm used by '-fcrossjumping' is
8468          O(N^2) in the number of edges incoming to each block.
8469          Increasing values mean more aggressive optimization, making
8470          the compilation time increase with probably small improvement
8471          in executable size.
8472
8473     'min-crossjump-insns'
8474          The minimum number of instructions that must be matched at the
8475          end of two blocks before cross-jumping is performed on them.
8476          This value is ignored in the case where all instructions in
8477          the block being cross-jumped from are matched.  The default
8478          value is 5.
8479
8480     'max-grow-copy-bb-insns'
8481          The maximum code size expansion factor when copying basic
8482          blocks instead of jumping.  The expansion is relative to a
8483          jump instruction.  The default value is 8.
8484
8485     'max-goto-duplication-insns'
8486          The maximum number of instructions to duplicate to a block
8487          that jumps to a computed goto.  To avoid O(N^2) behavior in a
8488          number of passes, GCC factors computed gotos early in the
8489          compilation process, and unfactors them as late as possible.
8490          Only computed jumps at the end of a basic blocks with no more
8491          than max-goto-duplication-insns are unfactored.  The default
8492          value is 8.
8493
8494     'max-delay-slot-insn-search'
8495          The maximum number of instructions to consider when looking
8496          for an instruction to fill a delay slot.  If more than this
8497          arbitrary number of instructions are searched, the time
8498          savings from filling the delay slot are minimal, so stop
8499          searching.  Increasing values mean more aggressive
8500          optimization, making the compilation time increase with
8501          probably small improvement in execution time.
8502
8503     'max-delay-slot-live-search'
8504          When trying to fill delay slots, the maximum number of
8505          instructions to consider when searching for a block with valid
8506          live register information.  Increasing this arbitrarily chosen
8507          value means more aggressive optimization, increasing the
8508          compilation time.  This parameter should be removed when the
8509          delay slot code is rewritten to maintain the control-flow
8510          graph.
8511
8512     'max-gcse-memory'
8513          The approximate maximum amount of memory that can be allocated
8514          in order to perform the global common subexpression
8515          elimination optimization.  If more memory than specified is
8516          required, the optimization is not done.
8517
8518     'max-gcse-insertion-ratio'
8519          If the ratio of expression insertions to deletions is larger
8520          than this value for any expression, then RTL PRE inserts or
8521          removes the expression and thus leaves partially redundant
8522          computations in the instruction stream.  The default value is
8523          20.
8524
8525     'max-pending-list-length'
8526          The maximum number of pending dependencies scheduling allows
8527          before flushing the current state and starting over.  Large
8528          functions with few branches or calls can create excessively
8529          large lists which needlessly consume memory and resources.
8530
8531     'max-modulo-backtrack-attempts'
8532          The maximum number of backtrack attempts the scheduler should
8533          make when modulo scheduling a loop.  Larger values can
8534          exponentially increase compilation time.
8535
8536     'max-inline-insns-single'
8537          Several parameters control the tree inliner used in GCC.  This
8538          number sets the maximum number of instructions (counted in
8539          GCC's internal representation) in a single function that the
8540          tree inliner considers for inlining.  This only affects
8541          functions declared inline and methods implemented in a class
8542          declaration (C++).  The default value is 400.
8543
8544     'max-inline-insns-auto'
8545          When you use '-finline-functions' (included in '-O3'), a lot
8546          of functions that would otherwise not be considered for
8547          inlining by the compiler are investigated.  To those
8548          functions, a different (more restrictive) limit compared to
8549          functions declared inline can be applied.  The default value
8550          is 40.
8551
8552     'inline-min-speedup'
8553          When estimated performance improvement of caller + callee
8554          runtime exceeds this threshold (in precent), the function can
8555          be inlined regardless the limit on '--param
8556          max-inline-insns-single' and '--param max-inline-insns-auto'.
8557
8558     'large-function-insns'
8559          The limit specifying really large functions.  For functions
8560          larger than this limit after inlining, inlining is constrained
8561          by '--param large-function-growth'.  This parameter is useful
8562          primarily to avoid extreme compilation time caused by
8563          non-linear algorithms used by the back end.  The default value
8564          is 2700.
8565
8566     'large-function-growth'
8567          Specifies maximal growth of large function caused by inlining
8568          in percents.  The default value is 100 which limits large
8569          function growth to 2.0 times the original size.
8570
8571     'large-unit-insns'
8572          The limit specifying large translation unit.  Growth caused by
8573          inlining of units larger than this limit is limited by
8574          '--param inline-unit-growth'.  For small units this might be
8575          too tight.  For example, consider a unit consisting of
8576          function A that is inline and B that just calls A three times.
8577          If B is small relative to A, the growth of unit is 300\% and
8578          yet such inlining is very sane.  For very large units
8579          consisting of small inlineable functions, however, the overall
8580          unit growth limit is needed to avoid exponential explosion of
8581          code size.  Thus for smaller units, the size is increased to
8582          '--param large-unit-insns' before applying '--param
8583          inline-unit-growth'.  The default is 10000.
8584
8585     'inline-unit-growth'
8586          Specifies maximal overall growth of the compilation unit
8587          caused by inlining.  The default value is 30 which limits unit
8588          growth to 1.3 times the original size.
8589
8590     'ipcp-unit-growth'
8591          Specifies maximal overall growth of the compilation unit
8592          caused by interprocedural constant propagation.  The default
8593          value is 10 which limits unit growth to 1.1 times the original
8594          size.
8595
8596     'large-stack-frame'
8597          The limit specifying large stack frames.  While inlining the
8598          algorithm is trying to not grow past this limit too much.  The
8599          default value is 256 bytes.
8600
8601     'large-stack-frame-growth'
8602          Specifies maximal growth of large stack frames caused by
8603          inlining in percents.  The default value is 1000 which limits
8604          large stack frame growth to 11 times the original size.
8605
8606     'max-inline-insns-recursive'
8607     'max-inline-insns-recursive-auto'
8608          Specifies the maximum number of instructions an out-of-line
8609          copy of a self-recursive inline function can grow into by
8610          performing recursive inlining.
8611
8612          For functions declared inline, '--param
8613          max-inline-insns-recursive' is taken into account.  For
8614          functions not declared inline, recursive inlining happens only
8615          when '-finline-functions' (included in '-O3') is enabled and
8616          '--param max-inline-insns-recursive-auto' is used.  The
8617          default value is 450.
8618
8619     'max-inline-recursive-depth'
8620     'max-inline-recursive-depth-auto'
8621          Specifies the maximum recursion depth used for recursive
8622          inlining.
8623
8624          For functions declared inline, '--param
8625          max-inline-recursive-depth' is taken into account.  For
8626          functions not declared inline, recursive inlining happens only
8627          when '-finline-functions' (included in '-O3') is enabled and
8628          '--param max-inline-recursive-depth-auto' is used.  The
8629          default value is 8.
8630
8631     'min-inline-recursive-probability'
8632          Recursive inlining is profitable only for function having deep
8633          recursion in average and can hurt for function having little
8634          recursion depth by increasing the prologue size or complexity
8635          of function body to other optimizers.
8636
8637          When profile feedback is available (see '-fprofile-generate')
8638          the actual recursion depth can be guessed from probability
8639          that function recurses via a given call expression.  This
8640          parameter limits inlining only to call expressions whose
8641          probability exceeds the given threshold (in percents).  The
8642          default value is 10.
8643
8644     'early-inlining-insns'
8645          Specify growth that the early inliner can make.  In effect it
8646          increases the amount of inlining for code having a large
8647          abstraction penalty.  The default value is 10.
8648
8649     'max-early-inliner-iterations'
8650     'max-early-inliner-iterations'
8651          Limit of iterations of the early inliner.  This basically
8652          bounds the number of nested indirect calls the early inliner
8653          can resolve.  Deeper chains are still handled by late
8654          inlining.
8655
8656     'comdat-sharing-probability'
8657     'comdat-sharing-probability'
8658          Probability (in percent) that C++ inline function with comdat
8659          visibility are shared across multiple compilation units.  The
8660          default value is 20.
8661
8662     'min-vect-loop-bound'
8663          The minimum number of iterations under which loops are not
8664          vectorized when '-ftree-vectorize' is used.  The number of
8665          iterations after vectorization needs to be greater than the
8666          value specified by this option to allow vectorization.  The
8667          default value is 0.
8668
8669     'gcse-cost-distance-ratio'
8670          Scaling factor in calculation of maximum distance an
8671          expression can be moved by GCSE optimizations.  This is
8672          currently supported only in the code hoisting pass.  The
8673          bigger the ratio, the more aggressive code hoisting is with
8674          simple expressions, i.e., the expressions that have cost less
8675          than 'gcse-unrestricted-cost'.  Specifying 0 disables hoisting
8676          of simple expressions.  The default value is 10.
8677
8678     'gcse-unrestricted-cost'
8679          Cost, roughly measured as the cost of a single typical machine
8680          instruction, at which GCSE optimizations do not constrain the
8681          distance an expression can travel.  This is currently
8682          supported only in the code hoisting pass.  The lesser the
8683          cost, the more aggressive code hoisting is.  Specifying 0
8684          allows all expressions to travel unrestricted distances.  The
8685          default value is 3.
8686
8687     'max-hoist-depth'
8688          The depth of search in the dominator tree for expressions to
8689          hoist.  This is used to avoid quadratic behavior in hoisting
8690          algorithm.  The value of 0 does not limit on the search, but
8691          may slow down compilation of huge functions.  The default
8692          value is 30.
8693
8694     'max-tail-merge-comparisons'
8695          The maximum amount of similar bbs to compare a bb with.  This
8696          is used to avoid quadratic behavior in tree tail merging.  The
8697          default value is 10.
8698
8699     'max-tail-merge-iterations'
8700          The maximum amount of iterations of the pass over the
8701          function.  This is used to limit compilation time in tree tail
8702          merging.  The default value is 2.
8703
8704     'max-unrolled-insns'
8705          The maximum number of instructions that a loop may have to be
8706          unrolled.  If a loop is unrolled, this parameter also
8707          determines how many times the loop code is unrolled.
8708
8709     'max-average-unrolled-insns'
8710          The maximum number of instructions biased by probabilities of
8711          their execution that a loop may have to be unrolled.  If a
8712          loop is unrolled, this parameter also determines how many
8713          times the loop code is unrolled.
8714
8715     'max-unroll-times'
8716          The maximum number of unrollings of a single loop.
8717
8718     'max-peeled-insns'
8719          The maximum number of instructions that a loop may have to be
8720          peeled.  If a loop is peeled, this parameter also determines
8721          how many times the loop code is peeled.
8722
8723     'max-peel-times'
8724          The maximum number of peelings of a single loop.
8725
8726     'max-peel-branches'
8727          The maximum number of branches on the hot path through the
8728          peeled sequence.
8729
8730     'max-completely-peeled-insns'
8731          The maximum number of insns of a completely peeled loop.
8732
8733     'max-completely-peel-times'
8734          The maximum number of iterations of a loop to be suitable for
8735          complete peeling.
8736
8737     'max-completely-peel-loop-nest-depth'
8738          The maximum depth of a loop nest suitable for complete
8739          peeling.
8740
8741     'max-unswitch-insns'
8742          The maximum number of insns of an unswitched loop.
8743
8744     'max-unswitch-level'
8745          The maximum number of branches unswitched in a single loop.
8746
8747     'lim-expensive'
8748          The minimum cost of an expensive expression in the loop
8749          invariant motion.
8750
8751     'iv-consider-all-candidates-bound'
8752          Bound on number of candidates for induction variables, below
8753          which all candidates are considered for each use in induction
8754          variable optimizations.  If there are more candidates than
8755          this, only the most relevant ones are considered to avoid
8756          quadratic time complexity.
8757
8758     'iv-max-considered-uses'
8759          The induction variable optimizations give up on loops that
8760          contain more induction variable uses.
8761
8762     'iv-always-prune-cand-set-bound'
8763          If the number of candidates in the set is smaller than this
8764          value, always try to remove unnecessary ivs from the set when
8765          adding a new one.
8766
8767     'scev-max-expr-size'
8768          Bound on size of expressions used in the scalar evolutions
8769          analyzer.  Large expressions slow the analyzer.
8770
8771     'scev-max-expr-complexity'
8772          Bound on the complexity of the expressions in the scalar
8773          evolutions analyzer.  Complex expressions slow the analyzer.
8774
8775     'omega-max-vars'
8776          The maximum number of variables in an Omega constraint system.
8777          The default value is 128.
8778
8779     'omega-max-geqs'
8780          The maximum number of inequalities in an Omega constraint
8781          system.  The default value is 256.
8782
8783     'omega-max-eqs'
8784          The maximum number of equalities in an Omega constraint
8785          system.  The default value is 128.
8786
8787     'omega-max-wild-cards'
8788          The maximum number of wildcard variables that the Omega solver
8789          is able to insert.  The default value is 18.
8790
8791     'omega-hash-table-size'
8792          The size of the hash table in the Omega solver.  The default
8793          value is 550.
8794
8795     'omega-max-keys'
8796          The maximal number of keys used by the Omega solver.  The
8797          default value is 500.
8798
8799     'omega-eliminate-redundant-constraints'
8800          When set to 1, use expensive methods to eliminate all
8801          redundant constraints.  The default value is 0.
8802
8803     'vect-max-version-for-alignment-checks'
8804          The maximum number of run-time checks that can be performed
8805          when doing loop versioning for alignment in the vectorizer.
8806
8807     'vect-max-version-for-alias-checks'
8808          The maximum number of run-time checks that can be performed
8809          when doing loop versioning for alias in the vectorizer.
8810
8811     'vect-max-peeling-for-alignment'
8812          The maximum number of loop peels to enhance access alignment
8813          for vectorizer.  Value -1 means 'no limit'.
8814
8815     'max-iterations-to-track'
8816          The maximum number of iterations of a loop the brute-force
8817          algorithm for analysis of the number of iterations of the loop
8818          tries to evaluate.
8819
8820     'hot-bb-count-ws-permille'
8821          A basic block profile count is considered hot if it
8822          contributes to the given permillage (i.e.  0...1000) of the
8823          entire profiled execution.
8824
8825     'hot-bb-frequency-fraction'
8826          Select fraction of the entry block frequency of executions of
8827          basic block in function given basic block needs to have to be
8828          considered hot.
8829
8830     'max-predicted-iterations'
8831          The maximum number of loop iterations we predict statically.
8832          This is useful in cases where a function contains a single
8833          loop with known bound and another loop with unknown bound.
8834          The known number of iterations is predicted correctly, while
8835          the unknown number of iterations average to roughly 10.  This
8836          means that the loop without bounds appears artificially cold
8837          relative to the other one.
8838
8839     'builtin-expect-probability'
8840          Control the probability of the expression having the specified
8841          value.  This parameter takes a percentage (i.e.  0 ...  100)
8842          as input.  The default probability of 90 is obtained
8843          empirically.
8844
8845     'align-threshold'
8846
8847          Select fraction of the maximal frequency of executions of a
8848          basic block in a function to align the basic block.
8849
8850     'align-loop-iterations'
8851
8852          A loop expected to iterate at least the selected number of
8853          iterations is aligned.
8854
8855     'tracer-dynamic-coverage'
8856     'tracer-dynamic-coverage-feedback'
8857
8858          This value is used to limit superblock formation once the
8859          given percentage of executed instructions is covered.  This
8860          limits unnecessary code size expansion.
8861
8862          The 'tracer-dynamic-coverage-feedback' is used only when
8863          profile feedback is available.  The real profiles (as opposed
8864          to statically estimated ones) are much less balanced allowing
8865          the threshold to be larger value.
8866
8867     'tracer-max-code-growth'
8868          Stop tail duplication once code growth has reached given
8869          percentage.  This is a rather artificial limit, as most of the
8870          duplicates are eliminated later in cross jumping, so it may be
8871          set to much higher values than is the desired code growth.
8872
8873     'tracer-min-branch-ratio'
8874
8875          Stop reverse growth when the reverse probability of best edge
8876          is less than this threshold (in percent).
8877
8878     'tracer-min-branch-ratio'
8879     'tracer-min-branch-ratio-feedback'
8880
8881          Stop forward growth if the best edge has probability lower
8882          than this threshold.
8883
8884          Similarly to 'tracer-dynamic-coverage' two values are present,
8885          one for compilation for profile feedback and one for
8886          compilation without.  The value for compilation with profile
8887          feedback needs to be more conservative (higher) in order to
8888          make tracer effective.
8889
8890     'max-cse-path-length'
8891
8892          The maximum number of basic blocks on path that CSE considers.
8893          The default is 10.
8894
8895     'max-cse-insns'
8896          The maximum number of instructions CSE processes before
8897          flushing.  The default is 1000.
8898
8899     'ggc-min-expand'
8900
8901          GCC uses a garbage collector to manage its own memory
8902          allocation.  This parameter specifies the minimum percentage
8903          by which the garbage collector's heap should be allowed to
8904          expand between collections.  Tuning this may improve
8905          compilation speed; it has no effect on code generation.
8906
8907          The default is 30% + 70% * (RAM/1GB) with an upper bound of
8908          100% when RAM >= 1GB.  If 'getrlimit' is available, the notion
8909          of "RAM" is the smallest of actual RAM and 'RLIMIT_DATA' or
8910          'RLIMIT_AS'.  If GCC is not able to calculate RAM on a
8911          particular platform, the lower bound of 30% is used.  Setting
8912          this parameter and 'ggc-min-heapsize' to zero causes a full
8913          collection to occur at every opportunity.  This is extremely
8914          slow, but can be useful for debugging.
8915
8916     'ggc-min-heapsize'
8917
8918          Minimum size of the garbage collector's heap before it begins
8919          bothering to collect garbage.  The first collection occurs
8920          after the heap expands by 'ggc-min-expand'% beyond
8921          'ggc-min-heapsize'.  Again, tuning this may improve
8922          compilation speed, and has no effect on code generation.
8923
8924          The default is the smaller of RAM/8, RLIMIT_RSS, or a limit
8925          that tries to ensure that RLIMIT_DATA or RLIMIT_AS are not
8926          exceeded, but with a lower bound of 4096 (four megabytes) and
8927          an upper bound of 131072 (128 megabytes).  If GCC is not able
8928          to calculate RAM on a particular platform, the lower bound is
8929          used.  Setting this parameter very large effectively disables
8930          garbage collection.  Setting this parameter and
8931          'ggc-min-expand' to zero causes a full collection to occur at
8932          every opportunity.
8933
8934     'max-reload-search-insns'
8935          The maximum number of instruction reload should look backward
8936          for equivalent register.  Increasing values mean more
8937          aggressive optimization, making the compilation time increase
8938          with probably slightly better performance.  The default value
8939          is 100.
8940
8941     'max-cselib-memory-locations'
8942          The maximum number of memory locations cselib should take into
8943          account.  Increasing values mean more aggressive optimization,
8944          making the compilation time increase with probably slightly
8945          better performance.  The default value is 500.
8946
8947     'reorder-blocks-duplicate'
8948     'reorder-blocks-duplicate-feedback'
8949
8950          Used by the basic block reordering pass to decide whether to
8951          use unconditional branch or duplicate the code on its
8952          destination.  Code is duplicated when its estimated size is
8953          smaller than this value multiplied by the estimated size of
8954          unconditional jump in the hot spots of the program.
8955
8956          The 'reorder-block-duplicate-feedback' is used only when
8957          profile feedback is available.  It may be set to higher values
8958          than 'reorder-block-duplicate' since information about the hot
8959          spots is more accurate.
8960
8961     'max-sched-ready-insns'
8962          The maximum number of instructions ready to be issued the
8963          scheduler should consider at any given time during the first
8964          scheduling pass.  Increasing values mean more thorough
8965          searches, making the compilation time increase with probably
8966          little benefit.  The default value is 100.
8967
8968     'max-sched-region-blocks'
8969          The maximum number of blocks in a region to be considered for
8970          interblock scheduling.  The default value is 10.
8971
8972     'max-pipeline-region-blocks'
8973          The maximum number of blocks in a region to be considered for
8974          pipelining in the selective scheduler.  The default value is
8975          15.
8976
8977     'max-sched-region-insns'
8978          The maximum number of insns in a region to be considered for
8979          interblock scheduling.  The default value is 100.
8980
8981     'max-pipeline-region-insns'
8982          The maximum number of insns in a region to be considered for
8983          pipelining in the selective scheduler.  The default value is
8984          200.
8985
8986     'min-spec-prob'
8987          The minimum probability (in percents) of reaching a source
8988          block for interblock speculative scheduling.  The default
8989          value is 40.
8990
8991     'max-sched-extend-regions-iters'
8992          The maximum number of iterations through CFG to extend
8993          regions.  A value of 0 (the default) disables region
8994          extensions.
8995
8996     'max-sched-insn-conflict-delay'
8997          The maximum conflict delay for an insn to be considered for
8998          speculative motion.  The default value is 3.
8999
9000     'sched-spec-prob-cutoff'
9001          The minimal probability of speculation success (in percents),
9002          so that speculative insns are scheduled.  The default value is
9003          40.
9004
9005     'sched-spec-state-edge-prob-cutoff'
9006          The minimum probability an edge must have for the scheduler to
9007          save its state across it.  The default value is 10.
9008
9009     'sched-mem-true-dep-cost'
9010          Minimal distance (in CPU cycles) between store and load
9011          targeting same memory locations.  The default value is 1.
9012
9013     'selsched-max-lookahead'
9014          The maximum size of the lookahead window of selective
9015          scheduling.  It is a depth of search for available
9016          instructions.  The default value is 50.
9017
9018     'selsched-max-sched-times'
9019          The maximum number of times that an instruction is scheduled
9020          during selective scheduling.  This is the limit on the number
9021          of iterations through which the instruction may be pipelined.
9022          The default value is 2.
9023
9024     'selsched-max-insns-to-rename'
9025          The maximum number of best instructions in the ready list that
9026          are considered for renaming in the selective scheduler.  The
9027          default value is 2.
9028
9029     'sms-min-sc'
9030          The minimum value of stage count that swing modulo scheduler
9031          generates.  The default value is 2.
9032
9033     'max-last-value-rtl'
9034          The maximum size measured as number of RTLs that can be
9035          recorded in an expression in combiner for a pseudo register as
9036          last known value of that register.  The default is 10000.
9037
9038     'integer-share-limit'
9039          Small integer constants can use a shared data structure,
9040          reducing the compiler's memory usage and increasing its speed.
9041          This sets the maximum value of a shared integer constant.  The
9042          default value is 256.
9043
9044     'ssp-buffer-size'
9045          The minimum size of buffers (i.e. arrays) that receive stack
9046          smashing protection when '-fstack-protection' is used.
9047
9048     'min-size-for-stack-sharing'
9049          The minimum size of variables taking part in stack slot
9050          sharing when not optimizing.  The default value is 32.
9051
9052     'max-jump-thread-duplication-stmts'
9053          Maximum number of statements allowed in a block that needs to
9054          be duplicated when threading jumps.
9055
9056     'max-fields-for-field-sensitive'
9057          Maximum number of fields in a structure treated in a field
9058          sensitive manner during pointer analysis.  The default is zero
9059          for '-O0' and '-O1', and 100 for '-Os', '-O2', and '-O3'.
9060
9061     'prefetch-latency'
9062          Estimate on average number of instructions that are executed
9063          before prefetch finishes.  The distance prefetched ahead is
9064          proportional to this constant.  Increasing this number may
9065          also lead to less streams being prefetched (see
9066          'simultaneous-prefetches').
9067
9068     'simultaneous-prefetches'
9069          Maximum number of prefetches that can run at the same time.
9070
9071     'l1-cache-line-size'
9072          The size of cache line in L1 cache, in bytes.
9073
9074     'l1-cache-size'
9075          The size of L1 cache, in kilobytes.
9076
9077     'l2-cache-size'
9078          The size of L2 cache, in kilobytes.
9079
9080     'min-insn-to-prefetch-ratio'
9081          The minimum ratio between the number of instructions and the
9082          number of prefetches to enable prefetching in a loop.
9083
9084     'prefetch-min-insn-to-mem-ratio'
9085          The minimum ratio between the number of instructions and the
9086          number of memory references to enable prefetching in a loop.
9087
9088     'use-canonical-types'
9089          Whether the compiler should use the "canonical" type system.
9090          By default, this should always be 1, which uses a more
9091          efficient internal mechanism for comparing types in C++ and
9092          Objective-C++.  However, if bugs in the canonical type system
9093          are causing compilation failures, set this value to 0 to
9094          disable canonical types.
9095
9096     'switch-conversion-max-branch-ratio'
9097          Switch initialization conversion refuses to create arrays that
9098          are bigger than 'switch-conversion-max-branch-ratio' times the
9099          number of branches in the switch.
9100
9101     'max-partial-antic-length'
9102          Maximum length of the partial antic set computed during the
9103          tree partial redundancy elimination optimization
9104          ('-ftree-pre') when optimizing at '-O3' and above.  For some
9105          sorts of source code the enhanced partial redundancy
9106          elimination optimization can run away, consuming all of the
9107          memory available on the host machine.  This parameter sets a
9108          limit on the length of the sets that are computed, which
9109          prevents the runaway behavior.  Setting a value of 0 for this
9110          parameter allows an unlimited set length.
9111
9112     'sccvn-max-scc-size'
9113          Maximum size of a strongly connected component (SCC) during
9114          SCCVN processing.  If this limit is hit, SCCVN processing for
9115          the whole function is not done and optimizations depending on
9116          it are disabled.  The default maximum SCC size is 10000.
9117
9118     'sccvn-max-alias-queries-per-access'
9119          Maximum number of alias-oracle queries we perform when looking
9120          for redundancies for loads and stores.  If this limit is hit
9121          the search is aborted and the load or store is not considered
9122          redundant.  The number of queries is algorithmically limited
9123          to the number of stores on all paths from the load to the
9124          function entry.  The default maxmimum number of queries is
9125          1000.
9126
9127     'ira-max-loops-num'
9128          IRA uses regional register allocation by default.  If a
9129          function contains more loops than the number given by this
9130          parameter, only at most the given number of the most
9131          frequently-executed loops form regions for regional register
9132          allocation.  The default value of the parameter is 100.
9133
9134     'ira-max-conflict-table-size'
9135          Although IRA uses a sophisticated algorithm to compress the
9136          conflict table, the table can still require excessive amounts
9137          of memory for huge functions.  If the conflict table for a
9138          function could be more than the size in MB given by this
9139          parameter, the register allocator instead uses a faster,
9140          simpler, and lower-quality algorithm that does not require
9141          building a pseudo-register conflict table.  The default value
9142          of the parameter is 2000.
9143
9144     'ira-loop-reserved-regs'
9145          IRA can be used to evaluate more accurate register pressure in
9146          loops for decisions to move loop invariants (see '-O3').  The
9147          number of available registers reserved for some other purposes
9148          is given by this parameter.  The default value of the
9149          parameter is 2, which is the minimal number of registers
9150          needed by typical instructions.  This value is the best found
9151          from numerous experiments.
9152
9153     'loop-invariant-max-bbs-in-loop'
9154          Loop invariant motion can be very expensive, both in
9155          compilation time and in amount of needed compile-time memory,
9156          with very large loops.  Loops with more basic blocks than this
9157          parameter won't have loop invariant motion optimization
9158          performed on them.  The default value of the parameter is 1000
9159          for '-O1' and 10000 for '-O2' and above.
9160
9161     'loop-max-datarefs-for-datadeps'
9162          Building data dapendencies is expensive for very large loops.
9163          This parameter limits the number of data references in loops
9164          that are considered for data dependence analysis.  These large
9165          loops are no handled by the optimizations using loop data
9166          dependencies.  The default value is 1000.
9167
9168     'max-vartrack-size'
9169          Sets a maximum number of hash table slots to use during
9170          variable tracking dataflow analysis of any function.  If this
9171          limit is exceeded with variable tracking at assignments
9172          enabled, analysis for that function is retried without it,
9173          after removing all debug insns from the function.  If the
9174          limit is exceeded even without debug insns, var tracking
9175          analysis is completely disabled for the function.  Setting the
9176          parameter to zero makes it unlimited.
9177
9178     'max-vartrack-expr-depth'
9179          Sets a maximum number of recursion levels when attempting to
9180          map variable names or debug temporaries to value expressions.
9181          This trades compilation time for more complete debug
9182          information.  If this is set too low, value expressions that
9183          are available and could be represented in debug information
9184          may end up not being used; setting this higher may enable the
9185          compiler to find more complex debug expressions, but compile
9186          time and memory use may grow.  The default is 12.
9187
9188     'min-nondebug-insn-uid'
9189          Use uids starting at this parameter for nondebug insns.  The
9190          range below the parameter is reserved exclusively for debug
9191          insns created by '-fvar-tracking-assignments', but debug insns
9192          may get (non-overlapping) uids above it if the reserved range
9193          is exhausted.
9194
9195     'ipa-sra-ptr-growth-factor'
9196          IPA-SRA replaces a pointer to an aggregate with one or more
9197          new parameters only when their cumulative size is less or
9198          equal to 'ipa-sra-ptr-growth-factor' times the size of the
9199          original pointer parameter.
9200
9201     'tm-max-aggregate-size'
9202          When making copies of thread-local variables in a transaction,
9203          this parameter specifies the size in bytes after which
9204          variables are saved with the logging functions as opposed to
9205          save/restore code sequence pairs.  This option only applies
9206          when using '-fgnu-tm'.
9207
9208     'graphite-max-nb-scop-params'
9209          To avoid exponential effects in the Graphite loop transforms,
9210          the number of parameters in a Static Control Part (SCoP) is
9211          bounded.  The default value is 10 parameters.  A variable
9212          whose value is unknown at compilation time and defined outside
9213          a SCoP is a parameter of the SCoP.
9214
9215     'graphite-max-bbs-per-function'
9216          To avoid exponential effects in the detection of SCoPs, the
9217          size of the functions analyzed by Graphite is bounded.  The
9218          default value is 100 basic blocks.
9219
9220     'loop-block-tile-size'
9221          Loop blocking or strip mining transforms, enabled with
9222          '-floop-block' or '-floop-strip-mine', strip mine each loop in
9223          the loop nest by a given number of iterations.  The strip
9224          length can be changed using the 'loop-block-tile-size'
9225          parameter.  The default value is 51 iterations.
9226
9227     'ipa-cp-value-list-size'
9228          IPA-CP attempts to track all possible values and types passed
9229          to a function's parameter in order to propagate them and
9230          perform devirtualization.  'ipa-cp-value-list-size' is the
9231          maximum number of values and types it stores per one formal
9232          parameter of a function.
9233
9234     'ipa-cp-eval-threshold'
9235          IPA-CP calculates its own score of cloning profitability
9236          heuristics and performs those cloning opportunities with
9237          scores that exceed 'ipa-cp-eval-threshold'.
9238
9239     'ipa-max-agg-items'
9240          IPA-CP is also capable to propagate a number of scalar values
9241          passed in an aggregate.  'ipa-max-agg-items' controls the
9242          maximum number of such values per one parameter.
9243
9244     'ipa-cp-loop-hint-bonus'
9245          When IPA-CP determines that a cloning candidate would make the
9246          number of iterations of a loop known, it adds a bonus of
9247          'ipa-cp-loop-hint-bonus' bonus to the profitability score of
9248          the candidate.
9249
9250     'ipa-cp-array-index-hint-bonus'
9251          When IPA-CP determines that a cloning candidate would make the
9252          index of an array access known, it adds a bonus of
9253          'ipa-cp-array-index-hint-bonus' bonus to the profitability
9254          score of the candidate.
9255
9256     'lto-partitions'
9257          Specify desired number of partitions produced during WHOPR
9258          compilation.  The number of partitions should exceed the
9259          number of CPUs used for compilation.  The default value is 32.
9260
9261     'lto-minpartition'
9262          Size of minimal partition for WHOPR (in estimated
9263          instructions).  This prevents expenses of splitting very small
9264          programs into too many partitions.
9265
9266     'cxx-max-namespaces-for-diagnostic-help'
9267          The maximum number of namespaces to consult for suggestions
9268          when C++ name lookup fails for an identifier.  The default is
9269          1000.
9270
9271     'sink-frequency-threshold'
9272          The maximum relative execution frequency (in percents) of the
9273          target block relative to a statement's original block to allow
9274          statement sinking of a statement.  Larger numbers result in
9275          more aggressive statement sinking.  The default value is 75.
9276          A small positive adjustment is applied for statements with
9277          memory operands as those are even more profitable so sink.
9278
9279     'max-stores-to-sink'
9280          The maximum number of conditional stores paires that can be
9281          sunk.  Set to 0 if either vectorization ('-ftree-vectorize')
9282          or if-conversion ('-ftree-loop-if-convert') is disabled.  The
9283          default is 2.
9284
9285     'allow-load-data-races'
9286          Allow optimizers to introduce new data races on loads.  Set to
9287          1 to allow, otherwise to 0.  This option is enabled by default
9288          unless implicitly set by the '-fmemory-model=' option.
9289
9290     'allow-store-data-races'
9291          Allow optimizers to introduce new data races on stores.  Set
9292          to 1 to allow, otherwise to 0.  This option is enabled by
9293          default unless implicitly set by the '-fmemory-model=' option.
9294
9295     'allow-packed-load-data-races'
9296          Allow optimizers to introduce new data races on packed data
9297          loads.  Set to 1 to allow, otherwise to 0.  This option is
9298          enabled by default unless implicitly set by the
9299          '-fmemory-model=' option.
9300
9301     'allow-packed-store-data-races'
9302          Allow optimizers to introduce new data races on packed data
9303          stores.  Set to 1 to allow, otherwise to 0.  This option is
9304          enabled by default unless implicitly set by the
9305          '-fmemory-model=' option.
9306
9307     'case-values-threshold'
9308          The smallest number of different values for which it is best
9309          to use a jump-table instead of a tree of conditional branches.
9310          If the value is 0, use the default for the machine.  The
9311          default is 0.
9312
9313     'tree-reassoc-width'
9314          Set the maximum number of instructions executed in parallel in
9315          reassociated tree.  This parameter overrides target dependent
9316          heuristics used by default if has non zero value.
9317
9318     'sched-pressure-algorithm'
9319          Choose between the two available implementations of
9320          '-fsched-pressure'.  Algorithm 1 is the original
9321          implementation and is the more likely to prevent instructions
9322          from being reordered.  Algorithm 2 was designed to be a
9323          compromise between the relatively conservative approach taken
9324          by algorithm 1 and the rather aggressive approach taken by the
9325          default scheduler.  It relies more heavily on having a regular
9326          register file and accurate register pressure classes.  See
9327          'haifa-sched.c' in the GCC sources for more details.
9328
9329          The default choice depends on the target.
9330
9331     'max-slsr-cand-scan'
9332          Set the maximum number of existing candidates that will be
9333          considered when seeking a basis for a new straight-line
9334          strength reduction candidate.
9335
9336     'asan-globals'
9337          Enable buffer overflow detection for global objects.  This
9338          kind of protection is enabled by default if you are using
9339          '-fsanitize=address' option.  To disable global objects
9340          protection use '--param asan-globals=0'.
9341
9342     'asan-stack'
9343          Enable buffer overflow detection for stack objects.  This kind
9344          of protection is enabled by default when
9345          using'-fsanitize=address'.  To disable stack protection use
9346          '--param asan-stack=0' option.
9347
9348     'asan-instrument-reads'
9349          Enable buffer overflow detection for memory reads.  This kind
9350          of protection is enabled by default when using
9351          '-fsanitize=address'.  To disable memory reads protection use
9352          '--param asan-instrument-reads=0'.
9353
9354     'asan-instrument-writes'
9355          Enable buffer overflow detection for memory writes.  This kind
9356          of protection is enabled by default when using
9357          '-fsanitize=address'.  To disable memory writes protection use
9358          '--param asan-instrument-writes=0' option.
9359
9360     'asan-memintrin'
9361          Enable detection for built-in functions.  This kind of
9362          protection is enabled by default when using
9363          '-fsanitize=address'.  To disable built-in functions
9364          protection use '--param asan-memintrin=0'.
9365
9366     'asan-use-after-return'
9367          Enable detection of use-after-return.  This kind of protection
9368          is enabled by default when using '-fsanitize=address' option.
9369          To disable use-after-return detection use '--param
9370          asan-use-after-return=0'.
9371
9372     'asan-instrumentation-with-call-threshold'
9373          If number of memory accesses in function being instrumented is
9374          greater or equal to this number, use callbacks instead of
9375          inline checks.  E.g.  to disable inline code use '--param
9376          asan-instrumentation-with-call-threshold=0'.
9377
9378
9379File: gcc.info,  Node: Preprocessor Options,  Next: Assembler Options,  Prev: Optimize Options,  Up: Invoking GCC
9380
93813.11 Options Controlling the Preprocessor
9382=========================================
9383
9384These options control the C preprocessor, which is run on each C source
9385file before actual compilation.
9386
9387 If you use the '-E' option, nothing is done except preprocessing.  Some
9388of these options make sense only together with '-E' because they cause
9389the preprocessor output to be unsuitable for actual compilation.
9390
9391'-Wp,OPTION'
9392     You can use '-Wp,OPTION' to bypass the compiler driver and pass
9393     OPTION directly through to the preprocessor.  If OPTION contains
9394     commas, it is split into multiple options at the commas.  However,
9395     many options are modified, translated or interpreted by the
9396     compiler driver before being passed to the preprocessor, and '-Wp'
9397     forcibly bypasses this phase.  The preprocessor's direct interface
9398     is undocumented and subject to change, so whenever possible you
9399     should avoid using '-Wp' and let the driver handle the options
9400     instead.
9401
9402'-Xpreprocessor OPTION'
9403     Pass OPTION as an option to the preprocessor.  You can use this to
9404     supply system-specific preprocessor options that GCC does not
9405     recognize.
9406
9407     If you want to pass an option that takes an argument, you must use
9408     '-Xpreprocessor' twice, once for the option and once for the
9409     argument.
9410
9411'-no-integrated-cpp'
9412     Perform preprocessing as a separate pass before compilation.  By
9413     default, GCC performs preprocessing as an integrated part of input
9414     tokenization and parsing.  If this option is provided, the
9415     appropriate language front end ('cc1', 'cc1plus', or 'cc1obj' for
9416     C, C++, and Objective-C, respectively) is instead invoked twice,
9417     once for preprocessing only and once for actual compilation of the
9418     preprocessed input.  This option may be useful in conjunction with
9419     the '-B' or '-wrapper' options to specify an alternate preprocessor
9420     or perform additional processing of the program source between
9421     normal preprocessing and compilation.
9422
9423'-D NAME'
9424     Predefine NAME as a macro, with definition '1'.
9425
9426'-D NAME=DEFINITION'
9427     The contents of DEFINITION are tokenized and processed as if they
9428     appeared during translation phase three in a '#define' directive.
9429     In particular, the definition will be truncated by embedded newline
9430     characters.
9431
9432     If you are invoking the preprocessor from a shell or shell-like
9433     program you may need to use the shell's quoting syntax to protect
9434     characters such as spaces that have a meaning in the shell syntax.
9435
9436     If you wish to define a function-like macro on the command line,
9437     write its argument list with surrounding parentheses before the
9438     equals sign (if any).  Parentheses are meaningful to most shells,
9439     so you will need to quote the option.  With 'sh' and 'csh',
9440     '-D'NAME(ARGS...)=DEFINITION'' works.
9441
9442     '-D' and '-U' options are processed in the order they are given on
9443     the command line.  All '-imacros FILE' and '-include FILE' options
9444     are processed after all '-D' and '-U' options.
9445
9446'-U NAME'
9447     Cancel any previous definition of NAME, either built in or provided
9448     with a '-D' option.
9449
9450'-undef'
9451     Do not predefine any system-specific or GCC-specific macros.  The
9452     standard predefined macros remain defined.
9453
9454'-I DIR'
9455     Add the directory DIR to the list of directories to be searched for
9456     header files.  Directories named by '-I' are searched before the
9457     standard system include directories.  If the directory DIR is a
9458     standard system include directory, the option is ignored to ensure
9459     that the default search order for system directories and the
9460     special treatment of system headers are not defeated .  If DIR
9461     begins with '=', then the '=' will be replaced by the sysroot
9462     prefix; see '--sysroot' and '-isysroot'.
9463
9464'-o FILE'
9465     Write output to FILE.  This is the same as specifying FILE as the
9466     second non-option argument to 'cpp'.  'gcc' has a different
9467     interpretation of a second non-option argument, so you must use
9468     '-o' to specify the output file.
9469
9470'-Wall'
9471     Turns on all optional warnings which are desirable for normal code.
9472     At present this is '-Wcomment', '-Wtrigraphs', '-Wmultichar' and a
9473     warning about integer promotion causing a change of sign in '#if'
9474     expressions.  Note that many of the preprocessor's warnings are on
9475     by default and have no options to control them.
9476
9477'-Wcomment'
9478'-Wcomments'
9479     Warn whenever a comment-start sequence '/*' appears in a '/*'
9480     comment, or whenever a backslash-newline appears in a '//' comment.
9481     (Both forms have the same effect.)
9482
9483'-Wtrigraphs'
9484     Most trigraphs in comments cannot affect the meaning of the
9485     program.  However, a trigraph that would form an escaped newline
9486     ('??/' at the end of a line) can, by changing where the comment
9487     begins or ends.  Therefore, only trigraphs that would form escaped
9488     newlines produce warnings inside a comment.
9489
9490     This option is implied by '-Wall'.  If '-Wall' is not given, this
9491     option is still enabled unless trigraphs are enabled.  To get
9492     trigraph conversion without warnings, but get the other '-Wall'
9493     warnings, use '-trigraphs -Wall -Wno-trigraphs'.
9494
9495'-Wtraditional'
9496     Warn about certain constructs that behave differently in
9497     traditional and ISO C.  Also warn about ISO C constructs that have
9498     no traditional C equivalent, and problematic constructs which
9499     should be avoided.
9500
9501'-Wundef'
9502     Warn whenever an identifier which is not a macro is encountered in
9503     an '#if' directive, outside of 'defined'.  Such identifiers are
9504     replaced with zero.
9505
9506'-Wunused-macros'
9507     Warn about macros defined in the main file that are unused.  A
9508     macro is "used" if it is expanded or tested for existence at least
9509     once.  The preprocessor will also warn if the macro has not been
9510     used at the time it is redefined or undefined.
9511
9512     Built-in macros, macros defined on the command line, and macros
9513     defined in include files are not warned about.
9514
9515     _Note:_ If a macro is actually used, but only used in skipped
9516     conditional blocks, then CPP will report it as unused.  To avoid
9517     the warning in such a case, you might improve the scope of the
9518     macro's definition by, for example, moving it into the first
9519     skipped block.  Alternatively, you could provide a dummy use with
9520     something like:
9521
9522          #if defined the_macro_causing_the_warning
9523          #endif
9524
9525'-Wendif-labels'
9526     Warn whenever an '#else' or an '#endif' are followed by text.  This
9527     usually happens in code of the form
9528
9529          #if FOO
9530          ...
9531          #else FOO
9532          ...
9533          #endif FOO
9534
9535     The second and third 'FOO' should be in comments, but often are not
9536     in older programs.  This warning is on by default.
9537
9538'-Werror'
9539     Make all warnings into hard errors.  Source code which triggers
9540     warnings will be rejected.
9541
9542'-Wsystem-headers'
9543     Issue warnings for code in system headers.  These are normally
9544     unhelpful in finding bugs in your own code, therefore suppressed.
9545     If you are responsible for the system library, you may want to see
9546     them.
9547
9548'-w'
9549     Suppress all warnings, including those which GNU CPP issues by
9550     default.
9551
9552'-pedantic'
9553     Issue all the mandatory diagnostics listed in the C standard.  Some
9554     of them are left out by default, since they trigger frequently on
9555     harmless code.
9556
9557'-pedantic-errors'
9558     Issue all the mandatory diagnostics, and make all mandatory
9559     diagnostics into errors.  This includes mandatory diagnostics that
9560     GCC issues without '-pedantic' but treats as warnings.
9561
9562'-M'
9563     Instead of outputting the result of preprocessing, output a rule
9564     suitable for 'make' describing the dependencies of the main source
9565     file.  The preprocessor outputs one 'make' rule containing the
9566     object file name for that source file, a colon, and the names of
9567     all the included files, including those coming from '-include' or
9568     '-imacros' command line options.
9569
9570     Unless specified explicitly (with '-MT' or '-MQ'), the object file
9571     name consists of the name of the source file with any suffix
9572     replaced with object file suffix and with any leading directory
9573     parts removed.  If there are many included files then the rule is
9574     split into several lines using '\'-newline.  The rule has no
9575     commands.
9576
9577     This option does not suppress the preprocessor's debug output, such
9578     as '-dM'.  To avoid mixing such debug output with the dependency
9579     rules you should explicitly specify the dependency output file with
9580     '-MF', or use an environment variable like 'DEPENDENCIES_OUTPUT'
9581     (*note Environment Variables::).  Debug output will still be sent
9582     to the regular output stream as normal.
9583
9584     Passing '-M' to the driver implies '-E', and suppresses warnings
9585     with an implicit '-w'.
9586
9587'-MM'
9588     Like '-M' but do not mention header files that are found in system
9589     header directories, nor header files that are included, directly or
9590     indirectly, from such a header.
9591
9592     This implies that the choice of angle brackets or double quotes in
9593     an '#include' directive does not in itself determine whether that
9594     header will appear in '-MM' dependency output.  This is a slight
9595     change in semantics from GCC versions 3.0 and earlier.
9596
9597'-MF FILE'
9598     When used with '-M' or '-MM', specifies a file to write the
9599     dependencies to.  If no '-MF' switch is given the preprocessor
9600     sends the rules to the same place it would have sent preprocessed
9601     output.
9602
9603     When used with the driver options '-MD' or '-MMD', '-MF' overrides
9604     the default dependency output file.
9605
9606'-MG'
9607     In conjunction with an option such as '-M' requesting dependency
9608     generation, '-MG' assumes missing header files are generated files
9609     and adds them to the dependency list without raising an error.  The
9610     dependency filename is taken directly from the '#include' directive
9611     without prepending any path.  '-MG' also suppresses preprocessed
9612     output, as a missing header file renders this useless.
9613
9614     This feature is used in automatic updating of makefiles.
9615
9616'-MP'
9617     This option instructs CPP to add a phony target for each dependency
9618     other than the main file, causing each to depend on nothing.  These
9619     dummy rules work around errors 'make' gives if you remove header
9620     files without updating the 'Makefile' to match.
9621
9622     This is typical output:
9623
9624          test.o: test.c test.h
9625
9626          test.h:
9627
9628'-MT TARGET'
9629
9630     Change the target of the rule emitted by dependency generation.  By
9631     default CPP takes the name of the main input file, deletes any
9632     directory components and any file suffix such as '.c', and appends
9633     the platform's usual object suffix.  The result is the target.
9634
9635     An '-MT' option will set the target to be exactly the string you
9636     specify.  If you want multiple targets, you can specify them as a
9637     single argument to '-MT', or use multiple '-MT' options.
9638
9639     For example, '-MT '$(objpfx)foo.o'' might give
9640
9641          $(objpfx)foo.o: foo.c
9642
9643'-MQ TARGET'
9644
9645     Same as '-MT', but it quotes any characters which are special to
9646     Make.  '-MQ '$(objpfx)foo.o'' gives
9647
9648          $$(objpfx)foo.o: foo.c
9649
9650     The default target is automatically quoted, as if it were given
9651     with '-MQ'.
9652
9653'-MD'
9654     '-MD' is equivalent to '-M -MF FILE', except that '-E' is not
9655     implied.  The driver determines FILE based on whether an '-o'
9656     option is given.  If it is, the driver uses its argument but with a
9657     suffix of '.d', otherwise it takes the name of the input file,
9658     removes any directory components and suffix, and applies a '.d'
9659     suffix.
9660
9661     If '-MD' is used in conjunction with '-E', any '-o' switch is
9662     understood to specify the dependency output file (*note -MF:
9663     dashMF.), but if used without '-E', each '-o' is understood to
9664     specify a target object file.
9665
9666     Since '-E' is not implied, '-MD' can be used to generate a
9667     dependency output file as a side-effect of the compilation process.
9668
9669'-MMD'
9670     Like '-MD' except mention only user header files, not system header
9671     files.
9672
9673'-fpch-deps'
9674     When using precompiled headers (*note Precompiled Headers::), this
9675     flag will cause the dependency-output flags to also list the files
9676     from the precompiled header's dependencies.  If not specified only
9677     the precompiled header would be listed and not the files that were
9678     used to create it because those files are not consulted when a
9679     precompiled header is used.
9680
9681'-fpch-preprocess'
9682     This option allows use of a precompiled header (*note Precompiled
9683     Headers::) together with '-E'.  It inserts a special '#pragma',
9684     '#pragma GCC pch_preprocess "FILENAME"' in the output to mark the
9685     place where the precompiled header was found, and its FILENAME.
9686     When '-fpreprocessed' is in use, GCC recognizes this '#pragma' and
9687     loads the PCH.
9688
9689     This option is off by default, because the resulting preprocessed
9690     output is only really suitable as input to GCC.  It is switched on
9691     by '-save-temps'.
9692
9693     You should not write this '#pragma' in your own code, but it is
9694     safe to edit the filename if the PCH file is available in a
9695     different location.  The filename may be absolute or it may be
9696     relative to GCC's current directory.
9697
9698'-x c'
9699'-x c++'
9700'-x objective-c'
9701'-x assembler-with-cpp'
9702     Specify the source language: C, C++, Objective-C, or assembly.
9703     This has nothing to do with standards conformance or extensions; it
9704     merely selects which base syntax to expect.  If you give none of
9705     these options, cpp will deduce the language from the extension of
9706     the source file: '.c', '.cc', '.m', or '.S'.  Some other common
9707     extensions for C++ and assembly are also recognized.  If cpp does
9708     not recognize the extension, it will treat the file as C; this is
9709     the most generic mode.
9710
9711     _Note:_ Previous versions of cpp accepted a '-lang' option which
9712     selected both the language and the standards conformance level.
9713     This option has been removed, because it conflicts with the '-l'
9714     option.
9715
9716'-std=STANDARD'
9717'-ansi'
9718     Specify the standard to which the code should conform.  Currently
9719     CPP knows about C and C++ standards; others may be added in the
9720     future.
9721
9722     STANDARD may be one of:
9723     'c90'
9724     'c89'
9725     'iso9899:1990'
9726          The ISO C standard from 1990.  'c90' is the customary
9727          shorthand for this version of the standard.
9728
9729          The '-ansi' option is equivalent to '-std=c90'.
9730
9731     'iso9899:199409'
9732          The 1990 C standard, as amended in 1994.
9733
9734     'iso9899:1999'
9735     'c99'
9736     'iso9899:199x'
9737     'c9x'
9738          The revised ISO C standard, published in December 1999.
9739          Before publication, this was known as C9X.
9740
9741     'iso9899:2011'
9742     'c11'
9743     'c1x'
9744          The revised ISO C standard, published in December 2011.
9745          Before publication, this was known as C1X.
9746
9747     'gnu90'
9748     'gnu89'
9749          The 1990 C standard plus GNU extensions.  This is the default.
9750
9751     'gnu99'
9752     'gnu9x'
9753          The 1999 C standard plus GNU extensions.
9754
9755     'gnu11'
9756     'gnu1x'
9757          The 2011 C standard plus GNU extensions.
9758
9759     'c++98'
9760          The 1998 ISO C++ standard plus amendments.
9761
9762     'gnu++98'
9763          The same as '-std=c++98' plus GNU extensions.  This is the
9764          default for C++ code.
9765
9766'-I-'
9767     Split the include path.  Any directories specified with '-I'
9768     options before '-I-' are searched only for headers requested with
9769     '#include "FILE"'; they are not searched for '#include <FILE>'.  If
9770     additional directories are specified with '-I' options after the
9771     '-I-', those directories are searched for all '#include'
9772     directives.
9773
9774     In addition, '-I-' inhibits the use of the directory of the current
9775     file directory as the first search directory for '#include "FILE"'.
9776     This option has been deprecated.
9777
9778'-nostdinc'
9779     Do not search the standard system directories for header files.
9780     Only the directories you have specified with '-I' options (and the
9781     directory of the current file, if appropriate) are searched.
9782
9783'-nostdinc++'
9784     Do not search for header files in the C++-specific standard
9785     directories, but do still search the other standard directories.
9786     (This option is used when building the C++ library.)
9787
9788'-include FILE'
9789     Process FILE as if '#include "file"' appeared as the first line of
9790     the primary source file.  However, the first directory searched for
9791     FILE is the preprocessor's working directory _instead of_ the
9792     directory containing the main source file.  If not found there, it
9793     is searched for in the remainder of the '#include "..."' search
9794     chain as normal.
9795
9796     If multiple '-include' options are given, the files are included in
9797     the order they appear on the command line.
9798
9799'-imacros FILE'
9800     Exactly like '-include', except that any output produced by
9801     scanning FILE is thrown away.  Macros it defines remain defined.
9802     This allows you to acquire all the macros from a header without
9803     also processing its declarations.
9804
9805     All files specified by '-imacros' are processed before all files
9806     specified by '-include'.
9807
9808'-idirafter DIR'
9809     Search DIR for header files, but do it _after_ all directories
9810     specified with '-I' and the standard system directories have been
9811     exhausted.  DIR is treated as a system include directory.  If DIR
9812     begins with '=', then the '=' will be replaced by the sysroot
9813     prefix; see '--sysroot' and '-isysroot'.
9814
9815'-iprefix PREFIX'
9816     Specify PREFIX as the prefix for subsequent '-iwithprefix' options.
9817     If the prefix represents a directory, you should include the final
9818     '/'.
9819
9820'-iwithprefix DIR'
9821'-iwithprefixbefore DIR'
9822     Append DIR to the prefix specified previously with '-iprefix', and
9823     add the resulting directory to the include search path.
9824     '-iwithprefixbefore' puts it in the same place '-I' would;
9825     '-iwithprefix' puts it where '-idirafter' would.
9826
9827'-isysroot DIR'
9828     This option is like the '--sysroot' option, but applies only to
9829     header files (except for Darwin targets, where it applies to both
9830     header files and libraries).  See the '--sysroot' option for more
9831     information.
9832
9833'-imultilib DIR'
9834     Use DIR as a subdirectory of the directory containing
9835     target-specific C++ headers.
9836
9837'-isystem DIR'
9838     Search DIR for header files, after all directories specified by
9839     '-I' but before the standard system directories.  Mark it as a
9840     system directory, so that it gets the same special treatment as is
9841     applied to the standard system directories.  If DIR begins with
9842     '=', then the '=' will be replaced by the sysroot prefix; see
9843     '--sysroot' and '-isysroot'.
9844
9845'-iquote DIR'
9846     Search DIR only for header files requested with '#include "FILE"';
9847     they are not searched for '#include <FILE>', before all directories
9848     specified by '-I' and before the standard system directories.  If
9849     DIR begins with '=', then the '=' will be replaced by the sysroot
9850     prefix; see '--sysroot' and '-isysroot'.
9851
9852'-fdirectives-only'
9853     When preprocessing, handle directives, but do not expand macros.
9854
9855     The option's behavior depends on the '-E' and '-fpreprocessed'
9856     options.
9857
9858     With '-E', preprocessing is limited to the handling of directives
9859     such as '#define', '#ifdef', and '#error'.  Other preprocessor
9860     operations, such as macro expansion and trigraph conversion are not
9861     performed.  In addition, the '-dD' option is implicitly enabled.
9862
9863     With '-fpreprocessed', predefinition of command line and most
9864     builtin macros is disabled.  Macros such as '__LINE__', which are
9865     contextually dependent, are handled normally.  This enables
9866     compilation of files previously preprocessed with '-E
9867     -fdirectives-only'.
9868
9869     With both '-E' and '-fpreprocessed', the rules for '-fpreprocessed'
9870     take precedence.  This enables full preprocessing of files
9871     previously preprocessed with '-E -fdirectives-only'.
9872
9873'-fdollars-in-identifiers'
9874     Accept '$' in identifiers.
9875
9876'-fextended-identifiers'
9877     Accept universal character names in identifiers.  This option is
9878     experimental; in a future version of GCC, it will be enabled by
9879     default for C99 and C++.
9880
9881'-fno-canonical-system-headers'
9882     When preprocessing, do not shorten system header paths with
9883     canonicalization.
9884
9885'-fpreprocessed'
9886     Indicate to the preprocessor that the input file has already been
9887     preprocessed.  This suppresses things like macro expansion,
9888     trigraph conversion, escaped newline splicing, and processing of
9889     most directives.  The preprocessor still recognizes and removes
9890     comments, so that you can pass a file preprocessed with '-C' to the
9891     compiler without problems.  In this mode the integrated
9892     preprocessor is little more than a tokenizer for the front ends.
9893
9894     '-fpreprocessed' is implicit if the input file has one of the
9895     extensions '.i', '.ii' or '.mi'.  These are the extensions that GCC
9896     uses for preprocessed files created by '-save-temps'.
9897
9898'-ftabstop=WIDTH'
9899     Set the distance between tab stops.  This helps the preprocessor
9900     report correct column numbers in warnings or errors, even if tabs
9901     appear on the line.  If the value is less than 1 or greater than
9902     100, the option is ignored.  The default is 8.
9903
9904'-fdebug-cpp'
9905     This option is only useful for debugging GCC. When used with '-E',
9906     dumps debugging information about location maps.  Every token in
9907     the output is preceded by the dump of the map its location belongs
9908     to.  The dump of the map holding the location of a token would be:
9909          {'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}
9910
9911     When used without '-E', this option has no effect.
9912
9913'-ftrack-macro-expansion[=LEVEL]'
9914     Track locations of tokens across macro expansions.  This allows the
9915     compiler to emit diagnostic about the current macro expansion stack
9916     when a compilation error occurs in a macro expansion.  Using this
9917     option makes the preprocessor and the compiler consume more memory.
9918     The LEVEL parameter can be used to choose the level of precision of
9919     token location tracking thus decreasing the memory consumption if
9920     necessary.  Value '0' of LEVEL de-activates this option just as if
9921     no '-ftrack-macro-expansion' was present on the command line.
9922     Value '1' tracks tokens locations in a degraded mode for the sake
9923     of minimal memory overhead.  In this mode all tokens resulting from
9924     the expansion of an argument of a function-like macro have the same
9925     location.  Value '2' tracks tokens locations completely.  This
9926     value is the most memory hungry.  When this option is given no
9927     argument, the default parameter value is '2'.
9928
9929     Note that -ftrack-macro-expansion=2 is activated by default.
9930
9931'-fexec-charset=CHARSET'
9932     Set the execution character set, used for string and character
9933     constants.  The default is UTF-8.  CHARSET can be any encoding
9934     supported by the system's 'iconv' library routine.
9935
9936'-fwide-exec-charset=CHARSET'
9937     Set the wide execution character set, used for wide string and
9938     character constants.  The default is UTF-32 or UTF-16, whichever
9939     corresponds to the width of 'wchar_t'.  As with '-fexec-charset',
9940     CHARSET can be any encoding supported by the system's 'iconv'
9941     library routine; however, you will have problems with encodings
9942     that do not fit exactly in 'wchar_t'.
9943
9944'-finput-charset=CHARSET'
9945     Set the input character set, used for translation from the
9946     character set of the input file to the source character set used by
9947     GCC.  If the locale does not specify, or GCC cannot get this
9948     information from the locale, the default is UTF-8.  This can be
9949     overridden by either the locale or this command line option.
9950     Currently the command line option takes precedence if there's a
9951     conflict.  CHARSET can be any encoding supported by the system's
9952     'iconv' library routine.
9953
9954'-fworking-directory'
9955     Enable generation of linemarkers in the preprocessor output that
9956     will let the compiler know the current working directory at the
9957     time of preprocessing.  When this option is enabled, the
9958     preprocessor will emit, after the initial linemarker, a second
9959     linemarker with the current working directory followed by two
9960     slashes.  GCC will use this directory, when it's present in the
9961     preprocessed input, as the directory emitted as the current working
9962     directory in some debugging information formats.  This option is
9963     implicitly enabled if debugging information is enabled, but this
9964     can be inhibited with the negated form '-fno-working-directory'.
9965     If the '-P' flag is present in the command line, this option has no
9966     effect, since no '#line' directives are emitted whatsoever.
9967
9968'-fno-show-column'
9969     Do not print column numbers in diagnostics.  This may be necessary
9970     if diagnostics are being scanned by a program that does not
9971     understand the column numbers, such as 'dejagnu'.
9972
9973'-A PREDICATE=ANSWER'
9974     Make an assertion with the predicate PREDICATE and answer ANSWER.
9975     This form is preferred to the older form '-A PREDICATE(ANSWER)',
9976     which is still supported, because it does not use shell special
9977     characters.
9978
9979'-A -PREDICATE=ANSWER'
9980     Cancel an assertion with the predicate PREDICATE and answer ANSWER.
9981
9982'-dCHARS'
9983     CHARS is a sequence of one or more of the following characters, and
9984     must not be preceded by a space.  Other characters are interpreted
9985     by the compiler proper, or reserved for future versions of GCC, and
9986     so are silently ignored.  If you specify characters whose behavior
9987     conflicts, the result is undefined.
9988
9989     'M'
9990          Instead of the normal output, generate a list of '#define'
9991          directives for all the macros defined during the execution of
9992          the preprocessor, including predefined macros.  This gives you
9993          a way of finding out what is predefined in your version of the
9994          preprocessor.  Assuming you have no file 'foo.h', the command
9995
9996               touch foo.h; cpp -dM foo.h
9997
9998          will show all the predefined macros.
9999
10000          If you use '-dM' without the '-E' option, '-dM' is interpreted
10001          as a synonym for '-fdump-rtl-mach'.  *Note (gcc)Debugging
10002          Options::.
10003
10004     'D'
10005          Like 'M' except in two respects: it does _not_ include the
10006          predefined macros, and it outputs _both_ the '#define'
10007          directives and the result of preprocessing.  Both kinds of
10008          output go to the standard output file.
10009
10010     'N'
10011          Like 'D', but emit only the macro names, not their expansions.
10012
10013     'I'
10014          Output '#include' directives in addition to the result of
10015          preprocessing.
10016
10017     'U'
10018          Like 'D' except that only macros that are expanded, or whose
10019          definedness is tested in preprocessor directives, are output;
10020          the output is delayed until the use or test of the macro; and
10021          '#undef' directives are also output for macros tested but
10022          undefined at the time.
10023
10024'-P'
10025     Inhibit generation of linemarkers in the output from the
10026     preprocessor.  This might be useful when running the preprocessor
10027     on something that is not C code, and will be sent to a program
10028     which might be confused by the linemarkers.
10029
10030'-C'
10031     Do not discard comments.  All comments are passed through to the
10032     output file, except for comments in processed directives, which are
10033     deleted along with the directive.
10034
10035     You should be prepared for side effects when using '-C'; it causes
10036     the preprocessor to treat comments as tokens in their own right.
10037     For example, comments appearing at the start of what would be a
10038     directive line have the effect of turning that line into an
10039     ordinary source line, since the first token on the line is no
10040     longer a '#'.
10041
10042'-CC'
10043     Do not discard comments, including during macro expansion.  This is
10044     like '-C', except that comments contained within macros are also
10045     passed through to the output file where the macro is expanded.
10046
10047     In addition to the side-effects of the '-C' option, the '-CC'
10048     option causes all C++-style comments inside a macro to be converted
10049     to C-style comments.  This is to prevent later use of that macro
10050     from inadvertently commenting out the remainder of the source line.
10051
10052     The '-CC' option is generally used to support lint comments.
10053
10054'-traditional-cpp'
10055     Try to imitate the behavior of old-fashioned C preprocessors, as
10056     opposed to ISO C preprocessors.
10057
10058'-trigraphs'
10059     Process trigraph sequences.  These are three-character sequences,
10060     all starting with '??', that are defined by ISO C to stand for
10061     single characters.  For example, '??/' stands for '\', so ''??/n''
10062     is a character constant for a newline.  By default, GCC ignores
10063     trigraphs, but in standard-conforming modes it converts them.  See
10064     the '-std' and '-ansi' options.
10065
10066     The nine trigraphs and their replacements are
10067
10068          Trigraph:       ??(  ??)  ??<  ??>  ??=  ??/  ??'  ??!  ??-
10069          Replacement:      [    ]    {    }    #    \    ^    |    ~
10070
10071'-remap'
10072     Enable special code to work around file systems which only permit
10073     very short file names, such as MS-DOS.
10074
10075'--help'
10076'--target-help'
10077     Print text describing all the command line options instead of
10078     preprocessing anything.
10079
10080'-v'
10081     Verbose mode.  Print out GNU CPP's version number at the beginning
10082     of execution, and report the final form of the include path.
10083
10084'-H'
10085     Print the name of each header file used, in addition to other
10086     normal activities.  Each name is indented to show how deep in the
10087     '#include' stack it is.  Precompiled header files are also printed,
10088     even if they are found to be invalid; an invalid precompiled header
10089     file is printed with '...x' and a valid one with '...!' .
10090
10091'-version'
10092'--version'
10093     Print out GNU CPP's version number.  With one dash, proceed to
10094     preprocess as normal.  With two dashes, exit immediately.
10095
10096
10097File: gcc.info,  Node: Assembler Options,  Next: Link Options,  Prev: Preprocessor Options,  Up: Invoking GCC
10098
100993.12 Passing Options to the Assembler
10100=====================================
10101
10102You can pass options to the assembler.
10103
10104'-Wa,OPTION'
10105     Pass OPTION as an option to the assembler.  If OPTION contains
10106     commas, it is split into multiple options at the commas.
10107
10108'-Xassembler OPTION'
10109     Pass OPTION as an option to the assembler.  You can use this to
10110     supply system-specific assembler options that GCC does not
10111     recognize.
10112
10113     If you want to pass an option that takes an argument, you must use
10114     '-Xassembler' twice, once for the option and once for the argument.
10115
10116
10117File: gcc.info,  Node: Link Options,  Next: Directory Options,  Prev: Assembler Options,  Up: Invoking GCC
10118
101193.13 Options for Linking
10120========================
10121
10122These options come into play when the compiler links object files into
10123an executable output file.  They are meaningless if the compiler is not
10124doing a link step.
10125
10126'OBJECT-FILE-NAME'
10127     A file name that does not end in a special recognized suffix is
10128     considered to name an object file or library.  (Object files are
10129     distinguished from libraries by the linker according to the file
10130     contents.)  If linking is done, these object files are used as
10131     input to the linker.
10132
10133'-c'
10134'-S'
10135'-E'
10136     If any of these options is used, then the linker is not run, and
10137     object file names should not be used as arguments.  *Note Overall
10138     Options::.
10139
10140'-lLIBRARY'
10141'-l LIBRARY'
10142     Search the library named LIBRARY when linking.  (The second
10143     alternative with the library as a separate argument is only for
10144     POSIX compliance and is not recommended.)
10145
10146     It makes a difference where in the command you write this option;
10147     the linker searches and processes libraries and object files in the
10148     order they are specified.  Thus, 'foo.o -lz bar.o' searches library
10149     'z' after file 'foo.o' but before 'bar.o'.  If 'bar.o' refers to
10150     functions in 'z', those functions may not be loaded.
10151
10152     The linker searches a standard list of directories for the library,
10153     which is actually a file named 'libLIBRARY.a'.  The linker then
10154     uses this file as if it had been specified precisely by name.
10155
10156     The directories searched include several standard system
10157     directories plus any that you specify with '-L'.
10158
10159     Normally the files found this way are library files--archive files
10160     whose members are object files.  The linker handles an archive file
10161     by scanning through it for members which define symbols that have
10162     so far been referenced but not defined.  But if the file that is
10163     found is an ordinary object file, it is linked in the usual
10164     fashion.  The only difference between using an '-l' option and
10165     specifying a file name is that '-l' surrounds LIBRARY with 'lib'
10166     and '.a' and searches several directories.
10167
10168'-lobjc'
10169     You need this special case of the '-l' option in order to link an
10170     Objective-C or Objective-C++ program.
10171
10172'-nostartfiles'
10173     Do not use the standard system startup files when linking.  The
10174     standard system libraries are used normally, unless '-nostdlib' or
10175     '-nodefaultlibs' is used.
10176
10177'-nodefaultlibs'
10178     Do not use the standard system libraries when linking.  Only the
10179     libraries you specify are passed to the linker, and options
10180     specifying linkage of the system libraries, such as
10181     '-static-libgcc' or '-shared-libgcc', are ignored.  The standard
10182     startup files are used normally, unless '-nostartfiles' is used.
10183
10184     The compiler may generate calls to 'memcmp', 'memset', 'memcpy' and
10185     'memmove'.  These entries are usually resolved by entries in libc.
10186     These entry points should be supplied through some other mechanism
10187     when this option is specified.
10188
10189'-nostdlib'
10190     Do not use the standard system startup files or libraries when
10191     linking.  No startup files and only the libraries you specify are
10192     passed to the linker, and options specifying linkage of the system
10193     libraries, such as '-static-libgcc' or '-shared-libgcc', are
10194     ignored.
10195
10196     The compiler may generate calls to 'memcmp', 'memset', 'memcpy' and
10197     'memmove'.  These entries are usually resolved by entries in libc.
10198     These entry points should be supplied through some other mechanism
10199     when this option is specified.
10200
10201     One of the standard libraries bypassed by '-nostdlib' and
10202     '-nodefaultlibs' is 'libgcc.a', a library of internal subroutines
10203     which GCC uses to overcome shortcomings of particular machines, or
10204     special needs for some languages.  (*Note Interfacing to GCC
10205     Output: (gccint)Interface, for more discussion of 'libgcc.a'.)  In
10206     most cases, you need 'libgcc.a' even when you want to avoid other
10207     standard libraries.  In other words, when you specify '-nostdlib'
10208     or '-nodefaultlibs' you should usually specify '-lgcc' as well.
10209     This ensures that you have no unresolved references to internal GCC
10210     library subroutines.  (An example of such an internal subroutine is
10211     '__main', used to ensure C++ constructors are called; *note
10212     'collect2': (gccint)Collect2.)
10213
10214'-pie'
10215     Produce a position independent executable on targets that support
10216     it.  For predictable results, you must also specify the same set of
10217     options used for compilation ('-fpie', '-fPIE', or model
10218     suboptions) when you specify this linker option.
10219
10220'-rdynamic'
10221     Pass the flag '-export-dynamic' to the ELF linker, on targets that
10222     support it.  This instructs the linker to add all symbols, not only
10223     used ones, to the dynamic symbol table.  This option is needed for
10224     some uses of 'dlopen' or to allow obtaining backtraces from within
10225     a program.
10226
10227'-s'
10228     Remove all symbol table and relocation information from the
10229     executable.
10230
10231'-static'
10232     On systems that support dynamic linking, this prevents linking with
10233     the shared libraries.  On other systems, this option has no effect.
10234
10235'-shared'
10236     Produce a shared object which can then be linked with other objects
10237     to form an executable.  Not all systems support this option.  For
10238     predictable results, you must also specify the same set of options
10239     used for compilation ('-fpic', '-fPIC', or model suboptions) when
10240     you specify this linker option.(1)
10241
10242'-shared-libgcc'
10243'-static-libgcc'
10244     On systems that provide 'libgcc' as a shared library, these options
10245     force the use of either the shared or static version, respectively.
10246     If no shared version of 'libgcc' was built when the compiler was
10247     configured, these options have no effect.
10248
10249     There are several situations in which an application should use the
10250     shared 'libgcc' instead of the static version.  The most common of
10251     these is when the application wishes to throw and catch exceptions
10252     across different shared libraries.  In that case, each of the
10253     libraries as well as the application itself should use the shared
10254     'libgcc'.
10255
10256     Therefore, the G++ and GCJ drivers automatically add
10257     '-shared-libgcc' whenever you build a shared library or a main
10258     executable, because C++ and Java programs typically use exceptions,
10259     so this is the right thing to do.
10260
10261     If, instead, you use the GCC driver to create shared libraries, you
10262     may find that they are not always linked with the shared 'libgcc'.
10263     If GCC finds, at its configuration time, that you have a non-GNU
10264     linker or a GNU linker that does not support option
10265     '--eh-frame-hdr', it links the shared version of 'libgcc' into
10266     shared libraries by default.  Otherwise, it takes advantage of the
10267     linker and optimizes away the linking with the shared version of
10268     'libgcc', linking with the static version of libgcc by default.
10269     This allows exceptions to propagate through such shared libraries,
10270     without incurring relocation costs at library load time.
10271
10272     However, if a library or main executable is supposed to throw or
10273     catch exceptions, you must link it using the G++ or GCJ driver, as
10274     appropriate for the languages used in the program, or using the
10275     option '-shared-libgcc', such that it is linked with the shared
10276     'libgcc'.
10277
10278'-static-libasan'
10279     When the '-fsanitize=address' option is used to link a program, the
10280     GCC driver automatically links against 'libasan'.  If 'libasan' is
10281     available as a shared library, and the '-static' option is not
10282     used, then this links against the shared version of 'libasan'.  The
10283     '-static-libasan' option directs the GCC driver to link 'libasan'
10284     statically, without necessarily linking other libraries statically.
10285
10286'-static-libtsan'
10287     When the '-fsanitize=thread' option is used to link a program, the
10288     GCC driver automatically links against 'libtsan'.  If 'libtsan' is
10289     available as a shared library, and the '-static' option is not
10290     used, then this links against the shared version of 'libtsan'.  The
10291     '-static-libtsan' option directs the GCC driver to link 'libtsan'
10292     statically, without necessarily linking other libraries statically.
10293
10294'-static-liblsan'
10295     When the '-fsanitize=leak' option is used to link a program, the
10296     GCC driver automatically links against 'liblsan'.  If 'liblsan' is
10297     available as a shared library, and the '-static' option is not
10298     used, then this links against the shared version of 'liblsan'.  The
10299     '-static-liblsan' option directs the GCC driver to link 'liblsan'
10300     statically, without necessarily linking other libraries statically.
10301
10302'-static-libubsan'
10303     When the '-fsanitize=undefined' option is used to link a program,
10304     the GCC driver automatically links against 'libubsan'.  If
10305     'libubsan' is available as a shared library, and the '-static'
10306     option is not used, then this links against the shared version of
10307     'libubsan'.  The '-static-libubsan' option directs the GCC driver
10308     to link 'libubsan' statically, without necessarily linking other
10309     libraries statically.
10310
10311'-static-libstdc++'
10312     When the 'g++' program is used to link a C++ program, it normally
10313     automatically links against 'libstdc++'.  If 'libstdc++' is
10314     available as a shared library, and the '-static' option is not
10315     used, then this links against the shared version of 'libstdc++'.
10316     That is normally fine.  However, it is sometimes useful to freeze
10317     the version of 'libstdc++' used by the program without going all
10318     the way to a fully static link.  The '-static-libstdc++' option
10319     directs the 'g++' driver to link 'libstdc++' statically, without
10320     necessarily linking other libraries statically.
10321
10322'-symbolic'
10323     Bind references to global symbols when building a shared object.
10324     Warn about any unresolved references (unless overridden by the link
10325     editor option '-Xlinker -z -Xlinker defs').  Only a few systems
10326     support this option.
10327
10328'-T SCRIPT'
10329     Use SCRIPT as the linker script.  This option is supported by most
10330     systems using the GNU linker.  On some targets, such as bare-board
10331     targets without an operating system, the '-T' option may be
10332     required when linking to avoid references to undefined symbols.
10333
10334'-Xlinker OPTION'
10335     Pass OPTION as an option to the linker.  You can use this to supply
10336     system-specific linker options that GCC does not recognize.
10337
10338     If you want to pass an option that takes a separate argument, you
10339     must use '-Xlinker' twice, once for the option and once for the
10340     argument.  For example, to pass '-assert definitions', you must
10341     write '-Xlinker -assert -Xlinker definitions'.  It does not work to
10342     write '-Xlinker "-assert definitions"', because this passes the
10343     entire string as a single argument, which is not what the linker
10344     expects.
10345
10346     When using the GNU linker, it is usually more convenient to pass
10347     arguments to linker options using the 'OPTION=VALUE' syntax than as
10348     separate arguments.  For example, you can specify '-Xlinker
10349     -Map=output.map' rather than '-Xlinker -Map -Xlinker output.map'.
10350     Other linkers may not support this syntax for command-line options.
10351
10352'-Wl,OPTION'
10353     Pass OPTION as an option to the linker.  If OPTION contains commas,
10354     it is split into multiple options at the commas.  You can use this
10355     syntax to pass an argument to the option.  For example,
10356     '-Wl,-Map,output.map' passes '-Map output.map' to the linker.  When
10357     using the GNU linker, you can also get the same effect with
10358     '-Wl,-Map=output.map'.
10359
10360'-u SYMBOL'
10361     Pretend the symbol SYMBOL is undefined, to force linking of library
10362     modules to define it.  You can use '-u' multiple times with
10363     different symbols to force loading of additional library modules.
10364
10365   ---------- Footnotes ----------
10366
10367   (1) On some systems, 'gcc -shared' needs to build supplementary stub
10368code for constructors to work.  On multi-libbed systems, 'gcc -shared'
10369must select the correct support libraries to link against.  Failing to
10370supply the correct flags may lead to subtle defects.  Supplying them in
10371cases where they are not necessary is innocuous.
10372
10373
10374File: gcc.info,  Node: Directory Options,  Next: Spec Files,  Prev: Link Options,  Up: Invoking GCC
10375
103763.14 Options for Directory Search
10377=================================
10378
10379These options specify directories to search for header files, for
10380libraries and for parts of the compiler:
10381
10382'-IDIR'
10383     Add the directory DIR to the head of the list of directories to be
10384     searched for header files.  This can be used to override a system
10385     header file, substituting your own version, since these directories
10386     are searched before the system header file directories.  However,
10387     you should not use this option to add directories that contain
10388     vendor-supplied system header files (use '-isystem' for that).  If
10389     you use more than one '-I' option, the directories are scanned in
10390     left-to-right order; the standard system directories come after.
10391
10392     If a standard system include directory, or a directory specified
10393     with '-isystem', is also specified with '-I', the '-I' option is
10394     ignored.  The directory is still searched but as a system directory
10395     at its normal position in the system include chain.  This is to
10396     ensure that GCC's procedure to fix buggy system headers and the
10397     ordering for the 'include_next' directive are not inadvertently
10398     changed.  If you really need to change the search order for system
10399     directories, use the '-nostdinc' and/or '-isystem' options.
10400
10401'-iplugindir=DIR'
10402     Set the directory to search for plugins that are passed by
10403     '-fplugin=NAME' instead of '-fplugin=PATH/NAME.so'.  This option is
10404     not meant to be used by the user, but only passed by the driver.
10405
10406'-iquoteDIR'
10407     Add the directory DIR to the head of the list of directories to be
10408     searched for header files only for the case of '#include "FILE"';
10409     they are not searched for '#include <FILE>', otherwise just like
10410     '-I'.
10411
10412'-LDIR'
10413     Add directory DIR to the list of directories to be searched for
10414     '-l'.
10415
10416'-BPREFIX'
10417     This option specifies where to find the executables, libraries,
10418     include files, and data files of the compiler itself.
10419
10420     The compiler driver program runs one or more of the subprograms
10421     'cpp', 'cc1', 'as' and 'ld'.  It tries PREFIX as a prefix for each
10422     program it tries to run, both with and without 'MACHINE/VERSION/'
10423     (*note Target Options::).
10424
10425     For each subprogram to be run, the compiler driver first tries the
10426     '-B' prefix, if any.  If that name is not found, or if '-B' is not
10427     specified, the driver tries two standard prefixes, '/usr/lib/gcc/'
10428     and '/usr/local/lib/gcc/'.  If neither of those results in a file
10429     name that is found, the unmodified program name is searched for
10430     using the directories specified in your 'PATH' environment
10431     variable.
10432
10433     The compiler checks to see if the path provided by the '-B' refers
10434     to a directory, and if necessary it adds a directory separator
10435     character at the end of the path.
10436
10437     '-B' prefixes that effectively specify directory names also apply
10438     to libraries in the linker, because the compiler translates these
10439     options into '-L' options for the linker.  They also apply to
10440     include files in the preprocessor, because the compiler translates
10441     these options into '-isystem' options for the preprocessor.  In
10442     this case, the compiler appends 'include' to the prefix.
10443
10444     The runtime support file 'libgcc.a' can also be searched for using
10445     the '-B' prefix, if needed.  If it is not found there, the two
10446     standard prefixes above are tried, and that is all.  The file is
10447     left out of the link if it is not found by those means.
10448
10449     Another way to specify a prefix much like the '-B' prefix is to use
10450     the environment variable 'GCC_EXEC_PREFIX'.  *Note Environment
10451     Variables::.
10452
10453     As a special kludge, if the path provided by '-B' is
10454     '[dir/]stageN/', where N is a number in the range 0 to 9, then it
10455     is replaced by '[dir/]include'.  This is to help with
10456     boot-strapping the compiler.
10457
10458'-specs=FILE'
10459     Process FILE after the compiler reads in the standard 'specs' file,
10460     in order to override the defaults which the 'gcc' driver program
10461     uses when determining what switches to pass to 'cc1', 'cc1plus',
10462     'as', 'ld', etc.  More than one '-specs=FILE' can be specified on
10463     the command line, and they are processed in order, from left to
10464     right.
10465
10466'--sysroot=DIR'
10467     Use DIR as the logical root directory for headers and libraries.
10468     For example, if the compiler normally searches for headers in
10469     '/usr/include' and libraries in '/usr/lib', it instead searches
10470     'DIR/usr/include' and 'DIR/usr/lib'.
10471
10472     If you use both this option and the '-isysroot' option, then the
10473     '--sysroot' option applies to libraries, but the '-isysroot' option
10474     applies to header files.
10475
10476     The GNU linker (beginning with version 2.16) has the necessary
10477     support for this option.  If your linker does not support this
10478     option, the header file aspect of '--sysroot' still works, but the
10479     library aspect does not.
10480
10481'--no-sysroot-suffix'
10482     For some targets, a suffix is added to the root directory specified
10483     with '--sysroot', depending on the other options used, so that
10484     headers may for example be found in 'DIR/SUFFIX/usr/include'
10485     instead of 'DIR/usr/include'.  This option disables the addition of
10486     such a suffix.
10487
10488'-I-'
10489     This option has been deprecated.  Please use '-iquote' instead for
10490     '-I' directories before the '-I-' and remove the '-I-'.  Any
10491     directories you specify with '-I' options before the '-I-' option
10492     are searched only for the case of '#include "FILE"'; they are not
10493     searched for '#include <FILE>'.
10494
10495     If additional directories are specified with '-I' options after the
10496     '-I-', these directories are searched for all '#include'
10497     directives.  (Ordinarily _all_ '-I' directories are used this way.)
10498
10499     In addition, the '-I-' option inhibits the use of the current
10500     directory (where the current input file came from) as the first
10501     search directory for '#include "FILE"'.  There is no way to
10502     override this effect of '-I-'.  With '-I.' you can specify
10503     searching the directory that is current when the compiler is
10504     invoked.  That is not exactly the same as what the preprocessor
10505     does by default, but it is often satisfactory.
10506
10507     '-I-' does not inhibit the use of the standard system directories
10508     for header files.  Thus, '-I-' and '-nostdinc' are independent.
10509
10510
10511File: gcc.info,  Node: Spec Files,  Next: Target Options,  Prev: Directory Options,  Up: Invoking GCC
10512
105133.15 Specifying subprocesses and the switches to pass to them
10514=============================================================
10515
10516'gcc' is a driver program.  It performs its job by invoking a sequence
10517of other programs to do the work of compiling, assembling and linking.
10518GCC interprets its command-line parameters and uses these to deduce
10519which programs it should invoke, and which command-line options it ought
10520to place on their command lines.  This behavior is controlled by "spec
10521strings".  In most cases there is one spec string for each program that
10522GCC can invoke, but a few programs have multiple spec strings to control
10523their behavior.  The spec strings built into GCC can be overridden by
10524using the '-specs=' command-line switch to specify a spec file.
10525
10526 "Spec files" are plaintext files that are used to construct spec
10527strings.  They consist of a sequence of directives separated by blank
10528lines.  The type of directive is determined by the first non-whitespace
10529character on the line, which can be one of the following:
10530
10531'%COMMAND'
10532     Issues a COMMAND to the spec file processor.  The commands that can
10533     appear here are:
10534
10535     '%include <FILE>'
10536          Search for FILE and insert its text at the current point in
10537          the specs file.
10538
10539     '%include_noerr <FILE>'
10540          Just like '%include', but do not generate an error message if
10541          the include file cannot be found.
10542
10543     '%rename OLD_NAME NEW_NAME'
10544          Rename the spec string OLD_NAME to NEW_NAME.
10545
10546'*[SPEC_NAME]:'
10547     This tells the compiler to create, override or delete the named
10548     spec string.  All lines after this directive up to the next
10549     directive or blank line are considered to be the text for the spec
10550     string.  If this results in an empty string then the spec is
10551     deleted.  (Or, if the spec did not exist, then nothing happens.)
10552     Otherwise, if the spec does not currently exist a new spec is
10553     created.  If the spec does exist then its contents are overridden
10554     by the text of this directive, unless the first character of that
10555     text is the '+' character, in which case the text is appended to
10556     the spec.
10557
10558'[SUFFIX]:'
10559     Creates a new '[SUFFIX] spec' pair.  All lines after this directive
10560     and up to the next directive or blank line are considered to make
10561     up the spec string for the indicated suffix.  When the compiler
10562     encounters an input file with the named suffix, it processes the
10563     spec string in order to work out how to compile that file.  For
10564     example:
10565
10566          .ZZ:
10567          z-compile -input %i
10568
10569     This says that any input file whose name ends in '.ZZ' should be
10570     passed to the program 'z-compile', which should be invoked with the
10571     command-line switch '-input' and with the result of performing the
10572     '%i' substitution.  (See below.)
10573
10574     As an alternative to providing a spec string, the text following a
10575     suffix directive can be one of the following:
10576
10577     '@LANGUAGE'
10578          This says that the suffix is an alias for a known LANGUAGE.
10579          This is similar to using the '-x' command-line switch to GCC
10580          to specify a language explicitly.  For example:
10581
10582               .ZZ:
10583               @c++
10584
10585          Says that .ZZ files are, in fact, C++ source files.
10586
10587     '#NAME'
10588          This causes an error messages saying:
10589
10590               NAME compiler not installed on this system.
10591
10592     GCC already has an extensive list of suffixes built into it.  This
10593     directive adds an entry to the end of the list of suffixes, but
10594     since the list is searched from the end backwards, it is
10595     effectively possible to override earlier entries using this
10596     technique.
10597
10598 GCC has the following spec strings built into it.  Spec files can
10599override these strings or create their own.  Note that individual
10600targets can also add their own spec strings to this list.
10601
10602     asm          Options to pass to the assembler
10603     asm_final    Options to pass to the assembler post-processor
10604     cpp          Options to pass to the C preprocessor
10605     cc1          Options to pass to the C compiler
10606     cc1plus      Options to pass to the C++ compiler
10607     endfile      Object files to include at the end of the link
10608     link         Options to pass to the linker
10609     lib          Libraries to include on the command line to the linker
10610     libgcc       Decides which GCC support library to pass to the linker
10611     linker       Sets the name of the linker
10612     predefines   Defines to be passed to the C preprocessor
10613     signed_char  Defines to pass to CPP to say whether char is signed
10614                  by default
10615     startfile    Object files to include at the start of the link
10616
10617 Here is a small example of a spec file:
10618
10619     %rename lib                 old_lib
10620
10621     *lib:
10622     --start-group -lgcc -lc -leval1 --end-group %(old_lib)
10623
10624 This example renames the spec called 'lib' to 'old_lib' and then
10625overrides the previous definition of 'lib' with a new one.  The new
10626definition adds in some extra command-line options before including the
10627text of the old definition.
10628
10629 "Spec strings" are a list of command-line options to be passed to their
10630corresponding program.  In addition, the spec strings can contain
10631'%'-prefixed sequences to substitute variable text or to conditionally
10632insert text into the command line.  Using these constructs it is
10633possible to generate quite complex command lines.
10634
10635 Here is a table of all defined '%'-sequences for spec strings.  Note
10636that spaces are not generated automatically around the results of
10637expanding these sequences.  Therefore you can concatenate them together
10638or combine them with constant text in a single argument.
10639
10640'%%'
10641     Substitute one '%' into the program name or argument.
10642
10643'%i'
10644     Substitute the name of the input file being processed.
10645
10646'%b'
10647     Substitute the basename of the input file being processed.  This is
10648     the substring up to (and not including) the last period and not
10649     including the directory.
10650
10651'%B'
10652     This is the same as '%b', but include the file suffix (text after
10653     the last period).
10654
10655'%d'
10656     Marks the argument containing or following the '%d' as a temporary
10657     file name, so that that file is deleted if GCC exits successfully.
10658     Unlike '%g', this contributes no text to the argument.
10659
10660'%gSUFFIX'
10661     Substitute a file name that has suffix SUFFIX and is chosen once
10662     per compilation, and mark the argument in the same way as '%d'.  To
10663     reduce exposure to denial-of-service attacks, the file name is now
10664     chosen in a way that is hard to predict even when previously chosen
10665     file names are known.  For example, '%g.s ... %g.o ... %g.s' might
10666     turn into 'ccUVUUAU.s ccXYAXZ12.o ccUVUUAU.s'.  SUFFIX matches the
10667     regexp '[.A-Za-z]*' or the special string '%O', which is treated
10668     exactly as if '%O' had been preprocessed.  Previously, '%g' was
10669     simply substituted with a file name chosen once per compilation,
10670     without regard to any appended suffix (which was therefore treated
10671     just like ordinary text), making such attacks more likely to
10672     succeed.
10673
10674'%uSUFFIX'
10675     Like '%g', but generates a new temporary file name each time it
10676     appears instead of once per compilation.
10677
10678'%USUFFIX'
10679     Substitutes the last file name generated with '%uSUFFIX',
10680     generating a new one if there is no such last file name.  In the
10681     absence of any '%uSUFFIX', this is just like '%gSUFFIX', except
10682     they don't share the same suffix _space_, so '%g.s ... %U.s ...
10683     %g.s ... %U.s' involves the generation of two distinct file names,
10684     one for each '%g.s' and another for each '%U.s'.  Previously, '%U'
10685     was simply substituted with a file name chosen for the previous
10686     '%u', without regard to any appended suffix.
10687
10688'%jSUFFIX'
10689     Substitutes the name of the 'HOST_BIT_BUCKET', if any, and if it is
10690     writable, and if '-save-temps' is not used; otherwise, substitute
10691     the name of a temporary file, just like '%u'.  This temporary file
10692     is not meant for communication between processes, but rather as a
10693     junk disposal mechanism.
10694
10695'%|SUFFIX'
10696'%mSUFFIX'
10697     Like '%g', except if '-pipe' is in effect.  In that case '%|'
10698     substitutes a single dash and '%m' substitutes nothing at all.
10699     These are the two most common ways to instruct a program that it
10700     should read from standard input or write to standard output.  If
10701     you need something more elaborate you can use an '%{pipe:'X'}'
10702     construct: see for example 'f/lang-specs.h'.
10703
10704'%.SUFFIX'
10705     Substitutes .SUFFIX for the suffixes of a matched switch's args
10706     when it is subsequently output with '%*'.  SUFFIX is terminated by
10707     the next space or %.
10708
10709'%w'
10710     Marks the argument containing or following the '%w' as the
10711     designated output file of this compilation.  This puts the argument
10712     into the sequence of arguments that '%o' substitutes.
10713
10714'%o'
10715     Substitutes the names of all the output files, with spaces
10716     automatically placed around them.  You should write spaces around
10717     the '%o' as well or the results are undefined.  '%o' is for use in
10718     the specs for running the linker.  Input files whose names have no
10719     recognized suffix are not compiled at all, but they are included
10720     among the output files, so they are linked.
10721
10722'%O'
10723     Substitutes the suffix for object files.  Note that this is handled
10724     specially when it immediately follows '%g, %u, or %U', because of
10725     the need for those to form complete file names.  The handling is
10726     such that '%O' is treated exactly as if it had already been
10727     substituted, except that '%g, %u, and %U' do not currently support
10728     additional SUFFIX characters following '%O' as they do following,
10729     for example, '.o'.
10730
10731'%p'
10732     Substitutes the standard macro predefinitions for the current
10733     target machine.  Use this when running 'cpp'.
10734
10735'%P'
10736     Like '%p', but puts '__' before and after the name of each
10737     predefined macro, except for macros that start with '__' or with
10738     '_L', where L is an uppercase letter.  This is for ISO C.
10739
10740'%I'
10741     Substitute any of '-iprefix' (made from 'GCC_EXEC_PREFIX'),
10742     '-isysroot' (made from 'TARGET_SYSTEM_ROOT'), '-isystem' (made from
10743     'COMPILER_PATH' and '-B' options) and '-imultilib' as necessary.
10744
10745'%s'
10746     Current argument is the name of a library or startup file of some
10747     sort.  Search for that file in a standard list of directories and
10748     substitute the full name found.  The current working directory is
10749     included in the list of directories scanned.
10750
10751'%T'
10752     Current argument is the name of a linker script.  Search for that
10753     file in the current list of directories to scan for libraries.  If
10754     the file is located insert a '--script' option into the command
10755     line followed by the full path name found.  If the file is not
10756     found then generate an error message.  Note: the current working
10757     directory is not searched.
10758
10759'%eSTR'
10760     Print STR as an error message.  STR is terminated by a newline.
10761     Use this when inconsistent options are detected.
10762
10763'%(NAME)'
10764     Substitute the contents of spec string NAME at this point.
10765
10766'%x{OPTION}'
10767     Accumulate an option for '%X'.
10768
10769'%X'
10770     Output the accumulated linker options specified by '-Wl' or a '%x'
10771     spec string.
10772
10773'%Y'
10774     Output the accumulated assembler options specified by '-Wa'.
10775
10776'%Z'
10777     Output the accumulated preprocessor options specified by '-Wp'.
10778
10779'%a'
10780     Process the 'asm' spec.  This is used to compute the switches to be
10781     passed to the assembler.
10782
10783'%A'
10784     Process the 'asm_final' spec.  This is a spec string for passing
10785     switches to an assembler post-processor, if such a program is
10786     needed.
10787
10788'%l'
10789     Process the 'link' spec.  This is the spec for computing the
10790     command line passed to the linker.  Typically it makes use of the
10791     '%L %G %S %D and %E' sequences.
10792
10793'%D'
10794     Dump out a '-L' option for each directory that GCC believes might
10795     contain startup files.  If the target supports multilibs then the
10796     current multilib directory is prepended to each of these paths.
10797
10798'%L'
10799     Process the 'lib' spec.  This is a spec string for deciding which
10800     libraries are included on the command line to the linker.
10801
10802'%G'
10803     Process the 'libgcc' spec.  This is a spec string for deciding
10804     which GCC support library is included on the command line to the
10805     linker.
10806
10807'%S'
10808     Process the 'startfile' spec.  This is a spec for deciding which
10809     object files are the first ones passed to the linker.  Typically
10810     this might be a file named 'crt0.o'.
10811
10812'%E'
10813     Process the 'endfile' spec.  This is a spec string that specifies
10814     the last object files that are passed to the linker.
10815
10816'%C'
10817     Process the 'cpp' spec.  This is used to construct the arguments to
10818     be passed to the C preprocessor.
10819
10820'%1'
10821     Process the 'cc1' spec.  This is used to construct the options to
10822     be passed to the actual C compiler ('cc1').
10823
10824'%2'
10825     Process the 'cc1plus' spec.  This is used to construct the options
10826     to be passed to the actual C++ compiler ('cc1plus').
10827
10828'%*'
10829     Substitute the variable part of a matched option.  See below.  Note
10830     that each comma in the substituted string is replaced by a single
10831     space.
10832
10833'%<S'
10834     Remove all occurrences of '-S' from the command line.  Note--this
10835     command is position dependent.  '%' commands in the spec string
10836     before this one see '-S', '%' commands in the spec string after
10837     this one do not.
10838
10839'%:FUNCTION(ARGS)'
10840     Call the named function FUNCTION, passing it ARGS.  ARGS is first
10841     processed as a nested spec string, then split into an argument
10842     vector in the usual fashion.  The function returns a string which
10843     is processed as if it had appeared literally as part of the current
10844     spec.
10845
10846     The following built-in spec functions are provided:
10847
10848     'getenv'
10849          The 'getenv' spec function takes two arguments: an environment
10850          variable name and a string.  If the environment variable is
10851          not defined, a fatal error is issued.  Otherwise, the return
10852          value is the value of the environment variable concatenated
10853          with the string.  For example, if 'TOPDIR' is defined as
10854          '/path/to/top', then:
10855
10856               %:getenv(TOPDIR /include)
10857
10858          expands to '/path/to/top/include'.
10859
10860     'if-exists'
10861          The 'if-exists' spec function takes one argument, an absolute
10862          pathname to a file.  If the file exists, 'if-exists' returns
10863          the pathname.  Here is a small example of its usage:
10864
10865               *startfile:
10866               crt0%O%s %:if-exists(crti%O%s) crtbegin%O%s
10867
10868     'if-exists-else'
10869          The 'if-exists-else' spec function is similar to the
10870          'if-exists' spec function, except that it takes two arguments.
10871          The first argument is an absolute pathname to a file.  If the
10872          file exists, 'if-exists-else' returns the pathname.  If it
10873          does not exist, it returns the second argument.  This way,
10874          'if-exists-else' can be used to select one file or another,
10875          based on the existence of the first.  Here is a small example
10876          of its usage:
10877
10878               *startfile:
10879               crt0%O%s %:if-exists(crti%O%s) \
10880               %:if-exists-else(crtbeginT%O%s crtbegin%O%s)
10881
10882     'replace-outfile'
10883          The 'replace-outfile' spec function takes two arguments.  It
10884          looks for the first argument in the outfiles array and
10885          replaces it with the second argument.  Here is a small example
10886          of its usage:
10887
10888               %{fgnu-runtime:%:replace-outfile(-lobjc -lobjc-gnu)}
10889
10890     'remove-outfile'
10891          The 'remove-outfile' spec function takes one argument.  It
10892          looks for the first argument in the outfiles array and removes
10893          it.  Here is a small example its usage:
10894
10895               %:remove-outfile(-lm)
10896
10897     'pass-through-libs'
10898          The 'pass-through-libs' spec function takes any number of
10899          arguments.  It finds any '-l' options and any non-options
10900          ending in '.a' (which it assumes are the names of linker input
10901          library archive files) and returns a result containing all the
10902          found arguments each prepended by '-plugin-opt=-pass-through='
10903          and joined by spaces.  This list is intended to be passed to
10904          the LTO linker plugin.
10905
10906               %:pass-through-libs(%G %L %G)
10907
10908     'print-asm-header'
10909          The 'print-asm-header' function takes no arguments and simply
10910          prints a banner like:
10911
10912               Assembler options
10913               =================
10914
10915               Use "-Wa,OPTION" to pass "OPTION" to the assembler.
10916
10917          It is used to separate compiler options from assembler options
10918          in the '--target-help' output.
10919
10920'%{S}'
10921     Substitutes the '-S' switch, if that switch is given to GCC.  If
10922     that switch is not specified, this substitutes nothing.  Note that
10923     the leading dash is omitted when specifying this option, and it is
10924     automatically inserted if the substitution is performed.  Thus the
10925     spec string '%{foo}' matches the command-line option '-foo' and
10926     outputs the command-line option '-foo'.
10927
10928'%W{S}'
10929     Like %{'S'} but mark last argument supplied within as a file to be
10930     deleted on failure.
10931
10932'%{S*}'
10933     Substitutes all the switches specified to GCC whose names start
10934     with '-S', but which also take an argument.  This is used for
10935     switches like '-o', '-D', '-I', etc.  GCC considers '-o foo' as
10936     being one switch whose name starts with 'o'.  %{o*} substitutes
10937     this text, including the space.  Thus two arguments are generated.
10938
10939'%{S*&T*}'
10940     Like %{'S'*}, but preserve order of 'S' and 'T' options (the order
10941     of 'S' and 'T' in the spec is not significant).  There can be any
10942     number of ampersand-separated variables; for each the wild card is
10943     optional.  Useful for CPP as '%{D*&U*&A*}'.
10944
10945'%{S:X}'
10946     Substitutes 'X', if the '-S' switch is given to GCC.
10947
10948'%{!S:X}'
10949     Substitutes 'X', if the '-S' switch is _not_ given to GCC.
10950
10951'%{S*:X}'
10952     Substitutes 'X' if one or more switches whose names start with '-S'
10953     are specified to GCC.  Normally 'X' is substituted only once, no
10954     matter how many such switches appeared.  However, if '%*' appears
10955     somewhere in 'X', then 'X' is substituted once for each matching
10956     switch, with the '%*' replaced by the part of that switch matching
10957     the '*'.
10958
10959     If '%*' appears as the last part of a spec sequence then a space
10960     will be added after the end of the last substitution.  If there is
10961     more text in the sequence however then a space will not be
10962     generated.  This allows the '%*' substitution to be used as part of
10963     a larger string.  For example, a spec string like this:
10964
10965          %{mcu=*:--script=%*/memory.ld}
10966
10967     when matching an option like '-mcu=newchip' will produce:
10968
10969          --script=newchip/memory.ld
10970
10971'%{.S:X}'
10972     Substitutes 'X', if processing a file with suffix 'S'.
10973
10974'%{!.S:X}'
10975     Substitutes 'X', if _not_ processing a file with suffix 'S'.
10976
10977'%{,S:X}'
10978     Substitutes 'X', if processing a file for language 'S'.
10979
10980'%{!,S:X}'
10981     Substitutes 'X', if not processing a file for language 'S'.
10982
10983'%{S|P:X}'
10984     Substitutes 'X' if either '-S' or '-P' is given to GCC.  This may
10985     be combined with '!', '.', ',', and '*' sequences as well, although
10986     they have a stronger binding than the '|'.  If '%*' appears in 'X',
10987     all of the alternatives must be starred, and only the first
10988     matching alternative is substituted.
10989
10990     For example, a spec string like this:
10991
10992          %{.c:-foo} %{!.c:-bar} %{.c|d:-baz} %{!.c|d:-boggle}
10993
10994     outputs the following command-line options from the following input
10995     command-line options:
10996
10997          fred.c        -foo -baz
10998          jim.d         -bar -boggle
10999          -d fred.c     -foo -baz -boggle
11000          -d jim.d      -bar -baz -boggle
11001
11002'%{S:X; T:Y; :D}'
11003
11004     If 'S' is given to GCC, substitutes 'X'; else if 'T' is given to
11005     GCC, substitutes 'Y'; else substitutes 'D'.  There can be as many
11006     clauses as you need.  This may be combined with '.', ',', '!', '|',
11007     and '*' as needed.
11008
11009 The conditional text 'X' in a %{'S':'X'} or similar construct may
11010contain other nested '%' constructs or spaces, or even newlines.  They
11011are processed as usual, as described above.  Trailing white space in 'X'
11012is ignored.  White space may also appear anywhere on the left side of
11013the colon in these constructs, except between '.' or '*' and the
11014corresponding word.
11015
11016 The '-O', '-f', '-m', and '-W' switches are handled specifically in
11017these constructs.  If another value of '-O' or the negated form of a
11018'-f', '-m', or '-W' switch is found later in the command line, the
11019earlier switch value is ignored, except with {'S'*} where 'S' is just
11020one letter, which passes all matching options.
11021
11022 The character '|' at the beginning of the predicate text is used to
11023indicate that a command should be piped to the following command, but
11024only if '-pipe' is specified.
11025
11026 It is built into GCC which switches take arguments and which do not.
11027(You might think it would be useful to generalize this to allow each
11028compiler's spec to say which switches take arguments.  But this cannot
11029be done in a consistent fashion.  GCC cannot even decide which input
11030files have been specified without knowing which switches take arguments,
11031and it must know which input files to compile in order to tell which
11032compilers to run).
11033
11034 GCC also knows implicitly that arguments starting in '-l' are to be
11035treated as compiler output files, and passed to the linker in their
11036proper position among the other output files.
11037
11038
11039File: gcc.info,  Node: Target Options,  Next: Submodel Options,  Prev: Spec Files,  Up: Invoking GCC
11040
110413.16 Specifying Target Machine and Compiler Version
11042===================================================
11043
11044The usual way to run GCC is to run the executable called 'gcc', or
11045'MACHINE-gcc' when cross-compiling, or 'MACHINE-gcc-VERSION' to run a
11046version other than the one that was installed last.
11047
11048
11049File: gcc.info,  Node: Submodel Options,  Next: Code Gen Options,  Prev: Target Options,  Up: Invoking GCC
11050
110513.17 Hardware Models and Configurations
11052=======================================
11053
11054Each target machine types can have its own special options, starting
11055with '-m', to choose among various hardware models or
11056configurations--for example, 68010 vs 68020, floating coprocessor or
11057none.  A single installed version of the compiler can compile for any
11058model or configuration, according to the options specified.
11059
11060 Some configurations of the compiler also support additional special
11061options, usually for compatibility with other compilers on the same
11062platform.
11063
11064* Menu:
11065
11066* AArch64 Options::
11067* Adapteva Epiphany Options::
11068* ARC Options::
11069* ARM Options::
11070* AVR Options::
11071* Blackfin Options::
11072* C6X Options::
11073* CRIS Options::
11074* CR16 Options::
11075* Darwin Options::
11076* DEC Alpha Options::
11077* FR30 Options::
11078* FRV Options::
11079* GNU/Linux Options::
11080* H8/300 Options::
11081* HPPA Options::
11082* i386 and x86-64 Options::
11083* i386 and x86-64 Windows Options::
11084* IA-64 Options::
11085* LM32 Options::
11086* M32C Options::
11087* M32R/D Options::
11088* M680x0 Options::
11089* MCore Options::
11090* MeP Options::
11091* MicroBlaze Options::
11092* MIPS Options::
11093* MMIX Options::
11094* MN10300 Options::
11095* Moxie Options::
11096* MSP430 Options::
11097* NDS32 Options::
11098* Nios II Options::
11099* PDP-11 Options::
11100* picoChip Options::
11101* PowerPC Options::
11102* RL78 Options::
11103* RS/6000 and PowerPC Options::
11104* RX Options::
11105* S/390 and zSeries Options::
11106* Score Options::
11107* SH Options::
11108* Solaris 2 Options::
11109* SPARC Options::
11110* SPU Options::
11111* System V Options::
11112* TILE-Gx Options::
11113* TILEPro Options::
11114* V850 Options::
11115* VAX Options::
11116* VMS Options::
11117* VxWorks Options::
11118* x86-64 Options::
11119* Xstormy16 Options::
11120* Xtensa Options::
11121* zSeries Options::
11122
11123
11124File: gcc.info,  Node: AArch64 Options,  Next: Adapteva Epiphany Options,  Up: Submodel Options
11125
111263.17.1 AArch64 Options
11127----------------------
11128
11129These options are defined for AArch64 implementations:
11130
11131'-mabi=NAME'
11132     Generate code for the specified data model.  Permissible values are
11133     'ilp32' for SysV-like data model where int, long int and pointer
11134     are 32-bit, and 'lp64' for SysV-like data model where int is
11135     32-bit, but long int and pointer are 64-bit.
11136
11137     The default depends on the specific target configuration.  Note
11138     that the LP64 and ILP32 ABIs are not link-compatible; you must
11139     compile your entire program with the same ABI, and link with a
11140     compatible set of libraries.
11141
11142'-mbig-endian'
11143     Generate big-endian code.  This is the default when GCC is
11144     configured for an 'aarch64_be-*-*' target.
11145
11146'-mgeneral-regs-only'
11147     Generate code which uses only the general registers.
11148
11149'-mlittle-endian'
11150     Generate little-endian code.  This is the default when GCC is
11151     configured for an 'aarch64-*-*' but not an 'aarch64_be-*-*' target.
11152
11153'-mcmodel=tiny'
11154     Generate code for the tiny code model.  The program and its
11155     statically defined symbols must be within 1GB of each other.
11156     Pointers are 64 bits.  Programs can be statically or dynamically
11157     linked.  This model is not fully implemented and mostly treated as
11158     'small'.
11159
11160'-mcmodel=small'
11161     Generate code for the small code model.  The program and its
11162     statically defined symbols must be within 4GB of each other.
11163     Pointers are 64 bits.  Programs can be statically or dynamically
11164     linked.  This is the default code model.
11165
11166'-mcmodel=large'
11167     Generate code for the large code model.  This makes no assumptions
11168     about addresses and sizes of sections.  Pointers are 64 bits.
11169     Programs can be statically linked only.
11170
11171'-mstrict-align'
11172     Do not assume that unaligned memory references will be handled by
11173     the system.
11174
11175'-momit-leaf-frame-pointer'
11176'-mno-omit-leaf-frame-pointer'
11177     Omit or keep the frame pointer in leaf functions.  The former
11178     behaviour is the default.
11179
11180'-mtls-dialect=desc'
11181     Use TLS descriptors as the thread-local storage mechanism for
11182     dynamic accesses of TLS variables.  This is the default.
11183
11184'-mtls-dialect=traditional'
11185     Use traditional TLS as the thread-local storage mechanism for
11186     dynamic accesses of TLS variables.
11187
11188'-mfix-cortex-a53-835769'
11189'-mno-fix-cortex-a53-835769'
11190     Enable or disable the workaround for the ARM Cortex-A53 erratum
11191     number 835769.  This will involve inserting a NOP instruction
11192     between memory instructions and 64-bit integer multiply-accumulate
11193     instructions.
11194
11195'-march=NAME'
11196     Specify the name of the target architecture, optionally suffixed by
11197     one or more feature modifiers.  This option has the form
11198     '-march=ARCH{+[no]FEATURE}*', where the only permissible value for
11199     ARCH is 'armv8-a'.  The permissible values for FEATURE are
11200     documented in the sub-section below.
11201
11202     Where conflicting feature modifiers are specified, the right-most
11203     feature is used.
11204
11205     GCC uses this name to determine what kind of instructions it can
11206     emit when generating assembly code.
11207
11208     Where '-march' is specified without either of '-mtune' or '-mcpu'
11209     also being specified, the code will be tuned to perform well across
11210     a range of target processors implementing the target architecture.
11211
11212'-mtune=NAME'
11213     Specify the name of the target processor for which GCC should tune
11214     the performance of the code.  Permissible values for this option
11215     are: 'generic', 'cortex-a53', 'cortex-a57'.
11216
11217     Additionally, this option can specify that GCC should tune the
11218     performance of the code for a big.LITTLE system.  The only
11219     permissible value is 'cortex-a57.cortex-a53'.
11220
11221     Where none of '-mtune=', '-mcpu=' or '-march=' are specified, the
11222     code will be tuned to perform well across a range of target
11223     processors.
11224
11225     This option cannot be suffixed by feature modifiers.
11226
11227'-mcpu=NAME'
11228     Specify the name of the target processor, optionally suffixed by
11229     one or more feature modifiers.  This option has the form
11230     '-mcpu=CPU{+[no]FEATURE}*', where the permissible values for CPU
11231     are the same as those available for '-mtune'.
11232
11233     The permissible values for FEATURE are documented in the
11234     sub-section below.
11235
11236     Where conflicting feature modifiers are specified, the right-most
11237     feature is used.
11238
11239     GCC uses this name to determine what kind of instructions it can
11240     emit when generating assembly code (as if by '-march') and to
11241     determine the target processor for which to tune for performance
11242     (as if by '-mtune').  Where this option is used in conjunction with
11243     '-march' or '-mtune', those options take precedence over the
11244     appropriate part of this option.
11245
112463.17.1.1 '-march' and '-mcpu' feature modifiers
11247...............................................
11248
11249Feature modifiers used with '-march' and '-mcpu' can be one the
11250following:
11251
11252'crc'
11253     Enable CRC extension.
11254'crypto'
11255     Enable Crypto extension.  This implies Advanced SIMD is enabled.
11256'fp'
11257     Enable floating-point instructions.
11258'simd'
11259     Enable Advanced SIMD instructions.  This implies floating-point
11260     instructions are enabled.  This is the default for all current
11261     possible values for options '-march' and '-mcpu='.
11262
11263
11264File: gcc.info,  Node: Adapteva Epiphany Options,  Next: ARC Options,  Prev: AArch64 Options,  Up: Submodel Options
11265
112663.17.2 Adapteva Epiphany Options
11267--------------------------------
11268
11269These '-m' options are defined for Adapteva Epiphany:
11270
11271'-mhalf-reg-file'
11272     Don't allocate any register in the range 'r32'...'r63'.  That
11273     allows code to run on hardware variants that lack these registers.
11274
11275'-mprefer-short-insn-regs'
11276     Preferrentially allocate registers that allow short instruction
11277     generation.  This can result in increased instruction count, so
11278     this may either reduce or increase overall code size.
11279
11280'-mbranch-cost=NUM'
11281     Set the cost of branches to roughly NUM "simple" instructions.
11282     This cost is only a heuristic and is not guaranteed to produce
11283     consistent results across releases.
11284
11285'-mcmove'
11286     Enable the generation of conditional moves.
11287
11288'-mnops=NUM'
11289     Emit NUM NOPs before every other generated instruction.
11290
11291'-mno-soft-cmpsf'
11292     For single-precision floating-point comparisons, emit an 'fsub'
11293     instruction and test the flags.  This is faster than a software
11294     comparison, but can get incorrect results in the presence of NaNs,
11295     or when two different small numbers are compared such that their
11296     difference is calculated as zero.  The default is '-msoft-cmpsf',
11297     which uses slower, but IEEE-compliant, software comparisons.
11298
11299'-mstack-offset=NUM'
11300     Set the offset between the top of the stack and the stack pointer.
11301     E.g., a value of 8 means that the eight bytes in the range
11302     'sp+0...sp+7' can be used by leaf functions without stack
11303     allocation.  Values other than '8' or '16' are untested and
11304     unlikely to work.  Note also that this option changes the ABI;
11305     compiling a program with a different stack offset than the
11306     libraries have been compiled with generally does not work.  This
11307     option can be useful if you want to evaluate if a different stack
11308     offset would give you better code, but to actually use a different
11309     stack offset to build working programs, it is recommended to
11310     configure the toolchain with the appropriate
11311     '--with-stack-offset=NUM' option.
11312
11313'-mno-round-nearest'
11314     Make the scheduler assume that the rounding mode has been set to
11315     truncating.  The default is '-mround-nearest'.
11316
11317'-mlong-calls'
11318     If not otherwise specified by an attribute, assume all calls might
11319     be beyond the offset range of the 'b' / 'bl' instructions, and
11320     therefore load the function address into a register before
11321     performing a (otherwise direct) call.  This is the default.
11322
11323'-mshort-calls'
11324     If not otherwise specified by an attribute, assume all direct calls
11325     are in the range of the 'b' / 'bl' instructions, so use these
11326     instructions for direct calls.  The default is '-mlong-calls'.
11327
11328'-msmall16'
11329     Assume addresses can be loaded as 16-bit unsigned values.  This
11330     does not apply to function addresses for which '-mlong-calls'
11331     semantics are in effect.
11332
11333'-mfp-mode=MODE'
11334     Set the prevailing mode of the floating-point unit.  This
11335     determines the floating-point mode that is provided and expected at
11336     function call and return time.  Making this mode match the mode you
11337     predominantly need at function start can make your programs smaller
11338     and faster by avoiding unnecessary mode switches.
11339
11340     MODE can be set to one the following values:
11341
11342     'caller'
11343          Any mode at function entry is valid, and retained or restored
11344          when the function returns, and when it calls other functions.
11345          This mode is useful for compiling libraries or other
11346          compilation units you might want to incorporate into different
11347          programs with different prevailing FPU modes, and the
11348          convenience of being able to use a single object file
11349          outweighs the size and speed overhead for any extra mode
11350          switching that might be needed, compared with what would be
11351          needed with a more specific choice of prevailing FPU mode.
11352
11353     'truncate'
11354          This is the mode used for floating-point calculations with
11355          truncating (i.e. round towards zero) rounding mode.  That
11356          includes conversion from floating point to integer.
11357
11358     'round-nearest'
11359          This is the mode used for floating-point calculations with
11360          round-to-nearest-or-even rounding mode.
11361
11362     'int'
11363          This is the mode used to perform integer calculations in the
11364          FPU, e.g. integer multiply, or integer
11365          multiply-and-accumulate.
11366
11367     The default is '-mfp-mode=caller'
11368
11369'-mnosplit-lohi'
11370'-mno-postinc'
11371'-mno-postmodify'
11372     Code generation tweaks that disable, respectively, splitting of
11373     32-bit loads, generation of post-increment addresses, and
11374     generation of post-modify addresses.  The defaults are
11375     'msplit-lohi', '-mpost-inc', and '-mpost-modify'.
11376
11377'-mnovect-double'
11378     Change the preferred SIMD mode to SImode.  The default is
11379     '-mvect-double', which uses DImode as preferred SIMD mode.
11380
11381'-max-vect-align=NUM'
11382     The maximum alignment for SIMD vector mode types.  NUM may be 4 or
11383     8.  The default is 8.  Note that this is an ABI change, even though
11384     many library function interfaces are unaffected if they don't use
11385     SIMD vector modes in places that affect size and/or alignment of
11386     relevant types.
11387
11388'-msplit-vecmove-early'
11389     Split vector moves into single word moves before reload.  In theory
11390     this can give better register allocation, but so far the reverse
11391     seems to be generally the case.
11392
11393'-m1reg-REG'
11394     Specify a register to hold the constant -1, which makes loading
11395     small negative constants and certain bitmasks faster.  Allowable
11396     values for REG are 'r43' and 'r63', which specify use of that
11397     register as a fixed register, and 'none', which means that no
11398     register is used for this purpose.  The default is '-m1reg-none'.
11399
11400
11401File: gcc.info,  Node: ARC Options,  Next: ARM Options,  Prev: Adapteva Epiphany Options,  Up: Submodel Options
11402
114033.17.3 ARC Options
11404------------------
11405
11406The following options control the architecture variant for which code is
11407being compiled:
11408
11409'-mbarrel-shifter'
11410     Generate instructions supported by barrel shifter.  This is the
11411     default unless '-mcpu=ARC601' is in effect.
11412
11413'-mcpu=CPU'
11414     Set architecture type, register usage, and instruction scheduling
11415     parameters for CPU.  There are also shortcut alias options
11416     available for backward compatibility and convenience.  Supported
11417     values for CPU are
11418
11419     'ARC600'
11420          Compile for ARC600.  Aliases: '-mA6', '-mARC600'.
11421
11422     'ARC601'
11423          Compile for ARC601.  Alias: '-mARC601'.
11424
11425     'ARC700'
11426          Compile for ARC700.  Aliases: '-mA7', '-mARC700'.  This is the
11427          default when configured with '--with-cpu=arc700'.
11428
11429'-mdpfp'
11430'-mdpfp-compact'
11431     FPX: Generate Double Precision FPX instructions, tuned for the
11432     compact implementation.
11433
11434'-mdpfp-fast'
11435     FPX: Generate Double Precision FPX instructions, tuned for the fast
11436     implementation.
11437
11438'-mno-dpfp-lrsr'
11439     Disable LR and SR instructions from using FPX extension aux
11440     registers.
11441
11442'-mea'
11443     Generate Extended arithmetic instructions.  Currently only 'divaw',
11444     'adds', 'subs', and 'sat16' are supported.  This is always enabled
11445     for '-mcpu=ARC700'.
11446
11447'-mno-mpy'
11448     Do not generate mpy instructions for ARC700.
11449
11450'-mmul32x16'
11451     Generate 32x16 bit multiply and mac instructions.
11452
11453'-mmul64'
11454     Generate mul64 and mulu64 instructions.  Only valid for
11455     '-mcpu=ARC600'.
11456
11457'-mnorm'
11458     Generate norm instruction.  This is the default if '-mcpu=ARC700'
11459     is in effect.
11460
11461'-mspfp'
11462'-mspfp-compact'
11463     FPX: Generate Single Precision FPX instructions, tuned for the
11464     compact implementation.
11465
11466'-mspfp-fast'
11467     FPX: Generate Single Precision FPX instructions, tuned for the fast
11468     implementation.
11469
11470'-msimd'
11471     Enable generation of ARC SIMD instructions via target-specific
11472     builtins.  Only valid for '-mcpu=ARC700'.
11473
11474'-msoft-float'
11475     This option ignored; it is provided for compatibility purposes
11476     only.  Software floating point code is emitted by default, and this
11477     default can overridden by FPX options; 'mspfp', 'mspfp-compact', or
11478     'mspfp-fast' for single precision, and 'mdpfp', 'mdpfp-compact', or
11479     'mdpfp-fast' for double precision.
11480
11481'-mswap'
11482     Generate swap instructions.
11483
11484 The following options are passed through to the assembler, and also
11485define preprocessor macro symbols.
11486
11487'-mdsp-packa'
11488     Passed down to the assembler to enable the DSP Pack A extensions.
11489     Also sets the preprocessor symbol '__Xdsp_packa'.
11490
11491'-mdvbf'
11492     Passed down to the assembler to enable the dual viterbi butterfly
11493     extension.  Also sets the preprocessor symbol '__Xdvbf'.
11494
11495'-mlock'
11496     Passed down to the assembler to enable the Locked Load/Store
11497     Conditional extension.  Also sets the preprocessor symbol
11498     '__Xlock'.
11499
11500'-mmac-d16'
11501     Passed down to the assembler.  Also sets the preprocessor symbol
11502     '__Xxmac_d16'.
11503
11504'-mmac-24'
11505     Passed down to the assembler.  Also sets the preprocessor symbol
11506     '__Xxmac_24'.
11507
11508'-mrtsc'
11509     Passed down to the assembler to enable the 64-bit Time-Stamp
11510     Counter extension instruction.  Also sets the preprocessor symbol
11511     '__Xrtsc'.
11512
11513'-mswape'
11514     Passed down to the assembler to enable the swap byte ordering
11515     extension instruction.  Also sets the preprocessor symbol
11516     '__Xswape'.
11517
11518'-mtelephony'
11519     Passed down to the assembler to enable dual and single operand
11520     instructions for telephony.  Also sets the preprocessor symbol
11521     '__Xtelephony'.
11522
11523'-mxy'
11524     Passed down to the assembler to enable the XY Memory extension.
11525     Also sets the preprocessor symbol '__Xxy'.
11526
11527 The following options control how the assembly code is annotated:
11528
11529'-misize'
11530     Annotate assembler instructions with estimated addresses.
11531
11532'-mannotate-align'
11533     Explain what alignment considerations lead to the decision to make
11534     an instruction short or long.
11535
11536 The following options are passed through to the linker:
11537
11538'-marclinux'
11539     Passed through to the linker, to specify use of the 'arclinux'
11540     emulation.  This option is enabled by default in tool chains built
11541     for 'arc-linux-uclibc' and 'arceb-linux-uclibc' targets when
11542     profiling is not requested.
11543
11544'-marclinux_prof'
11545     Passed through to the linker, to specify use of the 'arclinux_prof'
11546     emulation.  This option is enabled by default in tool chains built
11547     for 'arc-linux-uclibc' and 'arceb-linux-uclibc' targets when
11548     profiling is requested.
11549
11550 The following options control the semantics of generated code:
11551
11552'-mepilogue-cfi'
11553     Enable generation of call frame information for epilogues.
11554
11555'-mno-epilogue-cfi'
11556     Disable generation of call frame information for epilogues.
11557
11558'-mlong-calls'
11559     Generate call insns as register indirect calls, thus providing
11560     access to the full 32-bit address range.
11561
11562'-mmedium-calls'
11563     Don't use less than 25 bit addressing range for calls, which is the
11564     offset available for an unconditional branch-and-link instruction.
11565     Conditional execution of function calls is suppressed, to allow use
11566     of the 25-bit range, rather than the 21-bit range with conditional
11567     branch-and-link.  This is the default for tool chains built for 'arc-linux-uclibc'
11568     and 'arceb-linux-uclibc' targets.
11569
11570'-mno-sdata'
11571     Do not generate sdata references.  This is the default for tool
11572     chains built for 'arc-linux-uclibc' and 'arceb-linux-uclibc'
11573     targets.
11574
11575'-mucb-mcount'
11576     Instrument with mcount calls as used in UCB code.  I.e.  do the
11577     counting in the callee, not the caller.  By default ARC
11578     instrumentation counts in the caller.
11579
11580'-mvolatile-cache'
11581     Use ordinarily cached memory accesses for volatile references.
11582     This is the default.
11583
11584'-mno-volatile-cache'
11585     Enable cache bypass for volatile references.
11586
11587 The following options fine tune code generation:
11588'-malign-call'
11589     Do alignment optimizations for call instructions.
11590
11591'-mauto-modify-reg'
11592     Enable the use of pre/post modify with register displacement.
11593
11594'-mbbit-peephole'
11595     Enable bbit peephole2.
11596
11597'-mno-brcc'
11598     This option disables a target-specific pass in 'arc_reorg' to
11599     generate 'BRcc' instructions.  It has no effect on 'BRcc'
11600     generation driven by the combiner pass.
11601
11602'-mcase-vector-pcrel'
11603     Use pc-relative switch case tables - this enables case table
11604     shortening.  This is the default for '-Os'.
11605
11606'-mcompact-casesi'
11607     Enable compact casesi pattern.  This is the default for '-Os'.
11608
11609'-mno-cond-exec'
11610     Disable ARCompact specific pass to generate conditional execution
11611     instructions.  Due to delay slot scheduling and interactions
11612     between operand numbers, literal sizes, instruction lengths, and
11613     the support for conditional execution, the target-independent pass
11614     to generate conditional execution is often lacking, so the ARC port
11615     has kept a special pass around that tries to find more conditional
11616     execution generating opportunities after register allocation,
11617     branch shortening, and delay slot scheduling have been done.  This
11618     pass generally, but not always, improves performance and code size,
11619     at the cost of extra compilation time, which is why there is an
11620     option to switch it off.  If you have a problem with call
11621     instructions exceeding their allowable offset range because they
11622     are conditionalized, you should consider using '-mmedium-calls'
11623     instead.
11624
11625'-mearly-cbranchsi'
11626     Enable pre-reload use of the cbranchsi pattern.
11627
11628'-mexpand-adddi'
11629     Expand 'adddi3' and 'subdi3' at rtl generation time into 'add.f',
11630     'adc' etc.
11631
11632'-mindexed-loads'
11633     Enable the use of indexed loads.  This can be problematic because
11634     some optimizers will then assume the that indexed stores exist,
11635     which is not the case.
11636
11637'-mlra'
11638     Enable Local Register Allocation.  This is still experimental for
11639     ARC, so by default the compiler uses standard reload (i.e.
11640     '-mno-lra').
11641
11642'-mlra-priority-none'
11643     Don't indicate any priority for target registers.
11644
11645'-mlra-priority-compact'
11646     Indicate target register priority for r0..r3 / r12..r15.
11647
11648'-mlra-priority-noncompact'
11649     Reduce target regsiter priority for r0..r3 / r12..r15.
11650
11651'-mno-millicode'
11652     When optimizing for size (using '-Os'), prologues and epilogues
11653     that have to save or restore a large number of registers are often
11654     shortened by using call to a special function in libgcc; this is
11655     referred to as a _millicode_ call.  As these calls can pose
11656     performance issues, and/or cause linking issues when linking in a
11657     nonstandard way, this option is provided to turn off millicode call
11658     generation.
11659
11660'-mmixed-code'
11661     Tweak register allocation to help 16-bit instruction generation.
11662     This generally has the effect of decreasing the average instruction
11663     size while increasing the instruction count.
11664
11665'-mq-class'
11666     Enable 'q' instruction alternatives.  This is the default for
11667     '-Os'.
11668
11669'-mRcq'
11670     Enable Rcq constraint handling - most short code generation depends
11671     on this.  This is the default.
11672
11673'-mRcw'
11674     Enable Rcw constraint handling - ccfsm condexec mostly depends on
11675     this.  This is the default.
11676
11677'-msize-level=LEVEL'
11678     Fine-tune size optimization with regards to instruction lengths and
11679     alignment.  The recognized values for LEVEL are:
11680     '0'
11681          No size optimization.  This level is deprecated and treated
11682          like '1'.
11683
11684     '1'
11685          Short instructions are used opportunistically.
11686
11687     '2'
11688          In addition, alignment of loops and of code after barriers are
11689          dropped.
11690
11691     '3'
11692          In addition, optional data alignment is dropped, and the
11693          option 'Os' is enabled.
11694
11695     This defaults to '3' when '-Os' is in effect.  Otherwise, the
11696     behavior when this is not set is equivalent to level '1'.
11697
11698'-mtune=CPU'
11699     Set instruction scheduling parameters for CPU, overriding any
11700     implied by '-mcpu='.
11701
11702     Supported values for CPU are
11703
11704     'ARC600'
11705          Tune for ARC600 cpu.
11706
11707     'ARC601'
11708          Tune for ARC601 cpu.
11709
11710     'ARC700'
11711          Tune for ARC700 cpu with standard multiplier block.
11712
11713     'ARC700-xmac'
11714          Tune for ARC700 cpu with XMAC block.
11715
11716     'ARC725D'
11717          Tune for ARC725D cpu.
11718
11719     'ARC750D'
11720          Tune for ARC750D cpu.
11721
11722'-mmultcost=NUM'
11723     Cost to assume for a multiply instruction, with '4' being equal to
11724     a normal instruction.
11725
11726'-munalign-prob-threshold=PROBABILITY'
11727     Set probability threshold for unaligning branches.  When tuning for
11728     'ARC700' and optimizing for speed, branches without filled delay
11729     slot are preferably emitted unaligned and long, unless profiling
11730     indicates that the probability for the branch to be taken is below
11731     PROBABILITY.  *Note Cross-profiling::.  The default is
11732     (REG_BR_PROB_BASE/2), i.e. 5000.
11733
11734 The following options are maintained for backward compatibility, but
11735are now deprecated and will be removed in a future release:
11736
11737'-margonaut'
11738     Obsolete FPX.
11739
11740'-mbig-endian'
11741'-EB'
11742     Compile code for big endian targets.  Use of these options is now
11743     deprecated.  Users wanting big-endian code, should use the 'arceb-elf32'
11744     and 'arceb-linux-uclibc' targets when building the tool chain, for
11745     which big-endian is the default.
11746
11747'-mlittle-endian'
11748'-EL'
11749     Compile code for little endian targets.  Use of these options is
11750     now deprecated.  Users wanting little-endian code should use the 'arc-elf32'
11751     and 'arc-linux-uclibc' targets when building the tool chain, for
11752     which little-endian is the default.
11753
11754'-mbarrel_shifter'
11755     Replaced by '-mbarrel-shifter'
11756
11757'-mdpfp_compact'
11758     Replaced by '-mdpfp-compact'
11759
11760'-mdpfp_fast'
11761     Replaced by '-mdpfp-fast'
11762
11763'-mdsp_packa'
11764     Replaced by '-mdsp-packa'
11765
11766'-mEA'
11767     Replaced by '-mea'
11768
11769'-mmac_24'
11770     Replaced by '-mmac-24'
11771
11772'-mmac_d16'
11773     Replaced by '-mmac-d16'
11774
11775'-mspfp_compact'
11776     Replaced by '-mspfp-compact'
11777
11778'-mspfp_fast'
11779     Replaced by '-mspfp-fast'
11780
11781'-mtune=CPU'
11782     Values 'arc600', 'arc601', 'arc700' and 'arc700-xmac' for CPU are
11783     replaced by 'ARC600', 'ARC601', 'ARC700' and 'ARC700-xmac'
11784     respectively
11785
11786'-multcost=NUM'
11787     Replaced by '-mmultcost'.
11788
11789
11790File: gcc.info,  Node: ARM Options,  Next: AVR Options,  Prev: ARC Options,  Up: Submodel Options
11791
117923.17.4 ARM Options
11793------------------
11794
11795These '-m' options are defined for Advanced RISC Machines (ARM)
11796architectures:
11797
11798'-mabi=NAME'
11799     Generate code for the specified ABI.  Permissible values are:
11800     'apcs-gnu', 'atpcs', 'aapcs', 'aapcs-linux' and 'iwmmxt'.
11801
11802'-mapcs-frame'
11803     Generate a stack frame that is compliant with the ARM Procedure
11804     Call Standard for all functions, even if this is not strictly
11805     necessary for correct execution of the code.  Specifying
11806     '-fomit-frame-pointer' with this option causes the stack frames not
11807     to be generated for leaf functions.  The default is
11808     '-mno-apcs-frame'.
11809
11810'-mapcs'
11811     This is a synonym for '-mapcs-frame'.
11812
11813'-mthumb-interwork'
11814     Generate code that supports calling between the ARM and Thumb
11815     instruction sets.  Without this option, on pre-v5 architectures,
11816     the two instruction sets cannot be reliably used inside one
11817     program.  The default is '-mno-thumb-interwork', since slightly
11818     larger code is generated when '-mthumb-interwork' is specified.  In
11819     AAPCS configurations this option is meaningless.
11820
11821'-mno-sched-prolog'
11822     Prevent the reordering of instructions in the function prologue, or
11823     the merging of those instruction with the instructions in the
11824     function's body.  This means that all functions start with a
11825     recognizable set of instructions (or in fact one of a choice from a
11826     small set of different function prologues), and this information
11827     can be used to locate the start of functions inside an executable
11828     piece of code.  The default is '-msched-prolog'.
11829
11830'-mfloat-abi=NAME'
11831     Specifies which floating-point ABI to use.  Permissible values are:
11832     'soft', 'softfp' and 'hard'.
11833
11834     Specifying 'soft' causes GCC to generate output containing library
11835     calls for floating-point operations.  'softfp' allows the
11836     generation of code using hardware floating-point instructions, but
11837     still uses the soft-float calling conventions.  'hard' allows
11838     generation of floating-point instructions and uses FPU-specific
11839     calling conventions.
11840
11841     The default depends on the specific target configuration.  Note
11842     that the hard-float and soft-float ABIs are not link-compatible;
11843     you must compile your entire program with the same ABI, and link
11844     with a compatible set of libraries.
11845
11846'-mlittle-endian'
11847     Generate code for a processor running in little-endian mode.  This
11848     is the default for all standard configurations.
11849
11850'-mbig-endian'
11851     Generate code for a processor running in big-endian mode; the
11852     default is to compile code for a little-endian processor.
11853
11854'-mwords-little-endian'
11855     This option only applies when generating code for big-endian
11856     processors.  Generate code for a little-endian word order but a
11857     big-endian byte order.  That is, a byte order of the form
11858     '32107654'.  Note: this option should only be used if you require
11859     compatibility with code for big-endian ARM processors generated by
11860     versions of the compiler prior to 2.8.  This option is now
11861     deprecated.
11862
11863'-march=NAME'
11864     This specifies the name of the target ARM architecture.  GCC uses
11865     this name to determine what kind of instructions it can emit when
11866     generating assembly code.  This option can be used in conjunction
11867     with or instead of the '-mcpu=' option.  Permissible names are:
11868     'armv2', 'armv2a', 'armv3', 'armv3m', 'armv4', 'armv4t', 'armv5',
11869     'armv5t', 'armv5e', 'armv5te', 'armv6', 'armv6j', 'armv6t2',
11870     'armv6z', 'armv6zk', 'armv6-m', 'armv7', 'armv7-a', 'armv7-r',
11871     'armv7-m', 'armv7e-m', 'armv7ve', 'armv8-a', 'armv8-a+crc',
11872     'iwmmxt', 'iwmmxt2', 'ep9312'.
11873
11874     '-march=armv7ve' is the armv7-a architecture with virtualization
11875     extensions.
11876
11877     '-march=armv8-a+crc' enables code generation for the ARMv8-A
11878     architecture together with the optional CRC32 extensions.
11879
11880     '-march=native' causes the compiler to auto-detect the architecture
11881     of the build computer.  At present, this feature is only supported
11882     on GNU/Linux, and not all architectures are recognized.  If the
11883     auto-detect is unsuccessful the option has no effect.
11884
11885'-mtune=NAME'
11886     This option specifies the name of the target ARM processor for
11887     which GCC should tune the performance of the code.  For some ARM
11888     implementations better performance can be obtained by using this
11889     option.  Permissible names are: 'arm2', 'arm250', 'arm3', 'arm6',
11890     'arm60', 'arm600', 'arm610', 'arm620', 'arm7', 'arm7m', 'arm7d',
11891     'arm7dm', 'arm7di', 'arm7dmi', 'arm70', 'arm700', 'arm700i',
11892     'arm710', 'arm710c', 'arm7100', 'arm720', 'arm7500', 'arm7500fe',
11893     'arm7tdmi', 'arm7tdmi-s', 'arm710t', 'arm720t', 'arm740t',
11894     'strongarm', 'strongarm110', 'strongarm1100', 'strongarm1110',
11895     'arm8', 'arm810', 'arm9', 'arm9e', 'arm920', 'arm920t', 'arm922t',
11896     'arm946e-s', 'arm966e-s', 'arm968e-s', 'arm926ej-s', 'arm940t',
11897     'arm9tdmi', 'arm10tdmi', 'arm1020t', 'arm1026ej-s', 'arm10e',
11898     'arm1020e', 'arm1022e', 'arm1136j-s', 'arm1136jf-s', 'mpcore',
11899     'mpcorenovfp', 'arm1156t2-s', 'arm1156t2f-s', 'arm1176jz-s',
11900     'arm1176jzf-s', 'cortex-a5', 'cortex-a7', 'cortex-a8', 'cortex-a9',
11901     'cortex-a12', 'cortex-a15', 'cortex-a53', 'cortex-a57',
11902     'cortex-r4', 'cortex-r4f', 'cortex-r5', 'cortex-r7', 'cortex-m4',
11903     'cortex-m3', 'cortex-m1', 'cortex-m0', 'cortex-m0plus',
11904     'marvell-pj4', 'xscale', 'iwmmxt', 'iwmmxt2', 'ep9312', 'fa526',
11905     'fa626', 'fa606te', 'fa626te', 'fmp626', 'fa726te'.
11906
11907     Additionally, this option can specify that GCC should tune the
11908     performance of the code for a big.LITTLE system.  Permissible names
11909     are: 'cortex-a15.cortex-a7', 'cortex-a57.cortex-a53'.
11910
11911     '-mtune=generic-ARCH' specifies that GCC should tune the
11912     performance for a blend of processors within architecture ARCH.
11913     The aim is to generate code that run well on the current most
11914     popular processors, balancing between optimizations that benefit
11915     some CPUs in the range, and avoiding performance pitfalls of other
11916     CPUs.  The effects of this option may change in future GCC versions
11917     as CPU models come and go.
11918
11919     '-mtune=native' causes the compiler to auto-detect the CPU of the
11920     build computer.  At present, this feature is only supported on
11921     GNU/Linux, and not all architectures are recognized.  If the
11922     auto-detect is unsuccessful the option has no effect.
11923
11924'-mcpu=NAME'
11925     This specifies the name of the target ARM processor.  GCC uses this
11926     name to derive the name of the target ARM architecture (as if
11927     specified by '-march') and the ARM processor type for which to tune
11928     for performance (as if specified by '-mtune').  Where this option
11929     is used in conjunction with '-march' or '-mtune', those options
11930     take precedence over the appropriate part of this option.
11931
11932     Permissible names for this option are the same as those for
11933     '-mtune'.
11934
11935     '-mcpu=generic-ARCH' is also permissible, and is equivalent to
11936     '-march=ARCH -mtune=generic-ARCH'.  See '-mtune' for more
11937     information.
11938
11939     '-mcpu=native' causes the compiler to auto-detect the CPU of the
11940     build computer.  At present, this feature is only supported on
11941     GNU/Linux, and not all architectures are recognized.  If the
11942     auto-detect is unsuccessful the option has no effect.
11943
11944'-mfpu=NAME'
11945     This specifies what floating-point hardware (or hardware emulation)
11946     is available on the target.  Permissible names are: 'vfp', 'vfpv3',
11947     'vfpv3-fp16', 'vfpv3-d16', 'vfpv3-d16-fp16', 'vfpv3xd',
11948     'vfpv3xd-fp16', 'neon', 'neon-fp16', 'vfpv4', 'vfpv4-d16',
11949     'fpv4-sp-d16', 'neon-vfpv4', 'fp-armv8', 'neon-fp-armv8', and
11950     'crypto-neon-fp-armv8'.
11951
11952     If '-msoft-float' is specified this specifies the format of
11953     floating-point values.
11954
11955     If the selected floating-point hardware includes the NEON extension
11956     (e.g.  '-mfpu'='neon'), note that floating-point operations are not
11957     generated by GCC's auto-vectorization pass unless
11958     '-funsafe-math-optimizations' is also specified.  This is because
11959     NEON hardware does not fully implement the IEEE 754 standard for
11960     floating-point arithmetic (in particular denormal values are
11961     treated as zero), so the use of NEON instructions may lead to a
11962     loss of precision.
11963
11964'-mfp16-format=NAME'
11965     Specify the format of the '__fp16' half-precision floating-point
11966     type.  Permissible names are 'none', 'ieee', and 'alternative'; the
11967     default is 'none', in which case the '__fp16' type is not defined.
11968     *Note Half-Precision::, for more information.
11969
11970'-mstructure-size-boundary=N'
11971     The sizes of all structures and unions are rounded up to a multiple
11972     of the number of bits set by this option.  Permissible values are
11973     8, 32 and 64.  The default value varies for different toolchains.
11974     For the COFF targeted toolchain the default value is 8.  A value of
11975     64 is only allowed if the underlying ABI supports it.
11976
11977     Specifying a larger number can produce faster, more efficient code,
11978     but can also increase the size of the program.  Different values
11979     are potentially incompatible.  Code compiled with one value cannot
11980     necessarily expect to work with code or libraries compiled with
11981     another value, if they exchange information using structures or
11982     unions.
11983
11984'-mabort-on-noreturn'
11985     Generate a call to the function 'abort' at the end of a 'noreturn'
11986     function.  It is executed if the function tries to return.
11987
11988'-mlong-calls'
11989'-mno-long-calls'
11990     Tells the compiler to perform function calls by first loading the
11991     address of the function into a register and then performing a
11992     subroutine call on this register.  This switch is needed if the
11993     target function lies outside of the 64-megabyte addressing range of
11994     the offset-based version of subroutine call instruction.
11995
11996     Even if this switch is enabled, not all function calls are turned
11997     into long calls.  The heuristic is that static functions, functions
11998     that have the 'short-call' attribute, functions that are inside the
11999     scope of a '#pragma no_long_calls' directive, and functions whose
12000     definitions have already been compiled within the current
12001     compilation unit are not turned into long calls.  The exceptions to
12002     this rule are that weak function definitions, functions with the
12003     'long-call' attribute or the 'section' attribute, and functions
12004     that are within the scope of a '#pragma long_calls' directive are
12005     always turned into long calls.
12006
12007     This feature is not enabled by default.  Specifying
12008     '-mno-long-calls' restores the default behavior, as does placing
12009     the function calls within the scope of a '#pragma long_calls_off'
12010     directive.  Note these switches have no effect on how the compiler
12011     generates code to handle function calls via function pointers.
12012
12013'-msingle-pic-base'
12014     Treat the register used for PIC addressing as read-only, rather
12015     than loading it in the prologue for each function.  The runtime
12016     system is responsible for initializing this register with an
12017     appropriate value before execution begins.
12018
12019'-mpic-register=REG'
12020     Specify the register to be used for PIC addressing.  For standard
12021     PIC base case, the default will be any suitable register determined
12022     by compiler.  For single PIC base case, the default is 'R9' if
12023     target is EABI based or stack-checking is enabled, otherwise the
12024     default is 'R10'.
12025
12026'-mpic-data-is-text-relative'
12027     Assume that each data segments are relative to text segment at load
12028     time.  Therefore, it permits addressing data using PC-relative
12029     operations.  This option is on by default for targets other than
12030     VxWorks RTP.
12031
12032'-mpoke-function-name'
12033     Write the name of each function into the text section, directly
12034     preceding the function prologue.  The generated code is similar to
12035     this:
12036
12037               t0
12038                   .ascii "arm_poke_function_name", 0
12039                   .align
12040               t1
12041                   .word 0xff000000 + (t1 - t0)
12042               arm_poke_function_name
12043                   mov     ip, sp
12044                   stmfd   sp!, {fp, ip, lr, pc}
12045                   sub     fp, ip, #4
12046
12047     When performing a stack backtrace, code can inspect the value of
12048     'pc' stored at 'fp + 0'.  If the trace function then looks at
12049     location 'pc - 12' and the top 8 bits are set, then we know that
12050     there is a function name embedded immediately preceding this
12051     location and has length '((pc[-3]) & 0xff000000)'.
12052
12053'-mthumb'
12054'-marm'
12055
12056     Select between generating code that executes in ARM and Thumb
12057     states.  The default for most configurations is to generate code
12058     that executes in ARM state, but the default can be changed by
12059     configuring GCC with the '--with-mode='STATE configure option.
12060
12061'-mtpcs-frame'
12062     Generate a stack frame that is compliant with the Thumb Procedure
12063     Call Standard for all non-leaf functions.  (A leaf function is one
12064     that does not call any other functions.)  The default is
12065     '-mno-tpcs-frame'.
12066
12067'-mtpcs-leaf-frame'
12068     Generate a stack frame that is compliant with the Thumb Procedure
12069     Call Standard for all leaf functions.  (A leaf function is one that
12070     does not call any other functions.)  The default is
12071     '-mno-apcs-leaf-frame'.
12072
12073'-mcallee-super-interworking'
12074     Gives all externally visible functions in the file being compiled
12075     an ARM instruction set header which switches to Thumb mode before
12076     executing the rest of the function.  This allows these functions to
12077     be called from non-interworking code.  This option is not valid in
12078     AAPCS configurations because interworking is enabled by default.
12079
12080'-mcaller-super-interworking'
12081     Allows calls via function pointers (including virtual functions) to
12082     execute correctly regardless of whether the target code has been
12083     compiled for interworking or not.  There is a small overhead in the
12084     cost of executing a function pointer if this option is enabled.
12085     This option is not valid in AAPCS configurations because
12086     interworking is enabled by default.
12087
12088'-mtp=NAME'
12089     Specify the access model for the thread local storage pointer.  The
12090     valid models are 'soft', which generates calls to
12091     '__aeabi_read_tp', 'cp15', which fetches the thread pointer from
12092     'cp15' directly (supported in the arm6k architecture), and 'auto',
12093     which uses the best available method for the selected processor.
12094     The default setting is 'auto'.
12095
12096'-mtls-dialect=DIALECT'
12097     Specify the dialect to use for accessing thread local storage.  Two
12098     DIALECTs are supported--'gnu' and 'gnu2'.  The 'gnu' dialect
12099     selects the original GNU scheme for supporting local and global
12100     dynamic TLS models.  The 'gnu2' dialect selects the GNU descriptor
12101     scheme, which provides better performance for shared libraries.
12102     The GNU descriptor scheme is compatible with the original scheme,
12103     but does require new assembler, linker and library support.
12104     Initial and local exec TLS models are unaffected by this option and
12105     always use the original scheme.
12106
12107'-mword-relocations'
12108     Only generate absolute relocations on word-sized values (i.e.
12109     R_ARM_ABS32).  This is enabled by default on targets (uClinux,
12110     SymbianOS) where the runtime loader imposes this restriction, and
12111     when '-fpic' or '-fPIC' is specified.
12112
12113'-mfix-cortex-m3-ldrd'
12114     Some Cortex-M3 cores can cause data corruption when 'ldrd'
12115     instructions with overlapping destination and base registers are
12116     used.  This option avoids generating these instructions.  This
12117     option is enabled by default when '-mcpu=cortex-m3' is specified.
12118
12119'-munaligned-access'
12120'-mno-unaligned-access'
12121     Enables (or disables) reading and writing of 16- and 32- bit values
12122     from addresses that are not 16- or 32- bit aligned.  By default
12123     unaligned access is disabled for all pre-ARMv6 and all ARMv6-M
12124     architectures, and enabled for all other architectures.  If
12125     unaligned access is not enabled then words in packed data
12126     structures will be accessed a byte at a time.
12127
12128     The ARM attribute 'Tag_CPU_unaligned_access' will be set in the
12129     generated object file to either true or false, depending upon the
12130     setting of this option.  If unaligned access is enabled then the
12131     preprocessor symbol '__ARM_FEATURE_UNALIGNED' will also be defined.
12132
12133'-mneon-for-64bits'
12134     Enables using Neon to handle scalar 64-bits operations.  This is
12135     disabled by default since the cost of moving data from core
12136     registers to Neon is high.
12137
12138'-mslow-flash-data'
12139     Assume loading data from flash is slower than fetching instruction.
12140     Therefore literal load is minimized for better performance.  This
12141     option is only supported when compiling for ARMv7 M-profile and off
12142     by default.
12143
12144'-mrestrict-it'
12145     Restricts generation of IT blocks to conform to the rules of ARMv8.
12146     IT blocks can only contain a single 16-bit instruction from a
12147     select set of instructions.  This option is on by default for ARMv8
12148     Thumb mode.
12149
12150
12151File: gcc.info,  Node: AVR Options,  Next: Blackfin Options,  Prev: ARM Options,  Up: Submodel Options
12152
121533.17.5 AVR Options
12154------------------
12155
12156These options are defined for AVR implementations:
12157
12158'-mmcu=MCU'
12159     Specify Atmel AVR instruction set architectures (ISA) or MCU type.
12160
12161     The default for this option is 'avr2'.
12162
12163     GCC supports the following AVR devices and ISAs:
12164
12165     'avr2'
12166          "Classic" devices with up to 8 KiB of program memory.
12167          MCU = 'attiny22', 'attiny26', 'at90c8534', 'at90s2313',
12168          'at90s2323', 'at90s2333', 'at90s2343', 'at90s4414',
12169          'at90s4433', 'at90s4434', 'at90s8515', 'at90s8535'.
12170
12171     'avr25'
12172          "Classic" devices with up to 8 KiB of program memory and with
12173          the 'MOVW' instruction.
12174          MCU = 'ata5272', 'ata6289', 'attiny13', 'attiny13a',
12175          'attiny2313', 'attiny2313a', 'attiny24', 'attiny24a',
12176          'attiny25', 'attiny261', 'attiny261a', 'attiny43u',
12177          'attiny4313', 'attiny44', 'attiny44a', 'attiny45',
12178          'attiny461', 'attiny461a', 'attiny48', 'attiny84',
12179          'attiny84a', 'attiny85', 'attiny861', 'attiny861a',
12180          'attiny87', 'attiny88', 'at86rf401'.
12181
12182     'avr3'
12183          "Classic" devices with 16 KiB up to 64 KiB of program memory.
12184          MCU = 'at43usb355', 'at76c711'.
12185
12186     'avr31'
12187          "Classic" devices with 128 KiB of program memory.
12188          MCU = 'atmega103', 'at43usb320'.
12189
12190     'avr35'
12191          "Classic" devices with 16 KiB up to 64 KiB of program memory
12192          and with the 'MOVW' instruction.
12193          MCU = 'ata5505', 'atmega16u2', 'atmega32u2', 'atmega8u2',
12194          'attiny1634', 'attiny167', 'at90usb162', 'at90usb82'.
12195
12196     'avr4'
12197          "Enhanced" devices with up to 8 KiB of program memory.
12198          MCU = 'ata6285', 'ata6286', 'atmega48', 'atmega48a',
12199          'atmega48p', 'atmega48pa', 'atmega8', 'atmega8a',
12200          'atmega8hva', 'atmega8515', 'atmega8535', 'atmega88',
12201          'atmega88a', 'atmega88p', 'atmega88pa', 'at90pwm1',
12202          'at90pwm2', 'at90pwm2b', 'at90pwm3', 'at90pwm3b', 'at90pwm81'.
12203
12204     'avr5'
12205          "Enhanced" devices with 16 KiB up to 64 KiB of program memory.
12206
12207          MCU = 'ata5790', 'ata5790n', 'ata5795', 'atmega16',
12208          'atmega16a', 'atmega16hva', 'atmega16hva2', 'atmega16hvb',
12209          'atmega16hvbrevb', 'atmega16m1', 'atmega16u4', 'atmega161',
12210          'atmega162', 'atmega163', 'atmega164a', 'atmega164p',
12211          'atmega164pa', 'atmega165', 'atmega165a', 'atmega165p',
12212          'atmega165pa', 'atmega168', 'atmega168a', 'atmega168p',
12213          'atmega168pa', 'atmega169', 'atmega169a', 'atmega169p',
12214          'atmega169pa', 'atmega26hvg', 'atmega32', 'atmega32a',
12215          'atmega32c1', 'atmega32hvb', 'atmega32hvbrevb', 'atmega32m1',
12216          'atmega32u4', 'atmega32u6', 'atmega323', 'atmega324a',
12217          'atmega324p', 'atmega324pa', 'atmega325', 'atmega325a',
12218          'atmega325p', 'atmega3250', 'atmega3250a', 'atmega3250p',
12219          'atmega3250pa', 'atmega328', 'atmega328p', 'atmega329',
12220          'atmega329a', 'atmega329p', 'atmega329pa', 'atmega3290',
12221          'atmega3290a', 'atmega3290p', 'atmega3290pa', 'atmega406',
12222          'atmega48hvf', 'atmega64', 'atmega64a', 'atmega64c1',
12223          'atmega64hve', 'atmega64m1', 'atmega64rfa2', 'atmega64rfr2',
12224          'atmega640', 'atmega644', 'atmega644a', 'atmega644p',
12225          'atmega644pa', 'atmega645', 'atmega645a', 'atmega645p',
12226          'atmega6450', 'atmega6450a', 'atmega6450p', 'atmega649',
12227          'atmega649a', 'atmega649p', 'atmega6490', 'atmega6490a',
12228          'atmega6490p', 'at90can32', 'at90can64', 'at90pwm161',
12229          'at90pwm216', 'at90pwm316', 'at90scr100', 'at90usb646',
12230          'at90usb647', 'at94k', 'm3000'.
12231
12232     'avr51'
12233          "Enhanced" devices with 128 KiB of program memory.
12234          MCU = 'atmega128', 'atmega128a', 'atmega128rfa1',
12235          'atmega1280', 'atmega1281', 'atmega1284', 'atmega1284p',
12236          'at90can128', 'at90usb1286', 'at90usb1287'.
12237
12238     'avr6'
12239          "Enhanced" devices with 3-byte PC, i.e. with more than 128 KiB
12240          of program memory.
12241          MCU = 'atmega2560', 'atmega2561'.
12242
12243     'avrxmega2'
12244          "XMEGA" devices with more than 8 KiB and up to 64 KiB of
12245          program memory.
12246          MCU = 'atmxt112sl', 'atmxt224', 'atmxt224e', 'atmxt336s',
12247          'atxmega16a4', 'atxmega16a4u', 'atxmega16c4', 'atxmega16d4',
12248          'atxmega32a4', 'atxmega32a4u', 'atxmega32c4', 'atxmega32d4',
12249          'atxmega32e5', 'atxmega32x1'.
12250
12251     'avrxmega4'
12252          "XMEGA" devices with more than 64 KiB and up to 128 KiB of
12253          program memory.
12254          MCU = 'atxmega64a3', 'atxmega64a3u', 'atxmega64a4u',
12255          'atxmega64b1', 'atxmega64b3', 'atxmega64c3', 'atxmega64d3',
12256          'atxmega64d4'.
12257
12258     'avrxmega5'
12259          "XMEGA" devices with more than 64 KiB and up to 128 KiB of
12260          program memory and more than 64 KiB of RAM.
12261          MCU = 'atxmega64a1', 'atxmega64a1u'.
12262
12263     'avrxmega6'
12264          "XMEGA" devices with more than 128 KiB of program memory.
12265          MCU = 'atmxt540s', 'atmxt540sreva', 'atxmega128a3',
12266          'atxmega128a3u', 'atxmega128b1', 'atxmega128b3',
12267          'atxmega128c3', 'atxmega128d3', 'atxmega128d4',
12268          'atxmega192a3', 'atxmega192a3u', 'atxmega192c3',
12269          'atxmega192d3', 'atxmega256a3', 'atxmega256a3b',
12270          'atxmega256a3bu', 'atxmega256a3u', 'atxmega256c3',
12271          'atxmega256d3', 'atxmega384c3', 'atxmega384d3'.
12272
12273     'avrxmega7'
12274          "XMEGA" devices with more than 128 KiB of program memory and
12275          more than 64 KiB of RAM.
12276          MCU = 'atxmega128a1', 'atxmega128a1u', 'atxmega128a4u'.
12277
12278     'avr1'
12279          This ISA is implemented by the minimal AVR core and supported
12280          for assembler only.
12281          MCU = 'attiny11', 'attiny12', 'attiny15', 'attiny28',
12282          'at90s1200'.
12283
12284'-maccumulate-args'
12285     Accumulate outgoing function arguments and acquire/release the
12286     needed stack space for outgoing function arguments once in function
12287     prologue/epilogue.  Without this option, outgoing arguments are
12288     pushed before calling a function and popped afterwards.
12289
12290     Popping the arguments after the function call can be expensive on
12291     AVR so that accumulating the stack space might lead to smaller
12292     executables because arguments need not to be removed from the stack
12293     after such a function call.
12294
12295     This option can lead to reduced code size for functions that
12296     perform several calls to functions that get their arguments on the
12297     stack like calls to printf-like functions.
12298
12299'-mbranch-cost=COST'
12300     Set the branch costs for conditional branch instructions to COST.
12301     Reasonable values for COST are small, non-negative integers.  The
12302     default branch cost is 0.
12303
12304'-mcall-prologues'
12305     Functions prologues/epilogues are expanded as calls to appropriate
12306     subroutines.  Code size is smaller.
12307
12308'-mint8'
12309     Assume 'int' to be 8-bit integer.  This affects the sizes of all
12310     types: a 'char' is 1 byte, an 'int' is 1 byte, a 'long' is 2 bytes,
12311     and 'long long' is 4 bytes.  Please note that this option does not
12312     conform to the C standards, but it results in smaller code size.
12313
12314'-mno-interrupts'
12315     Generated code is not compatible with hardware interrupts.  Code
12316     size is smaller.
12317
12318'-mrelax'
12319     Try to replace 'CALL' resp. 'JMP' instruction by the shorter
12320     'RCALL' resp. 'RJMP' instruction if applicable.  Setting '-mrelax'
12321     just adds the '--relax' option to the linker command line when the
12322     linker is called.
12323
12324     Jump relaxing is performed by the linker because jump offsets are
12325     not known before code is located.  Therefore, the assembler code
12326     generated by the compiler is the same, but the instructions in the
12327     executable may differ from instructions in the assembler code.
12328
12329     Relaxing must be turned on if linker stubs are needed, see the
12330     section on 'EIND' and linker stubs below.
12331
12332'-msp8'
12333     Treat the stack pointer register as an 8-bit register, i.e. assume
12334     the high byte of the stack pointer is zero.  In general, you don't
12335     need to set this option by hand.
12336
12337     This option is used internally by the compiler to select and build
12338     multilibs for architectures 'avr2' and 'avr25'.  These
12339     architectures mix devices with and without 'SPH'.  For any setting
12340     other than '-mmcu=avr2' or '-mmcu=avr25' the compiler driver will
12341     add or remove this option from the compiler proper's command line,
12342     because the compiler then knows if the device or architecture has
12343     an 8-bit stack pointer and thus no 'SPH' register or not.
12344
12345'-mstrict-X'
12346     Use address register 'X' in a way proposed by the hardware.  This
12347     means that 'X' is only used in indirect, post-increment or
12348     pre-decrement addressing.
12349
12350     Without this option, the 'X' register may be used in the same way
12351     as 'Y' or 'Z' which then is emulated by additional instructions.
12352     For example, loading a value with 'X+const' addressing with a small
12353     non-negative 'const < 64' to a register RN is performed as
12354
12355          adiw r26, const   ; X += const
12356          ld   RN, X        ; RN = *X
12357          sbiw r26, const   ; X -= const
12358
12359'-mtiny-stack'
12360     Only change the lower 8 bits of the stack pointer.
12361
12362'-Waddr-space-convert'
12363     Warn about conversions between address spaces in the case where the
12364     resulting address space is not contained in the incoming address
12365     space.
12366
123673.17.5.1 'EIND' and Devices with more than 128 Ki Bytes of Flash
12368................................................................
12369
12370Pointers in the implementation are 16 bits wide.  The address of a
12371function or label is represented as word address so that indirect jumps
12372and calls can target any code address in the range of 64 Ki words.
12373
12374 In order to facilitate indirect jump on devices with more than 128 Ki
12375bytes of program memory space, there is a special function register
12376called 'EIND' that serves as most significant part of the target address
12377when 'EICALL' or 'EIJMP' instructions are used.
12378
12379 Indirect jumps and calls on these devices are handled as follows by the
12380compiler and are subject to some limitations:
12381
12382   * The compiler never sets 'EIND'.
12383
12384   * The compiler uses 'EIND' implicitely in 'EICALL'/'EIJMP'
12385     instructions or might read 'EIND' directly in order to emulate an
12386     indirect call/jump by means of a 'RET' instruction.
12387
12388   * The compiler assumes that 'EIND' never changes during the startup
12389     code or during the application.  In particular, 'EIND' is not
12390     saved/restored in function or interrupt service routine
12391     prologue/epilogue.
12392
12393   * For indirect calls to functions and computed goto, the linker
12394     generates _stubs_.  Stubs are jump pads sometimes also called
12395     _trampolines_.  Thus, the indirect call/jump jumps to such a stub.
12396     The stub contains a direct jump to the desired address.
12397
12398   * Linker relaxation must be turned on so that the linker will
12399     generate the stubs correctly an all situaltion.  See the compiler
12400     option '-mrelax' and the linler option '--relax'.  There are corner
12401     cases where the linker is supposed to generate stubs but aborts
12402     without relaxation and without a helpful error message.
12403
12404   * The default linker script is arranged for code with 'EIND = 0'.  If
12405     code is supposed to work for a setup with 'EIND != 0', a custom
12406     linker script has to be used in order to place the sections whose
12407     name start with '.trampolines' into the segment where 'EIND' points
12408     to.
12409
12410   * The startup code from libgcc never sets 'EIND'.  Notice that
12411     startup code is a blend of code from libgcc and AVR-LibC. For the
12412     impact of AVR-LibC on 'EIND', see the
12413     AVR-LibC user manual (http://nongnu.org/avr-libc/user-manual/).
12414
12415   * It is legitimate for user-specific startup code to set up 'EIND'
12416     early, for example by means of initialization code located in
12417     section '.init3'.  Such code runs prior to general startup code
12418     that initializes RAM and calls constructors, but after the bit of
12419     startup code from AVR-LibC that sets 'EIND' to the segment where
12420     the vector table is located.
12421          #include <avr/io.h>
12422
12423          static void
12424          __attribute__((section(".init3"),naked,used,no_instrument_function))
12425          init3_set_eind (void)
12426          {
12427            __asm volatile ("ldi r24,pm_hh8(__trampolines_start)\n\t"
12428                            "out %i0,r24" :: "n" (&EIND) : "r24","memory");
12429          }
12430
12431     The '__trampolines_start' symbol is defined in the linker script.
12432
12433   * Stubs are generated automatically by the linker if the following
12434     two conditions are met:
12435
12436        - The address of a label is taken by means of the 'gs' modifier
12437          (short for _generate stubs_) like so:
12438               LDI r24, lo8(gs(FUNC))
12439               LDI r25, hi8(gs(FUNC))
12440        - The final location of that label is in a code segment
12441          _outside_ the segment where the stubs are located.
12442
12443   * The compiler emits such 'gs' modifiers for code labels in the
12444     following situations:
12445        - Taking address of a function or code label.
12446        - Computed goto.
12447        - If prologue-save function is used, see '-mcall-prologues'
12448          command-line option.
12449        - Switch/case dispatch tables.  If you do not want such dispatch
12450          tables you can specify the '-fno-jump-tables' command-line
12451          option.
12452        - C and C++ constructors/destructors called during
12453          startup/shutdown.
12454        - If the tools hit a 'gs()' modifier explained above.
12455
12456   * Jumping to non-symbolic addresses like so is _not_ supported:
12457
12458          int main (void)
12459          {
12460              /* Call function at word address 0x2 */
12461              return ((int(*)(void)) 0x2)();
12462          }
12463
12464     Instead, a stub has to be set up, i.e. the function has to be
12465     called through a symbol ('func_4' in the example):
12466
12467          int main (void)
12468          {
12469              extern int func_4 (void);
12470
12471              /* Call function at byte address 0x4 */
12472              return func_4();
12473          }
12474
12475     and the application be linked with '-Wl,--defsym,func_4=0x4'.
12476     Alternatively, 'func_4' can be defined in the linker script.
12477
124783.17.5.2 Handling of the 'RAMPD', 'RAMPX', 'RAMPY' and 'RAMPZ' Special Function Registers
12479.........................................................................................
12480
12481Some AVR devices support memories larger than the 64 KiB range that can
12482be accessed with 16-bit pointers.  To access memory locations outside
12483this 64 KiB range, the contentent of a 'RAMP' register is used as high
12484part of the address: The 'X', 'Y', 'Z' address register is concatenated
12485with the 'RAMPX', 'RAMPY', 'RAMPZ' special function register,
12486respectively, to get a wide address.  Similarly, 'RAMPD' is used
12487together with direct addressing.
12488
12489   * The startup code initializes the 'RAMP' special function registers
12490     with zero.
12491
12492   * If a *note named address space: AVR Named Address Spaces. other
12493     than generic or '__flash' is used, then 'RAMPZ' is set as needed
12494     before the operation.
12495
12496   * If the device supports RAM larger than 64 KiB and the compiler
12497     needs to change 'RAMPZ' to accomplish an operation, 'RAMPZ' is
12498     reset to zero after the operation.
12499
12500   * If the device comes with a specific 'RAMP' register, the ISR
12501     prologue/epilogue saves/restores that SFR and initializes it with
12502     zero in case the ISR code might (implicitly) use it.
12503
12504   * RAM larger than 64 KiB is not supported by GCC for AVR targets.  If
12505     you use inline assembler to read from locations outside the 16-bit
12506     address range and change one of the 'RAMP' registers, you must
12507     reset it to zero after the access.
12508
125093.17.5.3 AVR Built-in Macros
12510............................
12511
12512GCC defines several built-in macros so that the user code can test for
12513the presence or absence of features.  Almost any of the following
12514built-in macros are deduced from device capabilities and thus triggered
12515by the '-mmcu=' command-line option.
12516
12517 For even more AVR-specific built-in macros see *note AVR Named Address
12518Spaces:: and *note AVR Built-in Functions::.
12519
12520'__AVR_ARCH__'
12521     Build-in macro that resolves to a decimal number that identifies
12522     the architecture and depends on the '-mmcu=MCU' option.  Possible
12523     values are:
12524
12525     '2', '25', '3', '31', '35', '4', '5', '51', '6', '102', '104',
12526     '105', '106', '107'
12527
12528     for MCU='avr2', 'avr25', 'avr3', 'avr31', 'avr35', 'avr4', 'avr5',
12529     'avr51', 'avr6', 'avrxmega2', 'avrxmega4', 'avrxmega5',
12530     'avrxmega6', 'avrxmega7', respectively.  If MCU specifies a device,
12531     this built-in macro is set accordingly.  For example, with
12532     '-mmcu=atmega8' the macro will be defined to '4'.
12533
12534'__AVR_DEVICE__'
12535     Setting '-mmcu=DEVICE' defines this built-in macro which reflects
12536     the device's name.  For example, '-mmcu=atmega8' defines the
12537     built-in macro '__AVR_ATmega8__', '-mmcu=attiny261a' defines
12538     '__AVR_ATtiny261A__', etc.
12539
12540     The built-in macros' names follow the scheme '__AVR_DEVICE__' where
12541     DEVICE is the device name as from the AVR user manual.  The
12542     difference between DEVICE in the built-in macro and DEVICE in
12543     '-mmcu=DEVICE' is that the latter is always lowercase.
12544
12545     If DEVICE is not a device but only a core architecture like
12546     'avr51', this macro will not be defined.
12547
12548'__AVR_XMEGA__'
12549     The device / architecture belongs to the XMEGA family of devices.
12550
12551'__AVR_HAVE_ELPM__'
12552     The device has the the 'ELPM' instruction.
12553
12554'__AVR_HAVE_ELPMX__'
12555     The device has the 'ELPM RN,Z' and 'ELPM RN,Z+' instructions.
12556
12557'__AVR_HAVE_MOVW__'
12558     The device has the 'MOVW' instruction to perform 16-bit
12559     register-register moves.
12560
12561'__AVR_HAVE_LPMX__'
12562     The device has the 'LPM RN,Z' and 'LPM RN,Z+' instructions.
12563
12564'__AVR_HAVE_MUL__'
12565     The device has a hardware multiplier.
12566
12567'__AVR_HAVE_JMP_CALL__'
12568     The device has the 'JMP' and 'CALL' instructions.  This is the case
12569     for devices with at least 16 KiB of program memory.
12570
12571'__AVR_HAVE_EIJMP_EICALL__'
12572'__AVR_3_BYTE_PC__'
12573     The device has the 'EIJMP' and 'EICALL' instructions.  This is the
12574     case for devices with more than 128 KiB of program memory.  This
12575     also means that the program counter (PC) is 3 bytes wide.
12576
12577'__AVR_2_BYTE_PC__'
12578     The program counter (PC) is 2 bytes wide.  This is the case for
12579     devices with up to 128 KiB of program memory.
12580
12581'__AVR_HAVE_8BIT_SP__'
12582'__AVR_HAVE_16BIT_SP__'
12583     The stack pointer (SP) register is treated as 8-bit respectively
12584     16-bit register by the compiler.  The definition of these macros is
12585     affected by '-mtiny-stack'.
12586
12587'__AVR_HAVE_SPH__'
12588'__AVR_SP8__'
12589     The device has the SPH (high part of stack pointer) special
12590     function register or has an 8-bit stack pointer, respectively.  The
12591     definition of these macros is affected by '-mmcu=' and in the cases
12592     of '-mmcu=avr2' and '-mmcu=avr25' also by '-msp8'.
12593
12594'__AVR_HAVE_RAMPD__'
12595'__AVR_HAVE_RAMPX__'
12596'__AVR_HAVE_RAMPY__'
12597'__AVR_HAVE_RAMPZ__'
12598     The device has the 'RAMPD', 'RAMPX', 'RAMPY', 'RAMPZ' special
12599     function register, respectively.
12600
12601'__NO_INTERRUPTS__'
12602     This macro reflects the '-mno-interrupts' command line option.
12603
12604'__AVR_ERRATA_SKIP__'
12605'__AVR_ERRATA_SKIP_JMP_CALL__'
12606     Some AVR devices (AT90S8515, ATmega103) must not skip 32-bit
12607     instructions because of a hardware erratum.  Skip instructions are
12608     'SBRS', 'SBRC', 'SBIS', 'SBIC' and 'CPSE'.  The second macro is
12609     only defined if '__AVR_HAVE_JMP_CALL__' is also set.
12610
12611'__AVR_ISA_RMW__'
12612     The device has Read-Modify-Write instructions (XCH, LAC, LAS and
12613     LAT).
12614
12615'__AVR_SFR_OFFSET__=OFFSET'
12616     Instructions that can address I/O special function registers
12617     directly like 'IN', 'OUT', 'SBI', etc. may use a different address
12618     as if addressed by an instruction to access RAM like 'LD' or 'STS'.
12619     This offset depends on the device architecture and has to be
12620     subtracted from the RAM address in order to get the respective
12621     I/O address.
12622
12623'__WITH_AVRLIBC__'
12624     The compiler is configured to be used together with AVR-Libc.  See
12625     the '--with-avrlibc' configure option.
12626
12627
12628File: gcc.info,  Node: Blackfin Options,  Next: C6X Options,  Prev: AVR Options,  Up: Submodel Options
12629
126303.17.6 Blackfin Options
12631-----------------------
12632
12633'-mcpu=CPU[-SIREVISION]'
12634     Specifies the name of the target Blackfin processor.  Currently,
12635     CPU can be one of 'bf512', 'bf514', 'bf516', 'bf518', 'bf522',
12636     'bf523', 'bf524', 'bf525', 'bf526', 'bf527', 'bf531', 'bf532',
12637     'bf533', 'bf534', 'bf536', 'bf537', 'bf538', 'bf539', 'bf542',
12638     'bf544', 'bf547', 'bf548', 'bf549', 'bf542m', 'bf544m', 'bf547m',
12639     'bf548m', 'bf549m', 'bf561', 'bf592'.
12640
12641     The optional SIREVISION specifies the silicon revision of the
12642     target Blackfin processor.  Any workarounds available for the
12643     targeted silicon revision are enabled.  If SIREVISION is 'none', no
12644     workarounds are enabled.  If SIREVISION is 'any', all workarounds
12645     for the targeted processor are enabled.  The '__SILICON_REVISION__'
12646     macro is defined to two hexadecimal digits representing the major
12647     and minor numbers in the silicon revision.  If SIREVISION is
12648     'none', the '__SILICON_REVISION__' is not defined.  If SIREVISION
12649     is 'any', the '__SILICON_REVISION__' is defined to be '0xffff'.  If
12650     this optional SIREVISION is not used, GCC assumes the latest known
12651     silicon revision of the targeted Blackfin processor.
12652
12653     GCC defines a preprocessor macro for the specified CPU.  For the
12654     'bfin-elf' toolchain, this option causes the hardware BSP provided
12655     by libgloss to be linked in if '-msim' is not given.
12656
12657     Without this option, 'bf532' is used as the processor by default.
12658
12659     Note that support for 'bf561' is incomplete.  For 'bf561', only the
12660     preprocessor macro is defined.
12661
12662'-msim'
12663     Specifies that the program will be run on the simulator.  This
12664     causes the simulator BSP provided by libgloss to be linked in.
12665     This option has effect only for 'bfin-elf' toolchain.  Certain
12666     other options, such as '-mid-shared-library' and '-mfdpic', imply
12667     '-msim'.
12668
12669'-momit-leaf-frame-pointer'
12670     Don't keep the frame pointer in a register for leaf functions.
12671     This avoids the instructions to save, set up and restore frame
12672     pointers and makes an extra register available in leaf functions.
12673     The option '-fomit-frame-pointer' removes the frame pointer for all
12674     functions, which might make debugging harder.
12675
12676'-mspecld-anomaly'
12677     When enabled, the compiler ensures that the generated code does not
12678     contain speculative loads after jump instructions.  If this option
12679     is used, '__WORKAROUND_SPECULATIVE_LOADS' is defined.
12680
12681'-mno-specld-anomaly'
12682     Don't generate extra code to prevent speculative loads from
12683     occurring.
12684
12685'-mcsync-anomaly'
12686     When enabled, the compiler ensures that the generated code does not
12687     contain CSYNC or SSYNC instructions too soon after conditional
12688     branches.  If this option is used, '__WORKAROUND_SPECULATIVE_SYNCS'
12689     is defined.
12690
12691'-mno-csync-anomaly'
12692     Don't generate extra code to prevent CSYNC or SSYNC instructions
12693     from occurring too soon after a conditional branch.
12694
12695'-mlow-64k'
12696     When enabled, the compiler is free to take advantage of the
12697     knowledge that the entire program fits into the low 64k of memory.
12698
12699'-mno-low-64k'
12700     Assume that the program is arbitrarily large.  This is the default.
12701
12702'-mstack-check-l1'
12703     Do stack checking using information placed into L1 scratchpad
12704     memory by the uClinux kernel.
12705
12706'-mid-shared-library'
12707     Generate code that supports shared libraries via the library ID
12708     method.  This allows for execute in place and shared libraries in
12709     an environment without virtual memory management.  This option
12710     implies '-fPIC'.  With a 'bfin-elf' target, this option implies
12711     '-msim'.
12712
12713'-mno-id-shared-library'
12714     Generate code that doesn't assume ID-based shared libraries are
12715     being used.  This is the default.
12716
12717'-mleaf-id-shared-library'
12718     Generate code that supports shared libraries via the library ID
12719     method, but assumes that this library or executable won't link
12720     against any other ID shared libraries.  That allows the compiler to
12721     use faster code for jumps and calls.
12722
12723'-mno-leaf-id-shared-library'
12724     Do not assume that the code being compiled won't link against any
12725     ID shared libraries.  Slower code is generated for jump and call
12726     insns.
12727
12728'-mshared-library-id=n'
12729     Specifies the identification number of the ID-based shared library
12730     being compiled.  Specifying a value of 0 generates more compact
12731     code; specifying other values forces the allocation of that number
12732     to the current library but is no more space- or time-efficient than
12733     omitting this option.
12734
12735'-msep-data'
12736     Generate code that allows the data segment to be located in a
12737     different area of memory from the text segment.  This allows for
12738     execute in place in an environment without virtual memory
12739     management by eliminating relocations against the text section.
12740
12741'-mno-sep-data'
12742     Generate code that assumes that the data segment follows the text
12743     segment.  This is the default.
12744
12745'-mlong-calls'
12746'-mno-long-calls'
12747     Tells the compiler to perform function calls by first loading the
12748     address of the function into a register and then performing a
12749     subroutine call on this register.  This switch is needed if the
12750     target function lies outside of the 24-bit addressing range of the
12751     offset-based version of subroutine call instruction.
12752
12753     This feature is not enabled by default.  Specifying
12754     '-mno-long-calls' restores the default behavior.  Note these
12755     switches have no effect on how the compiler generates code to
12756     handle function calls via function pointers.
12757
12758'-mfast-fp'
12759     Link with the fast floating-point library.  This library relaxes
12760     some of the IEEE floating-point standard's rules for checking
12761     inputs against Not-a-Number (NAN), in the interest of performance.
12762
12763'-minline-plt'
12764     Enable inlining of PLT entries in function calls to functions that
12765     are not known to bind locally.  It has no effect without '-mfdpic'.
12766
12767'-mmulticore'
12768     Build a standalone application for multicore Blackfin processors.
12769     This option causes proper start files and link scripts supporting
12770     multicore to be used, and defines the macro '__BFIN_MULTICORE'.  It
12771     can only be used with '-mcpu=bf561[-SIREVISION]'.
12772
12773     This option can be used with '-mcorea' or '-mcoreb', which selects
12774     the one-application-per-core programming model.  Without '-mcorea'
12775     or '-mcoreb', the single-application/dual-core programming model is
12776     used.  In this model, the main function of Core B should be named
12777     as 'coreb_main'.
12778
12779     If this option is not used, the single-core application programming
12780     model is used.
12781
12782'-mcorea'
12783     Build a standalone application for Core A of BF561 when using the
12784     one-application-per-core programming model.  Proper start files and
12785     link scripts are used to support Core A, and the macro
12786     '__BFIN_COREA' is defined.  This option can only be used in
12787     conjunction with '-mmulticore'.
12788
12789'-mcoreb'
12790     Build a standalone application for Core B of BF561 when using the
12791     one-application-per-core programming model.  Proper start files and
12792     link scripts are used to support Core B, and the macro
12793     '__BFIN_COREB' is defined.  When this option is used, 'coreb_main'
12794     should be used instead of 'main'.  This option can only be used in
12795     conjunction with '-mmulticore'.
12796
12797'-msdram'
12798     Build a standalone application for SDRAM. Proper start files and
12799     link scripts are used to put the application into SDRAM, and the
12800     macro '__BFIN_SDRAM' is defined.  The loader should initialize
12801     SDRAM before loading the application.
12802
12803'-micplb'
12804     Assume that ICPLBs are enabled at run time.  This has an effect on
12805     certain anomaly workarounds.  For Linux targets, the default is to
12806     assume ICPLBs are enabled; for standalone applications the default
12807     is off.
12808
12809
12810File: gcc.info,  Node: C6X Options,  Next: CRIS Options,  Prev: Blackfin Options,  Up: Submodel Options
12811
128123.17.7 C6X Options
12813------------------
12814
12815'-march=NAME'
12816     This specifies the name of the target architecture.  GCC uses this
12817     name to determine what kind of instructions it can emit when
12818     generating assembly code.  Permissible names are: 'c62x', 'c64x',
12819     'c64x+', 'c67x', 'c67x+', 'c674x'.
12820
12821'-mbig-endian'
12822     Generate code for a big-endian target.
12823
12824'-mlittle-endian'
12825     Generate code for a little-endian target.  This is the default.
12826
12827'-msim'
12828     Choose startup files and linker script suitable for the simulator.
12829
12830'-msdata=default'
12831     Put small global and static data in the '.neardata' section, which
12832     is pointed to by register 'B14'.  Put small uninitialized global
12833     and static data in the '.bss' section, which is adjacent to the
12834     '.neardata' section.  Put small read-only data into the '.rodata'
12835     section.  The corresponding sections used for large pieces of data
12836     are '.fardata', '.far' and '.const'.
12837
12838'-msdata=all'
12839     Put all data, not just small objects, into the sections reserved
12840     for small data, and use addressing relative to the 'B14' register
12841     to access them.
12842
12843'-msdata=none'
12844     Make no use of the sections reserved for small data, and use
12845     absolute addresses to access all data.  Put all initialized global
12846     and static data in the '.fardata' section, and all uninitialized
12847     data in the '.far' section.  Put all constant data into the
12848     '.const' section.
12849
12850
12851File: gcc.info,  Node: CRIS Options,  Next: CR16 Options,  Prev: C6X Options,  Up: Submodel Options
12852
128533.17.8 CRIS Options
12854-------------------
12855
12856These options are defined specifically for the CRIS ports.
12857
12858'-march=ARCHITECTURE-TYPE'
12859'-mcpu=ARCHITECTURE-TYPE'
12860     Generate code for the specified architecture.  The choices for
12861     ARCHITECTURE-TYPE are 'v3', 'v8' and 'v10' for respectively
12862     ETRAX 4, ETRAX 100, and ETRAX 100 LX.  Default is 'v0' except for
12863     cris-axis-linux-gnu, where the default is 'v10'.
12864
12865'-mtune=ARCHITECTURE-TYPE'
12866     Tune to ARCHITECTURE-TYPE everything applicable about the generated
12867     code, except for the ABI and the set of available instructions.
12868     The choices for ARCHITECTURE-TYPE are the same as for
12869     '-march=ARCHITECTURE-TYPE'.
12870
12871'-mmax-stack-frame=N'
12872     Warn when the stack frame of a function exceeds N bytes.
12873
12874'-metrax4'
12875'-metrax100'
12876     The options '-metrax4' and '-metrax100' are synonyms for
12877     '-march=v3' and '-march=v8' respectively.
12878
12879'-mmul-bug-workaround'
12880'-mno-mul-bug-workaround'
12881     Work around a bug in the 'muls' and 'mulu' instructions for CPU
12882     models where it applies.  This option is active by default.
12883
12884'-mpdebug'
12885     Enable CRIS-specific verbose debug-related information in the
12886     assembly code.  This option also has the effect of turning off the
12887     '#NO_APP' formatted-code indicator to the assembler at the
12888     beginning of the assembly file.
12889
12890'-mcc-init'
12891     Do not use condition-code results from previous instruction; always
12892     emit compare and test instructions before use of condition codes.
12893
12894'-mno-side-effects'
12895     Do not emit instructions with side effects in addressing modes
12896     other than post-increment.
12897
12898'-mstack-align'
12899'-mno-stack-align'
12900'-mdata-align'
12901'-mno-data-align'
12902'-mconst-align'
12903'-mno-const-align'
12904     These options ('no-' options) arrange (eliminate arrangements) for
12905     the stack frame, individual data and constants to be aligned for
12906     the maximum single data access size for the chosen CPU model.  The
12907     default is to arrange for 32-bit alignment.  ABI details such as
12908     structure layout are not affected by these options.
12909
12910'-m32-bit'
12911'-m16-bit'
12912'-m8-bit'
12913     Similar to the stack- data- and const-align options above, these
12914     options arrange for stack frame, writable data and constants to all
12915     be 32-bit, 16-bit or 8-bit aligned.  The default is 32-bit
12916     alignment.
12917
12918'-mno-prologue-epilogue'
12919'-mprologue-epilogue'
12920     With '-mno-prologue-epilogue', the normal function prologue and
12921     epilogue which set up the stack frame are omitted and no return
12922     instructions or return sequences are generated in the code.  Use
12923     this option only together with visual inspection of the compiled
12924     code: no warnings or errors are generated when call-saved registers
12925     must be saved, or storage for local variables needs to be
12926     allocated.
12927
12928'-mno-gotplt'
12929'-mgotplt'
12930     With '-fpic' and '-fPIC', don't generate (do generate) instruction
12931     sequences that load addresses for functions from the PLT part of
12932     the GOT rather than (traditional on other architectures) calls to
12933     the PLT.  The default is '-mgotplt'.
12934
12935'-melf'
12936     Legacy no-op option only recognized with the cris-axis-elf and
12937     cris-axis-linux-gnu targets.
12938
12939'-mlinux'
12940     Legacy no-op option only recognized with the cris-axis-linux-gnu
12941     target.
12942
12943'-sim'
12944     This option, recognized for the cris-axis-elf, arranges to link
12945     with input-output functions from a simulator library.  Code,
12946     initialized data and zero-initialized data are allocated
12947     consecutively.
12948
12949'-sim2'
12950     Like '-sim', but pass linker options to locate initialized data at
12951     0x40000000 and zero-initialized data at 0x80000000.
12952
12953
12954File: gcc.info,  Node: CR16 Options,  Next: Darwin Options,  Prev: CRIS Options,  Up: Submodel Options
12955
129563.17.9 CR16 Options
12957-------------------
12958
12959These options are defined specifically for the CR16 ports.
12960
12961'-mmac'
12962     Enable the use of multiply-accumulate instructions.  Disabled by
12963     default.
12964
12965'-mcr16cplus'
12966'-mcr16c'
12967     Generate code for CR16C or CR16C+ architecture.  CR16C+
12968     architecture is default.
12969
12970'-msim'
12971     Links the library libsim.a which is in compatible with simulator.
12972     Applicable to ELF compiler only.
12973
12974'-mint32'
12975     Choose integer type as 32-bit wide.
12976
12977'-mbit-ops'
12978     Generates 'sbit'/'cbit' instructions for bit manipulations.
12979
12980'-mdata-model=MODEL'
12981     Choose a data model.  The choices for MODEL are 'near', 'far' or
12982     'medium'.  'medium' is default.  However, 'far' is not valid with
12983     '-mcr16c', as the CR16C architecture does not support the far data
12984     model.
12985
12986
12987File: gcc.info,  Node: Darwin Options,  Next: DEC Alpha Options,  Prev: CR16 Options,  Up: Submodel Options
12988
129893.17.10 Darwin Options
12990----------------------
12991
12992These options are defined for all architectures running the Darwin
12993operating system.
12994
12995 FSF GCC on Darwin does not create "fat" object files; it creates an
12996object file for the single architecture that GCC was built to target.
12997Apple's GCC on Darwin does create "fat" files if multiple '-arch'
12998options are used; it does so by running the compiler or linker multiple
12999times and joining the results together with 'lipo'.
13000
13001 The subtype of the file created (like 'ppc7400' or 'ppc970' or 'i686')
13002is determined by the flags that specify the ISA that GCC is targeting,
13003like '-mcpu' or '-march'.  The '-force_cpusubtype_ALL' option can be
13004used to override this.
13005
13006 The Darwin tools vary in their behavior when presented with an ISA
13007mismatch.  The assembler, 'as', only permits instructions to be used
13008that are valid for the subtype of the file it is generating, so you
13009cannot put 64-bit instructions in a 'ppc750' object file.  The linker
13010for shared libraries, '/usr/bin/libtool', fails and prints an error if
13011asked to create a shared library with a less restrictive subtype than
13012its input files (for instance, trying to put a 'ppc970' object file in a
13013'ppc7400' library).  The linker for executables, 'ld', quietly gives the
13014executable the most restrictive subtype of any of its input files.
13015
13016'-FDIR'
13017     Add the framework directory DIR to the head of the list of
13018     directories to be searched for header files.  These directories are
13019     interleaved with those specified by '-I' options and are scanned in
13020     a left-to-right order.
13021
13022     A framework directory is a directory with frameworks in it.  A
13023     framework is a directory with a 'Headers' and/or 'PrivateHeaders'
13024     directory contained directly in it that ends in '.framework'.  The
13025     name of a framework is the name of this directory excluding the
13026     '.framework'.  Headers associated with the framework are found in
13027     one of those two directories, with 'Headers' being searched first.
13028     A subframework is a framework directory that is in a framework's
13029     'Frameworks' directory.  Includes of subframework headers can only
13030     appear in a header of a framework that contains the subframework,
13031     or in a sibling subframework header.  Two subframeworks are
13032     siblings if they occur in the same framework.  A subframework
13033     should not have the same name as a framework; a warning is issued
13034     if this is violated.  Currently a subframework cannot have
13035     subframeworks; in the future, the mechanism may be extended to
13036     support this.  The standard frameworks can be found in
13037     '/System/Library/Frameworks' and '/Library/Frameworks'.  An example
13038     include looks like '#include <Framework/header.h>', where
13039     'Framework' denotes the name of the framework and 'header.h' is
13040     found in the 'PrivateHeaders' or 'Headers' directory.
13041
13042'-iframeworkDIR'
13043     Like '-F' except the directory is a treated as a system directory.
13044     The main difference between this '-iframework' and '-F' is that
13045     with '-iframework' the compiler does not warn about constructs
13046     contained within header files found via DIR.  This option is valid
13047     only for the C family of languages.
13048
13049'-gused'
13050     Emit debugging information for symbols that are used.  For stabs
13051     debugging format, this enables '-feliminate-unused-debug-symbols'.
13052     This is by default ON.
13053
13054'-gfull'
13055     Emit debugging information for all symbols and types.
13056
13057'-mmacosx-version-min=VERSION'
13058     The earliest version of MacOS X that this executable will run on is
13059     VERSION.  Typical values of VERSION include '10.1', '10.2', and
13060     '10.3.9'.
13061
13062     If the compiler was built to use the system's headers by default,
13063     then the default for this option is the system version on which the
13064     compiler is running, otherwise the default is to make choices that
13065     are compatible with as many systems and code bases as possible.
13066
13067'-mkernel'
13068     Enable kernel development mode.  The '-mkernel' option sets
13069     '-static', '-fno-common', '-fno-use-cxa-atexit', '-fno-exceptions',
13070     '-fno-non-call-exceptions', '-fapple-kext', '-fno-weak' and
13071     '-fno-rtti' where applicable.  This mode also sets '-mno-altivec',
13072     '-msoft-float', '-fno-builtin' and '-mlong-branch' for PowerPC
13073     targets.
13074
13075'-mone-byte-bool'
13076     Override the defaults for 'bool' so that 'sizeof(bool)==1'.  By
13077     default 'sizeof(bool)' is '4' when compiling for Darwin/PowerPC and
13078     '1' when compiling for Darwin/x86, so this option has no effect on
13079     x86.
13080
13081     *Warning:* The '-mone-byte-bool' switch causes GCC to generate code
13082     that is not binary compatible with code generated without that
13083     switch.  Using this switch may require recompiling all other
13084     modules in a program, including system libraries.  Use this switch
13085     to conform to a non-default data model.
13086
13087'-mfix-and-continue'
13088'-ffix-and-continue'
13089'-findirect-data'
13090     Generate code suitable for fast turnaround development, such as to
13091     allow GDB to dynamically load '.o' files into already-running
13092     programs.  '-findirect-data' and '-ffix-and-continue' are provided
13093     for backwards compatibility.
13094
13095'-all_load'
13096     Loads all members of static archive libraries.  See man ld(1) for
13097     more information.
13098
13099'-arch_errors_fatal'
13100     Cause the errors having to do with files that have the wrong
13101     architecture to be fatal.
13102
13103'-bind_at_load'
13104     Causes the output file to be marked such that the dynamic linker
13105     will bind all undefined references when the file is loaded or
13106     launched.
13107
13108'-bundle'
13109     Produce a Mach-o bundle format file.  See man ld(1) for more
13110     information.
13111
13112'-bundle_loader EXECUTABLE'
13113     This option specifies the EXECUTABLE that will load the build
13114     output file being linked.  See man ld(1) for more information.
13115
13116'-dynamiclib'
13117     When passed this option, GCC produces a dynamic library instead of
13118     an executable when linking, using the Darwin 'libtool' command.
13119
13120'-force_cpusubtype_ALL'
13121     This causes GCC's output file to have the ALL subtype, instead of
13122     one controlled by the '-mcpu' or '-march' option.
13123
13124'-allowable_client CLIENT_NAME'
13125'-client_name'
13126'-compatibility_version'
13127'-current_version'
13128'-dead_strip'
13129'-dependency-file'
13130'-dylib_file'
13131'-dylinker_install_name'
13132'-dynamic'
13133'-exported_symbols_list'
13134'-filelist'
13135'-flat_namespace'
13136'-force_flat_namespace'
13137'-headerpad_max_install_names'
13138'-image_base'
13139'-init'
13140'-install_name'
13141'-keep_private_externs'
13142'-multi_module'
13143'-multiply_defined'
13144'-multiply_defined_unused'
13145'-noall_load'
13146'-no_dead_strip_inits_and_terms'
13147'-nofixprebinding'
13148'-nomultidefs'
13149'-noprebind'
13150'-noseglinkedit'
13151'-pagezero_size'
13152'-prebind'
13153'-prebind_all_twolevel_modules'
13154'-private_bundle'
13155'-read_only_relocs'
13156'-sectalign'
13157'-sectobjectsymbols'
13158'-whyload'
13159'-seg1addr'
13160'-sectcreate'
13161'-sectobjectsymbols'
13162'-sectorder'
13163'-segaddr'
13164'-segs_read_only_addr'
13165'-segs_read_write_addr'
13166'-seg_addr_table'
13167'-seg_addr_table_filename'
13168'-seglinkedit'
13169'-segprot'
13170'-segs_read_only_addr'
13171'-segs_read_write_addr'
13172'-single_module'
13173'-static'
13174'-sub_library'
13175'-sub_umbrella'
13176'-twolevel_namespace'
13177'-umbrella'
13178'-undefined'
13179'-unexported_symbols_list'
13180'-weak_reference_mismatches'
13181'-whatsloaded'
13182     These options are passed to the Darwin linker.  The Darwin linker
13183     man page describes them in detail.
13184
13185
13186File: gcc.info,  Node: DEC Alpha Options,  Next: FR30 Options,  Prev: Darwin Options,  Up: Submodel Options
13187
131883.17.11 DEC Alpha Options
13189-------------------------
13190
13191These '-m' options are defined for the DEC Alpha implementations:
13192
13193'-mno-soft-float'
13194'-msoft-float'
13195     Use (do not use) the hardware floating-point instructions for
13196     floating-point operations.  When '-msoft-float' is specified,
13197     functions in 'libgcc.a' are used to perform floating-point
13198     operations.  Unless they are replaced by routines that emulate the
13199     floating-point operations, or compiled in such a way as to call
13200     such emulations routines, these routines issue floating-point
13201     operations.  If you are compiling for an Alpha without
13202     floating-point operations, you must ensure that the library is
13203     built so as not to call them.
13204
13205     Note that Alpha implementations without floating-point operations
13206     are required to have floating-point registers.
13207
13208'-mfp-reg'
13209'-mno-fp-regs'
13210     Generate code that uses (does not use) the floating-point register
13211     set.  '-mno-fp-regs' implies '-msoft-float'.  If the floating-point
13212     register set is not used, floating-point operands are passed in
13213     integer registers as if they were integers and floating-point
13214     results are passed in '$0' instead of '$f0'.  This is a
13215     non-standard calling sequence, so any function with a
13216     floating-point argument or return value called by code compiled
13217     with '-mno-fp-regs' must also be compiled with that option.
13218
13219     A typical use of this option is building a kernel that does not
13220     use, and hence need not save and restore, any floating-point
13221     registers.
13222
13223'-mieee'
13224     The Alpha architecture implements floating-point hardware optimized
13225     for maximum performance.  It is mostly compliant with the IEEE
13226     floating-point standard.  However, for full compliance, software
13227     assistance is required.  This option generates code fully
13228     IEEE-compliant code _except_ that the INEXACT-FLAG is not
13229     maintained (see below).  If this option is turned on, the
13230     preprocessor macro '_IEEE_FP' is defined during compilation.  The
13231     resulting code is less efficient but is able to correctly support
13232     denormalized numbers and exceptional IEEE values such as
13233     not-a-number and plus/minus infinity.  Other Alpha compilers call
13234     this option '-ieee_with_no_inexact'.
13235
13236'-mieee-with-inexact'
13237     This is like '-mieee' except the generated code also maintains the
13238     IEEE INEXACT-FLAG.  Turning on this option causes the generated
13239     code to implement fully-compliant IEEE math.  In addition to
13240     '_IEEE_FP', '_IEEE_FP_EXACT' is defined as a preprocessor macro.
13241     On some Alpha implementations the resulting code may execute
13242     significantly slower than the code generated by default.  Since
13243     there is very little code that depends on the INEXACT-FLAG, you
13244     should normally not specify this option.  Other Alpha compilers
13245     call this option '-ieee_with_inexact'.
13246
13247'-mfp-trap-mode=TRAP-MODE'
13248     This option controls what floating-point related traps are enabled.
13249     Other Alpha compilers call this option '-fptm TRAP-MODE'.  The trap
13250     mode can be set to one of four values:
13251
13252     'n'
13253          This is the default (normal) setting.  The only traps that are
13254          enabled are the ones that cannot be disabled in software
13255          (e.g., division by zero trap).
13256
13257     'u'
13258          In addition to the traps enabled by 'n', underflow traps are
13259          enabled as well.
13260
13261     'su'
13262          Like 'u', but the instructions are marked to be safe for
13263          software completion (see Alpha architecture manual for
13264          details).
13265
13266     'sui'
13267          Like 'su', but inexact traps are enabled as well.
13268
13269'-mfp-rounding-mode=ROUNDING-MODE'
13270     Selects the IEEE rounding mode.  Other Alpha compilers call this
13271     option '-fprm ROUNDING-MODE'.  The ROUNDING-MODE can be one of:
13272
13273     'n'
13274          Normal IEEE rounding mode.  Floating-point numbers are rounded
13275          towards the nearest machine number or towards the even machine
13276          number in case of a tie.
13277
13278     'm'
13279          Round towards minus infinity.
13280
13281     'c'
13282          Chopped rounding mode.  Floating-point numbers are rounded
13283          towards zero.
13284
13285     'd'
13286          Dynamic rounding mode.  A field in the floating-point control
13287          register (FPCR, see Alpha architecture reference manual)
13288          controls the rounding mode in effect.  The C library
13289          initializes this register for rounding towards plus infinity.
13290          Thus, unless your program modifies the FPCR, 'd' corresponds
13291          to round towards plus infinity.
13292
13293'-mtrap-precision=TRAP-PRECISION'
13294     In the Alpha architecture, floating-point traps are imprecise.
13295     This means without software assistance it is impossible to recover
13296     from a floating trap and program execution normally needs to be
13297     terminated.  GCC can generate code that can assist operating system
13298     trap handlers in determining the exact location that caused a
13299     floating-point trap.  Depending on the requirements of an
13300     application, different levels of precisions can be selected:
13301
13302     'p'
13303          Program precision.  This option is the default and means a
13304          trap handler can only identify which program caused a
13305          floating-point exception.
13306
13307     'f'
13308          Function precision.  The trap handler can determine the
13309          function that caused a floating-point exception.
13310
13311     'i'
13312          Instruction precision.  The trap handler can determine the
13313          exact instruction that caused a floating-point exception.
13314
13315     Other Alpha compilers provide the equivalent options called
13316     '-scope_safe' and '-resumption_safe'.
13317
13318'-mieee-conformant'
13319     This option marks the generated code as IEEE conformant.  You must
13320     not use this option unless you also specify '-mtrap-precision=i'
13321     and either '-mfp-trap-mode=su' or '-mfp-trap-mode=sui'.  Its only
13322     effect is to emit the line '.eflag 48' in the function prologue of
13323     the generated assembly file.
13324
13325'-mbuild-constants'
13326     Normally GCC examines a 32- or 64-bit integer constant to see if it
13327     can construct it from smaller constants in two or three
13328     instructions.  If it cannot, it outputs the constant as a literal
13329     and generates code to load it from the data segment at run time.
13330
13331     Use this option to require GCC to construct _all_ integer constants
13332     using code, even if it takes more instructions (the maximum is
13333     six).
13334
13335     You typically use this option to build a shared library dynamic
13336     loader.  Itself a shared library, it must relocate itself in memory
13337     before it can find the variables and constants in its own data
13338     segment.
13339
13340'-mbwx'
13341'-mno-bwx'
13342'-mcix'
13343'-mno-cix'
13344'-mfix'
13345'-mno-fix'
13346'-mmax'
13347'-mno-max'
13348     Indicate whether GCC should generate code to use the optional BWX,
13349     CIX, FIX and MAX instruction sets.  The default is to use the
13350     instruction sets supported by the CPU type specified via '-mcpu='
13351     option or that of the CPU on which GCC was built if none is
13352     specified.
13353
13354'-mfloat-vax'
13355'-mfloat-ieee'
13356     Generate code that uses (does not use) VAX F and G floating-point
13357     arithmetic instead of IEEE single and double precision.
13358
13359'-mexplicit-relocs'
13360'-mno-explicit-relocs'
13361     Older Alpha assemblers provided no way to generate symbol
13362     relocations except via assembler macros.  Use of these macros does
13363     not allow optimal instruction scheduling.  GNU binutils as of
13364     version 2.12 supports a new syntax that allows the compiler to
13365     explicitly mark which relocations should apply to which
13366     instructions.  This option is mostly useful for debugging, as GCC
13367     detects the capabilities of the assembler when it is built and sets
13368     the default accordingly.
13369
13370'-msmall-data'
13371'-mlarge-data'
13372     When '-mexplicit-relocs' is in effect, static data is accessed via
13373     "gp-relative" relocations.  When '-msmall-data' is used, objects 8
13374     bytes long or smaller are placed in a "small data area" (the
13375     '.sdata' and '.sbss' sections) and are accessed via 16-bit
13376     relocations off of the '$gp' register.  This limits the size of the
13377     small data area to 64KB, but allows the variables to be directly
13378     accessed via a single instruction.
13379
13380     The default is '-mlarge-data'.  With this option the data area is
13381     limited to just below 2GB.  Programs that require more than 2GB of
13382     data must use 'malloc' or 'mmap' to allocate the data in the heap
13383     instead of in the program's data segment.
13384
13385     When generating code for shared libraries, '-fpic' implies
13386     '-msmall-data' and '-fPIC' implies '-mlarge-data'.
13387
13388'-msmall-text'
13389'-mlarge-text'
13390     When '-msmall-text' is used, the compiler assumes that the code of
13391     the entire program (or shared library) fits in 4MB, and is thus
13392     reachable with a branch instruction.  When '-msmall-data' is used,
13393     the compiler can assume that all local symbols share the same '$gp'
13394     value, and thus reduce the number of instructions required for a
13395     function call from 4 to 1.
13396
13397     The default is '-mlarge-text'.
13398
13399'-mcpu=CPU_TYPE'
13400     Set the instruction set and instruction scheduling parameters for
13401     machine type CPU_TYPE.  You can specify either the 'EV' style name
13402     or the corresponding chip number.  GCC supports scheduling
13403     parameters for the EV4, EV5 and EV6 family of processors and
13404     chooses the default values for the instruction set from the
13405     processor you specify.  If you do not specify a processor type, GCC
13406     defaults to the processor on which the compiler was built.
13407
13408     Supported values for CPU_TYPE are
13409
13410     'ev4'
13411     'ev45'
13412     '21064'
13413          Schedules as an EV4 and has no instruction set extensions.
13414
13415     'ev5'
13416     '21164'
13417          Schedules as an EV5 and has no instruction set extensions.
13418
13419     'ev56'
13420     '21164a'
13421          Schedules as an EV5 and supports the BWX extension.
13422
13423     'pca56'
13424     '21164pc'
13425     '21164PC'
13426          Schedules as an EV5 and supports the BWX and MAX extensions.
13427
13428     'ev6'
13429     '21264'
13430          Schedules as an EV6 and supports the BWX, FIX, and MAX
13431          extensions.
13432
13433     'ev67'
13434     '21264a'
13435          Schedules as an EV6 and supports the BWX, CIX, FIX, and MAX
13436          extensions.
13437
13438     Native toolchains also support the value 'native', which selects
13439     the best architecture option for the host processor.
13440     '-mcpu=native' has no effect if GCC does not recognize the
13441     processor.
13442
13443'-mtune=CPU_TYPE'
13444     Set only the instruction scheduling parameters for machine type
13445     CPU_TYPE.  The instruction set is not changed.
13446
13447     Native toolchains also support the value 'native', which selects
13448     the best architecture option for the host processor.
13449     '-mtune=native' has no effect if GCC does not recognize the
13450     processor.
13451
13452'-mmemory-latency=TIME'
13453     Sets the latency the scheduler should assume for typical memory
13454     references as seen by the application.  This number is highly
13455     dependent on the memory access patterns used by the application and
13456     the size of the external cache on the machine.
13457
13458     Valid options for TIME are
13459
13460     'NUMBER'
13461          A decimal number representing clock cycles.
13462
13463     'L1'
13464     'L2'
13465     'L3'
13466     'main'
13467          The compiler contains estimates of the number of clock cycles
13468          for "typical" EV4 & EV5 hardware for the Level 1, 2 & 3 caches
13469          (also called Dcache, Scache, and Bcache), as well as to main
13470          memory.  Note that L3 is only valid for EV5.
13471
13472
13473File: gcc.info,  Node: FR30 Options,  Next: FRV Options,  Prev: DEC Alpha Options,  Up: Submodel Options
13474
134753.17.12 FR30 Options
13476--------------------
13477
13478These options are defined specifically for the FR30 port.
13479
13480'-msmall-model'
13481     Use the small address space model.  This can produce smaller code,
13482     but it does assume that all symbolic values and addresses fit into
13483     a 20-bit range.
13484
13485'-mno-lsim'
13486     Assume that runtime support has been provided and so there is no
13487     need to include the simulator library ('libsim.a') on the linker
13488     command line.
13489
13490
13491File: gcc.info,  Node: FRV Options,  Next: GNU/Linux Options,  Prev: FR30 Options,  Up: Submodel Options
13492
134933.17.13 FRV Options
13494-------------------
13495
13496'-mgpr-32'
13497
13498     Only use the first 32 general-purpose registers.
13499
13500'-mgpr-64'
13501
13502     Use all 64 general-purpose registers.
13503
13504'-mfpr-32'
13505
13506     Use only the first 32 floating-point registers.
13507
13508'-mfpr-64'
13509
13510     Use all 64 floating-point registers.
13511
13512'-mhard-float'
13513
13514     Use hardware instructions for floating-point operations.
13515
13516'-msoft-float'
13517
13518     Use library routines for floating-point operations.
13519
13520'-malloc-cc'
13521
13522     Dynamically allocate condition code registers.
13523
13524'-mfixed-cc'
13525
13526     Do not try to dynamically allocate condition code registers, only
13527     use 'icc0' and 'fcc0'.
13528
13529'-mdword'
13530
13531     Change ABI to use double word insns.
13532
13533'-mno-dword'
13534
13535     Do not use double word instructions.
13536
13537'-mdouble'
13538
13539     Use floating-point double instructions.
13540
13541'-mno-double'
13542
13543     Do not use floating-point double instructions.
13544
13545'-mmedia'
13546
13547     Use media instructions.
13548
13549'-mno-media'
13550
13551     Do not use media instructions.
13552
13553'-mmuladd'
13554
13555     Use multiply and add/subtract instructions.
13556
13557'-mno-muladd'
13558
13559     Do not use multiply and add/subtract instructions.
13560
13561'-mfdpic'
13562
13563     Select the FDPIC ABI, which uses function descriptors to represent
13564     pointers to functions.  Without any PIC/PIE-related options, it
13565     implies '-fPIE'.  With '-fpic' or '-fpie', it assumes GOT entries
13566     and small data are within a 12-bit range from the GOT base address;
13567     with '-fPIC' or '-fPIE', GOT offsets are computed with 32 bits.
13568     With a 'bfin-elf' target, this option implies '-msim'.
13569
13570'-minline-plt'
13571
13572     Enable inlining of PLT entries in function calls to functions that
13573     are not known to bind locally.  It has no effect without '-mfdpic'.
13574     It's enabled by default if optimizing for speed and compiling for
13575     shared libraries (i.e., '-fPIC' or '-fpic'), or when an
13576     optimization option such as '-O3' or above is present in the
13577     command line.
13578
13579'-mTLS'
13580
13581     Assume a large TLS segment when generating thread-local code.
13582
13583'-mtls'
13584
13585     Do not assume a large TLS segment when generating thread-local
13586     code.
13587
13588'-mgprel-ro'
13589
13590     Enable the use of 'GPREL' relocations in the FDPIC ABI for data
13591     that is known to be in read-only sections.  It's enabled by
13592     default, except for '-fpic' or '-fpie': even though it may help
13593     make the global offset table smaller, it trades 1 instruction for
13594     4.  With '-fPIC' or '-fPIE', it trades 3 instructions for 4, one of
13595     which may be shared by multiple symbols, and it avoids the need for
13596     a GOT entry for the referenced symbol, so it's more likely to be a
13597     win.  If it is not, '-mno-gprel-ro' can be used to disable it.
13598
13599'-multilib-library-pic'
13600
13601     Link with the (library, not FD) pic libraries.  It's implied by
13602     '-mlibrary-pic', as well as by '-fPIC' and '-fpic' without
13603     '-mfdpic'.  You should never have to use it explicitly.
13604
13605'-mlinked-fp'
13606
13607     Follow the EABI requirement of always creating a frame pointer
13608     whenever a stack frame is allocated.  This option is enabled by
13609     default and can be disabled with '-mno-linked-fp'.
13610
13611'-mlong-calls'
13612
13613     Use indirect addressing to call functions outside the current
13614     compilation unit.  This allows the functions to be placed anywhere
13615     within the 32-bit address space.
13616
13617'-malign-labels'
13618
13619     Try to align labels to an 8-byte boundary by inserting NOPs into
13620     the previous packet.  This option only has an effect when VLIW
13621     packing is enabled.  It doesn't create new packets; it merely adds
13622     NOPs to existing ones.
13623
13624'-mlibrary-pic'
13625
13626     Generate position-independent EABI code.
13627
13628'-macc-4'
13629
13630     Use only the first four media accumulator registers.
13631
13632'-macc-8'
13633
13634     Use all eight media accumulator registers.
13635
13636'-mpack'
13637
13638     Pack VLIW instructions.
13639
13640'-mno-pack'
13641
13642     Do not pack VLIW instructions.
13643
13644'-mno-eflags'
13645
13646     Do not mark ABI switches in e_flags.
13647
13648'-mcond-move'
13649
13650     Enable the use of conditional-move instructions (default).
13651
13652     This switch is mainly for debugging the compiler and will likely be
13653     removed in a future version.
13654
13655'-mno-cond-move'
13656
13657     Disable the use of conditional-move instructions.
13658
13659     This switch is mainly for debugging the compiler and will likely be
13660     removed in a future version.
13661
13662'-mscc'
13663
13664     Enable the use of conditional set instructions (default).
13665
13666     This switch is mainly for debugging the compiler and will likely be
13667     removed in a future version.
13668
13669'-mno-scc'
13670
13671     Disable the use of conditional set instructions.
13672
13673     This switch is mainly for debugging the compiler and will likely be
13674     removed in a future version.
13675
13676'-mcond-exec'
13677
13678     Enable the use of conditional execution (default).
13679
13680     This switch is mainly for debugging the compiler and will likely be
13681     removed in a future version.
13682
13683'-mno-cond-exec'
13684
13685     Disable the use of conditional execution.
13686
13687     This switch is mainly for debugging the compiler and will likely be
13688     removed in a future version.
13689
13690'-mvliw-branch'
13691
13692     Run a pass to pack branches into VLIW instructions (default).
13693
13694     This switch is mainly for debugging the compiler and will likely be
13695     removed in a future version.
13696
13697'-mno-vliw-branch'
13698
13699     Do not run a pass to pack branches into VLIW instructions.
13700
13701     This switch is mainly for debugging the compiler and will likely be
13702     removed in a future version.
13703
13704'-mmulti-cond-exec'
13705
13706     Enable optimization of '&&' and '||' in conditional execution
13707     (default).
13708
13709     This switch is mainly for debugging the compiler and will likely be
13710     removed in a future version.
13711
13712'-mno-multi-cond-exec'
13713
13714     Disable optimization of '&&' and '||' in conditional execution.
13715
13716     This switch is mainly for debugging the compiler and will likely be
13717     removed in a future version.
13718
13719'-mnested-cond-exec'
13720
13721     Enable nested conditional execution optimizations (default).
13722
13723     This switch is mainly for debugging the compiler and will likely be
13724     removed in a future version.
13725
13726'-mno-nested-cond-exec'
13727
13728     Disable nested conditional execution optimizations.
13729
13730     This switch is mainly for debugging the compiler and will likely be
13731     removed in a future version.
13732
13733'-moptimize-membar'
13734
13735     This switch removes redundant 'membar' instructions from the
13736     compiler-generated code.  It is enabled by default.
13737
13738'-mno-optimize-membar'
13739
13740     This switch disables the automatic removal of redundant 'membar'
13741     instructions from the generated code.
13742
13743'-mtomcat-stats'
13744
13745     Cause gas to print out tomcat statistics.
13746
13747'-mcpu=CPU'
13748
13749     Select the processor type for which to generate code.  Possible
13750     values are 'frv', 'fr550', 'tomcat', 'fr500', 'fr450', 'fr405',
13751     'fr400', 'fr300' and 'simple'.
13752
13753
13754File: gcc.info,  Node: GNU/Linux Options,  Next: H8/300 Options,  Prev: FRV Options,  Up: Submodel Options
13755
137563.17.14 GNU/Linux Options
13757-------------------------
13758
13759These '-m' options are defined for GNU/Linux targets:
13760
13761'-mglibc'
13762     Use the GNU C library.  This is the default except on
13763     '*-*-linux-*uclibc*' and '*-*-linux-*android*' targets.
13764
13765'-muclibc'
13766     Use uClibc C library.  This is the default on '*-*-linux-*uclibc*'
13767     targets.
13768
13769'-mbionic'
13770     Use Bionic C library.  This is the default on '*-*-linux-*android*'
13771     targets.
13772
13773'-mandroid'
13774     Compile code compatible with Android platform.  This is the default
13775     on '*-*-linux-*android*' targets.
13776
13777     When compiling, this option enables '-mbionic', '-fPIC',
13778     '-fno-exceptions' and '-fno-rtti' by default.  When linking, this
13779     option makes the GCC driver pass Android-specific options to the
13780     linker.  Finally, this option causes the preprocessor macro
13781     '__ANDROID__' to be defined.
13782
13783'-tno-android-cc'
13784     Disable compilation effects of '-mandroid', i.e., do not enable
13785     '-mbionic', '-fPIC', '-fno-exceptions' and '-fno-rtti' by default.
13786
13787'-tno-android-ld'
13788     Disable linking effects of '-mandroid', i.e., pass standard Linux
13789     linking options to the linker.
13790
13791
13792File: gcc.info,  Node: H8/300 Options,  Next: HPPA Options,  Prev: GNU/Linux Options,  Up: Submodel Options
13793
137943.17.15 H8/300 Options
13795----------------------
13796
13797These '-m' options are defined for the H8/300 implementations:
13798
13799'-mrelax'
13800     Shorten some address references at link time, when possible; uses
13801     the linker option '-relax'.  *Note 'ld' and the H8/300: (ld)H8/300,
13802     for a fuller description.
13803
13804'-mh'
13805     Generate code for the H8/300H.
13806
13807'-ms'
13808     Generate code for the H8S.
13809
13810'-mn'
13811     Generate code for the H8S and H8/300H in the normal mode.  This
13812     switch must be used either with '-mh' or '-ms'.
13813
13814'-ms2600'
13815     Generate code for the H8S/2600.  This switch must be used with
13816     '-ms'.
13817
13818'-mexr'
13819     Extended registers are stored on stack before execution of function
13820     with monitor attribute.  Default option is '-mexr'.  This option is
13821     valid only for H8S targets.
13822
13823'-mno-exr'
13824     Extended registers are not stored on stack before execution of
13825     function with monitor attribute.  Default option is '-mno-exr'.
13826     This option is valid only for H8S targets.
13827
13828'-mint32'
13829     Make 'int' data 32 bits by default.
13830
13831'-malign-300'
13832     On the H8/300H and H8S, use the same alignment rules as for the
13833     H8/300.  The default for the H8/300H and H8S is to align longs and
13834     floats on 4-byte boundaries.  '-malign-300' causes them to be
13835     aligned on 2-byte boundaries.  This option has no effect on the
13836     H8/300.
13837
13838
13839File: gcc.info,  Node: HPPA Options,  Next: i386 and x86-64 Options,  Prev: H8/300 Options,  Up: Submodel Options
13840
138413.17.16 HPPA Options
13842--------------------
13843
13844These '-m' options are defined for the HPPA family of computers:
13845
13846'-march=ARCHITECTURE-TYPE'
13847     Generate code for the specified architecture.  The choices for
13848     ARCHITECTURE-TYPE are '1.0' for PA 1.0, '1.1' for PA 1.1, and '2.0'
13849     for PA 2.0 processors.  Refer to '/usr/lib/sched.models' on an
13850     HP-UX system to determine the proper architecture option for your
13851     machine.  Code compiled for lower numbered architectures runs on
13852     higher numbered architectures, but not the other way around.
13853
13854'-mpa-risc-1-0'
13855'-mpa-risc-1-1'
13856'-mpa-risc-2-0'
13857     Synonyms for '-march=1.0', '-march=1.1', and '-march=2.0'
13858     respectively.
13859
13860'-mjump-in-delay'
13861     Fill delay slots of function calls with unconditional jump
13862     instructions by modifying the return pointer for the function call
13863     to be the target of the conditional jump.
13864
13865'-mdisable-fpregs'
13866     Prevent floating-point registers from being used in any manner.
13867     This is necessary for compiling kernels that perform lazy context
13868     switching of floating-point registers.  If you use this option and
13869     attempt to perform floating-point operations, the compiler aborts.
13870
13871'-mdisable-indexing'
13872     Prevent the compiler from using indexing address modes.  This
13873     avoids some rather obscure problems when compiling MIG generated
13874     code under MACH.
13875
13876'-mno-space-regs'
13877     Generate code that assumes the target has no space registers.  This
13878     allows GCC to generate faster indirect calls and use unscaled index
13879     address modes.
13880
13881     Such code is suitable for level 0 PA systems and kernels.
13882
13883'-mfast-indirect-calls'
13884     Generate code that assumes calls never cross space boundaries.
13885     This allows GCC to emit code that performs faster indirect calls.
13886
13887     This option does not work in the presence of shared libraries or
13888     nested functions.
13889
13890'-mfixed-range=REGISTER-RANGE'
13891     Generate code treating the given register range as fixed registers.
13892     A fixed register is one that the register allocator cannot use.
13893     This is useful when compiling kernel code.  A register range is
13894     specified as two registers separated by a dash.  Multiple register
13895     ranges can be specified separated by a comma.
13896
13897'-mlong-load-store'
13898     Generate 3-instruction load and store sequences as sometimes
13899     required by the HP-UX 10 linker.  This is equivalent to the '+k'
13900     option to the HP compilers.
13901
13902'-mportable-runtime'
13903     Use the portable calling conventions proposed by HP for ELF
13904     systems.
13905
13906'-mgas'
13907     Enable the use of assembler directives only GAS understands.
13908
13909'-mschedule=CPU-TYPE'
13910     Schedule code according to the constraints for the machine type
13911     CPU-TYPE.  The choices for CPU-TYPE are '700' '7100', '7100LC',
13912     '7200', '7300' and '8000'.  Refer to '/usr/lib/sched.models' on an
13913     HP-UX system to determine the proper scheduling option for your
13914     machine.  The default scheduling is '8000'.
13915
13916'-mlinker-opt'
13917     Enable the optimization pass in the HP-UX linker.  Note this makes
13918     symbolic debugging impossible.  It also triggers a bug in the HP-UX
13919     8 and HP-UX 9 linkers in which they give bogus error messages when
13920     linking some programs.
13921
13922'-msoft-float'
13923     Generate output containing library calls for floating point.
13924     *Warning:* the requisite libraries are not available for all HPPA
13925     targets.  Normally the facilities of the machine's usual C compiler
13926     are used, but this cannot be done directly in cross-compilation.
13927     You must make your own arrangements to provide suitable library
13928     functions for cross-compilation.
13929
13930     '-msoft-float' changes the calling convention in the output file;
13931     therefore, it is only useful if you compile _all_ of a program with
13932     this option.  In particular, you need to compile 'libgcc.a', the
13933     library that comes with GCC, with '-msoft-float' in order for this
13934     to work.
13935
13936'-msio'
13937     Generate the predefine, '_SIO', for server IO.  The default is
13938     '-mwsio'.  This generates the predefines, '__hp9000s700',
13939     '__hp9000s700__' and '_WSIO', for workstation IO.  These options
13940     are available under HP-UX and HI-UX.
13941
13942'-mgnu-ld'
13943     Use options specific to GNU 'ld'.  This passes '-shared' to 'ld'
13944     when building a shared library.  It is the default when GCC is
13945     configured, explicitly or implicitly, with the GNU linker.  This
13946     option does not affect which 'ld' is called; it only changes what
13947     parameters are passed to that 'ld'.  The 'ld' that is called is
13948     determined by the '--with-ld' configure option, GCC's program
13949     search path, and finally by the user's 'PATH'.  The linker used by
13950     GCC can be printed using 'which `gcc -print-prog-name=ld`'.  This
13951     option is only available on the 64-bit HP-UX GCC, i.e. configured
13952     with 'hppa*64*-*-hpux*'.
13953
13954'-mhp-ld'
13955     Use options specific to HP 'ld'.  This passes '-b' to 'ld' when
13956     building a shared library and passes '+Accept TypeMismatch' to 'ld'
13957     on all links.  It is the default when GCC is configured, explicitly
13958     or implicitly, with the HP linker.  This option does not affect
13959     which 'ld' is called; it only changes what parameters are passed to
13960     that 'ld'.  The 'ld' that is called is determined by the
13961     '--with-ld' configure option, GCC's program search path, and
13962     finally by the user's 'PATH'.  The linker used by GCC can be
13963     printed using 'which `gcc -print-prog-name=ld`'.  This option is
13964     only available on the 64-bit HP-UX GCC, i.e. configured with
13965     'hppa*64*-*-hpux*'.
13966
13967'-mlong-calls'
13968     Generate code that uses long call sequences.  This ensures that a
13969     call is always able to reach linker generated stubs.  The default
13970     is to generate long calls only when the distance from the call site
13971     to the beginning of the function or translation unit, as the case
13972     may be, exceeds a predefined limit set by the branch type being
13973     used.  The limits for normal calls are 7,600,000 and 240,000 bytes,
13974     respectively for the PA 2.0 and PA 1.X architectures.  Sibcalls are
13975     always limited at 240,000 bytes.
13976
13977     Distances are measured from the beginning of functions when using
13978     the '-ffunction-sections' option, or when using the '-mgas' and
13979     '-mno-portable-runtime' options together under HP-UX with the SOM
13980     linker.
13981
13982     It is normally not desirable to use this option as it degrades
13983     performance.  However, it may be useful in large applications,
13984     particularly when partial linking is used to build the application.
13985
13986     The types of long calls used depends on the capabilities of the
13987     assembler and linker, and the type of code being generated.  The
13988     impact on systems that support long absolute calls, and long pic
13989     symbol-difference or pc-relative calls should be relatively small.
13990     However, an indirect call is used on 32-bit ELF systems in pic code
13991     and it is quite long.
13992
13993'-munix=UNIX-STD'
13994     Generate compiler predefines and select a startfile for the
13995     specified UNIX standard.  The choices for UNIX-STD are '93', '95'
13996     and '98'.  '93' is supported on all HP-UX versions.  '95' is
13997     available on HP-UX 10.10 and later.  '98' is available on HP-UX
13998     11.11 and later.  The default values are '93' for HP-UX 10.00, '95'
13999     for HP-UX 10.10 though to 11.00, and '98' for HP-UX 11.11 and
14000     later.
14001
14002     '-munix=93' provides the same predefines as GCC 3.3 and 3.4.
14003     '-munix=95' provides additional predefines for 'XOPEN_UNIX' and
14004     '_XOPEN_SOURCE_EXTENDED', and the startfile 'unix95.o'.
14005     '-munix=98' provides additional predefines for '_XOPEN_UNIX',
14006     '_XOPEN_SOURCE_EXTENDED', '_INCLUDE__STDC_A1_SOURCE' and
14007     '_INCLUDE_XOPEN_SOURCE_500', and the startfile 'unix98.o'.
14008
14009     It is _important_ to note that this option changes the interfaces
14010     for various library routines.  It also affects the operational
14011     behavior of the C library.  Thus, _extreme_ care is needed in using
14012     this option.
14013
14014     Library code that is intended to operate with more than one UNIX
14015     standard must test, set and restore the variable
14016     __XPG4_EXTENDED_MASK as appropriate.  Most GNU software doesn't
14017     provide this capability.
14018
14019'-nolibdld'
14020     Suppress the generation of link options to search libdld.sl when
14021     the '-static' option is specified on HP-UX 10 and later.
14022
14023'-static'
14024     The HP-UX implementation of setlocale in libc has a dependency on
14025     libdld.sl.  There isn't an archive version of libdld.sl.  Thus,
14026     when the '-static' option is specified, special link options are
14027     needed to resolve this dependency.
14028
14029     On HP-UX 10 and later, the GCC driver adds the necessary options to
14030     link with libdld.sl when the '-static' option is specified.  This
14031     causes the resulting binary to be dynamic.  On the 64-bit port, the
14032     linkers generate dynamic binaries by default in any case.  The
14033     '-nolibdld' option can be used to prevent the GCC driver from
14034     adding these link options.
14035
14036'-threads'
14037     Add support for multithreading with the "dce thread" library under
14038     HP-UX.  This option sets flags for both the preprocessor and
14039     linker.
14040
14041
14042File: gcc.info,  Node: i386 and x86-64 Options,  Next: i386 and x86-64 Windows Options,  Prev: HPPA Options,  Up: Submodel Options
14043
140443.17.17 Intel 386 and AMD x86-64 Options
14045----------------------------------------
14046
14047These '-m' options are defined for the i386 and x86-64 family of
14048computers:
14049
14050'-march=CPU-TYPE'
14051     Generate instructions for the machine type CPU-TYPE.  In contrast
14052     to '-mtune=CPU-TYPE', which merely tunes the generated code for the
14053     specified CPU-TYPE, '-march=CPU-TYPE' allows GCC to generate code
14054     that may not run at all on processors other than the one indicated.
14055     Specifying '-march=CPU-TYPE' implies '-mtune=CPU-TYPE'.
14056
14057     The choices for CPU-TYPE are:
14058
14059     'native'
14060          This selects the CPU to generate code for at compilation time
14061          by determining the processor type of the compiling machine.
14062          Using '-march=native' enables all instruction subsets
14063          supported by the local machine (hence the result might not run
14064          on different machines).  Using '-mtune=native' produces code
14065          optimized for the local machine under the constraints of the
14066          selected instruction set.
14067
14068     'i386'
14069          Original Intel i386 CPU.
14070
14071     'i486'
14072          Intel i486 CPU.  (No scheduling is implemented for this chip.)
14073
14074     'i586'
14075     'pentium'
14076          Intel Pentium CPU with no MMX support.
14077
14078     'pentium-mmx'
14079          Intel Pentium MMX CPU, based on Pentium core with MMX
14080          instruction set support.
14081
14082     'pentiumpro'
14083          Intel Pentium Pro CPU.
14084
14085     'i686'
14086          When used with '-march', the Pentium Pro instruction set is
14087          used, so the code runs on all i686 family chips.  When used
14088          with '-mtune', it has the same meaning as 'generic'.
14089
14090     'pentium2'
14091          Intel Pentium II CPU, based on Pentium Pro core with MMX
14092          instruction set support.
14093
14094     'pentium3'
14095     'pentium3m'
14096          Intel Pentium III CPU, based on Pentium Pro core with MMX and
14097          SSE instruction set support.
14098
14099     'pentium-m'
14100          Intel Pentium M; low-power version of Intel Pentium III CPU
14101          with MMX, SSE and SSE2 instruction set support.  Used by
14102          Centrino notebooks.
14103
14104     'pentium4'
14105     'pentium4m'
14106          Intel Pentium 4 CPU with MMX, SSE and SSE2 instruction set
14107          support.
14108
14109     'prescott'
14110          Improved version of Intel Pentium 4 CPU with MMX, SSE, SSE2
14111          and SSE3 instruction set support.
14112
14113     'nocona'
14114          Improved version of Intel Pentium 4 CPU with 64-bit
14115          extensions, MMX, SSE, SSE2 and SSE3 instruction set support.
14116
14117     'core2'
14118          Intel Core 2 CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3
14119          and SSSE3 instruction set support.
14120
14121     'nehalem'
14122          Intel Nehalem CPU with 64-bit extensions, MMX, SSE, SSE2,
14123          SSE3, SSSE3, SSE4.1, SSE4.2 and POPCNT instruction set
14124          support.
14125
14126     'westmere'
14127          Intel Westmere CPU with 64-bit extensions, MMX, SSE, SSE2,
14128          SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AES and PCLMUL
14129          instruction set support.
14130
14131     'sandybridge'
14132          Intel Sandy Bridge CPU with 64-bit extensions, MMX, SSE, SSE2,
14133          SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AES and PCLMUL
14134          instruction set support.
14135
14136     'ivybridge'
14137          Intel Ivy Bridge CPU with 64-bit extensions, MMX, SSE, SSE2,
14138          SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AES, PCLMUL,
14139          FSGSBASE, RDRND and F16C instruction set support.
14140
14141     'haswell'
14142          Intel Haswell CPU with 64-bit extensions, MOVBE, MMX, SSE,
14143          SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES,
14144          PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2 and F16C instruction
14145          set support.
14146
14147     'broadwell'
14148          Intel Broadwell CPU with 64-bit extensions, MOVBE, MMX, SSE,
14149          SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES,
14150          PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, F16C, RDSEED, ADCX
14151          and PREFETCHW instruction set support.
14152
14153     'bonnell'
14154          Intel Bonnell CPU with 64-bit extensions, MOVBE, MMX, SSE,
14155          SSE2, SSE3 and SSSE3 instruction set support.
14156
14157     'silvermont'
14158          Intel Silvermont CPU with 64-bit extensions, MOVBE, MMX, SSE,
14159          SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AES, PCLMUL and
14160          RDRND instruction set support.
14161
14162     'k6'
14163          AMD K6 CPU with MMX instruction set support.
14164
14165     'k6-2'
14166     'k6-3'
14167          Improved versions of AMD K6 CPU with MMX and 3DNow!
14168          instruction set support.
14169
14170     'athlon'
14171     'athlon-tbird'
14172          AMD Athlon CPU with MMX, 3dNOW!, enhanced 3DNow! and SSE
14173          prefetch instructions support.
14174
14175     'athlon-4'
14176     'athlon-xp'
14177     'athlon-mp'
14178          Improved AMD Athlon CPU with MMX, 3DNow!, enhanced 3DNow! and
14179          full SSE instruction set support.
14180
14181     'k8'
14182     'opteron'
14183     'athlon64'
14184     'athlon-fx'
14185          Processors based on the AMD K8 core with x86-64 instruction
14186          set support, including the AMD Opteron, Athlon 64, and Athlon
14187          64 FX processors.  (This supersets MMX, SSE, SSE2, 3DNow!,
14188          enhanced 3DNow! and 64-bit instruction set extensions.)
14189
14190     'k8-sse3'
14191     'opteron-sse3'
14192     'athlon64-sse3'
14193          Improved versions of AMD K8 cores with SSE3 instruction set
14194          support.
14195
14196     'amdfam10'
14197     'barcelona'
14198          CPUs based on AMD Family 10h cores with x86-64 instruction set
14199          support.  (This supersets MMX, SSE, SSE2, SSE3, SSE4A, 3DNow!,
14200          enhanced 3DNow!, ABM and 64-bit instruction set extensions.)
14201
14202     'bdver1'
14203          CPUs based on AMD Family 15h cores with x86-64 instruction set
14204          support.  (This supersets FMA4, AVX, XOP, LWP, AES, PCL_MUL,
14205          CX16, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM
14206          and 64-bit instruction set extensions.)
14207     'bdver2'
14208          AMD Family 15h core based CPUs with x86-64 instruction set
14209          support.  (This supersets BMI, TBM, F16C, FMA, FMA4, AVX, XOP,
14210          LWP, AES, PCL_MUL, CX16, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3,
14211          SSE4.1, SSE4.2, ABM and 64-bit instruction set extensions.)
14212     'bdver3'
14213          AMD Family 15h core based CPUs with x86-64 instruction set
14214          support.  (This supersets BMI, TBM, F16C, FMA, FMA4, FSGSBASE,
14215          AVX, XOP, LWP, AES, PCL_MUL, CX16, MMX, SSE, SSE2, SSE3,
14216          SSE4A, SSSE3, SSE4.1, SSE4.2, ABM and 64-bit instruction set
14217          extensions.
14218     'bdver4'
14219          AMD Family 15h core based CPUs with x86-64 instruction set
14220          support.  (This supersets BMI, BMI2, TBM, F16C, FMA, FMA4,
14221          FSGSBASE, AVX, AVX2, XOP, LWP, AES, PCL_MUL, CX16, MOVBE, MMX,
14222          SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM and 64-bit
14223          instruction set extensions.
14224
14225     'btver1'
14226          CPUs based on AMD Family 14h cores with x86-64 instruction set
14227          support.  (This supersets MMX, SSE, SSE2, SSE3, SSSE3, SSE4A,
14228          CX16, ABM and 64-bit instruction set extensions.)
14229
14230     'btver2'
14231          CPUs based on AMD Family 16h cores with x86-64 instruction set
14232          support.  This includes MOVBE, F16C, BMI, AVX, PCL_MUL, AES,
14233          SSE4.2, SSE4.1, CX16, ABM, SSE4A, SSSE3, SSE3, SSE2, SSE, MMX
14234          and 64-bit instruction set extensions.
14235
14236     'winchip-c6'
14237          IDT WinChip C6 CPU, dealt in same way as i486 with additional
14238          MMX instruction set support.
14239
14240     'winchip2'
14241          IDT WinChip 2 CPU, dealt in same way as i486 with additional
14242          MMX and 3DNow! instruction set support.
14243
14244     'c3'
14245          VIA C3 CPU with MMX and 3DNow! instruction set support.  (No
14246          scheduling is implemented for this chip.)
14247
14248     'c3-2'
14249          VIA C3-2 (Nehemiah/C5XL) CPU with MMX and SSE instruction set
14250          support.  (No scheduling is implemented for this chip.)
14251
14252     'geode'
14253          AMD Geode embedded processor with MMX and 3DNow! instruction
14254          set support.
14255
14256'-mtune=CPU-TYPE'
14257     Tune to CPU-TYPE everything applicable about the generated code,
14258     except for the ABI and the set of available instructions.  While
14259     picking a specific CPU-TYPE schedules things appropriately for that
14260     particular chip, the compiler does not generate any code that
14261     cannot run on the default machine type unless you use a
14262     '-march=CPU-TYPE' option.  For example, if GCC is configured for
14263     i686-pc-linux-gnu then '-mtune=pentium4' generates code that is
14264     tuned for Pentium 4 but still runs on i686 machines.
14265
14266     The choices for CPU-TYPE are the same as for '-march'.  In
14267     addition, '-mtune' supports 2 extra choices for CPU-TYPE:
14268
14269     'generic'
14270          Produce code optimized for the most common IA32/AMD64/EM64T
14271          processors.  If you know the CPU on which your code will run,
14272          then you should use the corresponding '-mtune' or '-march'
14273          option instead of '-mtune=generic'.  But, if you do not know
14274          exactly what CPU users of your application will have, then you
14275          should use this option.
14276
14277          As new processors are deployed in the marketplace, the
14278          behavior of this option will change.  Therefore, if you
14279          upgrade to a newer version of GCC, code generation controlled
14280          by this option will change to reflect the processors that are
14281          most common at the time that version of GCC is released.
14282
14283          There is no '-march=generic' option because '-march' indicates
14284          the instruction set the compiler can use, and there is no
14285          generic instruction set applicable to all processors.  In
14286          contrast, '-mtune' indicates the processor (or, in this case,
14287          collection of processors) for which the code is optimized.
14288
14289     'intel'
14290          Produce code optimized for the most current Intel processors,
14291          which are Haswell and Silvermont for this version of GCC. If
14292          you know the CPU on which your code will run, then you should
14293          use the corresponding '-mtune' or '-march' option instead of
14294          '-mtune=intel'.  But, if you want your application performs
14295          better on both Haswell and Silvermont, then you should use
14296          this option.
14297
14298          As new Intel processors are deployed in the marketplace, the
14299          behavior of this option will change.  Therefore, if you
14300          upgrade to a newer version of GCC, code generation controlled
14301          by this option will change to reflect the most current Intel
14302          processors at the time that version of GCC is released.
14303
14304          There is no '-march=intel' option because '-march' indicates
14305          the instruction set the compiler can use, and there is no
14306          common instruction set applicable to all processors.  In
14307          contrast, '-mtune' indicates the processor (or, in this case,
14308          collection of processors) for which the code is optimized.
14309
14310'-mcpu=CPU-TYPE'
14311     A deprecated synonym for '-mtune'.
14312
14313'-mfpmath=UNIT'
14314     Generate floating-point arithmetic for selected unit UNIT.  The
14315     choices for UNIT are:
14316
14317     '387'
14318          Use the standard 387 floating-point coprocessor present on the
14319          majority of chips and emulated otherwise.  Code compiled with
14320          this option runs almost everywhere.  The temporary results are
14321          computed in 80-bit precision instead of the precision
14322          specified by the type, resulting in slightly different results
14323          compared to most of other chips.  See '-ffloat-store' for more
14324          detailed description.
14325
14326          This is the default choice for i386 compiler.
14327
14328     'sse'
14329          Use scalar floating-point instructions present in the SSE
14330          instruction set.  This instruction set is supported by Pentium
14331          III and newer chips, and in the AMD line by Athlon-4, Athlon
14332          XP and Athlon MP chips.  The earlier version of the SSE
14333          instruction set supports only single-precision arithmetic,
14334          thus the double and extended-precision arithmetic are still
14335          done using 387.  A later version, present only in Pentium 4
14336          and AMD x86-64 chips, supports double-precision arithmetic
14337          too.
14338
14339          For the i386 compiler, you must use '-march=CPU-TYPE', '-msse'
14340          or '-msse2' switches to enable SSE extensions and make this
14341          option effective.  For the x86-64 compiler, these extensions
14342          are enabled by default.
14343
14344          The resulting code should be considerably faster in the
14345          majority of cases and avoid the numerical instability problems
14346          of 387 code, but may break some existing code that expects
14347          temporaries to be 80 bits.
14348
14349          This is the default choice for the x86-64 compiler.
14350
14351     'sse,387'
14352     'sse+387'
14353     'both'
14354          Attempt to utilize both instruction sets at once.  This
14355          effectively doubles the amount of available registers, and on
14356          chips with separate execution units for 387 and SSE the
14357          execution resources too.  Use this option with care, as it is
14358          still experimental, because the GCC register allocator does
14359          not model separate functional units well, resulting in
14360          unstable performance.
14361
14362'-masm=DIALECT'
14363     Output assembly instructions using selected DIALECT.  Supported
14364     choices are 'intel' or 'att' (the default).  Darwin does not
14365     support 'intel'.
14366
14367'-mieee-fp'
14368'-mno-ieee-fp'
14369     Control whether or not the compiler uses IEEE floating-point
14370     comparisons.  These correctly handle the case where the result of a
14371     comparison is unordered.
14372
14373'-msoft-float'
14374     Generate output containing library calls for floating point.
14375
14376     *Warning:* the requisite libraries are not part of GCC.  Normally
14377     the facilities of the machine's usual C compiler are used, but this
14378     can't be done directly in cross-compilation.  You must make your
14379     own arrangements to provide suitable library functions for
14380     cross-compilation.
14381
14382     On machines where a function returns floating-point results in the
14383     80387 register stack, some floating-point opcodes may be emitted
14384     even if '-msoft-float' is used.
14385
14386'-mno-fp-ret-in-387'
14387     Do not use the FPU registers for return values of functions.
14388
14389     The usual calling convention has functions return values of types
14390     'float' and 'double' in an FPU register, even if there is no FPU.
14391     The idea is that the operating system should emulate an FPU.
14392
14393     The option '-mno-fp-ret-in-387' causes such values to be returned
14394     in ordinary CPU registers instead.
14395
14396'-mno-fancy-math-387'
14397     Some 387 emulators do not support the 'sin', 'cos' and 'sqrt'
14398     instructions for the 387.  Specify this option to avoid generating
14399     those instructions.  This option is the default on FreeBSD, OpenBSD
14400     and NetBSD.  This option is overridden when '-march' indicates that
14401     the target CPU always has an FPU and so the instruction does not
14402     need emulation.  These instructions are not generated unless you
14403     also use the '-funsafe-math-optimizations' switch.
14404
14405'-malign-double'
14406'-mno-align-double'
14407     Control whether GCC aligns 'double', 'long double', and 'long long'
14408     variables on a two-word boundary or a one-word boundary.  Aligning
14409     'double' variables on a two-word boundary produces code that runs
14410     somewhat faster on a Pentium at the expense of more memory.
14411
14412     On x86-64, '-malign-double' is enabled by default.
14413
14414     *Warning:* if you use the '-malign-double' switch, structures
14415     containing the above types are aligned differently than the
14416     published application binary interface specifications for the 386
14417     and are not binary compatible with structures in code compiled
14418     without that switch.
14419
14420'-m96bit-long-double'
14421'-m128bit-long-double'
14422     These switches control the size of 'long double' type.  The i386
14423     application binary interface specifies the size to be 96 bits, so
14424     '-m96bit-long-double' is the default in 32-bit mode.
14425
14426     Modern architectures (Pentium and newer) prefer 'long double' to be
14427     aligned to an 8- or 16-byte boundary.  In arrays or structures
14428     conforming to the ABI, this is not possible.  So specifying
14429     '-m128bit-long-double' aligns 'long double' to a 16-byte boundary
14430     by padding the 'long double' with an additional 32-bit zero.
14431
14432     In the x86-64 compiler, '-m128bit-long-double' is the default
14433     choice as its ABI specifies that 'long double' is aligned on
14434     16-byte boundary.
14435
14436     Notice that neither of these options enable any extra precision
14437     over the x87 standard of 80 bits for a 'long double'.
14438
14439     *Warning:* if you override the default value for your target ABI,
14440     this changes the size of structures and arrays containing 'long
14441     double' variables, as well as modifying the function calling
14442     convention for functions taking 'long double'.  Hence they are not
14443     binary-compatible with code compiled without that switch.
14444
14445'-mlong-double-64'
14446'-mlong-double-80'
14447'-mlong-double-128'
14448     These switches control the size of 'long double' type.  A size of
14449     64 bits makes the 'long double' type equivalent to the 'double'
14450     type.  This is the default for 32-bit Bionic C library.  A size of
14451     128 bits makes the 'long double' type equivalent to the
14452     '__float128' type.  This is the default for 64-bit Bionic C
14453     library.
14454
14455     *Warning:* if you override the default value for your target ABI,
14456     this changes the size of structures and arrays containing 'long
14457     double' variables, as well as modifying the function calling
14458     convention for functions taking 'long double'.  Hence they are not
14459     binary-compatible with code compiled without that switch.
14460
14461'-mlarge-data-threshold=THRESHOLD'
14462     When '-mcmodel=medium' is specified, data objects larger than
14463     THRESHOLD are placed in the large data section.  This value must be
14464     the same across all objects linked into the binary, and defaults to
14465     65535.
14466
14467'-mrtd'
14468     Use a different function-calling convention, in which functions
14469     that take a fixed number of arguments return with the 'ret NUM'
14470     instruction, which pops their arguments while returning.  This
14471     saves one instruction in the caller since there is no need to pop
14472     the arguments there.
14473
14474     You can specify that an individual function is called with this
14475     calling sequence with the function attribute 'stdcall'.  You can
14476     also override the '-mrtd' option by using the function attribute
14477     'cdecl'.  *Note Function Attributes::.
14478
14479     *Warning:* this calling convention is incompatible with the one
14480     normally used on Unix, so you cannot use it if you need to call
14481     libraries compiled with the Unix compiler.
14482
14483     Also, you must provide function prototypes for all functions that
14484     take variable numbers of arguments (including 'printf'); otherwise
14485     incorrect code is generated for calls to those functions.
14486
14487     In addition, seriously incorrect code results if you call a
14488     function with too many arguments.  (Normally, extra arguments are
14489     harmlessly ignored.)
14490
14491'-mregparm=NUM'
14492     Control how many registers are used to pass integer arguments.  By
14493     default, no registers are used to pass arguments, and at most 3
14494     registers can be used.  You can control this behavior for a
14495     specific function by using the function attribute 'regparm'.  *Note
14496     Function Attributes::.
14497
14498     *Warning:* if you use this switch, and NUM is nonzero, then you
14499     must build all modules with the same value, including any
14500     libraries.  This includes the system libraries and startup modules.
14501
14502'-msseregparm'
14503     Use SSE register passing conventions for float and double arguments
14504     and return values.  You can control this behavior for a specific
14505     function by using the function attribute 'sseregparm'.  *Note
14506     Function Attributes::.
14507
14508     *Warning:* if you use this switch then you must build all modules
14509     with the same value, including any libraries.  This includes the
14510     system libraries and startup modules.
14511
14512'-mvect8-ret-in-mem'
14513     Return 8-byte vectors in memory instead of MMX registers.  This is
14514     the default on Solaris 8 and 9 and VxWorks to match the ABI of the
14515     Sun Studio compilers until version 12.  Later compiler versions
14516     (starting with Studio 12 Update 1) follow the ABI used by other x86
14517     targets, which is the default on Solaris 10 and later.  _Only_ use
14518     this option if you need to remain compatible with existing code
14519     produced by those previous compiler versions or older versions of
14520     GCC.
14521
14522'-mpc32'
14523'-mpc64'
14524'-mpc80'
14525
14526     Set 80387 floating-point precision to 32, 64 or 80 bits.  When
14527     '-mpc32' is specified, the significands of results of
14528     floating-point operations are rounded to 24 bits (single
14529     precision); '-mpc64' rounds the significands of results of
14530     floating-point operations to 53 bits (double precision) and
14531     '-mpc80' rounds the significands of results of floating-point
14532     operations to 64 bits (extended double precision), which is the
14533     default.  When this option is used, floating-point operations in
14534     higher precisions are not available to the programmer without
14535     setting the FPU control word explicitly.
14536
14537     Setting the rounding of floating-point operations to less than the
14538     default 80 bits can speed some programs by 2% or more.  Note that
14539     some mathematical libraries assume that extended-precision (80-bit)
14540     floating-point operations are enabled by default; routines in such
14541     libraries could suffer significant loss of accuracy, typically
14542     through so-called "catastrophic cancellation", when this option is
14543     used to set the precision to less than extended precision.
14544
14545'-mstackrealign'
14546     Realign the stack at entry.  On the Intel x86, the '-mstackrealign'
14547     option generates an alternate prologue and epilogue that realigns
14548     the run-time stack if necessary.  This supports mixing legacy codes
14549     that keep 4-byte stack alignment with modern codes that keep
14550     16-byte stack alignment for SSE compatibility.  See also the
14551     attribute 'force_align_arg_pointer', applicable to individual
14552     functions.
14553
14554'-mpreferred-stack-boundary=NUM'
14555     Attempt to keep the stack boundary aligned to a 2 raised to NUM
14556     byte boundary.  If '-mpreferred-stack-boundary' is not specified,
14557     the default is 4 (16 bytes or 128 bits).
14558
14559     *Warning:* When generating code for the x86-64 architecture with
14560     SSE extensions disabled, '-mpreferred-stack-boundary=3' can be used
14561     to keep the stack boundary aligned to 8 byte boundary.  Since
14562     x86-64 ABI require 16 byte stack alignment, this is ABI
14563     incompatible and intended to be used in controlled environment
14564     where stack space is important limitation.  This option will lead
14565     to wrong code when functions compiled with 16 byte stack alignment
14566     (such as functions from a standard library) are called with
14567     misaligned stack.  In this case, SSE instructions may lead to
14568     misaligned memory access traps.  In addition, variable arguments
14569     will be handled incorrectly for 16 byte aligned objects (including
14570     x87 long double and __int128), leading to wrong results.  You must
14571     build all modules with '-mpreferred-stack-boundary=3', including
14572     any libraries.  This includes the system libraries and startup
14573     modules.
14574
14575'-mincoming-stack-boundary=NUM'
14576     Assume the incoming stack is aligned to a 2 raised to NUM byte
14577     boundary.  If '-mincoming-stack-boundary' is not specified, the one
14578     specified by '-mpreferred-stack-boundary' is used.
14579
14580     On Pentium and Pentium Pro, 'double' and 'long double' values
14581     should be aligned to an 8-byte boundary (see '-malign-double') or
14582     suffer significant run time performance penalties.  On Pentium III,
14583     the Streaming SIMD Extension (SSE) data type '__m128' may not work
14584     properly if it is not 16-byte aligned.
14585
14586     To ensure proper alignment of this values on the stack, the stack
14587     boundary must be as aligned as that required by any value stored on
14588     the stack.  Further, every function must be generated such that it
14589     keeps the stack aligned.  Thus calling a function compiled with a
14590     higher preferred stack boundary from a function compiled with a
14591     lower preferred stack boundary most likely misaligns the stack.  It
14592     is recommended that libraries that use callbacks always use the
14593     default setting.
14594
14595     This extra alignment does consume extra stack space, and generally
14596     increases code size.  Code that is sensitive to stack space usage,
14597     such as embedded systems and operating system kernels, may want to
14598     reduce the preferred alignment to '-mpreferred-stack-boundary=2'.
14599
14600'-mmmx'
14601'-mno-mmx'
14602'-msse'
14603'-mno-sse'
14604'-msse2'
14605'-mno-sse2'
14606'-msse3'
14607'-mno-sse3'
14608'-mssse3'
14609'-mno-ssse3'
14610'-msse4.1'
14611'-mno-sse4.1'
14612'-msse4.2'
14613'-mno-sse4.2'
14614'-msse4'
14615'-mno-sse4'
14616'-mavx'
14617'-mno-avx'
14618'-mavx2'
14619'-mno-avx2'
14620'-mavx512f'
14621'-mno-avx512f'
14622'-mavx512pf'
14623'-mno-avx512pf'
14624'-mavx512er'
14625'-mno-avx512er'
14626'-mavx512cd'
14627'-mno-avx512cd'
14628'-msha'
14629'-mno-sha'
14630'-maes'
14631'-mno-aes'
14632'-mpclmul'
14633'-mno-pclmul'
14634'-mfsgsbase'
14635'-mno-fsgsbase'
14636'-mrdrnd'
14637'-mno-rdrnd'
14638'-mf16c'
14639'-mno-f16c'
14640'-mfma'
14641'-mno-fma'
14642'-mprefetchwt1'
14643'-mno-prefetchwt1'
14644'-msse4a'
14645'-mno-sse4a'
14646'-mfma4'
14647'-mno-fma4'
14648'-mxop'
14649'-mno-xop'
14650'-mlwp'
14651'-mno-lwp'
14652'-m3dnow'
14653'-mno-3dnow'
14654'-mpopcnt'
14655'-mno-popcnt'
14656'-mabm'
14657'-mno-abm'
14658'-mbmi'
14659'-mbmi2'
14660'-mno-bmi'
14661'-mno-bmi2'
14662'-mlzcnt'
14663'-mno-lzcnt'
14664'-mfxsr'
14665'-mxsave'
14666'-mxsaveopt'
14667'-mrtm'
14668'-mtbm'
14669'-mno-tbm'
14670     These switches enable or disable the use of instructions in the
14671     MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, AVX, AVX2, AVX512F, AVX512PF,
14672     AVX512ER, AVX512CD, SHA, AES, PCLMUL, FSGSBASE, RDRND, F16C, FMA,
14673     SSE4A, FMA4, XOP, LWP, ABM, BMI, BMI2, FXSR, XSAVE, XSAVEOPT,
14674     LZCNT, RTM, or 3DNow! extended instruction sets.  These extensions
14675     are also available as built-in functions: see *note X86 Built-in
14676     Functions::, for details of the functions enabled and disabled by
14677     these switches.
14678
14679     To generate SSE/SSE2 instructions automatically from floating-point
14680     code (as opposed to 387 instructions), see '-mfpmath=sse'.
14681
14682     GCC depresses SSEx instructions when '-mavx' is used.  Instead, it
14683     generates new AVX instructions or AVX equivalence for all SSEx
14684     instructions when needed.
14685
14686     These options enable GCC to use these extended instructions in
14687     generated code, even without '-mfpmath=sse'.  Applications that
14688     perform run-time CPU detection must compile separate files for each
14689     supported architecture, using the appropriate flags.  In
14690     particular, the file containing the CPU detection code should be
14691     compiled without these options.
14692
14693'-mdump-tune-features'
14694     This option instructs GCC to dump the names of the x86 performance
14695     tuning features and default settings.  The names can be used in
14696     '-mtune-ctrl=FEATURE-LIST'.
14697
14698'-mtune-ctrl=FEATURE-LIST'
14699     This option is used to do fine grain control of x86 code generation
14700     features.  FEATURE-LIST is a comma separated list of FEATURE names.
14701     See also '-mdump-tune-features'.  When specified, the FEATURE will
14702     be turned on if it is not preceded with '^', otherwise, it will be
14703     turned off.  '-mtune-ctrl=FEATURE-LIST' is intended to be used by
14704     GCC developers.  Using it may lead to code paths not covered by
14705     testing and can potentially result in compiler ICEs or runtime
14706     errors.
14707
14708'-mno-default'
14709     This option instructs GCC to turn off all tunable features.  See
14710     also '-mtune-ctrl=FEATURE-LIST' and '-mdump-tune-features'.
14711
14712'-mcld'
14713     This option instructs GCC to emit a 'cld' instruction in the
14714     prologue of functions that use string instructions.  String
14715     instructions depend on the DF flag to select between autoincrement
14716     or autodecrement mode.  While the ABI specifies the DF flag to be
14717     cleared on function entry, some operating systems violate this
14718     specification by not clearing the DF flag in their exception
14719     dispatchers.  The exception handler can be invoked with the DF flag
14720     set, which leads to wrong direction mode when string instructions
14721     are used.  This option can be enabled by default on 32-bit x86
14722     targets by configuring GCC with the '--enable-cld' configure
14723     option.  Generation of 'cld' instructions can be suppressed with
14724     the '-mno-cld' compiler option in this case.
14725
14726'-mvzeroupper'
14727     This option instructs GCC to emit a 'vzeroupper' instruction before
14728     a transfer of control flow out of the function to minimize the AVX
14729     to SSE transition penalty as well as remove unnecessary 'zeroupper'
14730     intrinsics.
14731
14732'-mprefer-avx128'
14733     This option instructs GCC to use 128-bit AVX instructions instead
14734     of 256-bit AVX instructions in the auto-vectorizer.
14735
14736'-mcx16'
14737     This option enables GCC to generate 'CMPXCHG16B' instructions.
14738     'CMPXCHG16B' allows for atomic operations on 128-bit double
14739     quadword (or oword) data types.  This is useful for high-resolution
14740     counters that can be updated by multiple processors (or cores).
14741     This instruction is generated as part of atomic built-in functions:
14742     see *note __sync Builtins:: or *note __atomic Builtins:: for
14743     details.
14744
14745'-msahf'
14746     This option enables generation of 'SAHF' instructions in 64-bit
14747     code.  Early Intel Pentium 4 CPUs with Intel 64 support, prior to
14748     the introduction of Pentium 4 G1 step in December 2005, lacked the
14749     'LAHF' and 'SAHF' instructions which were supported by AMD64.
14750     These are load and store instructions, respectively, for certain
14751     status flags.  In 64-bit mode, the 'SAHF' instruction is used to
14752     optimize 'fmod', 'drem', and 'remainder' built-in functions; see
14753     *note Other Builtins:: for details.
14754
14755'-mmovbe'
14756     This option enables use of the 'movbe' instruction to implement
14757     '__builtin_bswap32' and '__builtin_bswap64'.
14758
14759'-mcrc32'
14760     This option enables built-in functions '__builtin_ia32_crc32qi',
14761     '__builtin_ia32_crc32hi', '__builtin_ia32_crc32si' and
14762     '__builtin_ia32_crc32di' to generate the 'crc32' machine
14763     instruction.
14764
14765'-mrecip'
14766     This option enables use of 'RCPSS' and 'RSQRTSS' instructions (and
14767     their vectorized variants 'RCPPS' and 'RSQRTPS') with an additional
14768     Newton-Raphson step to increase precision instead of 'DIVSS' and
14769     'SQRTSS' (and their vectorized variants) for single-precision
14770     floating-point arguments.  These instructions are generated only
14771     when '-funsafe-math-optimizations' is enabled together with
14772     '-finite-math-only' and '-fno-trapping-math'.  Note that while the
14773     throughput of the sequence is higher than the throughput of the
14774     non-reciprocal instruction, the precision of the sequence can be
14775     decreased by up to 2 ulp (i.e.  the inverse of 1.0 equals
14776     0.99999994).
14777
14778     Note that GCC implements '1.0f/sqrtf(X)' in terms of 'RSQRTSS' (or
14779     'RSQRTPS') already with '-ffast-math' (or the above option
14780     combination), and doesn't need '-mrecip'.
14781
14782     Also note that GCC emits the above sequence with additional
14783     Newton-Raphson step for vectorized single-float division and
14784     vectorized 'sqrtf(X)' already with '-ffast-math' (or the above
14785     option combination), and doesn't need '-mrecip'.
14786
14787'-mrecip=OPT'
14788     This option controls which reciprocal estimate instructions may be
14789     used.  OPT is a comma-separated list of options, which may be
14790     preceded by a '!' to invert the option:
14791
14792     'all'
14793          Enable all estimate instructions.
14794
14795     'default'
14796          Enable the default instructions, equivalent to '-mrecip'.
14797
14798     'none'
14799          Disable all estimate instructions, equivalent to '-mno-recip'.
14800
14801     'div'
14802          Enable the approximation for scalar division.
14803
14804     'vec-div'
14805          Enable the approximation for vectorized division.
14806
14807     'sqrt'
14808          Enable the approximation for scalar square root.
14809
14810     'vec-sqrt'
14811          Enable the approximation for vectorized square root.
14812
14813     So, for example, '-mrecip=all,!sqrt' enables all of the reciprocal
14814     approximations, except for square root.
14815
14816'-mveclibabi=TYPE'
14817     Specifies the ABI type to use for vectorizing intrinsics using an
14818     external library.  Supported values for TYPE are 'svml' for the
14819     Intel short vector math library and 'acml' for the AMD math core
14820     library.  To use this option, both '-ftree-vectorize' and
14821     '-funsafe-math-optimizations' have to be enabled, and an SVML or
14822     ACML ABI-compatible library must be specified at link time.
14823
14824     GCC currently emits calls to 'vmldExp2', 'vmldLn2', 'vmldLog102',
14825     'vmldLog102', 'vmldPow2', 'vmldTanh2', 'vmldTan2', 'vmldAtan2',
14826     'vmldAtanh2', 'vmldCbrt2', 'vmldSinh2', 'vmldSin2', 'vmldAsinh2',
14827     'vmldAsin2', 'vmldCosh2', 'vmldCos2', 'vmldAcosh2', 'vmldAcos2',
14828     'vmlsExp4', 'vmlsLn4', 'vmlsLog104', 'vmlsLog104', 'vmlsPow4',
14829     'vmlsTanh4', 'vmlsTan4', 'vmlsAtan4', 'vmlsAtanh4', 'vmlsCbrt4',
14830     'vmlsSinh4', 'vmlsSin4', 'vmlsAsinh4', 'vmlsAsin4', 'vmlsCosh4',
14831     'vmlsCos4', 'vmlsAcosh4' and 'vmlsAcos4' for corresponding function
14832     type when '-mveclibabi=svml' is used, and '__vrd2_sin',
14833     '__vrd2_cos', '__vrd2_exp', '__vrd2_log', '__vrd2_log2',
14834     '__vrd2_log10', '__vrs4_sinf', '__vrs4_cosf', '__vrs4_expf',
14835     '__vrs4_logf', '__vrs4_log2f', '__vrs4_log10f' and '__vrs4_powf'
14836     for the corresponding function type when '-mveclibabi=acml' is
14837     used.
14838
14839'-mabi=NAME'
14840     Generate code for the specified calling convention.  Permissible
14841     values are 'sysv' for the ABI used on GNU/Linux and other systems,
14842     and 'ms' for the Microsoft ABI. The default is to use the Microsoft
14843     ABI when targeting Microsoft Windows and the SysV ABI on all other
14844     systems.  You can control this behavior for a specific function by
14845     using the function attribute 'ms_abi'/'sysv_abi'.  *Note Function
14846     Attributes::.
14847
14848'-mtls-dialect=TYPE'
14849     Generate code to access thread-local storage using the 'gnu' or
14850     'gnu2' conventions.  'gnu' is the conservative default; 'gnu2' is
14851     more efficient, but it may add compile- and run-time requirements
14852     that cannot be satisfied on all systems.
14853
14854'-mpush-args'
14855'-mno-push-args'
14856     Use PUSH operations to store outgoing parameters.  This method is
14857     shorter and usually equally fast as method using SUB/MOV operations
14858     and is enabled by default.  In some cases disabling it may improve
14859     performance because of improved scheduling and reduced
14860     dependencies.
14861
14862'-maccumulate-outgoing-args'
14863     If enabled, the maximum amount of space required for outgoing
14864     arguments is computed in the function prologue.  This is faster on
14865     most modern CPUs because of reduced dependencies, improved
14866     scheduling and reduced stack usage when the preferred stack
14867     boundary is not equal to 2.  The drawback is a notable increase in
14868     code size.  This switch implies '-mno-push-args'.
14869
14870'-mthreads'
14871     Support thread-safe exception handling on MinGW. Programs that rely
14872     on thread-safe exception handling must compile and link all code
14873     with the '-mthreads' option.  When compiling, '-mthreads' defines
14874     '-D_MT'; when linking, it links in a special thread helper library
14875     '-lmingwthrd' which cleans up per-thread exception-handling data.
14876
14877'-mno-align-stringops'
14878     Do not align the destination of inlined string operations.  This
14879     switch reduces code size and improves performance in case the
14880     destination is already aligned, but GCC doesn't know about it.
14881
14882'-minline-all-stringops'
14883     By default GCC inlines string operations only when the destination
14884     is known to be aligned to least a 4-byte boundary.  This enables
14885     more inlining and increases code size, but may improve performance
14886     of code that depends on fast 'memcpy', 'strlen', and 'memset' for
14887     short lengths.
14888
14889'-minline-stringops-dynamically'
14890     For string operations of unknown size, use run-time checks with
14891     inline code for small blocks and a library call for large blocks.
14892
14893'-mstringop-strategy=ALG'
14894     Override the internal decision heuristic for the particular
14895     algorithm to use for inlining string operations.  The allowed
14896     values for ALG are:
14897
14898     'rep_byte'
14899     'rep_4byte'
14900     'rep_8byte'
14901          Expand using i386 'rep' prefix of the specified size.
14902
14903     'byte_loop'
14904     'loop'
14905     'unrolled_loop'
14906          Expand into an inline loop.
14907
14908     'libcall'
14909          Always use a library call.
14910
14911'-mmemcpy-strategy=STRATEGY'
14912     Override the internal decision heuristic to decide if
14913     '__builtin_memcpy' should be inlined and what inline algorithm to
14914     use when the expected size of the copy operation is known.
14915     STRATEGY is a comma-separated list of ALG:MAX_SIZE:DEST_ALIGN
14916     triplets.  ALG is specified in '-mstringop-strategy', MAX_SIZE
14917     specifies the max byte size with which inline algorithm ALG is
14918     allowed.  For the last triplet, the MAX_SIZE must be '-1'.  The
14919     MAX_SIZE of the triplets in the list must be specified in
14920     increasing order.  The minimal byte size for ALG is '0' for the
14921     first triplet and 'MAX_SIZE + 1' of the preceding range.
14922
14923'-mmemset-strategy=STRATEGY'
14924     The option is similar to '-mmemcpy-strategy=' except that it is to
14925     control '__builtin_memset' expansion.
14926
14927'-momit-leaf-frame-pointer'
14928     Don't keep the frame pointer in a register for leaf functions.
14929     This avoids the instructions to save, set up, and restore frame
14930     pointers and makes an extra register available in leaf functions.
14931     The option '-fomit-leaf-frame-pointer' removes the frame pointer
14932     for leaf functions, which might make debugging harder.
14933
14934'-mtls-direct-seg-refs'
14935'-mno-tls-direct-seg-refs'
14936     Controls whether TLS variables may be accessed with offsets from
14937     the TLS segment register ('%gs' for 32-bit, '%fs' for 64-bit), or
14938     whether the thread base pointer must be added.  Whether or not this
14939     is valid depends on the operating system, and whether it maps the
14940     segment to cover the entire TLS area.
14941
14942     For systems that use the GNU C Library, the default is on.
14943
14944'-msse2avx'
14945'-mno-sse2avx'
14946     Specify that the assembler should encode SSE instructions with VEX
14947     prefix.  The option '-mavx' turns this on by default.
14948
14949'-mfentry'
14950'-mno-fentry'
14951     If profiling is active ('-pg'), put the profiling counter call
14952     before the prologue.  Note: On x86 architectures the attribute
14953     'ms_hook_prologue' isn't possible at the moment for '-mfentry' and
14954     '-pg'.
14955
14956'-m8bit-idiv'
14957'-mno-8bit-idiv'
14958     On some processors, like Intel Atom, 8-bit unsigned integer divide
14959     is much faster than 32-bit/64-bit integer divide.  This option
14960     generates a run-time check.  If both dividend and divisor are
14961     within range of 0 to 255, 8-bit unsigned integer divide is used
14962     instead of 32-bit/64-bit integer divide.
14963
14964'-mavx256-split-unaligned-load'
14965'-mavx256-split-unaligned-store'
14966     Split 32-byte AVX unaligned load and store.
14967
14968'-mstack-protector-guard=GUARD'
14969     Generate stack protection code using canary at GUARD.  Supported
14970     locations are 'global' for global canary or 'tls' for per-thread
14971     canary in the TLS block (the default).  This option has effect only
14972     when '-fstack-protector' or '-fstack-protector-all' is specified.
14973
14974 These '-m' switches are supported in addition to the above on x86-64
14975processors in 64-bit environments.
14976
14977'-m32'
14978'-m64'
14979'-mx32'
14980'-m16'
14981     Generate code for a 16-bit, 32-bit or 64-bit environment.  The
14982     '-m32' option sets 'int', 'long', and pointer types to 32 bits, and
14983     generates code that runs on any i386 system.
14984
14985     The '-m64' option sets 'int' to 32 bits and 'long' and pointer
14986     types to 64 bits, and generates code for the x86-64 architecture.
14987     For Darwin only the '-m64' option also turns off the '-fno-pic' and
14988     '-mdynamic-no-pic' options.
14989
14990     The '-mx32' option sets 'int', 'long', and pointer types to 32
14991     bits, and generates code for the x86-64 architecture.
14992
14993     The '-m16' option is the same as '-m32', except for that it outputs
14994     the '.code16gcc' assembly directive at the beginning of the
14995     assembly output so that the binary can run in 16-bit mode.
14996
14997'-mno-red-zone'
14998     Do not use a so-called "red zone" for x86-64 code.  The red zone is
14999     mandated by the x86-64 ABI; it is a 128-byte area beyond the
15000     location of the stack pointer that is not modified by signal or
15001     interrupt handlers and therefore can be used for temporary data
15002     without adjusting the stack pointer.  The flag '-mno-red-zone'
15003     disables this red zone.
15004
15005'-mcmodel=small'
15006     Generate code for the small code model: the program and its symbols
15007     must be linked in the lower 2 GB of the address space.  Pointers
15008     are 64 bits.  Programs can be statically or dynamically linked.
15009     This is the default code model.
15010
15011'-mcmodel=kernel'
15012     Generate code for the kernel code model.  The kernel runs in the
15013     negative 2 GB of the address space.  This model has to be used for
15014     Linux kernel code.
15015
15016'-mcmodel=medium'
15017     Generate code for the medium model: the program is linked in the
15018     lower 2 GB of the address space.  Small symbols are also placed
15019     there.  Symbols with sizes larger than '-mlarge-data-threshold' are
15020     put into large data or BSS sections and can be located above 2GB.
15021     Programs can be statically or dynamically linked.
15022
15023'-mcmodel=large'
15024     Generate code for the large model.  This model makes no assumptions
15025     about addresses and sizes of sections.
15026
15027'-maddress-mode=long'
15028     Generate code for long address mode.  This is only supported for
15029     64-bit and x32 environments.  It is the default address mode for
15030     64-bit environments.
15031
15032'-maddress-mode=short'
15033     Generate code for short address mode.  This is only supported for
15034     32-bit and x32 environments.  It is the default address mode for
15035     32-bit and x32 environments.
15036
15037
15038File: gcc.info,  Node: i386 and x86-64 Windows Options,  Next: IA-64 Options,  Prev: i386 and x86-64 Options,  Up: Submodel Options
15039
150403.17.18 i386 and x86-64 Windows Options
15041---------------------------------------
15042
15043These additional options are available for Microsoft Windows targets:
15044
15045'-mconsole'
15046     This option specifies that a console application is to be
15047     generated, by instructing the linker to set the PE header subsystem
15048     type required for console applications.  This option is available
15049     for Cygwin and MinGW targets and is enabled by default on those
15050     targets.
15051
15052'-mdll'
15053     This option is available for Cygwin and MinGW targets.  It
15054     specifies that a DLL--a dynamic link library--is to be generated,
15055     enabling the selection of the required runtime startup object and
15056     entry point.
15057
15058'-mnop-fun-dllimport'
15059     This option is available for Cygwin and MinGW targets.  It
15060     specifies that the 'dllimport' attribute should be ignored.
15061
15062'-mthread'
15063     This option is available for MinGW targets.  It specifies that
15064     MinGW-specific thread support is to be used.
15065
15066'-municode'
15067     This option is available for MinGW-w64 targets.  It causes the
15068     'UNICODE' preprocessor macro to be predefined, and chooses
15069     Unicode-capable runtime startup code.
15070
15071'-mwin32'
15072     This option is available for Cygwin and MinGW targets.  It
15073     specifies that the typical Microsoft Windows predefined macros are
15074     to be set in the pre-processor, but does not influence the choice
15075     of runtime library/startup code.
15076
15077'-mwindows'
15078     This option is available for Cygwin and MinGW targets.  It
15079     specifies that a GUI application is to be generated by instructing
15080     the linker to set the PE header subsystem type appropriately.
15081
15082'-fno-set-stack-executable'
15083     This option is available for MinGW targets.  It specifies that the
15084     executable flag for the stack used by nested functions isn't set.
15085     This is necessary for binaries running in kernel mode of Microsoft
15086     Windows, as there the User32 API, which is used to set executable
15087     privileges, isn't available.
15088
15089'-fwritable-relocated-rdata'
15090     This option is available for MinGW and Cygwin targets.  It
15091     specifies that relocated-data in read-only section is put into
15092     .data section.  This is a necessary for older runtimes not
15093     supporting modification of .rdata sections for pseudo-relocation.
15094
15095'-mpe-aligned-commons'
15096     This option is available for Cygwin and MinGW targets.  It
15097     specifies that the GNU extension to the PE file format that permits
15098     the correct alignment of COMMON variables should be used when
15099     generating code.  It is enabled by default if GCC detects that the
15100     target assembler found during configuration supports the feature.
15101
15102 See also under *note i386 and x86-64 Options:: for standard options.
15103
15104
15105File: gcc.info,  Node: IA-64 Options,  Next: LM32 Options,  Prev: i386 and x86-64 Windows Options,  Up: Submodel Options
15106
151073.17.19 IA-64 Options
15108---------------------
15109
15110These are the '-m' options defined for the Intel IA-64 architecture.
15111
15112'-mbig-endian'
15113     Generate code for a big-endian target.  This is the default for
15114     HP-UX.
15115
15116'-mlittle-endian'
15117     Generate code for a little-endian target.  This is the default for
15118     AIX5 and GNU/Linux.
15119
15120'-mgnu-as'
15121'-mno-gnu-as'
15122     Generate (or don't) code for the GNU assembler.  This is the
15123     default.
15124
15125'-mgnu-ld'
15126'-mno-gnu-ld'
15127     Generate (or don't) code for the GNU linker.  This is the default.
15128
15129'-mno-pic'
15130     Generate code that does not use a global pointer register.  The
15131     result is not position independent code, and violates the IA-64
15132     ABI.
15133
15134'-mvolatile-asm-stop'
15135'-mno-volatile-asm-stop'
15136     Generate (or don't) a stop bit immediately before and after
15137     volatile asm statements.
15138
15139'-mregister-names'
15140'-mno-register-names'
15141     Generate (or don't) 'in', 'loc', and 'out' register names for the
15142     stacked registers.  This may make assembler output more readable.
15143
15144'-mno-sdata'
15145'-msdata'
15146     Disable (or enable) optimizations that use the small data section.
15147     This may be useful for working around optimizer bugs.
15148
15149'-mconstant-gp'
15150     Generate code that uses a single constant global pointer value.
15151     This is useful when compiling kernel code.
15152
15153'-mauto-pic'
15154     Generate code that is self-relocatable.  This implies
15155     '-mconstant-gp'.  This is useful when compiling firmware code.
15156
15157'-minline-float-divide-min-latency'
15158     Generate code for inline divides of floating-point values using the
15159     minimum latency algorithm.
15160
15161'-minline-float-divide-max-throughput'
15162     Generate code for inline divides of floating-point values using the
15163     maximum throughput algorithm.
15164
15165'-mno-inline-float-divide'
15166     Do not generate inline code for divides of floating-point values.
15167
15168'-minline-int-divide-min-latency'
15169     Generate code for inline divides of integer values using the
15170     minimum latency algorithm.
15171
15172'-minline-int-divide-max-throughput'
15173     Generate code for inline divides of integer values using the
15174     maximum throughput algorithm.
15175
15176'-mno-inline-int-divide'
15177     Do not generate inline code for divides of integer values.
15178
15179'-minline-sqrt-min-latency'
15180     Generate code for inline square roots using the minimum latency
15181     algorithm.
15182
15183'-minline-sqrt-max-throughput'
15184     Generate code for inline square roots using the maximum throughput
15185     algorithm.
15186
15187'-mno-inline-sqrt'
15188     Do not generate inline code for 'sqrt'.
15189
15190'-mfused-madd'
15191'-mno-fused-madd'
15192     Do (don't) generate code that uses the fused multiply/add or
15193     multiply/subtract instructions.  The default is to use these
15194     instructions.
15195
15196'-mno-dwarf2-asm'
15197'-mdwarf2-asm'
15198     Don't (or do) generate assembler code for the DWARF 2 line number
15199     debugging info.  This may be useful when not using the GNU
15200     assembler.
15201
15202'-mearly-stop-bits'
15203'-mno-early-stop-bits'
15204     Allow stop bits to be placed earlier than immediately preceding the
15205     instruction that triggered the stop bit.  This can improve
15206     instruction scheduling, but does not always do so.
15207
15208'-mfixed-range=REGISTER-RANGE'
15209     Generate code treating the given register range as fixed registers.
15210     A fixed register is one that the register allocator cannot use.
15211     This is useful when compiling kernel code.  A register range is
15212     specified as two registers separated by a dash.  Multiple register
15213     ranges can be specified separated by a comma.
15214
15215'-mtls-size=TLS-SIZE'
15216     Specify bit size of immediate TLS offsets.  Valid values are 14,
15217     22, and 64.
15218
15219'-mtune=CPU-TYPE'
15220     Tune the instruction scheduling for a particular CPU, Valid values
15221     are 'itanium', 'itanium1', 'merced', 'itanium2', and 'mckinley'.
15222
15223'-milp32'
15224'-mlp64'
15225     Generate code for a 32-bit or 64-bit environment.  The 32-bit
15226     environment sets int, long and pointer to 32 bits.  The 64-bit
15227     environment sets int to 32 bits and long and pointer to 64 bits.
15228     These are HP-UX specific flags.
15229
15230'-mno-sched-br-data-spec'
15231'-msched-br-data-spec'
15232     (Dis/En)able data speculative scheduling before reload.  This
15233     results in generation of 'ld.a' instructions and the corresponding
15234     check instructions ('ld.c' / 'chk.a').  The default is 'disable'.
15235
15236'-msched-ar-data-spec'
15237'-mno-sched-ar-data-spec'
15238     (En/Dis)able data speculative scheduling after reload.  This
15239     results in generation of 'ld.a' instructions and the corresponding
15240     check instructions ('ld.c' / 'chk.a').  The default is 'enable'.
15241
15242'-mno-sched-control-spec'
15243'-msched-control-spec'
15244     (Dis/En)able control speculative scheduling.  This feature is
15245     available only during region scheduling (i.e. before reload).  This
15246     results in generation of the 'ld.s' instructions and the
15247     corresponding check instructions 'chk.s'.  The default is
15248     'disable'.
15249
15250'-msched-br-in-data-spec'
15251'-mno-sched-br-in-data-spec'
15252     (En/Dis)able speculative scheduling of the instructions that are
15253     dependent on the data speculative loads before reload.  This is
15254     effective only with '-msched-br-data-spec' enabled.  The default is
15255     'enable'.
15256
15257'-msched-ar-in-data-spec'
15258'-mno-sched-ar-in-data-spec'
15259     (En/Dis)able speculative scheduling of the instructions that are
15260     dependent on the data speculative loads after reload.  This is
15261     effective only with '-msched-ar-data-spec' enabled.  The default is
15262     'enable'.
15263
15264'-msched-in-control-spec'
15265'-mno-sched-in-control-spec'
15266     (En/Dis)able speculative scheduling of the instructions that are
15267     dependent on the control speculative loads.  This is effective only
15268     with '-msched-control-spec' enabled.  The default is 'enable'.
15269
15270'-mno-sched-prefer-non-data-spec-insns'
15271'-msched-prefer-non-data-spec-insns'
15272     If enabled, data-speculative instructions are chosen for schedule
15273     only if there are no other choices at the moment.  This makes the
15274     use of the data speculation much more conservative.  The default is
15275     'disable'.
15276
15277'-mno-sched-prefer-non-control-spec-insns'
15278'-msched-prefer-non-control-spec-insns'
15279     If enabled, control-speculative instructions are chosen for
15280     schedule only if there are no other choices at the moment.  This
15281     makes the use of the control speculation much more conservative.
15282     The default is 'disable'.
15283
15284'-mno-sched-count-spec-in-critical-path'
15285'-msched-count-spec-in-critical-path'
15286     If enabled, speculative dependencies are considered during
15287     computation of the instructions priorities.  This makes the use of
15288     the speculation a bit more conservative.  The default is 'disable'.
15289
15290'-msched-spec-ldc'
15291     Use a simple data speculation check.  This option is on by default.
15292
15293'-msched-control-spec-ldc'
15294     Use a simple check for control speculation.  This option is on by
15295     default.
15296
15297'-msched-stop-bits-after-every-cycle'
15298     Place a stop bit after every cycle when scheduling.  This option is
15299     on by default.
15300
15301'-msched-fp-mem-deps-zero-cost'
15302     Assume that floating-point stores and loads are not likely to cause
15303     a conflict when placed into the same instruction group.  This
15304     option is disabled by default.
15305
15306'-msel-sched-dont-check-control-spec'
15307     Generate checks for control speculation in selective scheduling.
15308     This flag is disabled by default.
15309
15310'-msched-max-memory-insns=MAX-INSNS'
15311     Limit on the number of memory insns per instruction group, giving
15312     lower priority to subsequent memory insns attempting to schedule in
15313     the same instruction group.  Frequently useful to prevent cache
15314     bank conflicts.  The default value is 1.
15315
15316'-msched-max-memory-insns-hard-limit'
15317     Makes the limit specified by 'msched-max-memory-insns' a hard
15318     limit, disallowing more than that number in an instruction group.
15319     Otherwise, the limit is "soft", meaning that non-memory operations
15320     are preferred when the limit is reached, but memory operations may
15321     still be scheduled.
15322
15323
15324File: gcc.info,  Node: LM32 Options,  Next: M32C Options,  Prev: IA-64 Options,  Up: Submodel Options
15325
153263.17.20 LM32 Options
15327--------------------
15328
15329These '-m' options are defined for the LatticeMico32 architecture:
15330
15331'-mbarrel-shift-enabled'
15332     Enable barrel-shift instructions.
15333
15334'-mdivide-enabled'
15335     Enable divide and modulus instructions.
15336
15337'-mmultiply-enabled'
15338     Enable multiply instructions.
15339
15340'-msign-extend-enabled'
15341     Enable sign extend instructions.
15342
15343'-muser-enabled'
15344     Enable user-defined instructions.
15345
15346
15347File: gcc.info,  Node: M32C Options,  Next: M32R/D Options,  Prev: LM32 Options,  Up: Submodel Options
15348
153493.17.21 M32C Options
15350--------------------
15351
15352'-mcpu=NAME'
15353     Select the CPU for which code is generated.  NAME may be one of
15354     'r8c' for the R8C/Tiny series, 'm16c' for the M16C (up to /60)
15355     series, 'm32cm' for the M16C/80 series, or 'm32c' for the M32C/80
15356     series.
15357
15358'-msim'
15359     Specifies that the program will be run on the simulator.  This
15360     causes an alternate runtime library to be linked in which supports,
15361     for example, file I/O.  You must not use this option when
15362     generating programs that will run on real hardware; you must
15363     provide your own runtime library for whatever I/O functions are
15364     needed.
15365
15366'-memregs=NUMBER'
15367     Specifies the number of memory-based pseudo-registers GCC uses
15368     during code generation.  These pseudo-registers are used like real
15369     registers, so there is a tradeoff between GCC's ability to fit the
15370     code into available registers, and the performance penalty of using
15371     memory instead of registers.  Note that all modules in a program
15372     must be compiled with the same value for this option.  Because of
15373     that, you must not use this option with GCC's default runtime
15374     libraries.
15375
15376
15377File: gcc.info,  Node: M32R/D Options,  Next: M680x0 Options,  Prev: M32C Options,  Up: Submodel Options
15378
153793.17.22 M32R/D Options
15380----------------------
15381
15382These '-m' options are defined for Renesas M32R/D architectures:
15383
15384'-m32r2'
15385     Generate code for the M32R/2.
15386
15387'-m32rx'
15388     Generate code for the M32R/X.
15389
15390'-m32r'
15391     Generate code for the M32R.  This is the default.
15392
15393'-mmodel=small'
15394     Assume all objects live in the lower 16MB of memory (so that their
15395     addresses can be loaded with the 'ld24' instruction), and assume
15396     all subroutines are reachable with the 'bl' instruction.  This is
15397     the default.
15398
15399     The addressability of a particular object can be set with the
15400     'model' attribute.
15401
15402'-mmodel=medium'
15403     Assume objects may be anywhere in the 32-bit address space (the
15404     compiler generates 'seth/add3' instructions to load their
15405     addresses), and assume all subroutines are reachable with the 'bl'
15406     instruction.
15407
15408'-mmodel=large'
15409     Assume objects may be anywhere in the 32-bit address space (the
15410     compiler generates 'seth/add3' instructions to load their
15411     addresses), and assume subroutines may not be reachable with the
15412     'bl' instruction (the compiler generates the much slower
15413     'seth/add3/jl' instruction sequence).
15414
15415'-msdata=none'
15416     Disable use of the small data area.  Variables are put into one of
15417     '.data', '.bss', or '.rodata' (unless the 'section' attribute has
15418     been specified).  This is the default.
15419
15420     The small data area consists of sections '.sdata' and '.sbss'.
15421     Objects may be explicitly put in the small data area with the
15422     'section' attribute using one of these sections.
15423
15424'-msdata=sdata'
15425     Put small global and static data in the small data area, but do not
15426     generate special code to reference them.
15427
15428'-msdata=use'
15429     Put small global and static data in the small data area, and
15430     generate special instructions to reference them.
15431
15432'-G NUM'
15433     Put global and static objects less than or equal to NUM bytes into
15434     the small data or BSS sections instead of the normal data or BSS
15435     sections.  The default value of NUM is 8.  The '-msdata' option
15436     must be set to one of 'sdata' or 'use' for this option to have any
15437     effect.
15438
15439     All modules should be compiled with the same '-G NUM' value.
15440     Compiling with different values of NUM may or may not work; if it
15441     doesn't the linker gives an error message--incorrect code is not
15442     generated.
15443
15444'-mdebug'
15445     Makes the M32R-specific code in the compiler display some
15446     statistics that might help in debugging programs.
15447
15448'-malign-loops'
15449     Align all loops to a 32-byte boundary.
15450
15451'-mno-align-loops'
15452     Do not enforce a 32-byte alignment for loops.  This is the default.
15453
15454'-missue-rate=NUMBER'
15455     Issue NUMBER instructions per cycle.  NUMBER can only be 1 or 2.
15456
15457'-mbranch-cost=NUMBER'
15458     NUMBER can only be 1 or 2.  If it is 1 then branches are preferred
15459     over conditional code, if it is 2, then the opposite applies.
15460
15461'-mflush-trap=NUMBER'
15462     Specifies the trap number to use to flush the cache.  The default
15463     is 12.  Valid numbers are between 0 and 15 inclusive.
15464
15465'-mno-flush-trap'
15466     Specifies that the cache cannot be flushed by using a trap.
15467
15468'-mflush-func=NAME'
15469     Specifies the name of the operating system function to call to
15470     flush the cache.  The default is __flush_cache_, but a function
15471     call is only used if a trap is not available.
15472
15473'-mno-flush-func'
15474     Indicates that there is no OS function for flushing the cache.
15475
15476
15477File: gcc.info,  Node: M680x0 Options,  Next: MCore Options,  Prev: M32R/D Options,  Up: Submodel Options
15478
154793.17.23 M680x0 Options
15480----------------------
15481
15482These are the '-m' options defined for M680x0 and ColdFire processors.
15483The default settings depend on which architecture was selected when the
15484compiler was configured; the defaults for the most common choices are
15485given below.
15486
15487'-march=ARCH'
15488     Generate code for a specific M680x0 or ColdFire instruction set
15489     architecture.  Permissible values of ARCH for M680x0 architectures
15490     are: '68000', '68010', '68020', '68030', '68040', '68060' and
15491     'cpu32'.  ColdFire architectures are selected according to
15492     Freescale's ISA classification and the permissible values are:
15493     'isaa', 'isaaplus', 'isab' and 'isac'.
15494
15495     GCC defines a macro '__mcfARCH__' whenever it is generating code
15496     for a ColdFire target.  The ARCH in this macro is one of the
15497     '-march' arguments given above.
15498
15499     When used together, '-march' and '-mtune' select code that runs on
15500     a family of similar processors but that is optimized for a
15501     particular microarchitecture.
15502
15503'-mcpu=CPU'
15504     Generate code for a specific M680x0 or ColdFire processor.  The
15505     M680x0 CPUs are: '68000', '68010', '68020', '68030', '68040',
15506     '68060', '68302', '68332' and 'cpu32'.  The ColdFire CPUs are given
15507     by the table below, which also classifies the CPUs into families:
15508
15509     *Family*       *'-mcpu' arguments*
15510     '51'           '51' '51ac' '51ag' '51cn' '51em' '51je' '51jf' '51jg'
15511                    '51jm' '51mm' '51qe' '51qm'
15512     '5206'         '5202' '5204' '5206'
15513     '5206e'        '5206e'
15514     '5208'         '5207' '5208'
15515     '5211a'        '5210a' '5211a'
15516     '5213'         '5211' '5212' '5213'
15517     '5216'         '5214' '5216'
15518     '52235'        '52230' '52231' '52232' '52233' '52234' '52235'
15519     '5225'         '5224' '5225'
15520     '52259'        '52252' '52254' '52255' '52256' '52258' '52259'
15521     '5235'         '5232' '5233' '5234' '5235' '523x'
15522     '5249'         '5249'
15523     '5250'         '5250'
15524     '5271'         '5270' '5271'
15525     '5272'         '5272'
15526     '5275'         '5274' '5275'
15527     '5282'         '5280' '5281' '5282' '528x'
15528     '53017'        '53011' '53012' '53013' '53014' '53015' '53016' '53017'
15529     '5307'         '5307'
15530     '5329'         '5327' '5328' '5329' '532x'
15531     '5373'         '5372' '5373' '537x'
15532     '5407'         '5407'
15533     '5475'         '5470' '5471' '5472' '5473' '5474' '5475' '547x' '5480'
15534                    '5481' '5482' '5483' '5484' '5485'
15535
15536     '-mcpu=CPU' overrides '-march=ARCH' if ARCH is compatible with CPU.
15537     Other combinations of '-mcpu' and '-march' are rejected.
15538
15539     GCC defines the macro '__mcf_cpu_CPU' when ColdFire target CPU is
15540     selected.  It also defines '__mcf_family_FAMILY', where the value
15541     of FAMILY is given by the table above.
15542
15543'-mtune=TUNE'
15544     Tune the code for a particular microarchitecture within the
15545     constraints set by '-march' and '-mcpu'.  The M680x0
15546     microarchitectures are: '68000', '68010', '68020', '68030',
15547     '68040', '68060' and 'cpu32'.  The ColdFire microarchitectures are:
15548     'cfv1', 'cfv2', 'cfv3', 'cfv4' and 'cfv4e'.
15549
15550     You can also use '-mtune=68020-40' for code that needs to run
15551     relatively well on 68020, 68030 and 68040 targets.
15552     '-mtune=68020-60' is similar but includes 68060 targets as well.
15553     These two options select the same tuning decisions as '-m68020-40'
15554     and '-m68020-60' respectively.
15555
15556     GCC defines the macros '__mcARCH' and '__mcARCH__' when tuning for
15557     680x0 architecture ARCH.  It also defines 'mcARCH' unless either
15558     '-ansi' or a non-GNU '-std' option is used.  If GCC is tuning for a
15559     range of architectures, as selected by '-mtune=68020-40' or
15560     '-mtune=68020-60', it defines the macros for every architecture in
15561     the range.
15562
15563     GCC also defines the macro '__mUARCH__' when tuning for ColdFire
15564     microarchitecture UARCH, where UARCH is one of the arguments given
15565     above.
15566
15567'-m68000'
15568'-mc68000'
15569     Generate output for a 68000.  This is the default when the compiler
15570     is configured for 68000-based systems.  It is equivalent to
15571     '-march=68000'.
15572
15573     Use this option for microcontrollers with a 68000 or EC000 core,
15574     including the 68008, 68302, 68306, 68307, 68322, 68328 and 68356.
15575
15576'-m68010'
15577     Generate output for a 68010.  This is the default when the compiler
15578     is configured for 68010-based systems.  It is equivalent to
15579     '-march=68010'.
15580
15581'-m68020'
15582'-mc68020'
15583     Generate output for a 68020.  This is the default when the compiler
15584     is configured for 68020-based systems.  It is equivalent to
15585     '-march=68020'.
15586
15587'-m68030'
15588     Generate output for a 68030.  This is the default when the compiler
15589     is configured for 68030-based systems.  It is equivalent to
15590     '-march=68030'.
15591
15592'-m68040'
15593     Generate output for a 68040.  This is the default when the compiler
15594     is configured for 68040-based systems.  It is equivalent to
15595     '-march=68040'.
15596
15597     This option inhibits the use of 68881/68882 instructions that have
15598     to be emulated by software on the 68040.  Use this option if your
15599     68040 does not have code to emulate those instructions.
15600
15601'-m68060'
15602     Generate output for a 68060.  This is the default when the compiler
15603     is configured for 68060-based systems.  It is equivalent to
15604     '-march=68060'.
15605
15606     This option inhibits the use of 68020 and 68881/68882 instructions
15607     that have to be emulated by software on the 68060.  Use this option
15608     if your 68060 does not have code to emulate those instructions.
15609
15610'-mcpu32'
15611     Generate output for a CPU32.  This is the default when the compiler
15612     is configured for CPU32-based systems.  It is equivalent to
15613     '-march=cpu32'.
15614
15615     Use this option for microcontrollers with a CPU32 or CPU32+ core,
15616     including the 68330, 68331, 68332, 68333, 68334, 68336, 68340,
15617     68341, 68349 and 68360.
15618
15619'-m5200'
15620     Generate output for a 520X ColdFire CPU.  This is the default when
15621     the compiler is configured for 520X-based systems.  It is
15622     equivalent to '-mcpu=5206', and is now deprecated in favor of that
15623     option.
15624
15625     Use this option for microcontroller with a 5200 core, including the
15626     MCF5202, MCF5203, MCF5204 and MCF5206.
15627
15628'-m5206e'
15629     Generate output for a 5206e ColdFire CPU.  The option is now
15630     deprecated in favor of the equivalent '-mcpu=5206e'.
15631
15632'-m528x'
15633     Generate output for a member of the ColdFire 528X family.  The
15634     option is now deprecated in favor of the equivalent '-mcpu=528x'.
15635
15636'-m5307'
15637     Generate output for a ColdFire 5307 CPU.  The option is now
15638     deprecated in favor of the equivalent '-mcpu=5307'.
15639
15640'-m5407'
15641     Generate output for a ColdFire 5407 CPU.  The option is now
15642     deprecated in favor of the equivalent '-mcpu=5407'.
15643
15644'-mcfv4e'
15645     Generate output for a ColdFire V4e family CPU (e.g. 547x/548x).
15646     This includes use of hardware floating-point instructions.  The
15647     option is equivalent to '-mcpu=547x', and is now deprecated in
15648     favor of that option.
15649
15650'-m68020-40'
15651     Generate output for a 68040, without using any of the new
15652     instructions.  This results in code that can run relatively
15653     efficiently on either a 68020/68881 or a 68030 or a 68040.  The
15654     generated code does use the 68881 instructions that are emulated on
15655     the 68040.
15656
15657     The option is equivalent to '-march=68020' '-mtune=68020-40'.
15658
15659'-m68020-60'
15660     Generate output for a 68060, without using any of the new
15661     instructions.  This results in code that can run relatively
15662     efficiently on either a 68020/68881 or a 68030 or a 68040.  The
15663     generated code does use the 68881 instructions that are emulated on
15664     the 68060.
15665
15666     The option is equivalent to '-march=68020' '-mtune=68020-60'.
15667
15668'-mhard-float'
15669'-m68881'
15670     Generate floating-point instructions.  This is the default for
15671     68020 and above, and for ColdFire devices that have an FPU.  It
15672     defines the macro '__HAVE_68881__' on M680x0 targets and
15673     '__mcffpu__' on ColdFire targets.
15674
15675'-msoft-float'
15676     Do not generate floating-point instructions; use library calls
15677     instead.  This is the default for 68000, 68010, and 68832 targets.
15678     It is also the default for ColdFire devices that have no FPU.
15679
15680'-mdiv'
15681'-mno-div'
15682     Generate (do not generate) ColdFire hardware divide and remainder
15683     instructions.  If '-march' is used without '-mcpu', the default is
15684     "on" for ColdFire architectures and "off" for M680x0 architectures.
15685     Otherwise, the default is taken from the target CPU (either the
15686     default CPU, or the one specified by '-mcpu').  For example, the
15687     default is "off" for '-mcpu=5206' and "on" for '-mcpu=5206e'.
15688
15689     GCC defines the macro '__mcfhwdiv__' when this option is enabled.
15690
15691'-mshort'
15692     Consider type 'int' to be 16 bits wide, like 'short int'.
15693     Additionally, parameters passed on the stack are also aligned to a
15694     16-bit boundary even on targets whose API mandates promotion to
15695     32-bit.
15696
15697'-mno-short'
15698     Do not consider type 'int' to be 16 bits wide.  This is the
15699     default.
15700
15701'-mnobitfield'
15702'-mno-bitfield'
15703     Do not use the bit-field instructions.  The '-m68000', '-mcpu32'
15704     and '-m5200' options imply '-mnobitfield'.
15705
15706'-mbitfield'
15707     Do use the bit-field instructions.  The '-m68020' option implies
15708     '-mbitfield'.  This is the default if you use a configuration
15709     designed for a 68020.
15710
15711'-mrtd'
15712     Use a different function-calling convention, in which functions
15713     that take a fixed number of arguments return with the 'rtd'
15714     instruction, which pops their arguments while returning.  This
15715     saves one instruction in the caller since there is no need to pop
15716     the arguments there.
15717
15718     This calling convention is incompatible with the one normally used
15719     on Unix, so you cannot use it if you need to call libraries
15720     compiled with the Unix compiler.
15721
15722     Also, you must provide function prototypes for all functions that
15723     take variable numbers of arguments (including 'printf'); otherwise
15724     incorrect code is generated for calls to those functions.
15725
15726     In addition, seriously incorrect code results if you call a
15727     function with too many arguments.  (Normally, extra arguments are
15728     harmlessly ignored.)
15729
15730     The 'rtd' instruction is supported by the 68010, 68020, 68030,
15731     68040, 68060 and CPU32 processors, but not by the 68000 or 5200.
15732
15733'-mno-rtd'
15734     Do not use the calling conventions selected by '-mrtd'.  This is
15735     the default.
15736
15737'-malign-int'
15738'-mno-align-int'
15739     Control whether GCC aligns 'int', 'long', 'long long', 'float',
15740     'double', and 'long double' variables on a 32-bit boundary
15741     ('-malign-int') or a 16-bit boundary ('-mno-align-int').  Aligning
15742     variables on 32-bit boundaries produces code that runs somewhat
15743     faster on processors with 32-bit busses at the expense of more
15744     memory.
15745
15746     *Warning:* if you use the '-malign-int' switch, GCC aligns
15747     structures containing the above types differently than most
15748     published application binary interface specifications for the m68k.
15749
15750'-mpcrel'
15751     Use the pc-relative addressing mode of the 68000 directly, instead
15752     of using a global offset table.  At present, this option implies
15753     '-fpic', allowing at most a 16-bit offset for pc-relative
15754     addressing.  '-fPIC' is not presently supported with '-mpcrel',
15755     though this could be supported for 68020 and higher processors.
15756
15757'-mno-strict-align'
15758'-mstrict-align'
15759     Do not (do) assume that unaligned memory references are handled by
15760     the system.
15761
15762'-msep-data'
15763     Generate code that allows the data segment to be located in a
15764     different area of memory from the text segment.  This allows for
15765     execute-in-place in an environment without virtual memory
15766     management.  This option implies '-fPIC'.
15767
15768'-mno-sep-data'
15769     Generate code that assumes that the data segment follows the text
15770     segment.  This is the default.
15771
15772'-mid-shared-library'
15773     Generate code that supports shared libraries via the library ID
15774     method.  This allows for execute-in-place and shared libraries in
15775     an environment without virtual memory management.  This option
15776     implies '-fPIC'.
15777
15778'-mno-id-shared-library'
15779     Generate code that doesn't assume ID-based shared libraries are
15780     being used.  This is the default.
15781
15782'-mshared-library-id=n'
15783     Specifies the identification number of the ID-based shared library
15784     being compiled.  Specifying a value of 0 generates more compact
15785     code; specifying other values forces the allocation of that number
15786     to the current library, but is no more space- or time-efficient
15787     than omitting this option.
15788
15789'-mxgot'
15790'-mno-xgot'
15791     When generating position-independent code for ColdFire, generate
15792     code that works if the GOT has more than 8192 entries.  This code
15793     is larger and slower than code generated without this option.  On
15794     M680x0 processors, this option is not needed; '-fPIC' suffices.
15795
15796     GCC normally uses a single instruction to load values from the GOT.
15797     While this is relatively efficient, it only works if the GOT is
15798     smaller than about 64k.  Anything larger causes the linker to
15799     report an error such as:
15800
15801          relocation truncated to fit: R_68K_GOT16O foobar
15802
15803     If this happens, you should recompile your code with '-mxgot'.  It
15804     should then work with very large GOTs.  However, code generated
15805     with '-mxgot' is less efficient, since it takes 4 instructions to
15806     fetch the value of a global symbol.
15807
15808     Note that some linkers, including newer versions of the GNU linker,
15809     can create multiple GOTs and sort GOT entries.  If you have such a
15810     linker, you should only need to use '-mxgot' when compiling a
15811     single object file that accesses more than 8192 GOT entries.  Very
15812     few do.
15813
15814     These options have no effect unless GCC is generating
15815     position-independent code.
15816
15817
15818File: gcc.info,  Node: MCore Options,  Next: MeP Options,  Prev: M680x0 Options,  Up: Submodel Options
15819
158203.17.24 MCore Options
15821---------------------
15822
15823These are the '-m' options defined for the Motorola M*Core processors.
15824
15825'-mhardlit'
15826'-mno-hardlit'
15827     Inline constants into the code stream if it can be done in two
15828     instructions or less.
15829
15830'-mdiv'
15831'-mno-div'
15832     Use the divide instruction.  (Enabled by default).
15833
15834'-mrelax-immediate'
15835'-mno-relax-immediate'
15836     Allow arbitrary-sized immediates in bit operations.
15837
15838'-mwide-bitfields'
15839'-mno-wide-bitfields'
15840     Always treat bit-fields as 'int'-sized.
15841
15842'-m4byte-functions'
15843'-mno-4byte-functions'
15844     Force all functions to be aligned to a 4-byte boundary.
15845
15846'-mcallgraph-data'
15847'-mno-callgraph-data'
15848     Emit callgraph information.
15849
15850'-mslow-bytes'
15851'-mno-slow-bytes'
15852     Prefer word access when reading byte quantities.
15853
15854'-mlittle-endian'
15855'-mbig-endian'
15856     Generate code for a little-endian target.
15857
15858'-m210'
15859'-m340'
15860     Generate code for the 210 processor.
15861
15862'-mno-lsim'
15863     Assume that runtime support has been provided and so omit the
15864     simulator library ('libsim.a)' from the linker command line.
15865
15866'-mstack-increment=SIZE'
15867     Set the maximum amount for a single stack increment operation.
15868     Large values can increase the speed of programs that contain
15869     functions that need a large amount of stack space, but they can
15870     also trigger a segmentation fault if the stack is extended too
15871     much.  The default value is 0x1000.
15872
15873
15874File: gcc.info,  Node: MeP Options,  Next: MicroBlaze Options,  Prev: MCore Options,  Up: Submodel Options
15875
158763.17.25 MeP Options
15877-------------------
15878
15879'-mabsdiff'
15880     Enables the 'abs' instruction, which is the absolute difference
15881     between two registers.
15882
15883'-mall-opts'
15884     Enables all the optional instructions--average, multiply, divide,
15885     bit operations, leading zero, absolute difference, min/max, clip,
15886     and saturation.
15887
15888'-maverage'
15889     Enables the 'ave' instruction, which computes the average of two
15890     registers.
15891
15892'-mbased=N'
15893     Variables of size N bytes or smaller are placed in the '.based'
15894     section by default.  Based variables use the '$tp' register as a
15895     base register, and there is a 128-byte limit to the '.based'
15896     section.
15897
15898'-mbitops'
15899     Enables the bit operation instructions--bit test ('btstm'), set
15900     ('bsetm'), clear ('bclrm'), invert ('bnotm'), and test-and-set
15901     ('tas').
15902
15903'-mc=NAME'
15904     Selects which section constant data is placed in.  NAME may be
15905     'tiny', 'near', or 'far'.
15906
15907'-mclip'
15908     Enables the 'clip' instruction.  Note that '-mclip' is not useful
15909     unless you also provide '-mminmax'.
15910
15911'-mconfig=NAME'
15912     Selects one of the built-in core configurations.  Each MeP chip has
15913     one or more modules in it; each module has a core CPU and a variety
15914     of coprocessors, optional instructions, and peripherals.  The
15915     'MeP-Integrator' tool, not part of GCC, provides these
15916     configurations through this option; using this option is the same
15917     as using all the corresponding command-line options.  The default
15918     configuration is 'default'.
15919
15920'-mcop'
15921     Enables the coprocessor instructions.  By default, this is a 32-bit
15922     coprocessor.  Note that the coprocessor is normally enabled via the
15923     '-mconfig=' option.
15924
15925'-mcop32'
15926     Enables the 32-bit coprocessor's instructions.
15927
15928'-mcop64'
15929     Enables the 64-bit coprocessor's instructions.
15930
15931'-mivc2'
15932     Enables IVC2 scheduling.  IVC2 is a 64-bit VLIW coprocessor.
15933
15934'-mdc'
15935     Causes constant variables to be placed in the '.near' section.
15936
15937'-mdiv'
15938     Enables the 'div' and 'divu' instructions.
15939
15940'-meb'
15941     Generate big-endian code.
15942
15943'-mel'
15944     Generate little-endian code.
15945
15946'-mio-volatile'
15947     Tells the compiler that any variable marked with the 'io' attribute
15948     is to be considered volatile.
15949
15950'-ml'
15951     Causes variables to be assigned to the '.far' section by default.
15952
15953'-mleadz'
15954     Enables the 'leadz' (leading zero) instruction.
15955
15956'-mm'
15957     Causes variables to be assigned to the '.near' section by default.
15958
15959'-mminmax'
15960     Enables the 'min' and 'max' instructions.
15961
15962'-mmult'
15963     Enables the multiplication and multiply-accumulate instructions.
15964
15965'-mno-opts'
15966     Disables all the optional instructions enabled by '-mall-opts'.
15967
15968'-mrepeat'
15969     Enables the 'repeat' and 'erepeat' instructions, used for
15970     low-overhead looping.
15971
15972'-ms'
15973     Causes all variables to default to the '.tiny' section.  Note that
15974     there is a 65536-byte limit to this section.  Accesses to these
15975     variables use the '%gp' base register.
15976
15977'-msatur'
15978     Enables the saturation instructions.  Note that the compiler does
15979     not currently generate these itself, but this option is included
15980     for compatibility with other tools, like 'as'.
15981
15982'-msdram'
15983     Link the SDRAM-based runtime instead of the default ROM-based
15984     runtime.
15985
15986'-msim'
15987     Link the simulator run-time libraries.
15988
15989'-msimnovec'
15990     Link the simulator runtime libraries, excluding built-in support
15991     for reset and exception vectors and tables.
15992
15993'-mtf'
15994     Causes all functions to default to the '.far' section.  Without
15995     this option, functions default to the '.near' section.
15996
15997'-mtiny=N'
15998     Variables that are N bytes or smaller are allocated to the '.tiny'
15999     section.  These variables use the '$gp' base register.  The default
16000     for this option is 4, but note that there's a 65536-byte limit to
16001     the '.tiny' section.
16002
16003
16004File: gcc.info,  Node: MicroBlaze Options,  Next: MIPS Options,  Prev: MeP Options,  Up: Submodel Options
16005
160063.17.26 MicroBlaze Options
16007--------------------------
16008
16009'-msoft-float'
16010     Use software emulation for floating point (default).
16011
16012'-mhard-float'
16013     Use hardware floating-point instructions.
16014
16015'-mmemcpy'
16016     Do not optimize block moves, use 'memcpy'.
16017
16018'-mno-clearbss'
16019     This option is deprecated.  Use '-fno-zero-initialized-in-bss'
16020     instead.
16021
16022'-mcpu=CPU-TYPE'
16023     Use features of, and schedule code for, the given CPU. Supported
16024     values are in the format 'vX.YY.Z', where X is a major version, YY
16025     is the minor version, and Z is compatibility code.  Example values
16026     are 'v3.00.a', 'v4.00.b', 'v5.00.a', 'v5.00.b', 'v5.00.b',
16027     'v6.00.a'.
16028
16029'-mxl-soft-mul'
16030     Use software multiply emulation (default).
16031
16032'-mxl-soft-div'
16033     Use software emulation for divides (default).
16034
16035'-mxl-barrel-shift'
16036     Use the hardware barrel shifter.
16037
16038'-mxl-pattern-compare'
16039     Use pattern compare instructions.
16040
16041'-msmall-divides'
16042     Use table lookup optimization for small signed integer divisions.
16043
16044'-mxl-stack-check'
16045     This option is deprecated.  Use '-fstack-check' instead.
16046
16047'-mxl-gp-opt'
16048     Use GP-relative '.sdata'/'.sbss' sections.
16049
16050'-mxl-multiply-high'
16051     Use multiply high instructions for high part of 32x32 multiply.
16052
16053'-mxl-float-convert'
16054     Use hardware floating-point conversion instructions.
16055
16056'-mxl-float-sqrt'
16057     Use hardware floating-point square root instruction.
16058
16059'-mbig-endian'
16060     Generate code for a big-endian target.
16061
16062'-mlittle-endian'
16063     Generate code for a little-endian target.
16064
16065'-mxl-reorder'
16066     Use reorder instructions (swap and byte reversed load/store).
16067
16068'-mxl-mode-APP-MODEL'
16069     Select application model APP-MODEL.  Valid models are
16070     'executable'
16071          normal executable (default), uses startup code 'crt0.o'.
16072
16073     'xmdstub'
16074          for use with Xilinx Microprocessor Debugger (XMD) based
16075          software intrusive debug agent called xmdstub.  This uses
16076          startup file 'crt1.o' and sets the start address of the
16077          program to 0x800.
16078
16079     'bootstrap'
16080          for applications that are loaded using a bootloader.  This
16081          model uses startup file 'crt2.o' which does not contain a
16082          processor reset vector handler.  This is suitable for
16083          transferring control on a processor reset to the bootloader
16084          rather than the application.
16085
16086     'novectors'
16087          for applications that do not require any of the MicroBlaze
16088          vectors.  This option may be useful for applications running
16089          within a monitoring application.  This model uses 'crt3.o' as
16090          a startup file.
16091
16092     Option '-xl-mode-APP-MODEL' is a deprecated alias for
16093     '-mxl-mode-APP-MODEL'.
16094
16095
16096File: gcc.info,  Node: MIPS Options,  Next: MMIX Options,  Prev: MicroBlaze Options,  Up: Submodel Options
16097
160983.17.27 MIPS Options
16099--------------------
16100
16101'-EB'
16102     Generate big-endian code.
16103
16104'-EL'
16105     Generate little-endian code.  This is the default for 'mips*el-*-*'
16106     configurations.
16107
16108'-march=ARCH'
16109     Generate code that runs on ARCH, which can be the name of a generic
16110     MIPS ISA, or the name of a particular processor.  The ISA names
16111     are: 'mips1', 'mips2', 'mips3', 'mips4', 'mips32', 'mips32r2',
16112     'mips64' and 'mips64r2'.  The processor names are: '4kc', '4km',
16113     '4kp', '4ksc', '4kec', '4kem', '4kep', '4ksd', '5kc', '5kf',
16114     '20kc', '24kc', '24kf2_1', '24kf1_1', '24kec', '24kef2_1',
16115     '24kef1_1', '34kc', '34kf2_1', '34kf1_1', '34kn', '74kc',
16116     '74kf2_1', '74kf1_1', '74kf3_2', '1004kc', '1004kf2_1',
16117     '1004kf1_1', 'loongson2e', 'loongson2f', 'loongson3a', 'm4k',
16118     'm14k', 'm14kc', 'm14ke', 'm14kec', 'octeon', 'octeon+', 'octeon2',
16119     'orion', 'r2000', 'r3000', 'r3900', 'r4000', 'r4400', 'r4600',
16120     'r4650', 'r4700', 'r6000', 'r8000', 'rm7000', 'rm9000', 'r10000',
16121     'r12000', 'r14000', 'r16000', 'sb1', 'sr71000', 'vr4100', 'vr4111',
16122     'vr4120', 'vr4130', 'vr4300', 'vr5000', 'vr5400', 'vr5500', 'xlr'
16123     and 'xlp'.  The special value 'from-abi' selects the most
16124     compatible architecture for the selected ABI (that is, 'mips1' for
16125     32-bit ABIs and 'mips3' for 64-bit ABIs).
16126
16127     The native Linux/GNU toolchain also supports the value 'native',
16128     which selects the best architecture option for the host processor.
16129     '-march=native' has no effect if GCC does not recognize the
16130     processor.
16131
16132     In processor names, a final '000' can be abbreviated as 'k' (for
16133     example, '-march=r2k').  Prefixes are optional, and 'vr' may be
16134     written 'r'.
16135
16136     Names of the form 'Nf2_1' refer to processors with FPUs clocked at
16137     half the rate of the core, names of the form 'Nf1_1' refer to
16138     processors with FPUs clocked at the same rate as the core, and
16139     names of the form 'Nf3_2' refer to processors with FPUs clocked a
16140     ratio of 3:2 with respect to the core.  For compatibility reasons,
16141     'Nf' is accepted as a synonym for 'Nf2_1' while 'Nx' and 'Bfx' are
16142     accepted as synonyms for 'Nf1_1'.
16143
16144     GCC defines two macros based on the value of this option.  The
16145     first is '_MIPS_ARCH', which gives the name of target architecture,
16146     as a string.  The second has the form '_MIPS_ARCH_FOO', where FOO
16147     is the capitalized value of '_MIPS_ARCH'.  For example,
16148     '-march=r2000' sets '_MIPS_ARCH' to '"r2000"' and defines the macro
16149     '_MIPS_ARCH_R2000'.
16150
16151     Note that the '_MIPS_ARCH' macro uses the processor names given
16152     above.  In other words, it has the full prefix and does not
16153     abbreviate '000' as 'k'.  In the case of 'from-abi', the macro
16154     names the resolved architecture (either '"mips1"' or '"mips3"').
16155     It names the default architecture when no '-march' option is given.
16156
16157'-mtune=ARCH'
16158     Optimize for ARCH.  Among other things, this option controls the
16159     way instructions are scheduled, and the perceived cost of
16160     arithmetic operations.  The list of ARCH values is the same as for
16161     '-march'.
16162
16163     When this option is not used, GCC optimizes for the processor
16164     specified by '-march'.  By using '-march' and '-mtune' together, it
16165     is possible to generate code that runs on a family of processors,
16166     but optimize the code for one particular member of that family.
16167
16168     '-mtune' defines the macros '_MIPS_TUNE' and '_MIPS_TUNE_FOO',
16169     which work in the same way as the '-march' ones described above.
16170
16171'-mips1'
16172     Equivalent to '-march=mips1'.
16173
16174'-mips2'
16175     Equivalent to '-march=mips2'.
16176
16177'-mips3'
16178     Equivalent to '-march=mips3'.
16179
16180'-mips4'
16181     Equivalent to '-march=mips4'.
16182
16183'-mips32'
16184     Equivalent to '-march=mips32'.
16185
16186'-mips32r2'
16187     Equivalent to '-march=mips32r2'.
16188
16189'-mips64'
16190     Equivalent to '-march=mips64'.
16191
16192'-mips64r2'
16193     Equivalent to '-march=mips64r2'.
16194
16195'-mips16'
16196'-mno-mips16'
16197     Generate (do not generate) MIPS16 code.  If GCC is targeting a
16198     MIPS32 or MIPS64 architecture, it makes use of the MIPS16e ASE.
16199
16200     MIPS16 code generation can also be controlled on a per-function
16201     basis by means of 'mips16' and 'nomips16' attributes.  *Note
16202     Function Attributes::, for more information.
16203
16204'-mflip-mips16'
16205     Generate MIPS16 code on alternating functions.  This option is
16206     provided for regression testing of mixed MIPS16/non-MIPS16 code
16207     generation, and is not intended for ordinary use in compiling user
16208     code.
16209
16210'-minterlink-compressed'
16211'-mno-interlink-compressed'
16212     Require (do not require) that code using the standard
16213     (uncompressed) MIPS ISA be link-compatible with MIPS16 and
16214     microMIPS code, and vice versa.
16215
16216     For example, code using the standard ISA encoding cannot jump
16217     directly to MIPS16 or microMIPS code; it must either use a call or
16218     an indirect jump.  '-minterlink-compressed' therefore disables
16219     direct jumps unless GCC knows that the target of the jump is not
16220     compressed.
16221
16222'-minterlink-mips16'
16223'-mno-interlink-mips16'
16224     Aliases of '-minterlink-compressed' and
16225     '-mno-interlink-compressed'.  These options predate the microMIPS
16226     ASE and are retained for backwards compatibility.
16227
16228'-mabi=32'
16229'-mabi=o64'
16230'-mabi=n32'
16231'-mabi=64'
16232'-mabi=eabi'
16233     Generate code for the given ABI.
16234
16235     Note that the EABI has a 32-bit and a 64-bit variant.  GCC normally
16236     generates 64-bit code when you select a 64-bit architecture, but
16237     you can use '-mgp32' to get 32-bit code instead.
16238
16239     For information about the O64 ABI, see
16240     <http://gcc.gnu.org/projects/mipso64-abi.html>.
16241
16242     GCC supports a variant of the o32 ABI in which floating-point
16243     registers are 64 rather than 32 bits wide.  You can select this
16244     combination with '-mabi=32' '-mfp64'.  This ABI relies on the
16245     'mthc1' and 'mfhc1' instructions and is therefore only supported
16246     for MIPS32R2 processors.
16247
16248     The register assignments for arguments and return values remain the
16249     same, but each scalar value is passed in a single 64-bit register
16250     rather than a pair of 32-bit registers.  For example, scalar
16251     floating-point values are returned in '$f0' only, not a '$f0'/'$f1'
16252     pair.  The set of call-saved registers also remains the same, but
16253     all 64 bits are saved.
16254
16255'-mabicalls'
16256'-mno-abicalls'
16257     Generate (do not generate) code that is suitable for SVR4-style
16258     dynamic objects.  '-mabicalls' is the default for SVR4-based
16259     systems.
16260
16261'-mshared'
16262'-mno-shared'
16263     Generate (do not generate) code that is fully position-independent,
16264     and that can therefore be linked into shared libraries.  This
16265     option only affects '-mabicalls'.
16266
16267     All '-mabicalls' code has traditionally been position-independent,
16268     regardless of options like '-fPIC' and '-fpic'.  However, as an
16269     extension, the GNU toolchain allows executables to use absolute
16270     accesses for locally-binding symbols.  It can also use shorter GP
16271     initialization sequences and generate direct calls to
16272     locally-defined functions.  This mode is selected by '-mno-shared'.
16273
16274     '-mno-shared' depends on binutils 2.16 or higher and generates
16275     objects that can only be linked by the GNU linker.  However, the
16276     option does not affect the ABI of the final executable; it only
16277     affects the ABI of relocatable objects.  Using '-mno-shared'
16278     generally makes executables both smaller and quicker.
16279
16280     '-mshared' is the default.
16281
16282'-mplt'
16283'-mno-plt'
16284     Assume (do not assume) that the static and dynamic linkers support
16285     PLTs and copy relocations.  This option only affects '-mno-shared
16286     -mabicalls'.  For the n64 ABI, this option has no effect without
16287     '-msym32'.
16288
16289     You can make '-mplt' the default by configuring GCC with
16290     '--with-mips-plt'.  The default is '-mno-plt' otherwise.
16291
16292'-mxgot'
16293'-mno-xgot'
16294     Lift (do not lift) the usual restrictions on the size of the global
16295     offset table.
16296
16297     GCC normally uses a single instruction to load values from the GOT.
16298     While this is relatively efficient, it only works if the GOT is
16299     smaller than about 64k.  Anything larger causes the linker to
16300     report an error such as:
16301
16302          relocation truncated to fit: R_MIPS_GOT16 foobar
16303
16304     If this happens, you should recompile your code with '-mxgot'.
16305     This works with very large GOTs, although the code is also less
16306     efficient, since it takes three instructions to fetch the value of
16307     a global symbol.
16308
16309     Note that some linkers can create multiple GOTs.  If you have such
16310     a linker, you should only need to use '-mxgot' when a single object
16311     file accesses more than 64k's worth of GOT entries.  Very few do.
16312
16313     These options have no effect unless GCC is generating position
16314     independent code.
16315
16316'-mgp32'
16317     Assume that general-purpose registers are 32 bits wide.
16318
16319'-mgp64'
16320     Assume that general-purpose registers are 64 bits wide.
16321
16322'-mfp32'
16323     Assume that floating-point registers are 32 bits wide.
16324
16325'-mfp64'
16326     Assume that floating-point registers are 64 bits wide.
16327
16328'-mhard-float'
16329     Use floating-point coprocessor instructions.
16330
16331'-msoft-float'
16332     Do not use floating-point coprocessor instructions.  Implement
16333     floating-point calculations using library calls instead.
16334
16335'-mno-float'
16336     Equivalent to '-msoft-float', but additionally asserts that the
16337     program being compiled does not perform any floating-point
16338     operations.  This option is presently supported only by some
16339     bare-metal MIPS configurations, where it may select a special set
16340     of libraries that lack all floating-point support (including, for
16341     example, the floating-point 'printf' formats).  If code compiled
16342     with '-mno-float' accidentally contains floating-point operations,
16343     it is likely to suffer a link-time or run-time failure.
16344
16345'-msingle-float'
16346     Assume that the floating-point coprocessor only supports
16347     single-precision operations.
16348
16349'-mdouble-float'
16350     Assume that the floating-point coprocessor supports
16351     double-precision operations.  This is the default.
16352
16353'-mabs=2008'
16354'-mabs=legacy'
16355     These options control the treatment of the special not-a-number
16356     (NaN) IEEE 754 floating-point data with the 'abs.fmt' and 'neg.fmt'
16357     machine instructions.
16358
16359     By default or when the '-mabs=legacy' is used the legacy treatment
16360     is selected.  In this case these instructions are considered
16361     arithmetic and avoided where correct operation is required and the
16362     input operand might be a NaN. A longer sequence of instructions
16363     that manipulate the sign bit of floating-point datum manually is
16364     used instead unless the '-ffinite-math-only' option has also been
16365     specified.
16366
16367     The '-mabs=2008' option selects the IEEE 754-2008 treatment.  In
16368     this case these instructions are considered non-arithmetic and
16369     therefore operating correctly in all cases, including in particular
16370     where the input operand is a NaN. These instructions are therefore
16371     always used for the respective operations.
16372
16373'-mnan=2008'
16374'-mnan=legacy'
16375     These options control the encoding of the special not-a-number
16376     (NaN) IEEE 754 floating-point data.
16377
16378     The '-mnan=legacy' option selects the legacy encoding.  In this
16379     case quiet NaNs (qNaNs) are denoted by the first bit of their
16380     trailing significand field being 0, whereas signalling NaNs (sNaNs)
16381     are denoted by the first bit of their trailing significand field
16382     being 1.
16383
16384     The '-mnan=2008' option selects the IEEE 754-2008 encoding.  In
16385     this case qNaNs are denoted by the first bit of their trailing
16386     significand field being 1, whereas sNaNs are denoted by the first
16387     bit of their trailing significand field being 0.
16388
16389     The default is '-mnan=legacy' unless GCC has been configured with
16390     '--with-nan=2008'.
16391
16392'-mllsc'
16393'-mno-llsc'
16394     Use (do not use) 'll', 'sc', and 'sync' instructions to implement
16395     atomic memory built-in functions.  When neither option is
16396     specified, GCC uses the instructions if the target architecture
16397     supports them.
16398
16399     '-mllsc' is useful if the runtime environment can emulate the
16400     instructions and '-mno-llsc' can be useful when compiling for
16401     nonstandard ISAs.  You can make either option the default by
16402     configuring GCC with '--with-llsc' and '--without-llsc'
16403     respectively.  '--with-llsc' is the default for some
16404     configurations; see the installation documentation for details.
16405
16406'-mdsp'
16407'-mno-dsp'
16408     Use (do not use) revision 1 of the MIPS DSP ASE.  *Note MIPS DSP
16409     Built-in Functions::.  This option defines the preprocessor macro
16410     '__mips_dsp'.  It also defines '__mips_dsp_rev' to 1.
16411
16412'-mdspr2'
16413'-mno-dspr2'
16414     Use (do not use) revision 2 of the MIPS DSP ASE.  *Note MIPS DSP
16415     Built-in Functions::.  This option defines the preprocessor macros
16416     '__mips_dsp' and '__mips_dspr2'.  It also defines '__mips_dsp_rev'
16417     to 2.
16418
16419'-msmartmips'
16420'-mno-smartmips'
16421     Use (do not use) the MIPS SmartMIPS ASE.
16422
16423'-mpaired-single'
16424'-mno-paired-single'
16425     Use (do not use) paired-single floating-point instructions.  *Note
16426     MIPS Paired-Single Support::.  This option requires hardware
16427     floating-point support to be enabled.
16428
16429'-mdmx'
16430'-mno-mdmx'
16431     Use (do not use) MIPS Digital Media Extension instructions.  This
16432     option can only be used when generating 64-bit code and requires
16433     hardware floating-point support to be enabled.
16434
16435'-mips3d'
16436'-mno-mips3d'
16437     Use (do not use) the MIPS-3D ASE.  *Note MIPS-3D Built-in
16438     Functions::.  The option '-mips3d' implies '-mpaired-single'.
16439
16440'-mmicromips'
16441'-mno-micromips'
16442     Generate (do not generate) microMIPS code.
16443
16444     MicroMIPS code generation can also be controlled on a per-function
16445     basis by means of 'micromips' and 'nomicromips' attributes.  *Note
16446     Function Attributes::, for more information.
16447
16448'-mmt'
16449'-mno-mt'
16450     Use (do not use) MT Multithreading instructions.
16451
16452'-mmcu'
16453'-mno-mcu'
16454     Use (do not use) the MIPS MCU ASE instructions.
16455
16456'-meva'
16457'-mno-eva'
16458     Use (do not use) the MIPS Enhanced Virtual Addressing instructions.
16459
16460'-mvirt'
16461'-mno-virt'
16462     Use (do not use) the MIPS Virtualization Application Specific
16463     instructions.
16464
16465'-mlong64'
16466     Force 'long' types to be 64 bits wide.  See '-mlong32' for an
16467     explanation of the default and the way that the pointer size is
16468     determined.
16469
16470'-mlong32'
16471     Force 'long', 'int', and pointer types to be 32 bits wide.
16472
16473     The default size of 'int's, 'long's and pointers depends on the
16474     ABI.  All the supported ABIs use 32-bit 'int's.  The n64 ABI uses
16475     64-bit 'long's, as does the 64-bit EABI; the others use 32-bit
16476     'long's.  Pointers are the same size as 'long's, or the same size
16477     as integer registers, whichever is smaller.
16478
16479'-msym32'
16480'-mno-sym32'
16481     Assume (do not assume) that all symbols have 32-bit values,
16482     regardless of the selected ABI.  This option is useful in
16483     combination with '-mabi=64' and '-mno-abicalls' because it allows
16484     GCC to generate shorter and faster references to symbolic
16485     addresses.
16486
16487'-G NUM'
16488     Put definitions of externally-visible data in a small data section
16489     if that data is no bigger than NUM bytes.  GCC can then generate
16490     more efficient accesses to the data; see '-mgpopt' for details.
16491
16492     The default '-G' option depends on the configuration.
16493
16494'-mlocal-sdata'
16495'-mno-local-sdata'
16496     Extend (do not extend) the '-G' behavior to local data too, such as
16497     to static variables in C.  '-mlocal-sdata' is the default for all
16498     configurations.
16499
16500     If the linker complains that an application is using too much small
16501     data, you might want to try rebuilding the less
16502     performance-critical parts with '-mno-local-sdata'.  You might also
16503     want to build large libraries with '-mno-local-sdata', so that the
16504     libraries leave more room for the main program.
16505
16506'-mextern-sdata'
16507'-mno-extern-sdata'
16508     Assume (do not assume) that externally-defined data is in a small
16509     data section if the size of that data is within the '-G' limit.
16510     '-mextern-sdata' is the default for all configurations.
16511
16512     If you compile a module MOD with '-mextern-sdata' '-G NUM'
16513     '-mgpopt', and MOD references a variable VAR that is no bigger than
16514     NUM bytes, you must make sure that VAR is placed in a small data
16515     section.  If VAR is defined by another module, you must either
16516     compile that module with a high-enough '-G' setting or attach a
16517     'section' attribute to VAR's definition.  If VAR is common, you
16518     must link the application with a high-enough '-G' setting.
16519
16520     The easiest way of satisfying these restrictions is to compile and
16521     link every module with the same '-G' option.  However, you may wish
16522     to build a library that supports several different small data
16523     limits.  You can do this by compiling the library with the highest
16524     supported '-G' setting and additionally using '-mno-extern-sdata'
16525     to stop the library from making assumptions about
16526     externally-defined data.
16527
16528'-mgpopt'
16529'-mno-gpopt'
16530     Use (do not use) GP-relative accesses for symbols that are known to
16531     be in a small data section; see '-G', '-mlocal-sdata' and
16532     '-mextern-sdata'.  '-mgpopt' is the default for all configurations.
16533
16534     '-mno-gpopt' is useful for cases where the '$gp' register might not
16535     hold the value of '_gp'.  For example, if the code is part of a
16536     library that might be used in a boot monitor, programs that call
16537     boot monitor routines pass an unknown value in '$gp'.  (In such
16538     situations, the boot monitor itself is usually compiled with
16539     '-G0'.)
16540
16541     '-mno-gpopt' implies '-mno-local-sdata' and '-mno-extern-sdata'.
16542
16543'-membedded-data'
16544'-mno-embedded-data'
16545     Allocate variables to the read-only data section first if possible,
16546     then next in the small data section if possible, otherwise in data.
16547     This gives slightly slower code than the default, but reduces the
16548     amount of RAM required when executing, and thus may be preferred
16549     for some embedded systems.
16550
16551'-muninit-const-in-rodata'
16552'-mno-uninit-const-in-rodata'
16553     Put uninitialized 'const' variables in the read-only data section.
16554     This option is only meaningful in conjunction with
16555     '-membedded-data'.
16556
16557'-mcode-readable=SETTING'
16558     Specify whether GCC may generate code that reads from executable
16559     sections.  There are three possible settings:
16560
16561     '-mcode-readable=yes'
16562          Instructions may freely access executable sections.  This is
16563          the default setting.
16564
16565     '-mcode-readable=pcrel'
16566          MIPS16 PC-relative load instructions can access executable
16567          sections, but other instructions must not do so.  This option
16568          is useful on 4KSc and 4KSd processors when the code TLBs have
16569          the Read Inhibit bit set.  It is also useful on processors
16570          that can be configured to have a dual instruction/data SRAM
16571          interface and that, like the M4K, automatically redirect
16572          PC-relative loads to the instruction RAM.
16573
16574     '-mcode-readable=no'
16575          Instructions must not access executable sections.  This option
16576          can be useful on targets that are configured to have a dual
16577          instruction/data SRAM interface but that (unlike the M4K) do
16578          not automatically redirect PC-relative loads to the
16579          instruction RAM.
16580
16581'-msplit-addresses'
16582'-mno-split-addresses'
16583     Enable (disable) use of the '%hi()' and '%lo()' assembler
16584     relocation operators.  This option has been superseded by
16585     '-mexplicit-relocs' but is retained for backwards compatibility.
16586
16587'-mexplicit-relocs'
16588'-mno-explicit-relocs'
16589     Use (do not use) assembler relocation operators when dealing with
16590     symbolic addresses.  The alternative, selected by
16591     '-mno-explicit-relocs', is to use assembler macros instead.
16592
16593     '-mexplicit-relocs' is the default if GCC was configured to use an
16594     assembler that supports relocation operators.
16595
16596'-mcheck-zero-division'
16597'-mno-check-zero-division'
16598     Trap (do not trap) on integer division by zero.
16599
16600     The default is '-mcheck-zero-division'.
16601
16602'-mdivide-traps'
16603'-mdivide-breaks'
16604     MIPS systems check for division by zero by generating either a
16605     conditional trap or a break instruction.  Using traps results in
16606     smaller code, but is only supported on MIPS II and later.  Also,
16607     some versions of the Linux kernel have a bug that prevents trap
16608     from generating the proper signal ('SIGFPE').  Use '-mdivide-traps'
16609     to allow conditional traps on architectures that support them and
16610     '-mdivide-breaks' to force the use of breaks.
16611
16612     The default is usually '-mdivide-traps', but this can be overridden
16613     at configure time using '--with-divide=breaks'.  Divide-by-zero
16614     checks can be completely disabled using '-mno-check-zero-division'.
16615
16616'-mmemcpy'
16617'-mno-memcpy'
16618     Force (do not force) the use of 'memcpy()' for non-trivial block
16619     moves.  The default is '-mno-memcpy', which allows GCC to inline
16620     most constant-sized copies.
16621
16622'-mlong-calls'
16623'-mno-long-calls'
16624     Disable (do not disable) use of the 'jal' instruction.  Calling
16625     functions using 'jal' is more efficient but requires the caller and
16626     callee to be in the same 256 megabyte segment.
16627
16628     This option has no effect on abicalls code.  The default is
16629     '-mno-long-calls'.
16630
16631'-mmad'
16632'-mno-mad'
16633     Enable (disable) use of the 'mad', 'madu' and 'mul' instructions,
16634     as provided by the R4650 ISA.
16635
16636'-mimadd'
16637'-mno-imadd'
16638     Enable (disable) use of the 'madd' and 'msub' integer instructions.
16639     The default is '-mimadd' on architectures that support 'madd' and
16640     'msub' except for the 74k architecture where it was found to
16641     generate slower code.
16642
16643'-mfused-madd'
16644'-mno-fused-madd'
16645     Enable (disable) use of the floating-point multiply-accumulate
16646     instructions, when they are available.  The default is
16647     '-mfused-madd'.
16648
16649     On the R8000 CPU when multiply-accumulate instructions are used,
16650     the intermediate product is calculated to infinite precision and is
16651     not subject to the FCSR Flush to Zero bit.  This may be undesirable
16652     in some circumstances.  On other processors the result is
16653     numerically identical to the equivalent computation using separate
16654     multiply, add, subtract and negate instructions.
16655
16656'-nocpp'
16657     Tell the MIPS assembler to not run its preprocessor over user
16658     assembler files (with a '.s' suffix) when assembling them.
16659
16660'-mfix-24k'
16661'-mno-fix-24k'
16662     Work around the 24K E48 (lost data on stores during refill) errata.
16663     The workarounds are implemented by the assembler rather than by
16664     GCC.
16665
16666'-mfix-r4000'
16667'-mno-fix-r4000'
16668     Work around certain R4000 CPU errata:
16669        - A double-word or a variable shift may give an incorrect result
16670          if executed immediately after starting an integer division.
16671        - A double-word or a variable shift may give an incorrect result
16672          if executed while an integer multiplication is in progress.
16673        - An integer division may give an incorrect result if started in
16674          a delay slot of a taken branch or a jump.
16675
16676'-mfix-r4400'
16677'-mno-fix-r4400'
16678     Work around certain R4400 CPU errata:
16679        - A double-word or a variable shift may give an incorrect result
16680          if executed immediately after starting an integer division.
16681
16682'-mfix-r10000'
16683'-mno-fix-r10000'
16684     Work around certain R10000 errata:
16685        - 'll'/'sc' sequences may not behave atomically on revisions
16686          prior to 3.0.  They may deadlock on revisions 2.6 and earlier.
16687
16688     This option can only be used if the target architecture supports
16689     branch-likely instructions.  '-mfix-r10000' is the default when
16690     '-march=r10000' is used; '-mno-fix-r10000' is the default
16691     otherwise.
16692
16693'-mfix-rm7000'
16694'-mno-fix-rm7000'
16695     Work around the RM7000 'dmult'/'dmultu' errata.  The workarounds
16696     are implemented by the assembler rather than by GCC.
16697
16698'-mfix-vr4120'
16699'-mno-fix-vr4120'
16700     Work around certain VR4120 errata:
16701        - 'dmultu' does not always produce the correct result.
16702        - 'div' and 'ddiv' do not always produce the correct result if
16703          one of the operands is negative.
16704     The workarounds for the division errata rely on special functions
16705     in 'libgcc.a'.  At present, these functions are only provided by
16706     the 'mips64vr*-elf' configurations.
16707
16708     Other VR4120 errata require a NOP to be inserted between certain
16709     pairs of instructions.  These errata are handled by the assembler,
16710     not by GCC itself.
16711
16712'-mfix-vr4130'
16713     Work around the VR4130 'mflo'/'mfhi' errata.  The workarounds are
16714     implemented by the assembler rather than by GCC, although GCC
16715     avoids using 'mflo' and 'mfhi' if the VR4130 'macc', 'macchi',
16716     'dmacc' and 'dmacchi' instructions are available instead.
16717
16718'-mfix-sb1'
16719'-mno-fix-sb1'
16720     Work around certain SB-1 CPU core errata.  (This flag currently
16721     works around the SB-1 revision 2 "F1" and "F2" floating-point
16722     errata.)
16723
16724'-mr10k-cache-barrier=SETTING'
16725     Specify whether GCC should insert cache barriers to avoid the
16726     side-effects of speculation on R10K processors.
16727
16728     In common with many processors, the R10K tries to predict the
16729     outcome of a conditional branch and speculatively executes
16730     instructions from the "taken" branch.  It later aborts these
16731     instructions if the predicted outcome is wrong.  However, on the
16732     R10K, even aborted instructions can have side effects.
16733
16734     This problem only affects kernel stores and, depending on the
16735     system, kernel loads.  As an example, a speculatively-executed
16736     store may load the target memory into cache and mark the cache line
16737     as dirty, even if the store itself is later aborted.  If a DMA
16738     operation writes to the same area of memory before the "dirty" line
16739     is flushed, the cached data overwrites the DMA-ed data.  See the
16740     R10K processor manual for a full description, including other
16741     potential problems.
16742
16743     One workaround is to insert cache barrier instructions before every
16744     memory access that might be speculatively executed and that might
16745     have side effects even if aborted.  '-mr10k-cache-barrier=SETTING'
16746     controls GCC's implementation of this workaround.  It assumes that
16747     aborted accesses to any byte in the following regions does not have
16748     side effects:
16749
16750       1. the memory occupied by the current function's stack frame;
16751
16752       2. the memory occupied by an incoming stack argument;
16753
16754       3. the memory occupied by an object with a link-time-constant
16755          address.
16756
16757     It is the kernel's responsibility to ensure that speculative
16758     accesses to these regions are indeed safe.
16759
16760     If the input program contains a function declaration such as:
16761
16762          void foo (void);
16763
16764     then the implementation of 'foo' must allow 'j foo' and 'jal foo'
16765     to be executed speculatively.  GCC honors this restriction for
16766     functions it compiles itself.  It expects non-GCC functions (such
16767     as hand-written assembly code) to do the same.
16768
16769     The option has three forms:
16770
16771     '-mr10k-cache-barrier=load-store'
16772          Insert a cache barrier before a load or store that might be
16773          speculatively executed and that might have side effects even
16774          if aborted.
16775
16776     '-mr10k-cache-barrier=store'
16777          Insert a cache barrier before a store that might be
16778          speculatively executed and that might have side effects even
16779          if aborted.
16780
16781     '-mr10k-cache-barrier=none'
16782          Disable the insertion of cache barriers.  This is the default
16783          setting.
16784
16785'-mflush-func=FUNC'
16786'-mno-flush-func'
16787     Specifies the function to call to flush the I and D caches, or to
16788     not call any such function.  If called, the function must take the
16789     same arguments as the common '_flush_func()', that is, the address
16790     of the memory range for which the cache is being flushed, the size
16791     of the memory range, and the number 3 (to flush both caches).  The
16792     default depends on the target GCC was configured for, but commonly
16793     is either '_flush_func' or '__cpu_flush'.
16794
16795'mbranch-cost=NUM'
16796     Set the cost of branches to roughly NUM "simple" instructions.
16797     This cost is only a heuristic and is not guaranteed to produce
16798     consistent results across releases.  A zero cost redundantly
16799     selects the default, which is based on the '-mtune' setting.
16800
16801'-mbranch-likely'
16802'-mno-branch-likely'
16803     Enable or disable use of Branch Likely instructions, regardless of
16804     the default for the selected architecture.  By default, Branch
16805     Likely instructions may be generated if they are supported by the
16806     selected architecture.  An exception is for the MIPS32 and MIPS64
16807     architectures and processors that implement those architectures;
16808     for those, Branch Likely instructions are not be generated by
16809     default because the MIPS32 and MIPS64 architectures specifically
16810     deprecate their use.
16811
16812'-mfp-exceptions'
16813'-mno-fp-exceptions'
16814     Specifies whether FP exceptions are enabled.  This affects how FP
16815     instructions are scheduled for some processors.  The default is
16816     that FP exceptions are enabled.
16817
16818     For instance, on the SB-1, if FP exceptions are disabled, and we
16819     are emitting 64-bit code, then we can use both FP pipes.
16820     Otherwise, we can only use one FP pipe.
16821
16822'-mvr4130-align'
16823'-mno-vr4130-align'
16824     The VR4130 pipeline is two-way superscalar, but can only issue two
16825     instructions together if the first one is 8-byte aligned.  When
16826     this option is enabled, GCC aligns pairs of instructions that it
16827     thinks should execute in parallel.
16828
16829     This option only has an effect when optimizing for the VR4130.  It
16830     normally makes code faster, but at the expense of making it bigger.
16831     It is enabled by default at optimization level '-O3'.
16832
16833'-msynci'
16834'-mno-synci'
16835     Enable (disable) generation of 'synci' instructions on
16836     architectures that support it.  The 'synci' instructions (if
16837     enabled) are generated when '__builtin___clear_cache()' is
16838     compiled.
16839
16840     This option defaults to '-mno-synci', but the default can be
16841     overridden by configuring with '--with-synci'.
16842
16843     When compiling code for single processor systems, it is generally
16844     safe to use 'synci'.  However, on many multi-core (SMP) systems, it
16845     does not invalidate the instruction caches on all cores and may
16846     lead to undefined behavior.
16847
16848'-mrelax-pic-calls'
16849'-mno-relax-pic-calls'
16850     Try to turn PIC calls that are normally dispatched via register
16851     '$25' into direct calls.  This is only possible if the linker can
16852     resolve the destination at link-time and if the destination is
16853     within range for a direct call.
16854
16855     '-mrelax-pic-calls' is the default if GCC was configured to use an
16856     assembler and a linker that support the '.reloc' assembly directive
16857     and '-mexplicit-relocs' is in effect.  With '-mno-explicit-relocs',
16858     this optimization can be performed by the assembler and the linker
16859     alone without help from the compiler.
16860
16861'-mmcount-ra-address'
16862'-mno-mcount-ra-address'
16863     Emit (do not emit) code that allows '_mcount' to modify the calling
16864     function's return address.  When enabled, this option extends the
16865     usual '_mcount' interface with a new RA-ADDRESS parameter, which
16866     has type 'intptr_t *' and is passed in register '$12'.  '_mcount'
16867     can then modify the return address by doing both of the following:
16868        * Returning the new address in register '$31'.
16869        * Storing the new address in '*RA-ADDRESS', if RA-ADDRESS is
16870          nonnull.
16871
16872     The default is '-mno-mcount-ra-address'.
16873
16874
16875File: gcc.info,  Node: MMIX Options,  Next: MN10300 Options,  Prev: MIPS Options,  Up: Submodel Options
16876
168773.17.28 MMIX Options
16878--------------------
16879
16880These options are defined for the MMIX:
16881
16882'-mlibfuncs'
16883'-mno-libfuncs'
16884     Specify that intrinsic library functions are being compiled,
16885     passing all values in registers, no matter the size.
16886
16887'-mepsilon'
16888'-mno-epsilon'
16889     Generate floating-point comparison instructions that compare with
16890     respect to the 'rE' epsilon register.
16891
16892'-mabi=mmixware'
16893'-mabi=gnu'
16894     Generate code that passes function parameters and return values
16895     that (in the called function) are seen as registers '$0' and up, as
16896     opposed to the GNU ABI which uses global registers '$231' and up.
16897
16898'-mzero-extend'
16899'-mno-zero-extend'
16900     When reading data from memory in sizes shorter than 64 bits, use
16901     (do not use) zero-extending load instructions by default, rather
16902     than sign-extending ones.
16903
16904'-mknuthdiv'
16905'-mno-knuthdiv'
16906     Make the result of a division yielding a remainder have the same
16907     sign as the divisor.  With the default, '-mno-knuthdiv', the sign
16908     of the remainder follows the sign of the dividend.  Both methods
16909     are arithmetically valid, the latter being almost exclusively used.
16910
16911'-mtoplevel-symbols'
16912'-mno-toplevel-symbols'
16913     Prepend (do not prepend) a ':' to all global symbols, so the
16914     assembly code can be used with the 'PREFIX' assembly directive.
16915
16916'-melf'
16917     Generate an executable in the ELF format, rather than the default
16918     'mmo' format used by the 'mmix' simulator.
16919
16920'-mbranch-predict'
16921'-mno-branch-predict'
16922     Use (do not use) the probable-branch instructions, when static
16923     branch prediction indicates a probable branch.
16924
16925'-mbase-addresses'
16926'-mno-base-addresses'
16927     Generate (do not generate) code that uses _base addresses_.  Using
16928     a base address automatically generates a request (handled by the
16929     assembler and the linker) for a constant to be set up in a global
16930     register.  The register is used for one or more base address
16931     requests within the range 0 to 255 from the value held in the
16932     register.  The generally leads to short and fast code, but the
16933     number of different data items that can be addressed is limited.
16934     This means that a program that uses lots of static data may require
16935     '-mno-base-addresses'.
16936
16937'-msingle-exit'
16938'-mno-single-exit'
16939     Force (do not force) generated code to have a single exit point in
16940     each function.
16941
16942
16943File: gcc.info,  Node: MN10300 Options,  Next: Moxie Options,  Prev: MMIX Options,  Up: Submodel Options
16944
169453.17.29 MN10300 Options
16946-----------------------
16947
16948These '-m' options are defined for Matsushita MN10300 architectures:
16949
16950'-mmult-bug'
16951     Generate code to avoid bugs in the multiply instructions for the
16952     MN10300 processors.  This is the default.
16953
16954'-mno-mult-bug'
16955     Do not generate code to avoid bugs in the multiply instructions for
16956     the MN10300 processors.
16957
16958'-mam33'
16959     Generate code using features specific to the AM33 processor.
16960
16961'-mno-am33'
16962     Do not generate code using features specific to the AM33 processor.
16963     This is the default.
16964
16965'-mam33-2'
16966     Generate code using features specific to the AM33/2.0 processor.
16967
16968'-mam34'
16969     Generate code using features specific to the AM34 processor.
16970
16971'-mtune=CPU-TYPE'
16972     Use the timing characteristics of the indicated CPU type when
16973     scheduling instructions.  This does not change the targeted
16974     processor type.  The CPU type must be one of 'mn10300', 'am33',
16975     'am33-2' or 'am34'.
16976
16977'-mreturn-pointer-on-d0'
16978     When generating a function that returns a pointer, return the
16979     pointer in both 'a0' and 'd0'.  Otherwise, the pointer is returned
16980     only in 'a0', and attempts to call such functions without a
16981     prototype result in errors.  Note that this option is on by
16982     default; use '-mno-return-pointer-on-d0' to disable it.
16983
16984'-mno-crt0'
16985     Do not link in the C run-time initialization object file.
16986
16987'-mrelax'
16988     Indicate to the linker that it should perform a relaxation
16989     optimization pass to shorten branches, calls and absolute memory
16990     addresses.  This option only has an effect when used on the command
16991     line for the final link step.
16992
16993     This option makes symbolic debugging impossible.
16994
16995'-mliw'
16996     Allow the compiler to generate _Long Instruction Word_ instructions
16997     if the target is the 'AM33' or later.  This is the default.  This
16998     option defines the preprocessor macro '__LIW__'.
16999
17000'-mnoliw'
17001     Do not allow the compiler to generate _Long Instruction Word_
17002     instructions.  This option defines the preprocessor macro
17003     '__NO_LIW__'.
17004
17005'-msetlb'
17006     Allow the compiler to generate the _SETLB_ and _Lcc_ instructions
17007     if the target is the 'AM33' or later.  This is the default.  This
17008     option defines the preprocessor macro '__SETLB__'.
17009
17010'-mnosetlb'
17011     Do not allow the compiler to generate _SETLB_ or _Lcc_
17012     instructions.  This option defines the preprocessor macro
17013     '__NO_SETLB__'.
17014
17015
17016File: gcc.info,  Node: Moxie Options,  Next: MSP430 Options,  Prev: MN10300 Options,  Up: Submodel Options
17017
170183.17.30 Moxie Options
17019---------------------
17020
17021'-meb'
17022     Generate big-endian code.  This is the default for 'moxie-*-*'
17023     configurations.
17024
17025'-mel'
17026     Generate little-endian code.
17027
17028'-mno-crt0'
17029     Do not link in the C run-time initialization object file.
17030
17031
17032File: gcc.info,  Node: MSP430 Options,  Next: NDS32 Options,  Prev: Moxie Options,  Up: Submodel Options
17033
170343.17.31 MSP430 Options
17035----------------------
17036
17037These options are defined for the MSP430:
17038
17039'-masm-hex'
17040     Force assembly output to always use hex constants.  Normally such
17041     constants are signed decimals, but this option is available for
17042     testsuite and/or aesthetic purposes.
17043
17044'-mmcu='
17045     Select the MCU to target.  This is used to create a C preprocessor
17046     symbol based upon the MCU name, converted to upper case and pre-
17047     and post- fixed with '__'.  This in turn will be used by the
17048     'msp430.h' header file to select an MCU specific supplimentary
17049     header file.
17050
17051     The option also sets the ISA to use.  If the MCU name is one that
17052     is known to only support the 430 ISA then that is selected,
17053     otherwise the 430X ISA is selected.  A generic MCU name of 'msp430'
17054     can also be used to select the 430 ISA. Similarly the generic
17055     'msp430x' MCU name will select the 430X ISA.
17056
17057     In addition an MCU specific linker script will be added to the
17058     linker command line.  The script's name is the name of the MCU with
17059     '.ld' appended.  Thus specifying '-mmcu=xxx' on the gcc command
17060     line will define the C preprocessor symbol '__XXX__' and cause the
17061     linker to search for a script called 'xxx.ld'.
17062
17063     This option is also passed on to the assembler.
17064
17065'-mcpu='
17066     Specifies the ISA to use.  Accepted values are 'msp430', 'msp430x'
17067     and 'msp430xv2'.  This option is deprecated.  The '-mmcu=' option
17068     should be used to select the ISA.
17069
17070'-msim'
17071     Link to the simulator runtime libraries and linker script.
17072     Overrides any scripts that would be selected by the '-mmcu='
17073     option.
17074
17075'-mlarge'
17076     Use large-model addressing (20-bit pointers, 32-bit 'size_t').
17077
17078'-msmall'
17079     Use small-model addressing (16-bit pointers, 16-bit 'size_t').
17080
17081'-mrelax'
17082     This option is passed to the assembler and linker, and allows the
17083     linker to perform certain optimizations that cannot be done until
17084     the final link.
17085
17086'mhwmult='
17087     Describes the type of hardware multiply supported by the target.
17088     Accepted values are 'none' for no hardware multiply, '16bit' for
17089     the original 16-bit-only multiply supported by early MCUs.  '32bit'
17090     for the 16/32-bit multiply supported by later MCUs and 'f5series'
17091     for the 16/32-bit multiply supported by F5-series MCUs.  A value of
17092     'auto' can also be given.  This tells GCC to deduce the hardware
17093     multiply support based upon the MCU name provided by the '-mmcu'
17094     option.  If no '-mmcu' option is specified then '32bit' hardware
17095     multiply support is assumed.  'auto' is the default setting.
17096
17097     Hardware multiplies are normally performed by calling a library
17098     routine.  This saves space in the generated code.  When compiling
17099     at '-O3' or higher however the hardware multiplier is invoked
17100     inline.  This makes for bigger, but faster code.
17101
17102     The hardware multiply routines disable interrupts whilst running
17103     and restore the previous interrupt state when they finish.  This
17104     makes them safe to use inside interrupt handlers as well as in
17105     normal code.
17106
17107'-minrt'
17108     Enable the use of a minimum runtime environment - no static
17109     initializers or constructors.  This is intended for
17110     memory-constrained devices.  The compiler will include special
17111     symbols in some objects that tell the linker and runtime which code
17112     fragments are required.
17113
17114
17115File: gcc.info,  Node: NDS32 Options,  Next: Nios II Options,  Prev: MSP430 Options,  Up: Submodel Options
17116
171173.17.32 NDS32 Options
17118---------------------
17119
17120These options are defined for NDS32 implementations:
17121
17122'-mbig-endian'
17123     Generate code in big-endian mode.
17124
17125'-mlittle-endian'
17126     Generate code in little-endian mode.
17127
17128'-mreduced-regs'
17129     Use reduced-set registers for register allocation.
17130
17131'-mfull-regs'
17132     Use full-set registers for register allocation.
17133
17134'-mcmov'
17135     Generate conditional move instructions.
17136
17137'-mno-cmov'
17138     Do not generate conditional move instructions.
17139
17140'-mperf-ext'
17141     Generate performance extension instructions.
17142
17143'-mno-perf-ext'
17144     Do not generate performance extension instructions.
17145
17146'-mv3push'
17147     Generate v3 push25/pop25 instructions.
17148
17149'-mno-v3push'
17150     Do not generate v3 push25/pop25 instructions.
17151
17152'-m16-bit'
17153     Generate 16-bit instructions.
17154
17155'-mno-16-bit'
17156     Do not generate 16-bit instructions.
17157
17158'-mgp-direct'
17159     Generate GP base instructions directly.
17160
17161'-mno-gp-direct'
17162     Do no generate GP base instructions directly.
17163
17164'-misr-vector-size=NUM'
17165     Specify the size of each interrupt vector, which must be 4 or 16.
17166
17167'-mcache-block-size=NUM'
17168     Specify the size of each cache block, which must be a power of 2
17169     between 4 and 512.
17170
17171'-march=ARCH'
17172     Specify the name of the target architecture.
17173
17174'-mforce-fp-as-gp'
17175     Prevent $fp being allocated during register allocation so that
17176     compiler is able to force performing fp-as-gp optimization.
17177
17178'-mforbid-fp-as-gp'
17179     Forbid using $fp to access static and global variables.  This
17180     option strictly forbids fp-as-gp optimization regardless of
17181     '-mforce-fp-as-gp'.
17182
17183'-mex9'
17184     Use special directives to guide linker doing ex9 optimization.
17185
17186'-mctor-dtor'
17187     Enable constructor/destructor feature.
17188
17189'-mrelax'
17190     Guide linker to relax instructions.
17191
17192
17193File: gcc.info,  Node: Nios II Options,  Next: PDP-11 Options,  Prev: NDS32 Options,  Up: Submodel Options
17194
171953.17.33 Nios II Options
17196-----------------------
17197
17198These are the options defined for the Altera Nios II processor.
17199
17200'-G NUM'
17201     Put global and static objects less than or equal to NUM bytes into
17202     the small data or BSS sections instead of the normal data or BSS
17203     sections.  The default value of NUM is 8.
17204
17205'-mgpopt'
17206'-mno-gpopt'
17207     Generate (do not generate) GP-relative accesses for objects in the
17208     small data or BSS sections.  The default is '-mgpopt' except when
17209     '-fpic' or '-fPIC' is specified to generate position-independent
17210     code.  Note that the Nios II ABI does not permit GP-relative
17211     accesses from shared libraries.
17212
17213     You may need to specify '-mno-gpopt' explicitly when building
17214     programs that include large amounts of small data, including large
17215     GOT data sections.  In this case, the 16-bit offset for GP-relative
17216     addressing may not be large enough to allow access to the entire
17217     small data section.
17218
17219'-mel'
17220'-meb'
17221     Generate little-endian (default) or big-endian (experimental) code,
17222     respectively.
17223
17224'-mbypass-cache'
17225'-mno-bypass-cache'
17226     Force all load and store instructions to always bypass cache by
17227     using I/O variants of the instructions.  The default is not to
17228     bypass the cache.
17229
17230'-mno-cache-volatile'
17231'-mcache-volatile'
17232     Volatile memory access bypass the cache using the I/O variants of
17233     the load and store instructions.  The default is not to bypass the
17234     cache.
17235
17236'-mno-fast-sw-div'
17237'-mfast-sw-div'
17238     Do not use table-based fast divide for small numbers.  The default
17239     is to use the fast divide at '-O3' and above.
17240
17241'-mno-hw-mul'
17242'-mhw-mul'
17243'-mno-hw-mulx'
17244'-mhw-mulx'
17245'-mno-hw-div'
17246'-mhw-div'
17247     Enable or disable emitting 'mul', 'mulx' and 'div' family of
17248     instructions by the compiler.  The default is to emit 'mul' and not
17249     emit 'div' and 'mulx'.
17250
17251'-mcustom-INSN=N'
17252'-mno-custom-INSN'
17253     Each '-mcustom-INSN=N' option enables use of a custom instruction
17254     with encoding N when generating code that uses INSN.  For example,
17255     '-mcustom-fadds=253' generates custom instruction 253 for
17256     single-precision floating-point add operations instead of the
17257     default behavior of using a library call.
17258
17259     The following values of INSN are supported.  Except as otherwise
17260     noted, floating-point operations are expected to be implemented
17261     with normal IEEE 754 semantics and correspond directly to the C
17262     operators or the equivalent GCC built-in functions (*note Other
17263     Builtins::).
17264
17265     Single-precision floating point:
17266
17267     'fadds', 'fsubs', 'fdivs', 'fmuls'
17268          Binary arithmetic operations.
17269
17270     'fnegs'
17271          Unary negation.
17272
17273     'fabss'
17274          Unary absolute value.
17275
17276     'fcmpeqs', 'fcmpges', 'fcmpgts', 'fcmples', 'fcmplts', 'fcmpnes'
17277          Comparison operations.
17278
17279     'fmins', 'fmaxs'
17280          Floating-point minimum and maximum.  These instructions are
17281          only generated if '-ffinite-math-only' is specified.
17282
17283     'fsqrts'
17284          Unary square root operation.
17285
17286     'fcoss', 'fsins', 'ftans', 'fatans', 'fexps', 'flogs'
17287          Floating-point trigonometric and exponential functions.  These
17288          instructions are only generated if
17289          '-funsafe-math-optimizations' is also specified.
17290
17291     Double-precision floating point:
17292
17293     'faddd', 'fsubd', 'fdivd', 'fmuld'
17294          Binary arithmetic operations.
17295
17296     'fnegd'
17297          Unary negation.
17298
17299     'fabsd'
17300          Unary absolute value.
17301
17302     'fcmpeqd', 'fcmpged', 'fcmpgtd', 'fcmpled', 'fcmpltd', 'fcmpned'
17303          Comparison operations.
17304
17305     'fmind', 'fmaxd'
17306          Double-precision minimum and maximum.  These instructions are
17307          only generated if '-ffinite-math-only' is specified.
17308
17309     'fsqrtd'
17310          Unary square root operation.
17311
17312     'fcosd', 'fsind', 'ftand', 'fatand', 'fexpd', 'flogd'
17313          Double-precision trigonometric and exponential functions.
17314          These instructions are only generated if
17315          '-funsafe-math-optimizations' is also specified.
17316
17317     Conversions:
17318     'fextsd'
17319          Conversion from single precision to double precision.
17320
17321     'ftruncds'
17322          Conversion from double precision to single precision.
17323
17324     'fixsi', 'fixsu', 'fixdi', 'fixdu'
17325          Conversion from floating point to signed or unsigned integer
17326          types, with truncation towards zero.
17327
17328     'floatis', 'floatus', 'floatid', 'floatud'
17329          Conversion from signed or unsigned integer types to
17330          floating-point types.
17331
17332     In addition, all of the following transfer instructions for
17333     internal registers X and Y must be provided to use any of the
17334     double-precision floating-point instructions.  Custom instructions
17335     taking two double-precision source operands expect the first
17336     operand in the 64-bit register X. The other operand (or only
17337     operand of a unary operation) is given to the custom arithmetic
17338     instruction with the least significant half in source register SRC1
17339     and the most significant half in SRC2.  A custom instruction that
17340     returns a double-precision result returns the most significant 32
17341     bits in the destination register and the other half in 32-bit
17342     register Y. GCC automatically generates the necessary code
17343     sequences to write register X and/or read register Y when
17344     double-precision floating-point instructions are used.
17345
17346     'fwrx'
17347          Write SRC1 into the least significant half of X and SRC2 into
17348          the most significant half of X.
17349
17350     'fwry'
17351          Write SRC1 into Y.
17352
17353     'frdxhi', 'frdxlo'
17354          Read the most or least (respectively) significant half of X
17355          and store it in DEST.
17356
17357     'frdy'
17358          Read the value of Y and store it into DEST.
17359
17360     Note that you can gain more local control over generation of Nios
17361     II custom instructions by using the 'target("custom-INSN=N")' and
17362     'target("no-custom-INSN")' function attributes (*note Function
17363     Attributes::) or pragmas (*note Function Specific Option
17364     Pragmas::).
17365
17366'-mcustom-fpu-cfg=NAME'
17367
17368     This option enables a predefined, named set of custom instruction
17369     encodings (see '-mcustom-INSN' above).  Currently, the following
17370     sets are defined:
17371
17372     '-mcustom-fpu-cfg=60-1' is equivalent to:
17373          -mcustom-fmuls=252
17374          -mcustom-fadds=253
17375          -mcustom-fsubs=254
17376          -fsingle-precision-constant
17377
17378     '-mcustom-fpu-cfg=60-2' is equivalent to:
17379          -mcustom-fmuls=252
17380          -mcustom-fadds=253
17381          -mcustom-fsubs=254
17382          -mcustom-fdivs=255
17383          -fsingle-precision-constant
17384
17385     '-mcustom-fpu-cfg=72-3' is equivalent to:
17386          -mcustom-floatus=243
17387          -mcustom-fixsi=244
17388          -mcustom-floatis=245
17389          -mcustom-fcmpgts=246
17390          -mcustom-fcmples=249
17391          -mcustom-fcmpeqs=250
17392          -mcustom-fcmpnes=251
17393          -mcustom-fmuls=252
17394          -mcustom-fadds=253
17395          -mcustom-fsubs=254
17396          -mcustom-fdivs=255
17397          -fsingle-precision-constant
17398
17399     Custom instruction assignments given by individual '-mcustom-INSN='
17400     options override those given by '-mcustom-fpu-cfg=', regardless of
17401     the order of the options on the command line.
17402
17403     Note that you can gain more local control over selection of a FPU
17404     configuration by using the 'target("custom-fpu-cfg=NAME")' function
17405     attribute (*note Function Attributes::) or pragma (*note Function
17406     Specific Option Pragmas::).
17407
17408 These additional '-m' options are available for the Altera Nios II ELF
17409(bare-metal) target:
17410
17411'-mhal'
17412     Link with HAL BSP. This suppresses linking with the GCC-provided C
17413     runtime startup and termination code, and is typically used in
17414     conjunction with '-msys-crt0=' to specify the location of the
17415     alternate startup code provided by the HAL BSP.
17416
17417'-msmallc'
17418     Link with a limited version of the C library, '-lsmallc', rather
17419     than Newlib.
17420
17421'-msys-crt0=STARTFILE'
17422     STARTFILE is the file name of the startfile (crt0) to use when
17423     linking.  This option is only useful in conjunction with '-mhal'.
17424
17425'-msys-lib=SYSTEMLIB'
17426     SYSTEMLIB is the library name of the library that provides
17427     low-level system calls required by the C library, e.g.  'read' and
17428     'write'.  This option is typically used to link with a library
17429     provided by a HAL BSP.
17430
17431
17432File: gcc.info,  Node: PDP-11 Options,  Next: picoChip Options,  Prev: Nios II Options,  Up: Submodel Options
17433
174343.17.34 PDP-11 Options
17435----------------------
17436
17437These options are defined for the PDP-11:
17438
17439'-mfpu'
17440     Use hardware FPP floating point.  This is the default.  (FIS
17441     floating point on the PDP-11/40 is not supported.)
17442
17443'-msoft-float'
17444     Do not use hardware floating point.
17445
17446'-mac0'
17447     Return floating-point results in ac0 (fr0 in Unix assembler
17448     syntax).
17449
17450'-mno-ac0'
17451     Return floating-point results in memory.  This is the default.
17452
17453'-m40'
17454     Generate code for a PDP-11/40.
17455
17456'-m45'
17457     Generate code for a PDP-11/45.  This is the default.
17458
17459'-m10'
17460     Generate code for a PDP-11/10.
17461
17462'-mbcopy-builtin'
17463     Use inline 'movmemhi' patterns for copying memory.  This is the
17464     default.
17465
17466'-mbcopy'
17467     Do not use inline 'movmemhi' patterns for copying memory.
17468
17469'-mint16'
17470'-mno-int32'
17471     Use 16-bit 'int'.  This is the default.
17472
17473'-mint32'
17474'-mno-int16'
17475     Use 32-bit 'int'.
17476
17477'-mfloat64'
17478'-mno-float32'
17479     Use 64-bit 'float'.  This is the default.
17480
17481'-mfloat32'
17482'-mno-float64'
17483     Use 32-bit 'float'.
17484
17485'-mabshi'
17486     Use 'abshi2' pattern.  This is the default.
17487
17488'-mno-abshi'
17489     Do not use 'abshi2' pattern.
17490
17491'-mbranch-expensive'
17492     Pretend that branches are expensive.  This is for experimenting
17493     with code generation only.
17494
17495'-mbranch-cheap'
17496     Do not pretend that branches are expensive.  This is the default.
17497
17498'-munix-asm'
17499     Use Unix assembler syntax.  This is the default when configured for
17500     'pdp11-*-bsd'.
17501
17502'-mdec-asm'
17503     Use DEC assembler syntax.  This is the default when configured for
17504     any PDP-11 target other than 'pdp11-*-bsd'.
17505
17506
17507File: gcc.info,  Node: picoChip Options,  Next: PowerPC Options,  Prev: PDP-11 Options,  Up: Submodel Options
17508
175093.17.35 picoChip Options
17510------------------------
17511
17512These '-m' options are defined for picoChip implementations:
17513
17514'-mae=AE_TYPE'
17515     Set the instruction set, register set, and instruction scheduling
17516     parameters for array element type AE_TYPE.  Supported values for
17517     AE_TYPE are 'ANY', 'MUL', and 'MAC'.
17518
17519     '-mae=ANY' selects a completely generic AE type.  Code generated
17520     with this option runs on any of the other AE types.  The code is
17521     not as efficient as it would be if compiled for a specific AE type,
17522     and some types of operation (e.g., multiplication) do not work
17523     properly on all types of AE.
17524
17525     '-mae=MUL' selects a MUL AE type.  This is the most useful AE type
17526     for compiled code, and is the default.
17527
17528     '-mae=MAC' selects a DSP-style MAC AE. Code compiled with this
17529     option may suffer from poor performance of byte (char)
17530     manipulation, since the DSP AE does not provide hardware support
17531     for byte load/stores.
17532
17533'-msymbol-as-address'
17534     Enable the compiler to directly use a symbol name as an address in
17535     a load/store instruction, without first loading it into a register.
17536     Typically, the use of this option generates larger programs, which
17537     run faster than when the option isn't used.  However, the results
17538     vary from program to program, so it is left as a user option,
17539     rather than being permanently enabled.
17540
17541'-mno-inefficient-warnings'
17542     Disables warnings about the generation of inefficient code.  These
17543     warnings can be generated, for example, when compiling code that
17544     performs byte-level memory operations on the MAC AE type.  The MAC
17545     AE has no hardware support for byte-level memory operations, so all
17546     byte load/stores must be synthesized from word load/store
17547     operations.  This is inefficient and a warning is generated to
17548     indicate that you should rewrite the code to avoid byte operations,
17549     or to target an AE type that has the necessary hardware support.
17550     This option disables these warnings.
17551
17552
17553File: gcc.info,  Node: PowerPC Options,  Next: RL78 Options,  Prev: picoChip Options,  Up: Submodel Options
17554
175553.17.36 PowerPC Options
17556-----------------------
17557
17558These are listed under *Note RS/6000 and PowerPC Options::.
17559
17560
17561File: gcc.info,  Node: RL78 Options,  Next: RS/6000 and PowerPC Options,  Prev: PowerPC Options,  Up: Submodel Options
17562
175633.17.37 RL78 Options
17564--------------------
17565
17566'-msim'
17567     Links in additional target libraries to support operation within a
17568     simulator.
17569
17570'-mmul=none'
17571'-mmul=g13'
17572'-mmul=rl78'
17573     Specifies the type of hardware multiplication support to be used.
17574     The default is 'none', which uses software multiplication
17575     functions.  The 'g13' option is for the hardware multiply/divide
17576     peripheral only on the RL78/G13 targets.  The 'rl78' option is for
17577     the standard hardware multiplication defined in the RL78 software
17578     manual.
17579
17580
17581File: gcc.info,  Node: RS/6000 and PowerPC Options,  Next: RX Options,  Prev: RL78 Options,  Up: Submodel Options
17582
175833.17.38 IBM RS/6000 and PowerPC Options
17584---------------------------------------
17585
17586These '-m' options are defined for the IBM RS/6000 and PowerPC:
17587'-mpowerpc-gpopt'
17588'-mno-powerpc-gpopt'
17589'-mpowerpc-gfxopt'
17590'-mno-powerpc-gfxopt'
17591'-mpowerpc64'
17592'-mno-powerpc64'
17593'-mmfcrf'
17594'-mno-mfcrf'
17595'-mpopcntb'
17596'-mno-popcntb'
17597'-mpopcntd'
17598'-mno-popcntd'
17599'-mfprnd'
17600'-mno-fprnd'
17601'-mcmpb'
17602'-mno-cmpb'
17603'-mmfpgpr'
17604'-mno-mfpgpr'
17605'-mhard-dfp'
17606'-mno-hard-dfp'
17607     You use these options to specify which instructions are available
17608     on the processor you are using.  The default value of these options
17609     is determined when configuring GCC.  Specifying the
17610     '-mcpu=CPU_TYPE' overrides the specification of these options.  We
17611     recommend you use the '-mcpu=CPU_TYPE' option rather than the
17612     options listed above.
17613
17614     Specifying '-mpowerpc-gpopt' allows GCC to use the optional PowerPC
17615     architecture instructions in the General Purpose group, including
17616     floating-point square root.  Specifying '-mpowerpc-gfxopt' allows
17617     GCC to use the optional PowerPC architecture instructions in the
17618     Graphics group, including floating-point select.
17619
17620     The '-mmfcrf' option allows GCC to generate the move from condition
17621     register field instruction implemented on the POWER4 processor and
17622     other processors that support the PowerPC V2.01 architecture.  The
17623     '-mpopcntb' option allows GCC to generate the popcount and
17624     double-precision FP reciprocal estimate instruction implemented on
17625     the POWER5 processor and other processors that support the PowerPC
17626     V2.02 architecture.  The '-mpopcntd' option allows GCC to generate
17627     the popcount instruction implemented on the POWER7 processor and
17628     other processors that support the PowerPC V2.06 architecture.  The
17629     '-mfprnd' option allows GCC to generate the FP round to integer
17630     instructions implemented on the POWER5+ processor and other
17631     processors that support the PowerPC V2.03 architecture.  The
17632     '-mcmpb' option allows GCC to generate the compare bytes
17633     instruction implemented on the POWER6 processor and other
17634     processors that support the PowerPC V2.05 architecture.  The
17635     '-mmfpgpr' option allows GCC to generate the FP move to/from
17636     general-purpose register instructions implemented on the POWER6X
17637     processor and other processors that support the extended PowerPC
17638     V2.05 architecture.  The '-mhard-dfp' option allows GCC to generate
17639     the decimal floating-point instructions implemented on some POWER
17640     processors.
17641
17642     The '-mpowerpc64' option allows GCC to generate the additional
17643     64-bit instructions that are found in the full PowerPC64
17644     architecture and to treat GPRs as 64-bit, doubleword quantities.
17645     GCC defaults to '-mno-powerpc64'.
17646
17647'-mcpu=CPU_TYPE'
17648     Set architecture type, register usage, and instruction scheduling
17649     parameters for machine type CPU_TYPE.  Supported values for
17650     CPU_TYPE are '401', '403', '405', '405fp', '440', '440fp', '464',
17651     '464fp', '476', '476fp', '505', '601', '602', '603', '603e', '604',
17652     '604e', '620', '630', '740', '7400', '7450', '750', '801', '821',
17653     '823', '860', '970', '8540', 'a2', 'e300c2', 'e300c3', 'e500mc',
17654     'e500mc64', 'e5500', 'e6500', 'ec603e', 'G3', 'G4', 'G5', 'titan',
17655     'power3', 'power4', 'power5', 'power5+', 'power6', 'power6x',
17656     'power7', 'power8', 'powerpc', 'powerpc64', and 'rs64'.
17657
17658     '-mcpu=powerpc', and '-mcpu=powerpc64' specify pure 32-bit PowerPC
17659     and 64-bit PowerPC architecture machine types, with an appropriate,
17660     generic processor model assumed for scheduling purposes.
17661
17662     The other options specify a specific processor.  Code generated
17663     under those options runs best on that processor, and may not run at
17664     all on others.
17665
17666     The '-mcpu' options automatically enable or disable the following
17667     options:
17668
17669          -maltivec  -mfprnd  -mhard-float  -mmfcrf  -mmultiple
17670          -mpopcntb -mpopcntd  -mpowerpc64
17671          -mpowerpc-gpopt  -mpowerpc-gfxopt  -msingle-float -mdouble-float
17672          -msimple-fpu -mstring  -mmulhw  -mdlmzb  -mmfpgpr -mvsx
17673          -mcrypto -mdirect-move -mpower8-fusion -mpower8-vector
17674          -mquad-memory -mquad-memory-atomic
17675
17676     The particular options set for any particular CPU varies between
17677     compiler versions, depending on what setting seems to produce
17678     optimal code for that CPU; it doesn't necessarily reflect the
17679     actual hardware's capabilities.  If you wish to set an individual
17680     option to a particular value, you may specify it after the '-mcpu'
17681     option, like '-mcpu=970 -mno-altivec'.
17682
17683     On AIX, the '-maltivec' and '-mpowerpc64' options are not enabled
17684     or disabled by the '-mcpu' option at present because AIX does not
17685     have full support for these options.  You may still enable or
17686     disable them individually if you're sure it'll work in your
17687     environment.
17688
17689'-mtune=CPU_TYPE'
17690     Set the instruction scheduling parameters for machine type
17691     CPU_TYPE, but do not set the architecture type or register usage,
17692     as '-mcpu=CPU_TYPE' does.  The same values for CPU_TYPE are used
17693     for '-mtune' as for '-mcpu'.  If both are specified, the code
17694     generated uses the architecture and registers set by '-mcpu', but
17695     the scheduling parameters set by '-mtune'.
17696
17697'-mcmodel=small'
17698     Generate PowerPC64 code for the small model: The TOC is limited to
17699     64k.
17700
17701'-mcmodel=medium'
17702     Generate PowerPC64 code for the medium model: The TOC and other
17703     static data may be up to a total of 4G in size.
17704
17705'-mcmodel=large'
17706     Generate PowerPC64 code for the large model: The TOC may be up to
17707     4G in size.  Other data and code is only limited by the 64-bit
17708     address space.
17709
17710'-maltivec'
17711'-mno-altivec'
17712     Generate code that uses (does not use) AltiVec instructions, and
17713     also enable the use of built-in functions that allow more direct
17714     access to the AltiVec instruction set.  You may also need to set
17715     '-mabi=altivec' to adjust the current ABI with AltiVec ABI
17716     enhancements.
17717
17718     When '-maltivec' is used, rather than '-maltivec=le' or
17719     '-maltivec=be', the element order for Altivec intrinsics such as
17720     'vec_splat', 'vec_extract', and 'vec_insert' will match array
17721     element order corresponding to the endianness of the target.  That
17722     is, element zero identifies the leftmost element in a vector
17723     register when targeting a big-endian platform, and identifies the
17724     rightmost element in a vector register when targeting a
17725     little-endian platform.
17726
17727'-maltivec=be'
17728     Generate Altivec instructions using big-endian element order,
17729     regardless of whether the target is big- or little-endian.  This is
17730     the default when targeting a big-endian platform.
17731
17732     The element order is used to interpret element numbers in Altivec
17733     intrinsics such as 'vec_splat', 'vec_extract', and 'vec_insert'.
17734     By default, these will match array element order corresponding to
17735     the endianness for the target.
17736
17737'-maltivec=le'
17738     Generate Altivec instructions using little-endian element order,
17739     regardless of whether the target is big- or little-endian.  This is
17740     the default when targeting a little-endian platform.  This option
17741     is currently ignored when targeting a big-endian platform.
17742
17743     The element order is used to interpret element numbers in Altivec
17744     intrinsics such as 'vec_splat', 'vec_extract', and 'vec_insert'.
17745     By default, these will match array element order corresponding to
17746     the endianness for the target.
17747
17748'-mvrsave'
17749'-mno-vrsave'
17750     Generate VRSAVE instructions when generating AltiVec code.
17751
17752'-mgen-cell-microcode'
17753     Generate Cell microcode instructions.
17754
17755'-mwarn-cell-microcode'
17756     Warn when a Cell microcode instruction is emitted.  An example of a
17757     Cell microcode instruction is a variable shift.
17758
17759'-msecure-plt'
17760     Generate code that allows 'ld' and 'ld.so' to build executables and
17761     shared libraries with non-executable '.plt' and '.got' sections.
17762     This is a PowerPC 32-bit SYSV ABI option.
17763
17764'-mbss-plt'
17765     Generate code that uses a BSS '.plt' section that 'ld.so' fills in,
17766     and requires '.plt' and '.got' sections that are both writable and
17767     executable.  This is a PowerPC 32-bit SYSV ABI option.
17768
17769'-misel'
17770'-mno-isel'
17771     This switch enables or disables the generation of ISEL
17772     instructions.
17773
17774'-misel=YES/NO'
17775     This switch has been deprecated.  Use '-misel' and '-mno-isel'
17776     instead.
17777
17778'-mspe'
17779'-mno-spe'
17780     This switch enables or disables the generation of SPE simd
17781     instructions.
17782
17783'-mpaired'
17784'-mno-paired'
17785     This switch enables or disables the generation of PAIRED simd
17786     instructions.
17787
17788'-mspe=YES/NO'
17789     This option has been deprecated.  Use '-mspe' and '-mno-spe'
17790     instead.
17791
17792'-mvsx'
17793'-mno-vsx'
17794     Generate code that uses (does not use) vector/scalar (VSX)
17795     instructions, and also enable the use of built-in functions that
17796     allow more direct access to the VSX instruction set.
17797
17798'-mcrypto'
17799'-mno-crypto'
17800     Enable the use (disable) of the built-in functions that allow
17801     direct access to the cryptographic instructions that were added in
17802     version 2.07 of the PowerPC ISA.
17803
17804'-mdirect-move'
17805'-mno-direct-move'
17806     Generate code that uses (does not use) the instructions to move
17807     data between the general purpose registers and the vector/scalar
17808     (VSX) registers that were added in version 2.07 of the PowerPC ISA.
17809
17810'-mpower8-fusion'
17811'-mno-power8-fusion'
17812     Generate code that keeps (does not keeps) some integer operations
17813     adjacent so that the instructions can be fused together on power8
17814     and later processors.
17815
17816'-mpower8-vector'
17817'-mno-power8-vector'
17818     Generate code that uses (does not use) the vector and scalar
17819     instructions that were added in version 2.07 of the PowerPC ISA.
17820     Also enable the use of built-in functions that allow more direct
17821     access to the vector instructions.
17822
17823'-mquad-memory'
17824'-mno-quad-memory'
17825     Generate code that uses (does not use) the non-atomic quad word
17826     memory instructions.  The '-mquad-memory' option requires use of
17827     64-bit mode.
17828
17829'-mquad-memory-atomic'
17830'-mno-quad-memory-atomic'
17831     Generate code that uses (does not use) the atomic quad word memory
17832     instructions.  The '-mquad-memory-atomic' option requires use of
17833     64-bit mode.
17834
17835'-mfloat-gprs=YES/SINGLE/DOUBLE/NO'
17836'-mfloat-gprs'
17837     This switch enables or disables the generation of floating-point
17838     operations on the general-purpose registers for architectures that
17839     support it.
17840
17841     The argument YES or SINGLE enables the use of single-precision
17842     floating-point operations.
17843
17844     The argument DOUBLE enables the use of single and double-precision
17845     floating-point operations.
17846
17847     The argument NO disables floating-point operations on the
17848     general-purpose registers.
17849
17850     This option is currently only available on the MPC854x.
17851
17852'-m32'
17853'-m64'
17854     Generate code for 32-bit or 64-bit environments of Darwin and SVR4
17855     targets (including GNU/Linux).  The 32-bit environment sets int,
17856     long and pointer to 32 bits and generates code that runs on any
17857     PowerPC variant.  The 64-bit environment sets int to 32 bits and
17858     long and pointer to 64 bits, and generates code for PowerPC64, as
17859     for '-mpowerpc64'.
17860
17861'-mfull-toc'
17862'-mno-fp-in-toc'
17863'-mno-sum-in-toc'
17864'-mminimal-toc'
17865     Modify generation of the TOC (Table Of Contents), which is created
17866     for every executable file.  The '-mfull-toc' option is selected by
17867     default.  In that case, GCC allocates at least one TOC entry for
17868     each unique non-automatic variable reference in your program.  GCC
17869     also places floating-point constants in the TOC.  However, only
17870     16,384 entries are available in the TOC.
17871
17872     If you receive a linker error message that saying you have
17873     overflowed the available TOC space, you can reduce the amount of
17874     TOC space used with the '-mno-fp-in-toc' and '-mno-sum-in-toc'
17875     options.  '-mno-fp-in-toc' prevents GCC from putting floating-point
17876     constants in the TOC and '-mno-sum-in-toc' forces GCC to generate
17877     code to calculate the sum of an address and a constant at run time
17878     instead of putting that sum into the TOC.  You may specify one or
17879     both of these options.  Each causes GCC to produce very slightly
17880     slower and larger code at the expense of conserving TOC space.
17881
17882     If you still run out of space in the TOC even when you specify both
17883     of these options, specify '-mminimal-toc' instead.  This option
17884     causes GCC to make only one TOC entry for every file.  When you
17885     specify this option, GCC produces code that is slower and larger
17886     but which uses extremely little TOC space.  You may wish to use
17887     this option only on files that contain less frequently-executed
17888     code.
17889
17890'-maix64'
17891'-maix32'
17892     Enable 64-bit AIX ABI and calling convention: 64-bit pointers,
17893     64-bit 'long' type, and the infrastructure needed to support them.
17894     Specifying '-maix64' implies '-mpowerpc64', while '-maix32'
17895     disables the 64-bit ABI and implies '-mno-powerpc64'.  GCC defaults
17896     to '-maix32'.
17897
17898'-mxl-compat'
17899'-mno-xl-compat'
17900     Produce code that conforms more closely to IBM XL compiler
17901     semantics when using AIX-compatible ABI.  Pass floating-point
17902     arguments to prototyped functions beyond the register save area
17903     (RSA) on the stack in addition to argument FPRs.  Do not assume
17904     that most significant double in 128-bit long double value is
17905     properly rounded when comparing values and converting to double.
17906     Use XL symbol names for long double support routines.
17907
17908     The AIX calling convention was extended but not initially
17909     documented to handle an obscure K&R C case of calling a function
17910     that takes the address of its arguments with fewer arguments than
17911     declared.  IBM XL compilers access floating-point arguments that do
17912     not fit in the RSA from the stack when a subroutine is compiled
17913     without optimization.  Because always storing floating-point
17914     arguments on the stack is inefficient and rarely needed, this
17915     option is not enabled by default and only is necessary when calling
17916     subroutines compiled by IBM XL compilers without optimization.
17917
17918'-mpe'
17919     Support "IBM RS/6000 SP" "Parallel Environment" (PE).  Link an
17920     application written to use message passing with special startup
17921     code to enable the application to run.  The system must have PE
17922     installed in the standard location ('/usr/lpp/ppe.poe/'), or the
17923     'specs' file must be overridden with the '-specs=' option to
17924     specify the appropriate directory location.  The Parallel
17925     Environment does not support threads, so the '-mpe' option and the
17926     '-pthread' option are incompatible.
17927
17928'-malign-natural'
17929'-malign-power'
17930     On AIX, 32-bit Darwin, and 64-bit PowerPC GNU/Linux, the option
17931     '-malign-natural' overrides the ABI-defined alignment of larger
17932     types, such as floating-point doubles, on their natural size-based
17933     boundary.  The option '-malign-power' instructs GCC to follow the
17934     ABI-specified alignment rules.  GCC defaults to the standard
17935     alignment defined in the ABI.
17936
17937     On 64-bit Darwin, natural alignment is the default, and
17938     '-malign-power' is not supported.
17939
17940'-msoft-float'
17941'-mhard-float'
17942     Generate code that does not use (uses) the floating-point register
17943     set.  Software floating-point emulation is provided if you use the
17944     '-msoft-float' option, and pass the option to GCC when linking.
17945
17946'-msingle-float'
17947'-mdouble-float'
17948     Generate code for single- or double-precision floating-point
17949     operations.  '-mdouble-float' implies '-msingle-float'.
17950
17951'-msimple-fpu'
17952     Do not generate 'sqrt' and 'div' instructions for hardware
17953     floating-point unit.
17954
17955'-mfpu=NAME'
17956     Specify type of floating-point unit.  Valid values for NAME are
17957     'sp_lite' (equivalent to '-msingle-float -msimple-fpu'), 'dp_lite'
17958     (equivalent to '-mdouble-float -msimple-fpu'), 'sp_full'
17959     (equivalent to '-msingle-float'), and 'dp_full' (equivalent to
17960     '-mdouble-float').
17961
17962'-mxilinx-fpu'
17963     Perform optimizations for the floating-point unit on Xilinx PPC
17964     405/440.
17965
17966'-mmultiple'
17967'-mno-multiple'
17968     Generate code that uses (does not use) the load multiple word
17969     instructions and the store multiple word instructions.  These
17970     instructions are generated by default on POWER systems, and not
17971     generated on PowerPC systems.  Do not use '-mmultiple' on
17972     little-endian PowerPC systems, since those instructions do not work
17973     when the processor is in little-endian mode.  The exceptions are
17974     PPC740 and PPC750 which permit these instructions in little-endian
17975     mode.
17976
17977'-mstring'
17978'-mno-string'
17979     Generate code that uses (does not use) the load string instructions
17980     and the store string word instructions to save multiple registers
17981     and do small block moves.  These instructions are generated by
17982     default on POWER systems, and not generated on PowerPC systems.  Do
17983     not use '-mstring' on little-endian PowerPC systems, since those
17984     instructions do not work when the processor is in little-endian
17985     mode.  The exceptions are PPC740 and PPC750 which permit these
17986     instructions in little-endian mode.
17987
17988'-mupdate'
17989'-mno-update'
17990     Generate code that uses (does not use) the load or store
17991     instructions that update the base register to the address of the
17992     calculated memory location.  These instructions are generated by
17993     default.  If you use '-mno-update', there is a small window between
17994     the time that the stack pointer is updated and the address of the
17995     previous frame is stored, which means code that walks the stack
17996     frame across interrupts or signals may get corrupted data.
17997
17998'-mavoid-indexed-addresses'
17999'-mno-avoid-indexed-addresses'
18000     Generate code that tries to avoid (not avoid) the use of indexed
18001     load or store instructions.  These instructions can incur a
18002     performance penalty on Power6 processors in certain situations,
18003     such as when stepping through large arrays that cross a 16M
18004     boundary.  This option is enabled by default when targeting Power6
18005     and disabled otherwise.
18006
18007'-mfused-madd'
18008'-mno-fused-madd'
18009     Generate code that uses (does not use) the floating-point multiply
18010     and accumulate instructions.  These instructions are generated by
18011     default if hardware floating point is used.  The machine-dependent
18012     '-mfused-madd' option is now mapped to the machine-independent
18013     '-ffp-contract=fast' option, and '-mno-fused-madd' is mapped to
18014     '-ffp-contract=off'.
18015
18016'-mmulhw'
18017'-mno-mulhw'
18018     Generate code that uses (does not use) the half-word multiply and
18019     multiply-accumulate instructions on the IBM 405, 440, 464 and 476
18020     processors.  These instructions are generated by default when
18021     targeting those processors.
18022
18023'-mdlmzb'
18024'-mno-dlmzb'
18025     Generate code that uses (does not use) the string-search 'dlmzb'
18026     instruction on the IBM 405, 440, 464 and 476 processors.  This
18027     instruction is generated by default when targeting those
18028     processors.
18029
18030'-mno-bit-align'
18031'-mbit-align'
18032     On System V.4 and embedded PowerPC systems do not (do) force
18033     structures and unions that contain bit-fields to be aligned to the
18034     base type of the bit-field.
18035
18036     For example, by default a structure containing nothing but 8
18037     'unsigned' bit-fields of length 1 is aligned to a 4-byte boundary
18038     and has a size of 4 bytes.  By using '-mno-bit-align', the
18039     structure is aligned to a 1-byte boundary and is 1 byte in size.
18040
18041'-mno-strict-align'
18042'-mstrict-align'
18043     On System V.4 and embedded PowerPC systems do not (do) assume that
18044     unaligned memory references are handled by the system.
18045
18046'-mrelocatable'
18047'-mno-relocatable'
18048     Generate code that allows (does not allow) a static executable to
18049     be relocated to a different address at run time.  A simple embedded
18050     PowerPC system loader should relocate the entire contents of
18051     '.got2' and 4-byte locations listed in the '.fixup' section, a
18052     table of 32-bit addresses generated by this option.  For this to
18053     work, all objects linked together must be compiled with
18054     '-mrelocatable' or '-mrelocatable-lib'.  '-mrelocatable' code
18055     aligns the stack to an 8-byte boundary.
18056
18057'-mrelocatable-lib'
18058'-mno-relocatable-lib'
18059     Like '-mrelocatable', '-mrelocatable-lib' generates a '.fixup'
18060     section to allow static executables to be relocated at run time,
18061     but '-mrelocatable-lib' does not use the smaller stack alignment of
18062     '-mrelocatable'.  Objects compiled with '-mrelocatable-lib' may be
18063     linked with objects compiled with any combination of the
18064     '-mrelocatable' options.
18065
18066'-mno-toc'
18067'-mtoc'
18068     On System V.4 and embedded PowerPC systems do not (do) assume that
18069     register 2 contains a pointer to a global area pointing to the
18070     addresses used in the program.
18071
18072'-mlittle'
18073'-mlittle-endian'
18074     On System V.4 and embedded PowerPC systems compile code for the
18075     processor in little-endian mode.  The '-mlittle-endian' option is
18076     the same as '-mlittle'.
18077
18078'-mbig'
18079'-mbig-endian'
18080     On System V.4 and embedded PowerPC systems compile code for the
18081     processor in big-endian mode.  The '-mbig-endian' option is the
18082     same as '-mbig'.
18083
18084'-mdynamic-no-pic'
18085     On Darwin and Mac OS X systems, compile code so that it is not
18086     relocatable, but that its external references are relocatable.  The
18087     resulting code is suitable for applications, but not shared
18088     libraries.
18089
18090'-msingle-pic-base'
18091     Treat the register used for PIC addressing as read-only, rather
18092     than loading it in the prologue for each function.  The runtime
18093     system is responsible for initializing this register with an
18094     appropriate value before execution begins.
18095
18096'-mprioritize-restricted-insns=PRIORITY'
18097     This option controls the priority that is assigned to dispatch-slot
18098     restricted instructions during the second scheduling pass.  The
18099     argument PRIORITY takes the value '0', '1', or '2' to assign no,
18100     highest, or second-highest (respectively) priority to dispatch-slot
18101     restricted instructions.
18102
18103'-msched-costly-dep=DEPENDENCE_TYPE'
18104     This option controls which dependences are considered costly by the
18105     target during instruction scheduling.  The argument DEPENDENCE_TYPE
18106     takes one of the following values:
18107
18108     'no'
18109          No dependence is costly.
18110
18111     'all'
18112          All dependences are costly.
18113
18114     'true_store_to_load'
18115          A true dependence from store to load is costly.
18116
18117     'store_to_load'
18118          Any dependence from store to load is costly.
18119
18120     NUMBER
18121          Any dependence for which the latency is greater than or equal
18122          to NUMBER is costly.
18123
18124'-minsert-sched-nops=SCHEME'
18125     This option controls which NOP insertion scheme is used during the
18126     second scheduling pass.  The argument SCHEME takes one of the
18127     following values:
18128
18129     'no'
18130          Don't insert NOPs.
18131
18132     'pad'
18133          Pad with NOPs any dispatch group that has vacant issue slots,
18134          according to the scheduler's grouping.
18135
18136     'regroup_exact'
18137          Insert NOPs to force costly dependent insns into separate
18138          groups.  Insert exactly as many NOPs as needed to force an
18139          insn to a new group, according to the estimated processor
18140          grouping.
18141
18142     NUMBER
18143          Insert NOPs to force costly dependent insns into separate
18144          groups.  Insert NUMBER NOPs to force an insn to a new group.
18145
18146'-mcall-sysv'
18147     On System V.4 and embedded PowerPC systems compile code using
18148     calling conventions that adhere to the March 1995 draft of the
18149     System V Application Binary Interface, PowerPC processor
18150     supplement.  This is the default unless you configured GCC using
18151     'powerpc-*-eabiaix'.
18152
18153'-mcall-sysv-eabi'
18154'-mcall-eabi'
18155     Specify both '-mcall-sysv' and '-meabi' options.
18156
18157'-mcall-sysv-noeabi'
18158     Specify both '-mcall-sysv' and '-mno-eabi' options.
18159
18160'-mcall-aixdesc'
18161     On System V.4 and embedded PowerPC systems compile code for the AIX
18162     operating system.
18163
18164'-mcall-linux'
18165     On System V.4 and embedded PowerPC systems compile code for the
18166     Linux-based GNU system.
18167
18168'-mcall-freebsd'
18169     On System V.4 and embedded PowerPC systems compile code for the
18170     FreeBSD operating system.
18171
18172'-mcall-netbsd'
18173     On System V.4 and embedded PowerPC systems compile code for the
18174     NetBSD operating system.
18175
18176'-mcall-openbsd'
18177     On System V.4 and embedded PowerPC systems compile code for the
18178     OpenBSD operating system.
18179
18180'-maix-struct-return'
18181     Return all structures in memory (as specified by the AIX ABI).
18182
18183'-msvr4-struct-return'
18184     Return structures smaller than 8 bytes in registers (as specified
18185     by the SVR4 ABI).
18186
18187'-mabi=ABI-TYPE'
18188     Extend the current ABI with a particular extension, or remove such
18189     extension.  Valid values are ALTIVEC, NO-ALTIVEC, SPE, NO-SPE,
18190     IBMLONGDOUBLE, IEEELONGDOUBLE, ELFV1, ELFV2.
18191
18192'-mabi=spe'
18193     Extend the current ABI with SPE ABI extensions.  This does not
18194     change the default ABI, instead it adds the SPE ABI extensions to
18195     the current ABI.
18196
18197'-mabi=no-spe'
18198     Disable Book-E SPE ABI extensions for the current ABI.
18199
18200'-mabi=ibmlongdouble'
18201     Change the current ABI to use IBM extended-precision long double.
18202     This is a PowerPC 32-bit SYSV ABI option.
18203
18204'-mabi=ieeelongdouble'
18205     Change the current ABI to use IEEE extended-precision long double.
18206     This is a PowerPC 32-bit Linux ABI option.
18207
18208'-mabi=elfv1'
18209     Change the current ABI to use the ELFv1 ABI. This is the default
18210     ABI for big-endian PowerPC 64-bit Linux.  Overriding the default
18211     ABI requires special system support and is likely to fail in
18212     spectacular ways.
18213
18214'-mabi=elfv2'
18215     Change the current ABI to use the ELFv2 ABI. This is the default
18216     ABI for little-endian PowerPC 64-bit Linux.  Overriding the default
18217     ABI requires special system support and is likely to fail in
18218     spectacular ways.
18219
18220'-mprototype'
18221'-mno-prototype'
18222     On System V.4 and embedded PowerPC systems assume that all calls to
18223     variable argument functions are properly prototyped.  Otherwise,
18224     the compiler must insert an instruction before every non-prototyped
18225     call to set or clear bit 6 of the condition code register (CR) to
18226     indicate whether floating-point values are passed in the
18227     floating-point registers in case the function takes variable
18228     arguments.  With '-mprototype', only calls to prototyped variable
18229     argument functions set or clear the bit.
18230
18231'-msim'
18232     On embedded PowerPC systems, assume that the startup module is
18233     called 'sim-crt0.o' and that the standard C libraries are
18234     'libsim.a' and 'libc.a'.  This is the default for
18235     'powerpc-*-eabisim' configurations.
18236
18237'-mmvme'
18238     On embedded PowerPC systems, assume that the startup module is
18239     called 'crt0.o' and the standard C libraries are 'libmvme.a' and
18240     'libc.a'.
18241
18242'-mads'
18243     On embedded PowerPC systems, assume that the startup module is
18244     called 'crt0.o' and the standard C libraries are 'libads.a' and
18245     'libc.a'.
18246
18247'-myellowknife'
18248     On embedded PowerPC systems, assume that the startup module is
18249     called 'crt0.o' and the standard C libraries are 'libyk.a' and
18250     'libc.a'.
18251
18252'-mvxworks'
18253     On System V.4 and embedded PowerPC systems, specify that you are
18254     compiling for a VxWorks system.
18255
18256'-memb'
18257     On embedded PowerPC systems, set the PPC_EMB bit in the ELF flags
18258     header to indicate that 'eabi' extended relocations are used.
18259
18260'-meabi'
18261'-mno-eabi'
18262     On System V.4 and embedded PowerPC systems do (do not) adhere to
18263     the Embedded Applications Binary Interface (EABI), which is a set
18264     of modifications to the System V.4 specifications.  Selecting
18265     '-meabi' means that the stack is aligned to an 8-byte boundary, a
18266     function '__eabi' is called from 'main' to set up the EABI
18267     environment, and the '-msdata' option can use both 'r2' and 'r13'
18268     to point to two separate small data areas.  Selecting '-mno-eabi'
18269     means that the stack is aligned to a 16-byte boundary, no EABI
18270     initialization function is called from 'main', and the '-msdata'
18271     option only uses 'r13' to point to a single small data area.  The
18272     '-meabi' option is on by default if you configured GCC using one of
18273     the 'powerpc*-*-eabi*' options.
18274
18275'-msdata=eabi'
18276     On System V.4 and embedded PowerPC systems, put small initialized
18277     'const' global and static data in the '.sdata2' section, which is
18278     pointed to by register 'r2'.  Put small initialized non-'const'
18279     global and static data in the '.sdata' section, which is pointed to
18280     by register 'r13'.  Put small uninitialized global and static data
18281     in the '.sbss' section, which is adjacent to the '.sdata' section.
18282     The '-msdata=eabi' option is incompatible with the '-mrelocatable'
18283     option.  The '-msdata=eabi' option also sets the '-memb' option.
18284
18285'-msdata=sysv'
18286     On System V.4 and embedded PowerPC systems, put small global and
18287     static data in the '.sdata' section, which is pointed to by
18288     register 'r13'.  Put small uninitialized global and static data in
18289     the '.sbss' section, which is adjacent to the '.sdata' section.
18290     The '-msdata=sysv' option is incompatible with the '-mrelocatable'
18291     option.
18292
18293'-msdata=default'
18294'-msdata'
18295     On System V.4 and embedded PowerPC systems, if '-meabi' is used,
18296     compile code the same as '-msdata=eabi', otherwise compile code the
18297     same as '-msdata=sysv'.
18298
18299'-msdata=data'
18300     On System V.4 and embedded PowerPC systems, put small global data
18301     in the '.sdata' section.  Put small uninitialized global data in
18302     the '.sbss' section.  Do not use register 'r13' to address small
18303     data however.  This is the default behavior unless other '-msdata'
18304     options are used.
18305
18306'-msdata=none'
18307'-mno-sdata'
18308     On embedded PowerPC systems, put all initialized global and static
18309     data in the '.data' section, and all uninitialized data in the
18310     '.bss' section.
18311
18312'-mblock-move-inline-limit=NUM'
18313     Inline all block moves (such as calls to 'memcpy' or structure
18314     copies) less than or equal to NUM bytes.  The minimum value for NUM
18315     is 32 bytes on 32-bit targets and 64 bytes on 64-bit targets.  The
18316     default value is target-specific.
18317
18318'-G NUM'
18319     On embedded PowerPC systems, put global and static items less than
18320     or equal to NUM bytes into the small data or BSS sections instead
18321     of the normal data or BSS section.  By default, NUM is 8.  The '-G
18322     NUM' switch is also passed to the linker.  All modules should be
18323     compiled with the same '-G NUM' value.
18324
18325'-mregnames'
18326'-mno-regnames'
18327     On System V.4 and embedded PowerPC systems do (do not) emit
18328     register names in the assembly language output using symbolic
18329     forms.
18330
18331'-mlongcall'
18332'-mno-longcall'
18333     By default assume that all calls are far away so that a longer and
18334     more expensive calling sequence is required.  This is required for
18335     calls farther than 32 megabytes (33,554,432 bytes) from the current
18336     location.  A short call is generated if the compiler knows the call
18337     cannot be that far away.  This setting can be overridden by the
18338     'shortcall' function attribute, or by '#pragma longcall(0)'.
18339
18340     Some linkers are capable of detecting out-of-range calls and
18341     generating glue code on the fly.  On these systems, long calls are
18342     unnecessary and generate slower code.  As of this writing, the AIX
18343     linker can do this, as can the GNU linker for PowerPC/64.  It is
18344     planned to add this feature to the GNU linker for 32-bit PowerPC
18345     systems as well.
18346
18347     On Darwin/PPC systems, '#pragma longcall' generates 'jbsr callee,
18348     L42', plus a "branch island" (glue code).  The two target addresses
18349     represent the callee and the branch island.  The Darwin/PPC linker
18350     prefers the first address and generates a 'bl callee' if the PPC
18351     'bl' instruction reaches the callee directly; otherwise, the linker
18352     generates 'bl L42' to call the branch island.  The branch island is
18353     appended to the body of the calling function; it computes the full
18354     32-bit address of the callee and jumps to it.
18355
18356     On Mach-O (Darwin) systems, this option directs the compiler emit
18357     to the glue for every direct call, and the Darwin linker decides
18358     whether to use or discard it.
18359
18360     In the future, GCC may ignore all longcall specifications when the
18361     linker is known to generate glue.
18362
18363'-mtls-markers'
18364'-mno-tls-markers'
18365     Mark (do not mark) calls to '__tls_get_addr' with a relocation
18366     specifying the function argument.  The relocation allows the linker
18367     to reliably associate function call with argument setup
18368     instructions for TLS optimization, which in turn allows GCC to
18369     better schedule the sequence.
18370
18371'-pthread'
18372     Adds support for multithreading with the "pthreads" library.  This
18373     option sets flags for both the preprocessor and linker.
18374
18375'-mrecip'
18376'-mno-recip'
18377     This option enables use of the reciprocal estimate and reciprocal
18378     square root estimate instructions with additional Newton-Raphson
18379     steps to increase precision instead of doing a divide or square
18380     root and divide for floating-point arguments.  You should use the
18381     '-ffast-math' option when using '-mrecip' (or at least
18382     '-funsafe-math-optimizations', '-finite-math-only',
18383     '-freciprocal-math' and '-fno-trapping-math').  Note that while the
18384     throughput of the sequence is generally higher than the throughput
18385     of the non-reciprocal instruction, the precision of the sequence
18386     can be decreased by up to 2 ulp (i.e. the inverse of 1.0 equals
18387     0.99999994) for reciprocal square roots.
18388
18389'-mrecip=OPT'
18390     This option controls which reciprocal estimate instructions may be
18391     used.  OPT is a comma-separated list of options, which may be
18392     preceded by a '!' to invert the option: 'all': enable all estimate
18393     instructions, 'default': enable the default instructions,
18394     equivalent to '-mrecip', 'none': disable all estimate instructions,
18395     equivalent to '-mno-recip'; 'div': enable the reciprocal
18396     approximation instructions for both single and double precision;
18397     'divf': enable the single-precision reciprocal approximation
18398     instructions; 'divd': enable the double-precision reciprocal
18399     approximation instructions; 'rsqrt': enable the reciprocal square
18400     root approximation instructions for both single and double
18401     precision; 'rsqrtf': enable the single-precision reciprocal square
18402     root approximation instructions; 'rsqrtd': enable the
18403     double-precision reciprocal square root approximation instructions;
18404
18405     So, for example, '-mrecip=all,!rsqrtd' enables all of the
18406     reciprocal estimate instructions, except for the 'FRSQRTE',
18407     'XSRSQRTEDP', and 'XVRSQRTEDP' instructions which handle the
18408     double-precision reciprocal square root calculations.
18409
18410'-mrecip-precision'
18411'-mno-recip-precision'
18412     Assume (do not assume) that the reciprocal estimate instructions
18413     provide higher-precision estimates than is mandated by the PowerPC
18414     ABI. Selecting '-mcpu=power6', '-mcpu=power7' or '-mcpu=power8'
18415     automatically selects '-mrecip-precision'.  The double-precision
18416     square root estimate instructions are not generated by default on
18417     low-precision machines, since they do not provide an estimate that
18418     converges after three steps.
18419
18420'-mveclibabi=TYPE'
18421     Specifies the ABI type to use for vectorizing intrinsics using an
18422     external library.  The only type supported at present is 'mass',
18423     which specifies to use IBM's Mathematical Acceleration Subsystem
18424     (MASS) libraries for vectorizing intrinsics using external
18425     libraries.  GCC currently emits calls to 'acosd2', 'acosf4',
18426     'acoshd2', 'acoshf4', 'asind2', 'asinf4', 'asinhd2', 'asinhf4',
18427     'atan2d2', 'atan2f4', 'atand2', 'atanf4', 'atanhd2', 'atanhf4',
18428     'cbrtd2', 'cbrtf4', 'cosd2', 'cosf4', 'coshd2', 'coshf4', 'erfcd2',
18429     'erfcf4', 'erfd2', 'erff4', 'exp2d2', 'exp2f4', 'expd2', 'expf4',
18430     'expm1d2', 'expm1f4', 'hypotd2', 'hypotf4', 'lgammad2', 'lgammaf4',
18431     'log10d2', 'log10f4', 'log1pd2', 'log1pf4', 'log2d2', 'log2f4',
18432     'logd2', 'logf4', 'powd2', 'powf4', 'sind2', 'sinf4', 'sinhd2',
18433     'sinhf4', 'sqrtd2', 'sqrtf4', 'tand2', 'tanf4', 'tanhd2', and
18434     'tanhf4' when generating code for power7.  Both '-ftree-vectorize'
18435     and '-funsafe-math-optimizations' must also be enabled.  The MASS
18436     libraries must be specified at link time.
18437
18438'-mfriz'
18439'-mno-friz'
18440     Generate (do not generate) the 'friz' instruction when the
18441     '-funsafe-math-optimizations' option is used to optimize rounding
18442     of floating-point values to 64-bit integer and back to floating
18443     point.  The 'friz' instruction does not return the same value if
18444     the floating-point number is too large to fit in an integer.
18445
18446'-mpointers-to-nested-functions'
18447'-mno-pointers-to-nested-functions'
18448     Generate (do not generate) code to load up the static chain
18449     register (R11) when calling through a pointer on AIX and 64-bit
18450     Linux systems where a function pointer points to a 3-word
18451     descriptor giving the function address, TOC value to be loaded in
18452     register R2, and static chain value to be loaded in register R11.
18453     The '-mpointers-to-nested-functions' is on by default.  You cannot
18454     call through pointers to nested functions or pointers to functions
18455     compiled in other languages that use the static chain if you use
18456     the '-mno-pointers-to-nested-functions'.
18457
18458'-msave-toc-indirect'
18459'-mno-save-toc-indirect'
18460     Generate (do not generate) code to save the TOC value in the
18461     reserved stack location in the function prologue if the function
18462     calls through a pointer on AIX and 64-bit Linux systems.  If the
18463     TOC value is not saved in the prologue, it is saved just before the
18464     call through the pointer.  The '-mno-save-toc-indirect' option is
18465     the default.
18466
18467'-mcompat-align-parm'
18468'-mno-compat-align-parm'
18469     Generate (do not generate) code to pass structure parameters with a
18470     maximum alignment of 64 bits, for compatibility with older versions
18471     of GCC.
18472
18473     Older versions of GCC (prior to 4.9.0) incorrectly did not align a
18474     structure parameter on a 128-bit boundary when that structure
18475     contained a member requiring 128-bit alignment.  This is corrected
18476     in more recent versions of GCC. This option may be used to generate
18477     code that is compatible with functions compiled with older versions
18478     of GCC.
18479
18480     The '-mno-compat-align-parm' option is the default.
18481
18482
18483File: gcc.info,  Node: RX Options,  Next: S/390 and zSeries Options,  Prev: RS/6000 and PowerPC Options,  Up: Submodel Options
18484
184853.17.39 RX Options
18486------------------
18487
18488These command-line options are defined for RX targets:
18489
18490'-m64bit-doubles'
18491'-m32bit-doubles'
18492     Make the 'double' data type be 64 bits ('-m64bit-doubles') or 32
18493     bits ('-m32bit-doubles') in size.  The default is
18494     '-m32bit-doubles'.  _Note_ RX floating-point hardware only works on
18495     32-bit values, which is why the default is '-m32bit-doubles'.
18496
18497'-fpu'
18498'-nofpu'
18499     Enables ('-fpu') or disables ('-nofpu') the use of RX
18500     floating-point hardware.  The default is enabled for the RX600
18501     series and disabled for the RX200 series.
18502
18503     Floating-point instructions are only generated for 32-bit
18504     floating-point values, however, so the FPU hardware is not used for
18505     doubles if the '-m64bit-doubles' option is used.
18506
18507     _Note_ If the '-fpu' option is enabled then
18508     '-funsafe-math-optimizations' is also enabled automatically.  This
18509     is because the RX FPU instructions are themselves unsafe.
18510
18511'-mcpu=NAME'
18512     Selects the type of RX CPU to be targeted.  Currently three types
18513     are supported, the generic RX600 and RX200 series hardware and the
18514     specific RX610 CPU. The default is RX600.
18515
18516     The only difference between RX600 and RX610 is that the RX610 does
18517     not support the 'MVTIPL' instruction.
18518
18519     The RX200 series does not have a hardware floating-point unit and
18520     so '-nofpu' is enabled by default when this type is selected.
18521
18522'-mbig-endian-data'
18523'-mlittle-endian-data'
18524     Store data (but not code) in the big-endian format.  The default is
18525     '-mlittle-endian-data', i.e. to store data in the little-endian
18526     format.
18527
18528'-msmall-data-limit=N'
18529     Specifies the maximum size in bytes of global and static variables
18530     which can be placed into the small data area.  Using the small data
18531     area can lead to smaller and faster code, but the size of area is
18532     limited and it is up to the programmer to ensure that the area does
18533     not overflow.  Also when the small data area is used one of the
18534     RX's registers (usually 'r13') is reserved for use pointing to this
18535     area, so it is no longer available for use by the compiler.  This
18536     could result in slower and/or larger code if variables are pushed
18537     onto the stack instead of being held in this register.
18538
18539     Note, common variables (variables that have not been initialized)
18540     and constants are not placed into the small data area as they are
18541     assigned to other sections in the output executable.
18542
18543     The default value is zero, which disables this feature.  Note, this
18544     feature is not enabled by default with higher optimization levels
18545     ('-O2' etc) because of the potentially detrimental effects of
18546     reserving a register.  It is up to the programmer to experiment and
18547     discover whether this feature is of benefit to their program.  See
18548     the description of the '-mpid' option for a description of how the
18549     actual register to hold the small data area pointer is chosen.
18550
18551'-msim'
18552'-mno-sim'
18553     Use the simulator runtime.  The default is to use the libgloss
18554     board-specific runtime.
18555
18556'-mas100-syntax'
18557'-mno-as100-syntax'
18558     When generating assembler output use a syntax that is compatible
18559     with Renesas's AS100 assembler.  This syntax can also be handled by
18560     the GAS assembler, but it has some restrictions so it is not
18561     generated by default.
18562
18563'-mmax-constant-size=N'
18564     Specifies the maximum size, in bytes, of a constant that can be
18565     used as an operand in a RX instruction.  Although the RX
18566     instruction set does allow constants of up to 4 bytes in length to
18567     be used in instructions, a longer value equates to a longer
18568     instruction.  Thus in some circumstances it can be beneficial to
18569     restrict the size of constants that are used in instructions.
18570     Constants that are too big are instead placed into a constant pool
18571     and referenced via register indirection.
18572
18573     The value N can be between 0 and 4.  A value of 0 (the default) or
18574     4 means that constants of any size are allowed.
18575
18576'-mrelax'
18577     Enable linker relaxation.  Linker relaxation is a process whereby
18578     the linker attempts to reduce the size of a program by finding
18579     shorter versions of various instructions.  Disabled by default.
18580
18581'-mint-register=N'
18582     Specify the number of registers to reserve for fast interrupt
18583     handler functions.  The value N can be between 0 and 4.  A value of
18584     1 means that register 'r13' is reserved for the exclusive use of
18585     fast interrupt handlers.  A value of 2 reserves 'r13' and 'r12'.  A
18586     value of 3 reserves 'r13', 'r12' and 'r11', and a value of 4
18587     reserves 'r13' through 'r10'.  A value of 0, the default, does not
18588     reserve any registers.
18589
18590'-msave-acc-in-interrupts'
18591     Specifies that interrupt handler functions should preserve the
18592     accumulator register.  This is only necessary if normal code might
18593     use the accumulator register, for example because it performs
18594     64-bit multiplications.  The default is to ignore the accumulator
18595     as this makes the interrupt handlers faster.
18596
18597'-mpid'
18598'-mno-pid'
18599     Enables the generation of position independent data.  When enabled
18600     any access to constant data is done via an offset from a base
18601     address held in a register.  This allows the location of constant
18602     data to be determined at run time without requiring the executable
18603     to be relocated, which is a benefit to embedded applications with
18604     tight memory constraints.  Data that can be modified is not
18605     affected by this option.
18606
18607     Note, using this feature reserves a register, usually 'r13', for
18608     the constant data base address.  This can result in slower and/or
18609     larger code, especially in complicated functions.
18610
18611     The actual register chosen to hold the constant data base address
18612     depends upon whether the '-msmall-data-limit' and/or the
18613     '-mint-register' command-line options are enabled.  Starting with
18614     register 'r13' and proceeding downwards, registers are allocated
18615     first to satisfy the requirements of '-mint-register', then '-mpid'
18616     and finally '-msmall-data-limit'.  Thus it is possible for the
18617     small data area register to be 'r8' if both '-mint-register=4' and
18618     '-mpid' are specified on the command line.
18619
18620     By default this feature is not enabled.  The default can be
18621     restored via the '-mno-pid' command-line option.
18622
18623'-mno-warn-multiple-fast-interrupts'
18624'-mwarn-multiple-fast-interrupts'
18625     Prevents GCC from issuing a warning message if it finds more than
18626     one fast interrupt handler when it is compiling a file.  The
18627     default is to issue a warning for each extra fast interrupt handler
18628     found, as the RX only supports one such interrupt.
18629
18630 _Note:_ The generic GCC command-line option '-ffixed-REG' has special
18631significance to the RX port when used with the 'interrupt' function
18632attribute.  This attribute indicates a function intended to process fast
18633interrupts.  GCC ensures that it only uses the registers 'r10', 'r11',
18634'r12' and/or 'r13' and only provided that the normal use of the
18635corresponding registers have been restricted via the '-ffixed-REG' or
18636'-mint-register' command-line options.
18637
18638
18639File: gcc.info,  Node: S/390 and zSeries Options,  Next: Score Options,  Prev: RX Options,  Up: Submodel Options
18640
186413.17.40 S/390 and zSeries Options
18642---------------------------------
18643
18644These are the '-m' options defined for the S/390 and zSeries
18645architecture.
18646
18647'-mhard-float'
18648'-msoft-float'
18649     Use (do not use) the hardware floating-point instructions and
18650     registers for floating-point operations.  When '-msoft-float' is
18651     specified, functions in 'libgcc.a' are used to perform
18652     floating-point operations.  When '-mhard-float' is specified, the
18653     compiler generates IEEE floating-point instructions.  This is the
18654     default.
18655
18656'-mhard-dfp'
18657'-mno-hard-dfp'
18658     Use (do not use) the hardware decimal-floating-point instructions
18659     for decimal-floating-point operations.  When '-mno-hard-dfp' is
18660     specified, functions in 'libgcc.a' are used to perform
18661     decimal-floating-point operations.  When '-mhard-dfp' is specified,
18662     the compiler generates decimal-floating-point hardware
18663     instructions.  This is the default for '-march=z9-ec' or higher.
18664
18665'-mlong-double-64'
18666'-mlong-double-128'
18667     These switches control the size of 'long double' type.  A size of
18668     64 bits makes the 'long double' type equivalent to the 'double'
18669     type.  This is the default.
18670
18671'-mbackchain'
18672'-mno-backchain'
18673     Store (do not store) the address of the caller's frame as backchain
18674     pointer into the callee's stack frame.  A backchain may be needed
18675     to allow debugging using tools that do not understand DWARF 2 call
18676     frame information.  When '-mno-packed-stack' is in effect, the
18677     backchain pointer is stored at the bottom of the stack frame; when
18678     '-mpacked-stack' is in effect, the backchain is placed into the
18679     topmost word of the 96/160 byte register save area.
18680
18681     In general, code compiled with '-mbackchain' is call-compatible
18682     with code compiled with '-mmo-backchain'; however, use of the
18683     backchain for debugging purposes usually requires that the whole
18684     binary is built with '-mbackchain'.  Note that the combination of
18685     '-mbackchain', '-mpacked-stack' and '-mhard-float' is not
18686     supported.  In order to build a linux kernel use '-msoft-float'.
18687
18688     The default is to not maintain the backchain.
18689
18690'-mpacked-stack'
18691'-mno-packed-stack'
18692     Use (do not use) the packed stack layout.  When '-mno-packed-stack'
18693     is specified, the compiler uses the all fields of the 96/160 byte
18694     register save area only for their default purpose; unused fields
18695     still take up stack space.  When '-mpacked-stack' is specified,
18696     register save slots are densely packed at the top of the register
18697     save area; unused space is reused for other purposes, allowing for
18698     more efficient use of the available stack space.  However, when
18699     '-mbackchain' is also in effect, the topmost word of the save area
18700     is always used to store the backchain, and the return address
18701     register is always saved two words below the backchain.
18702
18703     As long as the stack frame backchain is not used, code generated
18704     with '-mpacked-stack' is call-compatible with code generated with
18705     '-mno-packed-stack'.  Note that some non-FSF releases of GCC 2.95
18706     for S/390 or zSeries generated code that uses the stack frame
18707     backchain at run time, not just for debugging purposes.  Such code
18708     is not call-compatible with code compiled with '-mpacked-stack'.
18709     Also, note that the combination of '-mbackchain', '-mpacked-stack'
18710     and '-mhard-float' is not supported.  In order to build a linux
18711     kernel use '-msoft-float'.
18712
18713     The default is to not use the packed stack layout.
18714
18715'-msmall-exec'
18716'-mno-small-exec'
18717     Generate (or do not generate) code using the 'bras' instruction to
18718     do subroutine calls.  This only works reliably if the total
18719     executable size does not exceed 64k.  The default is to use the
18720     'basr' instruction instead, which does not have this limitation.
18721
18722'-m64'
18723'-m31'
18724     When '-m31' is specified, generate code compliant to the GNU/Linux
18725     for S/390 ABI.  When '-m64' is specified, generate code compliant
18726     to the GNU/Linux for zSeries ABI.  This allows GCC in particular to
18727     generate 64-bit instructions.  For the 's390' targets, the default
18728     is '-m31', while the 's390x' targets default to '-m64'.
18729
18730'-mzarch'
18731'-mesa'
18732     When '-mzarch' is specified, generate code using the instructions
18733     available on z/Architecture.  When '-mesa' is specified, generate
18734     code using the instructions available on ESA/390.  Note that
18735     '-mesa' is not possible with '-m64'.  When generating code
18736     compliant to the GNU/Linux for S/390 ABI, the default is '-mesa'.
18737     When generating code compliant to the GNU/Linux for zSeries ABI,
18738     the default is '-mzarch'.
18739
18740'-mmvcle'
18741'-mno-mvcle'
18742     Generate (or do not generate) code using the 'mvcle' instruction to
18743     perform block moves.  When '-mno-mvcle' is specified, use a 'mvc'
18744     loop instead.  This is the default unless optimizing for size.
18745
18746'-mdebug'
18747'-mno-debug'
18748     Print (or do not print) additional debug information when
18749     compiling.  The default is to not print debug information.
18750
18751'-march=CPU-TYPE'
18752     Generate code that runs on CPU-TYPE, which is the name of a system
18753     representing a certain processor type.  Possible values for
18754     CPU-TYPE are 'g5', 'g6', 'z900', 'z990', 'z9-109', 'z9-ec' and
18755     'z10'.  When generating code using the instructions available on
18756     z/Architecture, the default is '-march=z900'.  Otherwise, the
18757     default is '-march=g5'.
18758
18759'-mtune=CPU-TYPE'
18760     Tune to CPU-TYPE everything applicable about the generated code,
18761     except for the ABI and the set of available instructions.  The list
18762     of CPU-TYPE values is the same as for '-march'.  The default is the
18763     value used for '-march'.
18764
18765'-mtpf-trace'
18766'-mno-tpf-trace'
18767     Generate code that adds (does not add) in TPF OS specific branches
18768     to trace routines in the operating system.  This option is off by
18769     default, even when compiling for the TPF OS.
18770
18771'-mfused-madd'
18772'-mno-fused-madd'
18773     Generate code that uses (does not use) the floating-point multiply
18774     and accumulate instructions.  These instructions are generated by
18775     default if hardware floating point is used.
18776
18777'-mwarn-framesize=FRAMESIZE'
18778     Emit a warning if the current function exceeds the given frame
18779     size.  Because this is a compile-time check it doesn't need to be a
18780     real problem when the program runs.  It is intended to identify
18781     functions that most probably cause a stack overflow.  It is useful
18782     to be used in an environment with limited stack size e.g. the linux
18783     kernel.
18784
18785'-mwarn-dynamicstack'
18786     Emit a warning if the function calls 'alloca' or uses
18787     dynamically-sized arrays.  This is generally a bad idea with a
18788     limited stack size.
18789
18790'-mstack-guard=STACK-GUARD'
18791'-mstack-size=STACK-SIZE'
18792     If these options are provided the S/390 back end emits additional
18793     instructions in the function prologue that trigger a trap if the
18794     stack size is STACK-GUARD bytes above the STACK-SIZE (remember that
18795     the stack on S/390 grows downward).  If the STACK-GUARD option is
18796     omitted the smallest power of 2 larger than the frame size of the
18797     compiled function is chosen.  These options are intended to be used
18798     to help debugging stack overflow problems.  The additionally
18799     emitted code causes only little overhead and hence can also be used
18800     in production-like systems without greater performance degradation.
18801     The given values have to be exact powers of 2 and STACK-SIZE has to
18802     be greater than STACK-GUARD without exceeding 64k.  In order to be
18803     efficient the extra code makes the assumption that the stack starts
18804     at an address aligned to the value given by STACK-SIZE.  The
18805     STACK-GUARD option can only be used in conjunction with STACK-SIZE.
18806
18807'-mhotpatch[=HALFWORDS]'
18808'-mno-hotpatch'
18809     If the hotpatch option is enabled, a "hot-patching" function
18810     prologue is generated for all functions in the compilation unit.
18811     The funtion label is prepended with the given number of two-byte
18812     Nop instructions (HALFWORDS, maximum 1000000) or 12 Nop
18813     instructions if no argument is present.  Functions with a
18814     hot-patching prologue are never inlined automatically, and a
18815     hot-patching prologue is never generated for functions functions
18816     that are explicitly inline.
18817
18818     This option can be overridden for individual functions with the
18819     'hotpatch' attribute.
18820
18821
18822File: gcc.info,  Node: Score Options,  Next: SH Options,  Prev: S/390 and zSeries Options,  Up: Submodel Options
18823
188243.17.41 Score Options
18825---------------------
18826
18827These options are defined for Score implementations:
18828
18829'-meb'
18830     Compile code for big-endian mode.  This is the default.
18831
18832'-mel'
18833     Compile code for little-endian mode.
18834
18835'-mnhwloop'
18836     Disable generation of 'bcnz' instructions.
18837
18838'-muls'
18839     Enable generation of unaligned load and store instructions.
18840
18841'-mmac'
18842     Enable the use of multiply-accumulate instructions.  Disabled by
18843     default.
18844
18845'-mscore5'
18846     Specify the SCORE5 as the target architecture.
18847
18848'-mscore5u'
18849     Specify the SCORE5U of the target architecture.
18850
18851'-mscore7'
18852     Specify the SCORE7 as the target architecture.  This is the
18853     default.
18854
18855'-mscore7d'
18856     Specify the SCORE7D as the target architecture.
18857
18858
18859File: gcc.info,  Node: SH Options,  Next: Solaris 2 Options,  Prev: Score Options,  Up: Submodel Options
18860
188613.17.42 SH Options
18862------------------
18863
18864These '-m' options are defined for the SH implementations:
18865
18866'-m1'
18867     Generate code for the SH1.
18868
18869'-m2'
18870     Generate code for the SH2.
18871
18872'-m2e'
18873     Generate code for the SH2e.
18874
18875'-m2a-nofpu'
18876     Generate code for the SH2a without FPU, or for a SH2a-FPU in such a
18877     way that the floating-point unit is not used.
18878
18879'-m2a-single-only'
18880     Generate code for the SH2a-FPU, in such a way that no
18881     double-precision floating-point operations are used.
18882
18883'-m2a-single'
18884     Generate code for the SH2a-FPU assuming the floating-point unit is
18885     in single-precision mode by default.
18886
18887'-m2a'
18888     Generate code for the SH2a-FPU assuming the floating-point unit is
18889     in double-precision mode by default.
18890
18891'-m3'
18892     Generate code for the SH3.
18893
18894'-m3e'
18895     Generate code for the SH3e.
18896
18897'-m4-nofpu'
18898     Generate code for the SH4 without a floating-point unit.
18899
18900'-m4-single-only'
18901     Generate code for the SH4 with a floating-point unit that only
18902     supports single-precision arithmetic.
18903
18904'-m4-single'
18905     Generate code for the SH4 assuming the floating-point unit is in
18906     single-precision mode by default.
18907
18908'-m4'
18909     Generate code for the SH4.
18910
18911'-m4-100'
18912     Generate code for SH4-100.
18913
18914'-m4-100-nofpu'
18915     Generate code for SH4-100 in such a way that the floating-point
18916     unit is not used.
18917
18918'-m4-100-single'
18919     Generate code for SH4-100 assuming the floating-point unit is in
18920     single-precision mode by default.
18921
18922'-m4-100-single-only'
18923     Generate code for SH4-100 in such a way that no double-precision
18924     floating-point operations are used.
18925
18926'-m4-200'
18927     Generate code for SH4-200.
18928
18929'-m4-200-nofpu'
18930     Generate code for SH4-200 without in such a way that the
18931     floating-point unit is not used.
18932
18933'-m4-200-single'
18934     Generate code for SH4-200 assuming the floating-point unit is in
18935     single-precision mode by default.
18936
18937'-m4-200-single-only'
18938     Generate code for SH4-200 in such a way that no double-precision
18939     floating-point operations are used.
18940
18941'-m4-300'
18942     Generate code for SH4-300.
18943
18944'-m4-300-nofpu'
18945     Generate code for SH4-300 without in such a way that the
18946     floating-point unit is not used.
18947
18948'-m4-300-single'
18949     Generate code for SH4-300 in such a way that no double-precision
18950     floating-point operations are used.
18951
18952'-m4-300-single-only'
18953     Generate code for SH4-300 in such a way that no double-precision
18954     floating-point operations are used.
18955
18956'-m4-340'
18957     Generate code for SH4-340 (no MMU, no FPU).
18958
18959'-m4-500'
18960     Generate code for SH4-500 (no FPU). Passes '-isa=sh4-nofpu' to the
18961     assembler.
18962
18963'-m4a-nofpu'
18964     Generate code for the SH4al-dsp, or for a SH4a in such a way that
18965     the floating-point unit is not used.
18966
18967'-m4a-single-only'
18968     Generate code for the SH4a, in such a way that no double-precision
18969     floating-point operations are used.
18970
18971'-m4a-single'
18972     Generate code for the SH4a assuming the floating-point unit is in
18973     single-precision mode by default.
18974
18975'-m4a'
18976     Generate code for the SH4a.
18977
18978'-m4al'
18979     Same as '-m4a-nofpu', except that it implicitly passes '-dsp' to
18980     the assembler.  GCC doesn't generate any DSP instructions at the
18981     moment.
18982
18983'-m5-32media'
18984     Generate 32-bit code for SHmedia.
18985
18986'-m5-32media-nofpu'
18987     Generate 32-bit code for SHmedia in such a way that the
18988     floating-point unit is not used.
18989
18990'-m5-64media'
18991     Generate 64-bit code for SHmedia.
18992
18993'-m5-64media-nofpu'
18994     Generate 64-bit code for SHmedia in such a way that the
18995     floating-point unit is not used.
18996
18997'-m5-compact'
18998     Generate code for SHcompact.
18999
19000'-m5-compact-nofpu'
19001     Generate code for SHcompact in such a way that the floating-point
19002     unit is not used.
19003
19004'-mb'
19005     Compile code for the processor in big-endian mode.
19006
19007'-ml'
19008     Compile code for the processor in little-endian mode.
19009
19010'-mdalign'
19011     Align doubles at 64-bit boundaries.  Note that this changes the
19012     calling conventions, and thus some functions from the standard C
19013     library do not work unless you recompile it first with '-mdalign'.
19014
19015'-mrelax'
19016     Shorten some address references at link time, when possible; uses
19017     the linker option '-relax'.
19018
19019'-mbigtable'
19020     Use 32-bit offsets in 'switch' tables.  The default is to use
19021     16-bit offsets.
19022
19023'-mbitops'
19024     Enable the use of bit manipulation instructions on SH2A.
19025
19026'-mfmovd'
19027     Enable the use of the instruction 'fmovd'.  Check '-mdalign' for
19028     alignment constraints.
19029
19030'-mrenesas'
19031     Comply with the calling conventions defined by Renesas.
19032
19033'-mno-renesas'
19034     Comply with the calling conventions defined for GCC before the
19035     Renesas conventions were available.  This option is the default for
19036     all targets of the SH toolchain.
19037
19038'-mnomacsave'
19039     Mark the 'MAC' register as call-clobbered, even if '-mrenesas' is
19040     given.
19041
19042'-mieee'
19043'-mno-ieee'
19044     Control the IEEE compliance of floating-point comparisons, which
19045     affects the handling of cases where the result of a comparison is
19046     unordered.  By default '-mieee' is implicitly enabled.  If
19047     '-ffinite-math-only' is enabled '-mno-ieee' is implicitly set,
19048     which results in faster floating-point greater-equal and less-equal
19049     comparisons.  The implcit settings can be overridden by specifying
19050     either '-mieee' or '-mno-ieee'.
19051
19052'-minline-ic_invalidate'
19053     Inline code to invalidate instruction cache entries after setting
19054     up nested function trampolines.  This option has no effect if
19055     '-musermode' is in effect and the selected code generation option
19056     (e.g.  '-m4') does not allow the use of the 'icbi' instruction.  If
19057     the selected code generation option does not allow the use of the
19058     'icbi' instruction, and '-musermode' is not in effect, the inlined
19059     code manipulates the instruction cache address array directly with
19060     an associative write.  This not only requires privileged mode at
19061     run time, but it also fails if the cache line had been mapped via
19062     the TLB and has become unmapped.
19063
19064'-misize'
19065     Dump instruction size and location in the assembly code.
19066
19067'-mpadstruct'
19068     This option is deprecated.  It pads structures to multiple of 4
19069     bytes, which is incompatible with the SH ABI.
19070
19071'-matomic-model=MODEL'
19072     Sets the model of atomic operations and additional parameters as a
19073     comma separated list.  For details on the atomic built-in functions
19074     see *note __atomic Builtins::.  The following models and parameters
19075     are supported:
19076
19077     'none'
19078          Disable compiler generated atomic sequences and emit library
19079          calls for atomic operations.  This is the default if the
19080          target is not 'sh*-*-linux*'.
19081
19082     'soft-gusa'
19083          Generate GNU/Linux compatible gUSA software atomic sequences
19084          for the atomic built-in functions.  The generated atomic
19085          sequences require additional support from the
19086          interrupt/exception handling code of the system and are only
19087          suitable for SH3* and SH4* single-core systems.  This option
19088          is enabled by default when the target is 'sh*-*-linux*' and
19089          SH3* or SH4*.  When the target is SH4A, this option will also
19090          partially utilize the hardware atomic instructions 'movli.l'
19091          and 'movco.l' to create more efficient code, unless 'strict'
19092          is specified.
19093
19094     'soft-tcb'
19095          Generate software atomic sequences that use a variable in the
19096          thread control block.  This is a variation of the gUSA
19097          sequences which can also be used on SH1* and SH2* targets.
19098          The generated atomic sequences require additional support from
19099          the interrupt/exception handling code of the system and are
19100          only suitable for single-core systems.  When using this model,
19101          the 'gbr-offset=' parameter has to be specified as well.
19102
19103     'soft-imask'
19104          Generate software atomic sequences that temporarily disable
19105          interrupts by setting 'SR.IMASK = 1111'.  This model works
19106          only when the program runs in privileged mode and is only
19107          suitable for single-core systems.  Additional support from the
19108          interrupt/exception handling code of the system is not
19109          required.  This model is enabled by default when the target is
19110          'sh*-*-linux*' and SH1* or SH2*.
19111
19112     'hard-llcs'
19113          Generate hardware atomic sequences using the 'movli.l' and
19114          'movco.l' instructions only.  This is only available on SH4A
19115          and is suitable for multi-core systems.  Since the hardware
19116          instructions support only 32 bit atomic variables access to 8
19117          or 16 bit variables is emulated with 32 bit accesses.  Code
19118          compiled with this option will also be compatible with other
19119          software atomic model interrupt/exception handling systems if
19120          executed on an SH4A system.  Additional support from the
19121          interrupt/exception handling code of the system is not
19122          required for this model.
19123
19124     'gbr-offset='
19125          This parameter specifies the offset in bytes of the variable
19126          in the thread control block structure that should be used by
19127          the generated atomic sequences when the 'soft-tcb' model has
19128          been selected.  For other models this parameter is ignored.
19129          The specified value must be an integer multiple of four and in
19130          the range 0-1020.
19131
19132     'strict'
19133          This parameter prevents mixed usage of multiple atomic models,
19134          even though they would be compatible, and will make the
19135          compiler generate atomic sequences of the specified model
19136          only.
19137
19138'-mtas'
19139     Generate the 'tas.b' opcode for '__atomic_test_and_set'.  Notice
19140     that depending on the particular hardware and software
19141     configuration this can degrade overall performance due to the
19142     operand cache line flushes that are implied by the 'tas.b'
19143     instruction.  On multi-core SH4A processors the 'tas.b' instruction
19144     must be used with caution since it can result in data corruption
19145     for certain cache configurations.
19146
19147'-mprefergot'
19148     When generating position-independent code, emit function calls
19149     using the Global Offset Table instead of the Procedure Linkage
19150     Table.
19151
19152'-musermode'
19153'-mno-usermode'
19154     Don't allow (allow) the compiler generating privileged mode code.
19155     Specifying '-musermode' also implies '-mno-inline-ic_invalidate' if
19156     the inlined code would not work in user mode.  '-musermode' is the
19157     default when the target is 'sh*-*-linux*'.  If the target is SH1*
19158     or SH2* '-musermode' has no effect, since there is no user mode.
19159
19160'-multcost=NUMBER'
19161     Set the cost to assume for a multiply insn.
19162
19163'-mdiv=STRATEGY'
19164     Set the division strategy to be used for integer division
19165     operations.  For SHmedia STRATEGY can be one of:
19166
19167     'fp'
19168          Performs the operation in floating point.  This has a very
19169          high latency, but needs only a few instructions, so it might
19170          be a good choice if your code has enough easily-exploitable
19171          ILP to allow the compiler to schedule the floating-point
19172          instructions together with other instructions.  Division by
19173          zero causes a floating-point exception.
19174
19175     'inv'
19176          Uses integer operations to calculate the inverse of the
19177          divisor, and then multiplies the dividend with the inverse.
19178          This strategy allows CSE and hoisting of the inverse
19179          calculation.  Division by zero calculates an unspecified
19180          result, but does not trap.
19181
19182     'inv:minlat'
19183          A variant of 'inv' where, if no CSE or hoisting opportunities
19184          have been found, or if the entire operation has been hoisted
19185          to the same place, the last stages of the inverse calculation
19186          are intertwined with the final multiply to reduce the overall
19187          latency, at the expense of using a few more instructions, and
19188          thus offering fewer scheduling opportunities with other code.
19189
19190     'call'
19191          Calls a library function that usually implements the
19192          'inv:minlat' strategy.  This gives high code density for
19193          'm5-*media-nofpu' compilations.
19194
19195     'call2'
19196          Uses a different entry point of the same library function,
19197          where it assumes that a pointer to a lookup table has already
19198          been set up, which exposes the pointer load to CSE and code
19199          hoisting optimizations.
19200
19201     'inv:call'
19202     'inv:call2'
19203     'inv:fp'
19204          Use the 'inv' algorithm for initial code generation, but if
19205          the code stays unoptimized, revert to the 'call', 'call2', or
19206          'fp' strategies, respectively.  Note that the
19207          potentially-trapping side effect of division by zero is
19208          carried by a separate instruction, so it is possible that all
19209          the integer instructions are hoisted out, but the marker for
19210          the side effect stays where it is.  A recombination to
19211          floating-point operations or a call is not possible in that
19212          case.
19213
19214     'inv20u'
19215     'inv20l'
19216          Variants of the 'inv:minlat' strategy.  In the case that the
19217          inverse calculation is not separated from the multiply, they
19218          speed up division where the dividend fits into 20 bits (plus
19219          sign where applicable) by inserting a test to skip a number of
19220          operations in this case; this test slows down the case of
19221          larger dividends.  'inv20u' assumes the case of a such a small
19222          dividend to be unlikely, and 'inv20l' assumes it to be likely.
19223
19224     For targets other than SHmedia STRATEGY can be one of:
19225
19226     'call-div1'
19227          Calls a library function that uses the single-step division
19228          instruction 'div1' to perform the operation.  Division by zero
19229          calculates an unspecified result and does not trap.  This is
19230          the default except for SH4, SH2A and SHcompact.
19231
19232     'call-fp'
19233          Calls a library function that performs the operation in double
19234          precision floating point.  Division by zero causes a
19235          floating-point exception.  This is the default for SHcompact
19236          with FPU. Specifying this for targets that do not have a
19237          double precision FPU will default to 'call-div1'.
19238
19239     'call-table'
19240          Calls a library function that uses a lookup table for small
19241          divisors and the 'div1' instruction with case distinction for
19242          larger divisors.  Division by zero calculates an unspecified
19243          result and does not trap.  This is the default for SH4.
19244          Specifying this for targets that do not have dynamic shift
19245          instructions will default to 'call-div1'.
19246
19247     When a division strategy has not been specified the default
19248     strategy will be selected based on the current target.  For SH2A
19249     the default strategy is to use the 'divs' and 'divu' instructions
19250     instead of library function calls.
19251
19252'-maccumulate-outgoing-args'
19253     Reserve space once for outgoing arguments in the function prologue
19254     rather than around each call.  Generally beneficial for performance
19255     and size.  Also needed for unwinding to avoid changing the stack
19256     frame around conditional code.
19257
19258'-mdivsi3_libfunc=NAME'
19259     Set the name of the library function used for 32-bit signed
19260     division to NAME.  This only affects the name used in the 'call'
19261     and 'inv:call' division strategies, and the compiler still expects
19262     the same sets of input/output/clobbered registers as if this option
19263     were not present.
19264
19265'-mfixed-range=REGISTER-RANGE'
19266     Generate code treating the given register range as fixed registers.
19267     A fixed register is one that the register allocator can not use.
19268     This is useful when compiling kernel code.  A register range is
19269     specified as two registers separated by a dash.  Multiple register
19270     ranges can be specified separated by a comma.
19271
19272'-mindexed-addressing'
19273     Enable the use of the indexed addressing mode for
19274     SHmedia32/SHcompact.  This is only safe if the hardware and/or OS
19275     implement 32-bit wrap-around semantics for the indexed addressing
19276     mode.  The architecture allows the implementation of processors
19277     with 64-bit MMU, which the OS could use to get 32-bit addressing,
19278     but since no current hardware implementation supports this or any
19279     other way to make the indexed addressing mode safe to use in the
19280     32-bit ABI, the default is '-mno-indexed-addressing'.
19281
19282'-mgettrcost=NUMBER'
19283     Set the cost assumed for the 'gettr' instruction to NUMBER.  The
19284     default is 2 if '-mpt-fixed' is in effect, 100 otherwise.
19285
19286'-mpt-fixed'
19287     Assume 'pt*' instructions won't trap.  This generally generates
19288     better-scheduled code, but is unsafe on current hardware.  The
19289     current architecture definition says that 'ptabs' and 'ptrel' trap
19290     when the target anded with 3 is 3.  This has the unintentional
19291     effect of making it unsafe to schedule these instructions before a
19292     branch, or hoist them out of a loop.  For example,
19293     '__do_global_ctors', a part of 'libgcc' that runs constructors at
19294     program startup, calls functions in a list which is delimited by
19295     -1.  With the '-mpt-fixed' option, the 'ptabs' is done before
19296     testing against -1.  That means that all the constructors run a bit
19297     more quickly, but when the loop comes to the end of the list, the
19298     program crashes because 'ptabs' loads -1 into a target register.
19299
19300     Since this option is unsafe for any hardware implementing the
19301     current architecture specification, the default is '-mno-pt-fixed'.
19302     Unless specified explicitly with '-mgettrcost', '-mno-pt-fixed'
19303     also implies '-mgettrcost=100'; this deters register allocation
19304     from using target registers for storing ordinary integers.
19305
19306'-minvalid-symbols'
19307     Assume symbols might be invalid.  Ordinary function symbols
19308     generated by the compiler are always valid to load with
19309     'movi'/'shori'/'ptabs' or 'movi'/'shori'/'ptrel', but with
19310     assembler and/or linker tricks it is possible to generate symbols
19311     that cause 'ptabs' or 'ptrel' to trap.  This option is only
19312     meaningful when '-mno-pt-fixed' is in effect.  It prevents
19313     cross-basic-block CSE, hoisting and most scheduling of symbol
19314     loads.  The default is '-mno-invalid-symbols'.
19315
19316'-mbranch-cost=NUM'
19317     Assume NUM to be the cost for a branch instruction.  Higher numbers
19318     make the compiler try to generate more branch-free code if
19319     possible.  If not specified the value is selected depending on the
19320     processor type that is being compiled for.
19321
19322'-mzdcbranch'
19323'-mno-zdcbranch'
19324     Assume (do not assume) that zero displacement conditional branch
19325     instructions 'bt' and 'bf' are fast.  If '-mzdcbranch' is
19326     specified, the compiler will try to prefer zero displacement branch
19327     code sequences.  This is enabled by default when generating code
19328     for SH4 and SH4A. It can be explicitly disabled by specifying
19329     '-mno-zdcbranch'.
19330
19331'-mfused-madd'
19332'-mno-fused-madd'
19333     Generate code that uses (does not use) the floating-point multiply
19334     and accumulate instructions.  These instructions are generated by
19335     default if hardware floating point is used.  The machine-dependent
19336     '-mfused-madd' option is now mapped to the machine-independent
19337     '-ffp-contract=fast' option, and '-mno-fused-madd' is mapped to
19338     '-ffp-contract=off'.
19339
19340'-mfsca'
19341'-mno-fsca'
19342     Allow or disallow the compiler to emit the 'fsca' instruction for
19343     sine and cosine approximations.  The option '-mfsca' must be used
19344     in combination with '-funsafe-math-optimizations'.  It is enabled
19345     by default when generating code for SH4A. Using '-mno-fsca'
19346     disables sine and cosine approximations even if
19347     '-funsafe-math-optimizations' is in effect.
19348
19349'-mfsrra'
19350'-mno-fsrra'
19351     Allow or disallow the compiler to emit the 'fsrra' instruction for
19352     reciprocal square root approximations.  The option '-mfsrra' must
19353     be used in combination with '-funsafe-math-optimizations' and
19354     '-ffinite-math-only'.  It is enabled by default when generating
19355     code for SH4A. Using '-mno-fsrra' disables reciprocal square root
19356     approximations even if '-funsafe-math-optimizations' and
19357     '-ffinite-math-only' are in effect.
19358
19359'-mpretend-cmove'
19360     Prefer zero-displacement conditional branches for conditional move
19361     instruction patterns.  This can result in faster code on the SH4
19362     processor.
19363
19364
19365File: gcc.info,  Node: Solaris 2 Options,  Next: SPARC Options,  Prev: SH Options,  Up: Submodel Options
19366
193673.17.43 Solaris 2 Options
19368-------------------------
19369
19370These '-m' options are supported on Solaris 2:
19371
19372'-mclear-hwcap'
19373     '-mclear-hwcap' tells the compiler to remove the hardware
19374     capabilities generated by the Solaris assembler.  This is only
19375     necessary when object files use ISA extensions not supported by the
19376     current machine, but check at runtime whether or not to use them.
19377
19378'-mimpure-text'
19379     '-mimpure-text', used in addition to '-shared', tells the compiler
19380     to not pass '-z text' to the linker when linking a shared object.
19381     Using this option, you can link position-dependent code into a
19382     shared object.
19383
19384     '-mimpure-text' suppresses the "relocations remain against
19385     allocatable but non-writable sections" linker error message.
19386     However, the necessary relocations trigger copy-on-write, and the
19387     shared object is not actually shared across processes.  Instead of
19388     using '-mimpure-text', you should compile all source code with
19389     '-fpic' or '-fPIC'.
19390
19391 These switches are supported in addition to the above on Solaris 2:
19392
19393'-pthreads'
19394     Add support for multithreading using the POSIX threads library.
19395     This option sets flags for both the preprocessor and linker.  This
19396     option does not affect the thread safety of object code produced by
19397     the compiler or that of libraries supplied with it.
19398
19399'-pthread'
19400     This is a synonym for '-pthreads'.
19401
19402
19403File: gcc.info,  Node: SPARC Options,  Next: SPU Options,  Prev: Solaris 2 Options,  Up: Submodel Options
19404
194053.17.44 SPARC Options
19406---------------------
19407
19408These '-m' options are supported on the SPARC:
19409
19410'-mno-app-regs'
19411'-mapp-regs'
19412     Specify '-mapp-regs' to generate output using the global registers
19413     2 through 4, which the SPARC SVR4 ABI reserves for applications.
19414     Like the global register 1, each global register 2 through 4 is
19415     then treated as an allocable register that is clobbered by function
19416     calls.  This is the default.
19417
19418     To be fully SVR4 ABI-compliant at the cost of some performance
19419     loss, specify '-mno-app-regs'.  You should compile libraries and
19420     system software with this option.
19421
19422'-mflat'
19423'-mno-flat'
19424     With '-mflat', the compiler does not generate save/restore
19425     instructions and uses a "flat" or single register window model.
19426     This model is compatible with the regular register window model.
19427     The local registers and the input registers (0-5) are still treated
19428     as "call-saved" registers and are saved on the stack as needed.
19429
19430     With '-mno-flat' (the default), the compiler generates save/restore
19431     instructions (except for leaf functions).  This is the normal
19432     operating mode.
19433
19434'-mfpu'
19435'-mhard-float'
19436     Generate output containing floating-point instructions.  This is
19437     the default.
19438
19439'-mno-fpu'
19440'-msoft-float'
19441     Generate output containing library calls for floating point.
19442     *Warning:* the requisite libraries are not available for all SPARC
19443     targets.  Normally the facilities of the machine's usual C compiler
19444     are used, but this cannot be done directly in cross-compilation.
19445     You must make your own arrangements to provide suitable library
19446     functions for cross-compilation.  The embedded targets
19447     'sparc-*-aout' and 'sparclite-*-*' do provide software
19448     floating-point support.
19449
19450     '-msoft-float' changes the calling convention in the output file;
19451     therefore, it is only useful if you compile _all_ of a program with
19452     this option.  In particular, you need to compile 'libgcc.a', the
19453     library that comes with GCC, with '-msoft-float' in order for this
19454     to work.
19455
19456'-mhard-quad-float'
19457     Generate output containing quad-word (long double) floating-point
19458     instructions.
19459
19460'-msoft-quad-float'
19461     Generate output containing library calls for quad-word (long
19462     double) floating-point instructions.  The functions called are
19463     those specified in the SPARC ABI.  This is the default.
19464
19465     As of this writing, there are no SPARC implementations that have
19466     hardware support for the quad-word floating-point instructions.
19467     They all invoke a trap handler for one of these instructions, and
19468     then the trap handler emulates the effect of the instruction.
19469     Because of the trap handler overhead, this is much slower than
19470     calling the ABI library routines.  Thus the '-msoft-quad-float'
19471     option is the default.
19472
19473'-mno-unaligned-doubles'
19474'-munaligned-doubles'
19475     Assume that doubles have 8-byte alignment.  This is the default.
19476
19477     With '-munaligned-doubles', GCC assumes that doubles have 8-byte
19478     alignment only if they are contained in another type, or if they
19479     have an absolute address.  Otherwise, it assumes they have 4-byte
19480     alignment.  Specifying this option avoids some rare compatibility
19481     problems with code generated by other compilers.  It is not the
19482     default because it results in a performance loss, especially for
19483     floating-point code.
19484
19485'-muser-mode'
19486'-mno-user-mode'
19487     Do not generate code that can only run in supervisor mode.  This is
19488     relevant only for the 'casa' instruction emitted for the LEON3
19489     processor.  The default is '-mno-user-mode'.
19490
19491'-mno-faster-structs'
19492'-mfaster-structs'
19493     With '-mfaster-structs', the compiler assumes that structures
19494     should have 8-byte alignment.  This enables the use of pairs of
19495     'ldd' and 'std' instructions for copies in structure assignment, in
19496     place of twice as many 'ld' and 'st' pairs.  However, the use of
19497     this changed alignment directly violates the SPARC ABI.  Thus, it's
19498     intended only for use on targets where the developer acknowledges
19499     that their resulting code is not directly in line with the rules of
19500     the ABI.
19501
19502'-mcpu=CPU_TYPE'
19503     Set the instruction set, register set, and instruction scheduling
19504     parameters for machine type CPU_TYPE.  Supported values for
19505     CPU_TYPE are 'v7', 'cypress', 'v8', 'supersparc', 'hypersparc',
19506     'leon', 'leon3', 'sparclite', 'f930', 'f934', 'sparclite86x',
19507     'sparclet', 'tsc701', 'v9', 'ultrasparc', 'ultrasparc3', 'niagara',
19508     'niagara2', 'niagara3' and 'niagara4'.
19509
19510     Native Solaris and GNU/Linux toolchains also support the value
19511     'native', which selects the best architecture option for the host
19512     processor.  '-mcpu=native' has no effect if GCC does not recognize
19513     the processor.
19514
19515     Default instruction scheduling parameters are used for values that
19516     select an architecture and not an implementation.  These are 'v7',
19517     'v8', 'sparclite', 'sparclet', 'v9'.
19518
19519     Here is a list of each supported architecture and their supported
19520     implementations.
19521
19522     v7
19523          cypress
19524
19525     v8
19526          supersparc, hypersparc, leon, leon3
19527
19528     sparclite
19529          f930, f934, sparclite86x
19530
19531     sparclet
19532          tsc701
19533
19534     v9
19535          ultrasparc, ultrasparc3, niagara, niagara2, niagara3, niagara4
19536
19537     By default (unless configured otherwise), GCC generates code for
19538     the V7 variant of the SPARC architecture.  With '-mcpu=cypress',
19539     the compiler additionally optimizes it for the Cypress CY7C602
19540     chip, as used in the SPARCStation/SPARCServer 3xx series.  This is
19541     also appropriate for the older SPARCStation 1, 2, IPX etc.
19542
19543     With '-mcpu=v8', GCC generates code for the V8 variant of the SPARC
19544     architecture.  The only difference from V7 code is that the
19545     compiler emits the integer multiply and integer divide instructions
19546     which exist in SPARC-V8 but not in SPARC-V7.  With
19547     '-mcpu=supersparc', the compiler additionally optimizes it for the
19548     SuperSPARC chip, as used in the SPARCStation 10, 1000 and 2000
19549     series.
19550
19551     With '-mcpu=sparclite', GCC generates code for the SPARClite
19552     variant of the SPARC architecture.  This adds the integer multiply,
19553     integer divide step and scan ('ffs') instructions which exist in
19554     SPARClite but not in SPARC-V7.  With '-mcpu=f930', the compiler
19555     additionally optimizes it for the Fujitsu MB86930 chip, which is
19556     the original SPARClite, with no FPU.  With '-mcpu=f934', the
19557     compiler additionally optimizes it for the Fujitsu MB86934 chip,
19558     which is the more recent SPARClite with FPU.
19559
19560     With '-mcpu=sparclet', GCC generates code for the SPARClet variant
19561     of the SPARC architecture.  This adds the integer multiply,
19562     multiply/accumulate, integer divide step and scan ('ffs')
19563     instructions which exist in SPARClet but not in SPARC-V7.  With
19564     '-mcpu=tsc701', the compiler additionally optimizes it for the
19565     TEMIC SPARClet chip.
19566
19567     With '-mcpu=v9', GCC generates code for the V9 variant of the SPARC
19568     architecture.  This adds 64-bit integer and floating-point move
19569     instructions, 3 additional floating-point condition code registers
19570     and conditional move instructions.  With '-mcpu=ultrasparc', the
19571     compiler additionally optimizes it for the Sun UltraSPARC I/II/IIi
19572     chips.  With '-mcpu=ultrasparc3', the compiler additionally
19573     optimizes it for the Sun UltraSPARC III/III+/IIIi/IIIi+/IV/IV+
19574     chips.  With '-mcpu=niagara', the compiler additionally optimizes
19575     it for Sun UltraSPARC T1 chips.  With '-mcpu=niagara2', the
19576     compiler additionally optimizes it for Sun UltraSPARC T2 chips.
19577     With '-mcpu=niagara3', the compiler additionally optimizes it for
19578     Sun UltraSPARC T3 chips.  With '-mcpu=niagara4', the compiler
19579     additionally optimizes it for Sun UltraSPARC T4 chips.
19580
19581'-mtune=CPU_TYPE'
19582     Set the instruction scheduling parameters for machine type
19583     CPU_TYPE, but do not set the instruction set or register set that
19584     the option '-mcpu=CPU_TYPE' does.
19585
19586     The same values for '-mcpu=CPU_TYPE' can be used for
19587     '-mtune=CPU_TYPE', but the only useful values are those that select
19588     a particular CPU implementation.  Those are 'cypress',
19589     'supersparc', 'hypersparc', 'leon', 'leon3', 'f930', 'f934',
19590     'sparclite86x', 'tsc701', 'ultrasparc', 'ultrasparc3', 'niagara',
19591     'niagara2', 'niagara3' and 'niagara4'.  With native Solaris and
19592     GNU/Linux toolchains, 'native' can also be used.
19593
19594'-mv8plus'
19595'-mno-v8plus'
19596     With '-mv8plus', GCC generates code for the SPARC-V8+ ABI.  The
19597     difference from the V8 ABI is that the global and out registers are
19598     considered 64 bits wide.  This is enabled by default on Solaris in
19599     32-bit mode for all SPARC-V9 processors.
19600
19601'-mvis'
19602'-mno-vis'
19603     With '-mvis', GCC generates code that takes advantage of the
19604     UltraSPARC Visual Instruction Set extensions.  The default is
19605     '-mno-vis'.
19606
19607'-mvis2'
19608'-mno-vis2'
19609     With '-mvis2', GCC generates code that takes advantage of version
19610     2.0 of the UltraSPARC Visual Instruction Set extensions.  The
19611     default is '-mvis2' when targeting a cpu that supports such
19612     instructions, such as UltraSPARC-III and later.  Setting '-mvis2'
19613     also sets '-mvis'.
19614
19615'-mvis3'
19616'-mno-vis3'
19617     With '-mvis3', GCC generates code that takes advantage of version
19618     3.0 of the UltraSPARC Visual Instruction Set extensions.  The
19619     default is '-mvis3' when targeting a cpu that supports such
19620     instructions, such as niagara-3 and later.  Setting '-mvis3' also
19621     sets '-mvis2' and '-mvis'.
19622
19623'-mcbcond'
19624'-mno-cbcond'
19625     With '-mcbcond', GCC generates code that takes advantage of
19626     compare-and-branch instructions, as defined in the Sparc
19627     Architecture 2011.  The default is '-mcbcond' when targeting a cpu
19628     that supports such instructions, such as niagara-4 and later.
19629
19630'-mpopc'
19631'-mno-popc'
19632     With '-mpopc', GCC generates code that takes advantage of the
19633     UltraSPARC population count instruction.  The default is '-mpopc'
19634     when targeting a cpu that supports such instructions, such as
19635     Niagara-2 and later.
19636
19637'-mfmaf'
19638'-mno-fmaf'
19639     With '-mfmaf', GCC generates code that takes advantage of the
19640     UltraSPARC Fused Multiply-Add Floating-point extensions.  The
19641     default is '-mfmaf' when targeting a cpu that supports such
19642     instructions, such as Niagara-3 and later.
19643
19644'-mfix-at697f'
19645     Enable the documented workaround for the single erratum of the
19646     Atmel AT697F processor (which corresponds to erratum #13 of the
19647     AT697E processor).
19648
19649'-mfix-ut699'
19650     Enable the documented workarounds for the floating-point errata and
19651     the data cache nullify errata of the UT699 processor.
19652
19653 These '-m' options are supported in addition to the above on SPARC-V9
19654processors in 64-bit environments:
19655
19656'-m32'
19657'-m64'
19658     Generate code for a 32-bit or 64-bit environment.  The 32-bit
19659     environment sets int, long and pointer to 32 bits.  The 64-bit
19660     environment sets int to 32 bits and long and pointer to 64 bits.
19661
19662'-mcmodel=WHICH'
19663     Set the code model to one of
19664
19665     'medlow'
19666          The Medium/Low code model: 64-bit addresses, programs must be
19667          linked in the low 32 bits of memory.  Programs can be
19668          statically or dynamically linked.
19669
19670     'medmid'
19671          The Medium/Middle code model: 64-bit addresses, programs must
19672          be linked in the low 44 bits of memory, the text and data
19673          segments must be less than 2GB in size and the data segment
19674          must be located within 2GB of the text segment.
19675
19676     'medany'
19677          The Medium/Anywhere code model: 64-bit addresses, programs may
19678          be linked anywhere in memory, the text and data segments must
19679          be less than 2GB in size and the data segment must be located
19680          within 2GB of the text segment.
19681
19682     'embmedany'
19683          The Medium/Anywhere code model for embedded systems: 64-bit
19684          addresses, the text and data segments must be less than 2GB in
19685          size, both starting anywhere in memory (determined at link
19686          time).  The global register %g4 points to the base of the data
19687          segment.  Programs are statically linked and PIC is not
19688          supported.
19689
19690'-mmemory-model=MEM-MODEL'
19691     Set the memory model in force on the processor to one of
19692
19693     'default'
19694          The default memory model for the processor and operating
19695          system.
19696
19697     'rmo'
19698          Relaxed Memory Order
19699
19700     'pso'
19701          Partial Store Order
19702
19703     'tso'
19704          Total Store Order
19705
19706     'sc'
19707          Sequential Consistency
19708
19709     These memory models are formally defined in Appendix D of the Sparc
19710     V9 architecture manual, as set in the processor's 'PSTATE.MM'
19711     field.
19712
19713'-mstack-bias'
19714'-mno-stack-bias'
19715     With '-mstack-bias', GCC assumes that the stack pointer, and frame
19716     pointer if present, are offset by -2047 which must be added back
19717     when making stack frame references.  This is the default in 64-bit
19718     mode.  Otherwise, assume no such offset is present.
19719
19720
19721File: gcc.info,  Node: SPU Options,  Next: System V Options,  Prev: SPARC Options,  Up: Submodel Options
19722
197233.17.45 SPU Options
19724-------------------
19725
19726These '-m' options are supported on the SPU:
19727
19728'-mwarn-reloc'
19729'-merror-reloc'
19730
19731     The loader for SPU does not handle dynamic relocations.  By
19732     default, GCC gives an error when it generates code that requires a
19733     dynamic relocation.  '-mno-error-reloc' disables the error,
19734     '-mwarn-reloc' generates a warning instead.
19735
19736'-msafe-dma'
19737'-munsafe-dma'
19738
19739     Instructions that initiate or test completion of DMA must not be
19740     reordered with respect to loads and stores of the memory that is
19741     being accessed.  With '-munsafe-dma' you must use the 'volatile'
19742     keyword to protect memory accesses, but that can lead to
19743     inefficient code in places where the memory is known to not change.
19744     Rather than mark the memory as volatile, you can use '-msafe-dma'
19745     to tell the compiler to treat the DMA instructions as potentially
19746     affecting all memory.
19747
19748'-mbranch-hints'
19749
19750     By default, GCC generates a branch hint instruction to avoid
19751     pipeline stalls for always-taken or probably-taken branches.  A
19752     hint is not generated closer than 8 instructions away from its
19753     branch.  There is little reason to disable them, except for
19754     debugging purposes, or to make an object a little bit smaller.
19755
19756'-msmall-mem'
19757'-mlarge-mem'
19758
19759     By default, GCC generates code assuming that addresses are never
19760     larger than 18 bits.  With '-mlarge-mem' code is generated that
19761     assumes a full 32-bit address.
19762
19763'-mstdmain'
19764
19765     By default, GCC links against startup code that assumes the
19766     SPU-style main function interface (which has an unconventional
19767     parameter list).  With '-mstdmain', GCC links your program against
19768     startup code that assumes a C99-style interface to 'main',
19769     including a local copy of 'argv' strings.
19770
19771'-mfixed-range=REGISTER-RANGE'
19772     Generate code treating the given register range as fixed registers.
19773     A fixed register is one that the register allocator cannot use.
19774     This is useful when compiling kernel code.  A register range is
19775     specified as two registers separated by a dash.  Multiple register
19776     ranges can be specified separated by a comma.
19777
19778'-mea32'
19779'-mea64'
19780     Compile code assuming that pointers to the PPU address space
19781     accessed via the '__ea' named address space qualifier are either 32
19782     or 64 bits wide.  The default is 32 bits.  As this is an
19783     ABI-changing option, all object code in an executable must be
19784     compiled with the same setting.
19785
19786'-maddress-space-conversion'
19787'-mno-address-space-conversion'
19788     Allow/disallow treating the '__ea' address space as superset of the
19789     generic address space.  This enables explicit type casts between
19790     '__ea' and generic pointer as well as implicit conversions of
19791     generic pointers to '__ea' pointers.  The default is to allow
19792     address space pointer conversions.
19793
19794'-mcache-size=CACHE-SIZE'
19795     This option controls the version of libgcc that the compiler links
19796     to an executable and selects a software-managed cache for accessing
19797     variables in the '__ea' address space with a particular cache size.
19798     Possible options for CACHE-SIZE are '8', '16', '32', '64' and
19799     '128'.  The default cache size is 64KB.
19800
19801'-matomic-updates'
19802'-mno-atomic-updates'
19803     This option controls the version of libgcc that the compiler links
19804     to an executable and selects whether atomic updates to the
19805     software-managed cache of PPU-side variables are used.  If you use
19806     atomic updates, changes to a PPU variable from SPU code using the
19807     '__ea' named address space qualifier do not interfere with changes
19808     to other PPU variables residing in the same cache line from PPU
19809     code.  If you do not use atomic updates, such interference may
19810     occur; however, writing back cache lines is more efficient.  The
19811     default behavior is to use atomic updates.
19812
19813'-mdual-nops'
19814'-mdual-nops=N'
19815     By default, GCC inserts nops to increase dual issue when it expects
19816     it to increase performance.  N can be a value from 0 to 10.  A
19817     smaller N inserts fewer nops.  10 is the default, 0 is the same as
19818     '-mno-dual-nops'.  Disabled with '-Os'.
19819
19820'-mhint-max-nops=N'
19821     Maximum number of nops to insert for a branch hint.  A branch hint
19822     must be at least 8 instructions away from the branch it is
19823     affecting.  GCC inserts up to N nops to enforce this, otherwise it
19824     does not generate the branch hint.
19825
19826'-mhint-max-distance=N'
19827     The encoding of the branch hint instruction limits the hint to be
19828     within 256 instructions of the branch it is affecting.  By default,
19829     GCC makes sure it is within 125.
19830
19831'-msafe-hints'
19832     Work around a hardware bug that causes the SPU to stall
19833     indefinitely.  By default, GCC inserts the 'hbrp' instruction to
19834     make sure this stall won't happen.
19835
19836
19837File: gcc.info,  Node: System V Options,  Next: TILE-Gx Options,  Prev: SPU Options,  Up: Submodel Options
19838
198393.17.46 Options for System V
19840----------------------------
19841
19842These additional options are available on System V Release 4 for
19843compatibility with other compilers on those systems:
19844
19845'-G'
19846     Create a shared object.  It is recommended that '-symbolic' or
19847     '-shared' be used instead.
19848
19849'-Qy'
19850     Identify the versions of each tool used by the compiler, in a
19851     '.ident' assembler directive in the output.
19852
19853'-Qn'
19854     Refrain from adding '.ident' directives to the output file (this is
19855     the default).
19856
19857'-YP,DIRS'
19858     Search the directories DIRS, and no others, for libraries specified
19859     with '-l'.
19860
19861'-Ym,DIR'
19862     Look in the directory DIR to find the M4 preprocessor.  The
19863     assembler uses this option.
19864
19865
19866File: gcc.info,  Node: TILE-Gx Options,  Next: TILEPro Options,  Prev: System V Options,  Up: Submodel Options
19867
198683.17.47 TILE-Gx Options
19869-----------------------
19870
19871These '-m' options are supported on the TILE-Gx:
19872
19873'-mcmodel=small'
19874     Generate code for the small model.  The distance for direct calls
19875     is limited to 500M in either direction.  PC-relative addresses are
19876     32 bits.  Absolute addresses support the full address range.
19877
19878'-mcmodel=large'
19879     Generate code for the large model.  There is no limitation on call
19880     distance, pc-relative addresses, or absolute addresses.
19881
19882'-mcpu=NAME'
19883     Selects the type of CPU to be targeted.  Currently the only
19884     supported type is 'tilegx'.
19885
19886'-m32'
19887'-m64'
19888     Generate code for a 32-bit or 64-bit environment.  The 32-bit
19889     environment sets int, long, and pointer to 32 bits.  The 64-bit
19890     environment sets int to 32 bits and long and pointer to 64 bits.
19891
19892'-mbig-endian'
19893'-mlittle-endian'
19894     Generate code in big/little endian mode, respectively.
19895
19896
19897File: gcc.info,  Node: TILEPro Options,  Next: V850 Options,  Prev: TILE-Gx Options,  Up: Submodel Options
19898
198993.17.48 TILEPro Options
19900-----------------------
19901
19902These '-m' options are supported on the TILEPro:
19903
19904'-mcpu=NAME'
19905     Selects the type of CPU to be targeted.  Currently the only
19906     supported type is 'tilepro'.
19907
19908'-m32'
19909     Generate code for a 32-bit environment, which sets int, long, and
19910     pointer to 32 bits.  This is the only supported behavior so the
19911     flag is essentially ignored.
19912
19913
19914File: gcc.info,  Node: V850 Options,  Next: VAX Options,  Prev: TILEPro Options,  Up: Submodel Options
19915
199163.17.49 V850 Options
19917--------------------
19918
19919These '-m' options are defined for V850 implementations:
19920
19921'-mlong-calls'
19922'-mno-long-calls'
19923     Treat all calls as being far away (near).  If calls are assumed to
19924     be far away, the compiler always loads the function's address into
19925     a register, and calls indirect through the pointer.
19926
19927'-mno-ep'
19928'-mep'
19929     Do not optimize (do optimize) basic blocks that use the same index
19930     pointer 4 or more times to copy pointer into the 'ep' register, and
19931     use the shorter 'sld' and 'sst' instructions.  The '-mep' option is
19932     on by default if you optimize.
19933
19934'-mno-prolog-function'
19935'-mprolog-function'
19936     Do not use (do use) external functions to save and restore
19937     registers at the prologue and epilogue of a function.  The external
19938     functions are slower, but use less code space if more than one
19939     function saves the same number of registers.  The
19940     '-mprolog-function' option is on by default if you optimize.
19941
19942'-mspace'
19943     Try to make the code as small as possible.  At present, this just
19944     turns on the '-mep' and '-mprolog-function' options.
19945
19946'-mtda=N'
19947     Put static or global variables whose size is N bytes or less into
19948     the tiny data area that register 'ep' points to.  The tiny data
19949     area can hold up to 256 bytes in total (128 bytes for byte
19950     references).
19951
19952'-msda=N'
19953     Put static or global variables whose size is N bytes or less into
19954     the small data area that register 'gp' points to.  The small data
19955     area can hold up to 64 kilobytes.
19956
19957'-mzda=N'
19958     Put static or global variables whose size is N bytes or less into
19959     the first 32 kilobytes of memory.
19960
19961'-mv850'
19962     Specify that the target processor is the V850.
19963
19964'-mv850e3v5'
19965     Specify that the target processor is the V850E3V5.  The
19966     preprocessor constant '__v850e3v5__' is defined if this option is
19967     used.
19968
19969'-mv850e2v4'
19970     Specify that the target processor is the V850E3V5.  This is an
19971     alias for the '-mv850e3v5' option.
19972
19973'-mv850e2v3'
19974     Specify that the target processor is the V850E2V3.  The
19975     preprocessor constant '__v850e2v3__' is defined if this option is
19976     used.
19977
19978'-mv850e2'
19979     Specify that the target processor is the V850E2.  The preprocessor
19980     constant '__v850e2__' is defined if this option is used.
19981
19982'-mv850e1'
19983     Specify that the target processor is the V850E1.  The preprocessor
19984     constants '__v850e1__' and '__v850e__' are defined if this option
19985     is used.
19986
19987'-mv850es'
19988     Specify that the target processor is the V850ES. This is an alias
19989     for the '-mv850e1' option.
19990
19991'-mv850e'
19992     Specify that the target processor is the V850E.  The preprocessor
19993     constant '__v850e__' is defined if this option is used.
19994
19995     If neither '-mv850' nor '-mv850e' nor '-mv850e1' nor '-mv850e2' nor
19996     '-mv850e2v3' nor '-mv850e3v5' are defined then a default target
19997     processor is chosen and the relevant '__v850*__' preprocessor
19998     constant is defined.
19999
20000     The preprocessor constants '__v850' and '__v851__' are always
20001     defined, regardless of which processor variant is the target.
20002
20003'-mdisable-callt'
20004'-mno-disable-callt'
20005     This option suppresses generation of the 'CALLT' instruction for
20006     the v850e, v850e1, v850e2, v850e2v3 and v850e3v5 flavors of the
20007     v850 architecture.
20008
20009     This option is enabled by default when the RH850 ABI is in use (see
20010     '-mrh850-abi'), and disabled by default when the GCC ABI is in use.
20011     If 'CALLT' instructions are being generated then the C preprocessor
20012     symbol '__V850_CALLT__' will be defined.
20013
20014'-mrelax'
20015'-mno-relax'
20016     Pass on (or do not pass on) the '-mrelax' command line option to
20017     the assembler.
20018
20019'-mlong-jumps'
20020'-mno-long-jumps'
20021     Disable (or re-enable) the generation of PC-relative jump
20022     instructions.
20023
20024'-msoft-float'
20025'-mhard-float'
20026     Disable (or re-enable) the generation of hardware floating point
20027     instructions.  This option is only significant when the target
20028     architecture is 'V850E2V3' or higher.  If hardware floating point
20029     instructions are being generated then the C preprocessor symbol
20030     '__FPU_OK__' will be defined, otherwise the symbol '__NO_FPU__'
20031     will be defined.
20032
20033'-mloop'
20034     Enables the use of the e3v5 LOOP instruction.  The use of this
20035     instruction is not enabled by default when the e3v5 architecture is
20036     selected because its use is still experimental.
20037
20038'-mrh850-abi'
20039'-mghs'
20040     Enables support for the RH850 version of the V850 ABI. This is the
20041     default.  With this version of the ABI the following rules apply:
20042
20043        * Integer sized structures and unions are returned via a memory
20044          pointer rather than a register.
20045
20046        * Large structures and unions (more than 8 bytes in size) are
20047          passed by value.
20048
20049        * Functions are aligned to 16-bit boundaries.
20050
20051        * The '-m8byte-align' command line option is supported.
20052
20053        * The '-mdisable-callt' command line option is enabled by
20054          default.  The '-mno-disable-callt' command line option is not
20055          supported.
20056
20057     When this version of the ABI is enabled the C preprocessor symbol
20058     '__V850_RH850_ABI__' is defined.
20059
20060'-mgcc-abi'
20061     Enables support for the old GCC version of the V850 ABI. With this
20062     version of the ABI the following rules apply:
20063
20064        * Integer sized structures and unions are returned in register
20065          'r10'.
20066
20067        * Large structures and unions (more than 8 bytes in size) are
20068          passed by reference.
20069
20070        * Functions are aligned to 32-bit boundaries, unless optimizing
20071          for size.
20072
20073        * The '-m8byte-align' command line option is not supported.
20074
20075        * The '-mdisable-callt' command line option is supported but not
20076          enabled by default.
20077
20078     When this version of the ABI is enabled the C preprocessor symbol
20079     '__V850_GCC_ABI__' is defined.
20080
20081'-m8byte-align'
20082'-mno-8byte-align'
20083     Enables support for 'doubles' and 'long long' types to be aligned
20084     on 8-byte boundaries.  The default is to restrict the alignment of
20085     all objects to at most 4-bytes.  When '-m8byte-align' is in effect
20086     the C preprocessor symbol '__V850_8BYTE_ALIGN__' will be defined.
20087
20088'-mbig-switch'
20089     Generate code suitable for big switch tables.  Use this option only
20090     if the assembler/linker complain about out of range branches within
20091     a switch table.
20092
20093'-mapp-regs'
20094     This option causes r2 and r5 to be used in the code generated by
20095     the compiler.  This setting is the default.
20096
20097'-mno-app-regs'
20098     This option causes r2 and r5 to be treated as fixed registers.
20099
20100
20101File: gcc.info,  Node: VAX Options,  Next: VMS Options,  Prev: V850 Options,  Up: Submodel Options
20102
201033.17.50 VAX Options
20104-------------------
20105
20106These '-m' options are defined for the VAX:
20107
20108'-munix'
20109     Do not output certain jump instructions ('aobleq' and so on) that
20110     the Unix assembler for the VAX cannot handle across long ranges.
20111
20112'-mgnu'
20113     Do output those jump instructions, on the assumption that the GNU
20114     assembler is being used.
20115
20116'-mg'
20117     Output code for G-format floating-point numbers instead of
20118     D-format.
20119
20120
20121File: gcc.info,  Node: VMS Options,  Next: VxWorks Options,  Prev: VAX Options,  Up: Submodel Options
20122
201233.17.51 VMS Options
20124-------------------
20125
20126These '-m' options are defined for the VMS implementations:
20127
20128'-mvms-return-codes'
20129     Return VMS condition codes from 'main'.  The default is to return
20130     POSIX-style condition (e.g. error) codes.
20131
20132'-mdebug-main=PREFIX'
20133     Flag the first routine whose name starts with PREFIX as the main
20134     routine for the debugger.
20135
20136'-mmalloc64'
20137     Default to 64-bit memory allocation routines.
20138
20139'-mpointer-size=SIZE'
20140     Set the default size of pointers.  Possible options for SIZE are
20141     '32' or 'short' for 32 bit pointers, '64' or 'long' for 64 bit
20142     pointers, and 'no' for supporting only 32 bit pointers.  The later
20143     option disables 'pragma pointer_size'.
20144
20145
20146File: gcc.info,  Node: VxWorks Options,  Next: x86-64 Options,  Prev: VMS Options,  Up: Submodel Options
20147
201483.17.52 VxWorks Options
20149-----------------------
20150
20151The options in this section are defined for all VxWorks targets.
20152Options specific to the target hardware are listed with the other
20153options for that target.
20154
20155'-mrtp'
20156     GCC can generate code for both VxWorks kernels and real time
20157     processes (RTPs).  This option switches from the former to the
20158     latter.  It also defines the preprocessor macro '__RTP__'.
20159
20160'-non-static'
20161     Link an RTP executable against shared libraries rather than static
20162     libraries.  The options '-static' and '-shared' can also be used
20163     for RTPs (*note Link Options::); '-static' is the default.
20164
20165'-Bstatic'
20166'-Bdynamic'
20167     These options are passed down to the linker.  They are defined for
20168     compatibility with Diab.
20169
20170'-Xbind-lazy'
20171     Enable lazy binding of function calls.  This option is equivalent
20172     to '-Wl,-z,now' and is defined for compatibility with Diab.
20173
20174'-Xbind-now'
20175     Disable lazy binding of function calls.  This option is the default
20176     and is defined for compatibility with Diab.
20177
20178
20179File: gcc.info,  Node: x86-64 Options,  Next: Xstormy16 Options,  Prev: VxWorks Options,  Up: Submodel Options
20180
201813.17.53 x86-64 Options
20182----------------------
20183
20184These are listed under *Note i386 and x86-64 Options::.
20185
20186
20187File: gcc.info,  Node: Xstormy16 Options,  Next: Xtensa Options,  Prev: x86-64 Options,  Up: Submodel Options
20188
201893.17.54 Xstormy16 Options
20190-------------------------
20191
20192These options are defined for Xstormy16:
20193
20194'-msim'
20195     Choose startup files and linker script suitable for the simulator.
20196
20197
20198File: gcc.info,  Node: Xtensa Options,  Next: zSeries Options,  Prev: Xstormy16 Options,  Up: Submodel Options
20199
202003.17.55 Xtensa Options
20201----------------------
20202
20203These options are supported for Xtensa targets:
20204
20205'-mconst16'
20206'-mno-const16'
20207     Enable or disable use of 'CONST16' instructions for loading
20208     constant values.  The 'CONST16' instruction is currently not a
20209     standard option from Tensilica.  When enabled, 'CONST16'
20210     instructions are always used in place of the standard 'L32R'
20211     instructions.  The use of 'CONST16' is enabled by default only if
20212     the 'L32R' instruction is not available.
20213
20214'-mfused-madd'
20215'-mno-fused-madd'
20216     Enable or disable use of fused multiply/add and multiply/subtract
20217     instructions in the floating-point option.  This has no effect if
20218     the floating-point option is not also enabled.  Disabling fused
20219     multiply/add and multiply/subtract instructions forces the compiler
20220     to use separate instructions for the multiply and add/subtract
20221     operations.  This may be desirable in some cases where strict IEEE
20222     754-compliant results are required: the fused multiply add/subtract
20223     instructions do not round the intermediate result, thereby
20224     producing results with _more_ bits of precision than specified by
20225     the IEEE standard.  Disabling fused multiply add/subtract
20226     instructions also ensures that the program output is not sensitive
20227     to the compiler's ability to combine multiply and add/subtract
20228     operations.
20229
20230'-mserialize-volatile'
20231'-mno-serialize-volatile'
20232     When this option is enabled, GCC inserts 'MEMW' instructions before
20233     'volatile' memory references to guarantee sequential consistency.
20234     The default is '-mserialize-volatile'.  Use
20235     '-mno-serialize-volatile' to omit the 'MEMW' instructions.
20236
20237'-mforce-no-pic'
20238     For targets, like GNU/Linux, where all user-mode Xtensa code must
20239     be position-independent code (PIC), this option disables PIC for
20240     compiling kernel code.
20241
20242'-mtext-section-literals'
20243'-mno-text-section-literals'
20244     Control the treatment of literal pools.  The default is
20245     '-mno-text-section-literals', which places literals in a separate
20246     section in the output file.  This allows the literal pool to be
20247     placed in a data RAM/ROM, and it also allows the linker to combine
20248     literal pools from separate object files to remove redundant
20249     literals and improve code size.  With '-mtext-section-literals',
20250     the literals are interspersed in the text section in order to keep
20251     them as close as possible to their references.  This may be
20252     necessary for large assembly files.
20253
20254'-mtarget-align'
20255'-mno-target-align'
20256     When this option is enabled, GCC instructs the assembler to
20257     automatically align instructions to reduce branch penalties at the
20258     expense of some code density.  The assembler attempts to widen
20259     density instructions to align branch targets and the instructions
20260     following call instructions.  If there are not enough preceding
20261     safe density instructions to align a target, no widening is
20262     performed.  The default is '-mtarget-align'.  These options do not
20263     affect the treatment of auto-aligned instructions like 'LOOP',
20264     which the assembler always aligns, either by widening density
20265     instructions or by inserting NOP instructions.
20266
20267'-mlongcalls'
20268'-mno-longcalls'
20269     When this option is enabled, GCC instructs the assembler to
20270     translate direct calls to indirect calls unless it can determine
20271     that the target of a direct call is in the range allowed by the
20272     call instruction.  This translation typically occurs for calls to
20273     functions in other source files.  Specifically, the assembler
20274     translates a direct 'CALL' instruction into an 'L32R' followed by a
20275     'CALLX' instruction.  The default is '-mno-longcalls'.  This option
20276     should be used in programs where the call target can potentially be
20277     out of range.  This option is implemented in the assembler, not the
20278     compiler, so the assembly code generated by GCC still shows direct
20279     call instructions--look at the disassembled object code to see the
20280     actual instructions.  Note that the assembler uses an indirect call
20281     for every cross-file call, not just those that really are out of
20282     range.
20283
20284
20285File: gcc.info,  Node: zSeries Options,  Prev: Xtensa Options,  Up: Submodel Options
20286
202873.17.56 zSeries Options
20288-----------------------
20289
20290These are listed under *Note S/390 and zSeries Options::.
20291
20292
20293File: gcc.info,  Node: Code Gen Options,  Next: Environment Variables,  Prev: Submodel Options,  Up: Invoking GCC
20294
202953.18 Options for Code Generation Conventions
20296============================================
20297
20298These machine-independent options control the interface conventions used
20299in code generation.
20300
20301 Most of them have both positive and negative forms; the negative form
20302of '-ffoo' is '-fno-foo'.  In the table below, only one of the forms is
20303listed--the one that is not the default.  You can figure out the other
20304form by either removing 'no-' or adding it.
20305
20306'-fbounds-check'
20307     For front ends that support it, generate additional code to check
20308     that indices used to access arrays are within the declared range.
20309     This is currently only supported by the Java and Fortran front
20310     ends, where this option defaults to true and false respectively.
20311
20312'-fstack-reuse=REUSE-LEVEL'
20313     This option controls stack space reuse for user declared local/auto
20314     variables and compiler generated temporaries.  REUSE_LEVEL can be
20315     'all', 'named_vars', or 'none'.  'all' enables stack reuse for all
20316     local variables and temporaries, 'named_vars' enables the reuse
20317     only for user defined local variables with names, and 'none'
20318     disables stack reuse completely.  The default value is 'all'.  The
20319     option is needed when the program extends the lifetime of a scoped
20320     local variable or a compiler generated temporary beyond the end
20321     point defined by the language.  When a lifetime of a variable ends,
20322     and if the variable lives in memory, the optimizing compiler has
20323     the freedom to reuse its stack space with other temporaries or
20324     scoped local variables whose live range does not overlap with it.
20325     Legacy code extending local lifetime will likely to break with the
20326     stack reuse optimization.
20327
20328     For example,
20329
20330             int *p;
20331             {
20332               int local1;
20333
20334               p = &local1;
20335               local1 = 10;
20336               ....
20337             }
20338             {
20339                int local2;
20340                local2 = 20;
20341                ...
20342             }
20343
20344             if (*p == 10)  // out of scope use of local1
20345               {
20346
20347               }
20348
20349     Another example:
20350
20351             struct A
20352             {
20353                 A(int k) : i(k), j(k) { }
20354                 int i;
20355                 int j;
20356             };
20357
20358             A *ap;
20359
20360             void foo(const A& ar)
20361             {
20362                ap = &ar;
20363             }
20364
20365             void bar()
20366             {
20367                foo(A(10)); // temp object's lifetime ends when foo returns
20368
20369                {
20370                  A a(20);
20371                  ....
20372                }
20373                ap->i+= 10;  // ap references out of scope temp whose space
20374                             // is reused with a. What is the value of ap->i?
20375             }
20376
20377
20378     The lifetime of a compiler generated temporary is well defined by
20379     the C++ standard.  When a lifetime of a temporary ends, and if the
20380     temporary lives in memory, the optimizing compiler has the freedom
20381     to reuse its stack space with other temporaries or scoped local
20382     variables whose live range does not overlap with it.  However some
20383     of the legacy code relies on the behavior of older compilers in
20384     which temporaries' stack space is not reused, the aggressive stack
20385     reuse can lead to runtime errors.  This option is used to control
20386     the temporary stack reuse optimization.
20387
20388'-ftrapv'
20389     This option generates traps for signed overflow on addition,
20390     subtraction, multiplication operations.
20391
20392'-fwrapv'
20393     This option instructs the compiler to assume that signed arithmetic
20394     overflow of addition, subtraction and multiplication wraps around
20395     using twos-complement representation.  This flag enables some
20396     optimizations and disables others.  This option is enabled by
20397     default for the Java front end, as required by the Java language
20398     specification.
20399
20400'-fexceptions'
20401     Enable exception handling.  Generates extra code needed to
20402     propagate exceptions.  For some targets, this implies GCC generates
20403     frame unwind information for all functions, which can produce
20404     significant data size overhead, although it does not affect
20405     execution.  If you do not specify this option, GCC enables it by
20406     default for languages like C++ that normally require exception
20407     handling, and disables it for languages like C that do not normally
20408     require it.  However, you may need to enable this option when
20409     compiling C code that needs to interoperate properly with exception
20410     handlers written in C++.  You may also wish to disable this option
20411     if you are compiling older C++ programs that don't use exception
20412     handling.
20413
20414'-fnon-call-exceptions'
20415     Generate code that allows trapping instructions to throw
20416     exceptions.  Note that this requires platform-specific runtime
20417     support that does not exist everywhere.  Moreover, it only allows
20418     _trapping_ instructions to throw exceptions, i.e. memory references
20419     or floating-point instructions.  It does not allow exceptions to be
20420     thrown from arbitrary signal handlers such as 'SIGALRM'.
20421
20422'-fdelete-dead-exceptions'
20423     Consider that instructions that may throw exceptions but don't
20424     otherwise contribute to the execution of the program can be
20425     optimized away.  This option is enabled by default for the Ada
20426     front end, as permitted by the Ada language specification.
20427     Optimization passes that cause dead exceptions to be removed are
20428     enabled independently at different optimization levels.
20429
20430'-funwind-tables'
20431     Similar to '-fexceptions', except that it just generates any needed
20432     static data, but does not affect the generated code in any other
20433     way.  You normally do not need to enable this option; instead, a
20434     language processor that needs this handling enables it on your
20435     behalf.
20436
20437'-fasynchronous-unwind-tables'
20438     Generate unwind table in DWARF 2 format, if supported by target
20439     machine.  The table is exact at each instruction boundary, so it
20440     can be used for stack unwinding from asynchronous events (such as
20441     debugger or garbage collector).
20442
20443'-fno-gnu-unique'
20444     On systems with recent GNU assembler and C library, the C++
20445     compiler uses the 'STB_GNU_UNIQUE' binding to make sure that
20446     definitions of template static data members and static local
20447     variables in inline functions are unique even in the presence of
20448     'RTLD_LOCAL'; this is necessary to avoid problems with a library
20449     used by two different 'RTLD_LOCAL' plugins depending on a
20450     definition in one of them and therefore disagreeing with the other
20451     one about the binding of the symbol.  But this causes 'dlclose' to
20452     be ignored for affected DSOs; if your program relies on
20453     reinitialization of a DSO via 'dlclose' and 'dlopen', you can use
20454     '-fno-gnu-unique'.
20455
20456'-fpcc-struct-return'
20457     Return "short" 'struct' and 'union' values in memory like longer
20458     ones, rather than in registers.  This convention is less efficient,
20459     but it has the advantage of allowing intercallability between
20460     GCC-compiled files and files compiled with other compilers,
20461     particularly the Portable C Compiler (pcc).
20462
20463     The precise convention for returning structures in memory depends
20464     on the target configuration macros.
20465
20466     Short structures and unions are those whose size and alignment
20467     match that of some integer type.
20468
20469     *Warning:* code compiled with the '-fpcc-struct-return' switch is
20470     not binary compatible with code compiled with the
20471     '-freg-struct-return' switch.  Use it to conform to a non-default
20472     application binary interface.
20473
20474'-freg-struct-return'
20475     Return 'struct' and 'union' values in registers when possible.
20476     This is more efficient for small structures than
20477     '-fpcc-struct-return'.
20478
20479     If you specify neither '-fpcc-struct-return' nor
20480     '-freg-struct-return', GCC defaults to whichever convention is
20481     standard for the target.  If there is no standard convention, GCC
20482     defaults to '-fpcc-struct-return', except on targets where GCC is
20483     the principal compiler.  In those cases, we can choose the
20484     standard, and we chose the more efficient register return
20485     alternative.
20486
20487     *Warning:* code compiled with the '-freg-struct-return' switch is
20488     not binary compatible with code compiled with the
20489     '-fpcc-struct-return' switch.  Use it to conform to a non-default
20490     application binary interface.
20491
20492'-fshort-enums'
20493     Allocate to an 'enum' type only as many bytes as it needs for the
20494     declared range of possible values.  Specifically, the 'enum' type
20495     is equivalent to the smallest integer type that has enough room.
20496
20497     *Warning:* the '-fshort-enums' switch causes GCC to generate code
20498     that is not binary compatible with code generated without that
20499     switch.  Use it to conform to a non-default application binary
20500     interface.
20501
20502'-fshort-double'
20503     Use the same size for 'double' as for 'float'.
20504
20505     *Warning:* the '-fshort-double' switch causes GCC to generate code
20506     that is not binary compatible with code generated without that
20507     switch.  Use it to conform to a non-default application binary
20508     interface.
20509
20510'-fshort-wchar'
20511     Override the underlying type for 'wchar_t' to be 'short unsigned
20512     int' instead of the default for the target.  This option is useful
20513     for building programs to run under WINE.
20514
20515     *Warning:* the '-fshort-wchar' switch causes GCC to generate code
20516     that is not binary compatible with code generated without that
20517     switch.  Use it to conform to a non-default application binary
20518     interface.
20519
20520'-fno-common'
20521     In C code, controls the placement of uninitialized global
20522     variables.  Unix C compilers have traditionally permitted multiple
20523     definitions of such variables in different compilation units by
20524     placing the variables in a common block.  This is the behavior
20525     specified by '-fcommon', and is the default for GCC on most
20526     targets.  On the other hand, this behavior is not required by ISO
20527     C, and on some targets may carry a speed or code size penalty on
20528     variable references.  The '-fno-common' option specifies that the
20529     compiler should place uninitialized global variables in the data
20530     section of the object file, rather than generating them as common
20531     blocks.  This has the effect that if the same variable is declared
20532     (without 'extern') in two different compilations, you get a
20533     multiple-definition error when you link them.  In this case, you
20534     must compile with '-fcommon' instead.  Compiling with '-fno-common'
20535     is useful on targets for which it provides better performance, or
20536     if you wish to verify that the program will work on other systems
20537     that always treat uninitialized variable declarations this way.
20538
20539'-fno-ident'
20540     Ignore the '#ident' directive.
20541
20542'-finhibit-size-directive'
20543     Don't output a '.size' assembler directive, or anything else that
20544     would cause trouble if the function is split in the middle, and the
20545     two halves are placed at locations far apart in memory.  This
20546     option is used when compiling 'crtstuff.c'; you should not need to
20547     use it for anything else.
20548
20549'-fverbose-asm'
20550     Put extra commentary information in the generated assembly code to
20551     make it more readable.  This option is generally only of use to
20552     those who actually need to read the generated assembly code
20553     (perhaps while debugging the compiler itself).
20554
20555     '-fno-verbose-asm', the default, causes the extra information to be
20556     omitted and is useful when comparing two assembler files.
20557
20558'-frecord-gcc-switches'
20559     This switch causes the command line used to invoke the compiler to
20560     be recorded into the object file that is being created.  This
20561     switch is only implemented on some targets and the exact format of
20562     the recording is target and binary file format dependent, but it
20563     usually takes the form of a section containing ASCII text.  This
20564     switch is related to the '-fverbose-asm' switch, but that switch
20565     only records information in the assembler output file as comments,
20566     so it never reaches the object file.  See also
20567     '-grecord-gcc-switches' for another way of storing compiler options
20568     into the object file.
20569
20570'-fpic'
20571     Generate position-independent code (PIC) suitable for use in a
20572     shared library, if supported for the target machine.  Such code
20573     accesses all constant addresses through a global offset table
20574     (GOT).  The dynamic loader resolves the GOT entries when the
20575     program starts (the dynamic loader is not part of GCC; it is part
20576     of the operating system).  If the GOT size for the linked
20577     executable exceeds a machine-specific maximum size, you get an
20578     error message from the linker indicating that '-fpic' does not
20579     work; in that case, recompile with '-fPIC' instead.  (These
20580     maximums are 8k on the SPARC and 32k on the m68k and RS/6000.  The
20581     386 has no such limit.)
20582
20583     Position-independent code requires special support, and therefore
20584     works only on certain machines.  For the 386, GCC supports PIC for
20585     System V but not for the Sun 386i.  Code generated for the IBM
20586     RS/6000 is always position-independent.
20587
20588     When this flag is set, the macros '__pic__' and '__PIC__' are
20589     defined to 1.
20590
20591'-fPIC'
20592     If supported for the target machine, emit position-independent
20593     code, suitable for dynamic linking and avoiding any limit on the
20594     size of the global offset table.  This option makes a difference on
20595     the m68k, PowerPC and SPARC.
20596
20597     Position-independent code requires special support, and therefore
20598     works only on certain machines.
20599
20600     When this flag is set, the macros '__pic__' and '__PIC__' are
20601     defined to 2.
20602
20603'-fpie'
20604'-fPIE'
20605     These options are similar to '-fpic' and '-fPIC', but generated
20606     position independent code can be only linked into executables.
20607     Usually these options are used when '-pie' GCC option is used
20608     during linking.
20609
20610     '-fpie' and '-fPIE' both define the macros '__pie__' and '__PIE__'.
20611     The macros have the value 1 for '-fpie' and 2 for '-fPIE'.
20612
20613'-fno-jump-tables'
20614     Do not use jump tables for switch statements even where it would be
20615     more efficient than other code generation strategies.  This option
20616     is of use in conjunction with '-fpic' or '-fPIC' for building code
20617     that forms part of a dynamic linker and cannot reference the
20618     address of a jump table.  On some targets, jump tables do not
20619     require a GOT and this option is not needed.
20620
20621'-ffixed-REG'
20622     Treat the register named REG as a fixed register; generated code
20623     should never refer to it (except perhaps as a stack pointer, frame
20624     pointer or in some other fixed role).
20625
20626     REG must be the name of a register.  The register names accepted
20627     are machine-specific and are defined in the 'REGISTER_NAMES' macro
20628     in the machine description macro file.
20629
20630     This flag does not have a negative form, because it specifies a
20631     three-way choice.
20632
20633'-fcall-used-REG'
20634     Treat the register named REG as an allocable register that is
20635     clobbered by function calls.  It may be allocated for temporaries
20636     or variables that do not live across a call.  Functions compiled
20637     this way do not save and restore the register REG.
20638
20639     It is an error to use this flag with the frame pointer or stack
20640     pointer.  Use of this flag for other registers that have fixed
20641     pervasive roles in the machine's execution model produces
20642     disastrous results.
20643
20644     This flag does not have a negative form, because it specifies a
20645     three-way choice.
20646
20647'-fcall-saved-REG'
20648     Treat the register named REG as an allocable register saved by
20649     functions.  It may be allocated even for temporaries or variables
20650     that live across a call.  Functions compiled this way save and
20651     restore the register REG if they use it.
20652
20653     It is an error to use this flag with the frame pointer or stack
20654     pointer.  Use of this flag for other registers that have fixed
20655     pervasive roles in the machine's execution model produces
20656     disastrous results.
20657
20658     A different sort of disaster results from the use of this flag for
20659     a register in which function values may be returned.
20660
20661     This flag does not have a negative form, because it specifies a
20662     three-way choice.
20663
20664'-fpack-struct[=N]'
20665     Without a value specified, pack all structure members together
20666     without holes.  When a value is specified (which must be a small
20667     power of two), pack structure members according to this value,
20668     representing the maximum alignment (that is, objects with default
20669     alignment requirements larger than this are output potentially
20670     unaligned at the next fitting location.
20671
20672     *Warning:* the '-fpack-struct' switch causes GCC to generate code
20673     that is not binary compatible with code generated without that
20674     switch.  Additionally, it makes the code suboptimal.  Use it to
20675     conform to a non-default application binary interface.
20676
20677'-finstrument-functions'
20678     Generate instrumentation calls for entry and exit to functions.
20679     Just after function entry and just before function exit, the
20680     following profiling functions are called with the address of the
20681     current function and its call site.  (On some platforms,
20682     '__builtin_return_address' does not work beyond the current
20683     function, so the call site information may not be available to the
20684     profiling functions otherwise.)
20685
20686          void __cyg_profile_func_enter (void *this_fn,
20687                                         void *call_site);
20688          void __cyg_profile_func_exit  (void *this_fn,
20689                                         void *call_site);
20690
20691     The first argument is the address of the start of the current
20692     function, which may be looked up exactly in the symbol table.
20693
20694     This instrumentation is also done for functions expanded inline in
20695     other functions.  The profiling calls indicate where, conceptually,
20696     the inline function is entered and exited.  This means that
20697     addressable versions of such functions must be available.  If all
20698     your uses of a function are expanded inline, this may mean an
20699     additional expansion of code size.  If you use 'extern inline' in
20700     your C code, an addressable version of such functions must be
20701     provided.  (This is normally the case anyway, but if you get lucky
20702     and the optimizer always expands the functions inline, you might
20703     have gotten away without providing static copies.)
20704
20705     A function may be given the attribute 'no_instrument_function', in
20706     which case this instrumentation is not done.  This can be used, for
20707     example, for the profiling functions listed above, high-priority
20708     interrupt routines, and any functions from which the profiling
20709     functions cannot safely be called (perhaps signal handlers, if the
20710     profiling routines generate output or allocate memory).
20711
20712'-finstrument-functions-exclude-file-list=FILE,FILE,...'
20713
20714     Set the list of functions that are excluded from instrumentation
20715     (see the description of '-finstrument-functions').  If the file
20716     that contains a function definition matches with one of FILE, then
20717     that function is not instrumented.  The match is done on
20718     substrings: if the FILE parameter is a substring of the file name,
20719     it is considered to be a match.
20720
20721     For example:
20722
20723          -finstrument-functions-exclude-file-list=/bits/stl,include/sys
20724
20725     excludes any inline function defined in files whose pathnames
20726     contain '/bits/stl' or 'include/sys'.
20727
20728     If, for some reason, you want to include letter '','' in one of
20729     SYM, write ''\,''.  For example,
20730     '-finstrument-functions-exclude-file-list='\,\,tmp'' (note the
20731     single quote surrounding the option).
20732
20733'-finstrument-functions-exclude-function-list=SYM,SYM,...'
20734
20735     This is similar to '-finstrument-functions-exclude-file-list', but
20736     this option sets the list of function names to be excluded from
20737     instrumentation.  The function name to be matched is its
20738     user-visible name, such as 'vector<int> blah(const vector<int> &)',
20739     not the internal mangled name (e.g., '_Z4blahRSt6vectorIiSaIiEE').
20740     The match is done on substrings: if the SYM parameter is a
20741     substring of the function name, it is considered to be a match.
20742     For C99 and C++ extended identifiers, the function name must be
20743     given in UTF-8, not using universal character names.
20744
20745'-fstack-check'
20746     Generate code to verify that you do not go beyond the boundary of
20747     the stack.  You should specify this flag if you are running in an
20748     environment with multiple threads, but you only rarely need to
20749     specify it in a single-threaded environment since stack overflow is
20750     automatically detected on nearly all systems if there is only one
20751     stack.
20752
20753     Note that this switch does not actually cause checking to be done;
20754     the operating system or the language runtime must do that.  The
20755     switch causes generation of code to ensure that they see the stack
20756     being extended.
20757
20758     You can additionally specify a string parameter: 'no' means no
20759     checking, 'generic' means force the use of old-style checking,
20760     'specific' means use the best checking method and is equivalent to
20761     bare '-fstack-check'.
20762
20763     Old-style checking is a generic mechanism that requires no specific
20764     target support in the compiler but comes with the following
20765     drawbacks:
20766
20767       1. Modified allocation strategy for large objects: they are
20768          always allocated dynamically if their size exceeds a fixed
20769          threshold.
20770
20771       2. Fixed limit on the size of the static frame of functions: when
20772          it is topped by a particular function, stack checking is not
20773          reliable and a warning is issued by the compiler.
20774
20775       3. Inefficiency: because of both the modified allocation strategy
20776          and the generic implementation, code performance is hampered.
20777
20778     Note that old-style stack checking is also the fallback method for
20779     'specific' if no target support has been added in the compiler.
20780
20781'-fstack-limit-register=REG'
20782'-fstack-limit-symbol=SYM'
20783'-fno-stack-limit'
20784     Generate code to ensure that the stack does not grow beyond a
20785     certain value, either the value of a register or the address of a
20786     symbol.  If a larger stack is required, a signal is raised at run
20787     time.  For most targets, the signal is raised before the stack
20788     overruns the boundary, so it is possible to catch the signal
20789     without taking special precautions.
20790
20791     For instance, if the stack starts at absolute address '0x80000000'
20792     and grows downwards, you can use the flags
20793     '-fstack-limit-symbol=__stack_limit' and
20794     '-Wl,--defsym,__stack_limit=0x7ffe0000' to enforce a stack limit of
20795     128KB.  Note that this may only work with the GNU linker.
20796
20797'-fsplit-stack'
20798     Generate code to automatically split the stack before it overflows.
20799     The resulting program has a discontiguous stack which can only
20800     overflow if the program is unable to allocate any more memory.
20801     This is most useful when running threaded programs, as it is no
20802     longer necessary to calculate a good stack size to use for each
20803     thread.  This is currently only implemented for the i386 and x86_64
20804     back ends running GNU/Linux.
20805
20806     When code compiled with '-fsplit-stack' calls code compiled without
20807     '-fsplit-stack', there may not be much stack space available for
20808     the latter code to run.  If compiling all code, including library
20809     code, with '-fsplit-stack' is not an option, then the linker can
20810     fix up these calls so that the code compiled without
20811     '-fsplit-stack' always has a large stack.  Support for this is
20812     implemented in the gold linker in GNU binutils release 2.21 and
20813     later.
20814
20815'-fleading-underscore'
20816     This option and its counterpart, '-fno-leading-underscore',
20817     forcibly change the way C symbols are represented in the object
20818     file.  One use is to help link with legacy assembly code.
20819
20820     *Warning:* the '-fleading-underscore' switch causes GCC to generate
20821     code that is not binary compatible with code generated without that
20822     switch.  Use it to conform to a non-default application binary
20823     interface.  Not all targets provide complete support for this
20824     switch.
20825
20826'-ftls-model=MODEL'
20827     Alter the thread-local storage model to be used (*note
20828     Thread-Local::).  The MODEL argument should be one of
20829     'global-dynamic', 'local-dynamic', 'initial-exec' or 'local-exec'.
20830     Note that the choice is subject to optimization: the compiler may
20831     use a more efficient model for symbols not visible outside of the
20832     translation unit, or if '-fpic' is not given on the command line.
20833
20834     The default without '-fpic' is 'initial-exec'; with '-fpic' the
20835     default is 'global-dynamic'.
20836
20837'-fvisibility=DEFAULT|INTERNAL|HIDDEN|PROTECTED'
20838     Set the default ELF image symbol visibility to the specified
20839     option--all symbols are marked with this unless overridden within
20840     the code.  Using this feature can very substantially improve
20841     linking and load times of shared object libraries, produce more
20842     optimized code, provide near-perfect API export and prevent symbol
20843     clashes.  It is *strongly* recommended that you use this in any
20844     shared objects you distribute.
20845
20846     Despite the nomenclature, 'default' always means public; i.e.,
20847     available to be linked against from outside the shared object.
20848     'protected' and 'internal' are pretty useless in real-world usage
20849     so the only other commonly used option is 'hidden'.  The default if
20850     '-fvisibility' isn't specified is 'default', i.e., make every
20851     symbol public--this causes the same behavior as previous versions
20852     of GCC.
20853
20854     A good explanation of the benefits offered by ensuring ELF symbols
20855     have the correct visibility is given by "How To Write Shared
20856     Libraries" by Ulrich Drepper (which can be found at
20857     <http://people.redhat.com/~drepper/>)--however a superior solution
20858     made possible by this option to marking things hidden when the
20859     default is public is to make the default hidden and mark things
20860     public.  This is the norm with DLLs on Windows and with
20861     '-fvisibility=hidden' and '__attribute__ ((visibility("default")))'
20862     instead of '__declspec(dllexport)' you get almost identical
20863     semantics with identical syntax.  This is a great boon to those
20864     working with cross-platform projects.
20865
20866     For those adding visibility support to existing code, you may find
20867     '#pragma GCC visibility' of use.  This works by you enclosing the
20868     declarations you wish to set visibility for with (for example)
20869     '#pragma GCC visibility push(hidden)' and '#pragma GCC visibility
20870     pop'.  Bear in mind that symbol visibility should be viewed *as
20871     part of the API interface contract* and thus all new code should
20872     always specify visibility when it is not the default; i.e.,
20873     declarations only for use within the local DSO should *always* be
20874     marked explicitly as hidden as so to avoid PLT indirection
20875     overheads--making this abundantly clear also aids readability and
20876     self-documentation of the code.  Note that due to ISO C++
20877     specification requirements, 'operator new' and 'operator delete'
20878     must always be of default visibility.
20879
20880     Be aware that headers from outside your project, in particular
20881     system headers and headers from any other library you use, may not
20882     be expecting to be compiled with visibility other than the default.
20883     You may need to explicitly say '#pragma GCC visibility
20884     push(default)' before including any such headers.
20885
20886     'extern' declarations are not affected by '-fvisibility', so a lot
20887     of code can be recompiled with '-fvisibility=hidden' with no
20888     modifications.  However, this means that calls to 'extern'
20889     functions with no explicit visibility use the PLT, so it is more
20890     effective to use '__attribute ((visibility))' and/or '#pragma GCC
20891     visibility' to tell the compiler which 'extern' declarations should
20892     be treated as hidden.
20893
20894     Note that '-fvisibility' does affect C++ vague linkage entities.
20895     This means that, for instance, an exception class that is be thrown
20896     between DSOs must be explicitly marked with default visibility so
20897     that the 'type_info' nodes are unified between the DSOs.
20898
20899     An overview of these techniques, their benefits and how to use them
20900     is at <http://gcc.gnu.org/wiki/Visibility>.
20901
20902'-fstrict-volatile-bitfields'
20903     This option should be used if accesses to volatile bit-fields (or
20904     other structure fields, although the compiler usually honors those
20905     types anyway) should use a single access of the width of the
20906     field's type, aligned to a natural alignment if possible.  For
20907     example, targets with memory-mapped peripheral registers might
20908     require all such accesses to be 16 bits wide; with this flag you
20909     can declare all peripheral bit-fields as 'unsigned short' (assuming
20910     short is 16 bits on these targets) to force GCC to use 16-bit
20911     accesses instead of, perhaps, a more efficient 32-bit access.
20912
20913     If this option is disabled, the compiler uses the most efficient
20914     instruction.  In the previous example, that might be a 32-bit load
20915     instruction, even though that accesses bytes that do not contain
20916     any portion of the bit-field, or memory-mapped registers unrelated
20917     to the one being updated.
20918
20919     In some cases, such as when the 'packed' attribute is applied to a
20920     structure field, it may not be possible to access the field with a
20921     single read or write that is correctly aligned for the target
20922     machine.  In this case GCC falls back to generating multiple
20923     accesses rather than code that will fault or truncate the result at
20924     run time.
20925
20926     Note: Due to restrictions of the C/C++11 memory model, write
20927     accesses are not allowed to touch non bit-field members.  It is
20928     therefore recommended to define all bits of the field's type as
20929     bit-field members.
20930
20931     The default value of this option is determined by the application
20932     binary interface for the target processor.
20933
20934'-fsync-libcalls'
20935     This option controls whether any out-of-line instance of the
20936     '__sync' family of functions may be used to implement the C++11
20937     '__atomic' family of functions.
20938
20939     The default value of this option is enabled, thus the only useful
20940     form of the option is '-fno-sync-libcalls'.  This option is used in
20941     the implementation of the 'libatomic' runtime library.
20942
20943
20944File: gcc.info,  Node: Environment Variables,  Next: Precompiled Headers,  Prev: Code Gen Options,  Up: Invoking GCC
20945
209463.19 Environment Variables Affecting GCC
20947========================================
20948
20949This section describes several environment variables that affect how GCC
20950operates.  Some of them work by specifying directories or prefixes to
20951use when searching for various kinds of files.  Some are used to specify
20952other aspects of the compilation environment.
20953
20954 Note that you can also specify places to search using options such as
20955'-B', '-I' and '-L' (*note Directory Options::).  These take precedence
20956over places specified using environment variables, which in turn take
20957precedence over those specified by the configuration of GCC.  *Note
20958Controlling the Compilation Driver 'gcc': (gccint)Driver.
20959
20960'LANG'
20961'LC_CTYPE'
20962'LC_MESSAGES'
20963'LC_ALL'
20964     These environment variables control the way that GCC uses
20965     localization information which allows GCC to work with different
20966     national conventions.  GCC inspects the locale categories
20967     'LC_CTYPE' and 'LC_MESSAGES' if it has been configured to do so.
20968     These locale categories can be set to any value supported by your
20969     installation.  A typical value is 'en_GB.UTF-8' for English in the
20970     United Kingdom encoded in UTF-8.
20971
20972     The 'LC_CTYPE' environment variable specifies character
20973     classification.  GCC uses it to determine the character boundaries
20974     in a string; this is needed for some multibyte encodings that
20975     contain quote and escape characters that are otherwise interpreted
20976     as a string end or escape.
20977
20978     The 'LC_MESSAGES' environment variable specifies the language to
20979     use in diagnostic messages.
20980
20981     If the 'LC_ALL' environment variable is set, it overrides the value
20982     of 'LC_CTYPE' and 'LC_MESSAGES'; otherwise, 'LC_CTYPE' and
20983     'LC_MESSAGES' default to the value of the 'LANG' environment
20984     variable.  If none of these variables are set, GCC defaults to
20985     traditional C English behavior.
20986
20987'TMPDIR'
20988     If 'TMPDIR' is set, it specifies the directory to use for temporary
20989     files.  GCC uses temporary files to hold the output of one stage of
20990     compilation which is to be used as input to the next stage: for
20991     example, the output of the preprocessor, which is the input to the
20992     compiler proper.
20993
20994'GCC_COMPARE_DEBUG'
20995     Setting 'GCC_COMPARE_DEBUG' is nearly equivalent to passing
20996     '-fcompare-debug' to the compiler driver.  See the documentation of
20997     this option for more details.
20998
20999'GCC_EXEC_PREFIX'
21000     If 'GCC_EXEC_PREFIX' is set, it specifies a prefix to use in the
21001     names of the subprograms executed by the compiler.  No slash is
21002     added when this prefix is combined with the name of a subprogram,
21003     but you can specify a prefix that ends with a slash if you wish.
21004
21005     If 'GCC_EXEC_PREFIX' is not set, GCC attempts to figure out an
21006     appropriate prefix to use based on the pathname it is invoked with.
21007
21008     If GCC cannot find the subprogram using the specified prefix, it
21009     tries looking in the usual places for the subprogram.
21010
21011     The default value of 'GCC_EXEC_PREFIX' is 'PREFIX/lib/gcc/' where
21012     PREFIX is the prefix to the installed compiler.  In many cases
21013     PREFIX is the value of 'prefix' when you ran the 'configure'
21014     script.
21015
21016     Other prefixes specified with '-B' take precedence over this
21017     prefix.
21018
21019     This prefix is also used for finding files such as 'crt0.o' that
21020     are used for linking.
21021
21022     In addition, the prefix is used in an unusual way in finding the
21023     directories to search for header files.  For each of the standard
21024     directories whose name normally begins with '/usr/local/lib/gcc'
21025     (more precisely, with the value of 'GCC_INCLUDE_DIR'), GCC tries
21026     replacing that beginning with the specified prefix to produce an
21027     alternate directory name.  Thus, with '-Bfoo/', GCC searches
21028     'foo/bar' just before it searches the standard directory
21029     '/usr/local/lib/bar'.  If a standard directory begins with the
21030     configured PREFIX then the value of PREFIX is replaced by
21031     'GCC_EXEC_PREFIX' when looking for header files.
21032
21033'COMPILER_PATH'
21034     The value of 'COMPILER_PATH' is a colon-separated list of
21035     directories, much like 'PATH'.  GCC tries the directories thus
21036     specified when searching for subprograms, if it can't find the
21037     subprograms using 'GCC_EXEC_PREFIX'.
21038
21039'LIBRARY_PATH'
21040     The value of 'LIBRARY_PATH' is a colon-separated list of
21041     directories, much like 'PATH'.  When configured as a native
21042     compiler, GCC tries the directories thus specified when searching
21043     for special linker files, if it can't find them using
21044     'GCC_EXEC_PREFIX'.  Linking using GCC also uses these directories
21045     when searching for ordinary libraries for the '-l' option (but
21046     directories specified with '-L' come first).
21047
21048'LANG'
21049     This variable is used to pass locale information to the compiler.
21050     One way in which this information is used is to determine the
21051     character set to be used when character literals, string literals
21052     and comments are parsed in C and C++.  When the compiler is
21053     configured to allow multibyte characters, the following values for
21054     'LANG' are recognized:
21055
21056     'C-JIS'
21057          Recognize JIS characters.
21058     'C-SJIS'
21059          Recognize SJIS characters.
21060     'C-EUCJP'
21061          Recognize EUCJP characters.
21062
21063     If 'LANG' is not defined, or if it has some other value, then the
21064     compiler uses 'mblen' and 'mbtowc' as defined by the default locale
21065     to recognize and translate multibyte characters.
21066
21067Some additional environment variables affect the behavior of the
21068preprocessor.
21069
21070'CPATH'
21071'C_INCLUDE_PATH'
21072'CPLUS_INCLUDE_PATH'
21073'OBJC_INCLUDE_PATH'
21074     Each variable's value is a list of directories separated by a
21075     special character, much like 'PATH', in which to look for header
21076     files.  The special character, 'PATH_SEPARATOR', is
21077     target-dependent and determined at GCC build time.  For Microsoft
21078     Windows-based targets it is a semicolon, and for almost all other
21079     targets it is a colon.
21080
21081     'CPATH' specifies a list of directories to be searched as if
21082     specified with '-I', but after any paths given with '-I' options on
21083     the command line.  This environment variable is used regardless of
21084     which language is being preprocessed.
21085
21086     The remaining environment variables apply only when preprocessing
21087     the particular language indicated.  Each specifies a list of
21088     directories to be searched as if specified with '-isystem', but
21089     after any paths given with '-isystem' options on the command line.
21090
21091     In all these variables, an empty element instructs the compiler to
21092     search its current working directory.  Empty elements can appear at
21093     the beginning or end of a path.  For instance, if the value of
21094     'CPATH' is ':/special/include', that has the same effect as
21095     '-I. -I/special/include'.
21096
21097'DEPENDENCIES_OUTPUT'
21098     If this variable is set, its value specifies how to output
21099     dependencies for Make based on the non-system header files
21100     processed by the compiler.  System header files are ignored in the
21101     dependency output.
21102
21103     The value of 'DEPENDENCIES_OUTPUT' can be just a file name, in
21104     which case the Make rules are written to that file, guessing the
21105     target name from the source file name.  Or the value can have the
21106     form 'FILE TARGET', in which case the rules are written to file
21107     FILE using TARGET as the target name.
21108
21109     In other words, this environment variable is equivalent to
21110     combining the options '-MM' and '-MF' (*note Preprocessor
21111     Options::), with an optional '-MT' switch too.
21112
21113'SUNPRO_DEPENDENCIES'
21114     This variable is the same as 'DEPENDENCIES_OUTPUT' (see above),
21115     except that system header files are not ignored, so it implies '-M'
21116     rather than '-MM'.  However, the dependence on the main input file
21117     is omitted.  *Note Preprocessor Options::.
21118
21119
21120File: gcc.info,  Node: Precompiled Headers,  Prev: Environment Variables,  Up: Invoking GCC
21121
211223.20 Using Precompiled Headers
21123==============================
21124
21125Often large projects have many header files that are included in every
21126source file.  The time the compiler takes to process these header files
21127over and over again can account for nearly all of the time required to
21128build the project.  To make builds faster, GCC allows you to
21129"precompile" a header file.
21130
21131 To create a precompiled header file, simply compile it as you would any
21132other file, if necessary using the '-x' option to make the driver treat
21133it as a C or C++ header file.  You may want to use a tool like 'make' to
21134keep the precompiled header up-to-date when the headers it contains
21135change.
21136
21137 A precompiled header file is searched for when '#include' is seen in
21138the compilation.  As it searches for the included file (*note Search
21139Path: (cpp)Search Path.) the compiler looks for a precompiled header in
21140each directory just before it looks for the include file in that
21141directory.  The name searched for is the name specified in the
21142'#include' with '.gch' appended.  If the precompiled header file can't
21143be used, it is ignored.
21144
21145 For instance, if you have '#include "all.h"', and you have 'all.h.gch'
21146in the same directory as 'all.h', then the precompiled header file is
21147used if possible, and the original header is used otherwise.
21148
21149 Alternatively, you might decide to put the precompiled header file in a
21150directory and use '-I' to ensure that directory is searched before (or
21151instead of) the directory containing the original header.  Then, if you
21152want to check that the precompiled header file is always used, you can
21153put a file of the same name as the original header in this directory
21154containing an '#error' command.
21155
21156 This also works with '-include'.  So yet another way to use precompiled
21157headers, good for projects not designed with precompiled header files in
21158mind, is to simply take most of the header files used by a project,
21159include them from another header file, precompile that header file, and
21160'-include' the precompiled header.  If the header files have guards
21161against multiple inclusion, they are skipped because they've already
21162been included (in the precompiled header).
21163
21164 If you need to precompile the same header file for different languages,
21165targets, or compiler options, you can instead make a _directory_ named
21166like 'all.h.gch', and put each precompiled header in the directory,
21167perhaps using '-o'.  It doesn't matter what you call the files in the
21168directory; every precompiled header in the directory is considered.  The
21169first precompiled header encountered in the directory that is valid for
21170this compilation is used; they're searched in no particular order.
21171
21172 There are many other possibilities, limited only by your imagination,
21173good sense, and the constraints of your build system.
21174
21175 A precompiled header file can be used only when these conditions apply:
21176
21177   * Only one precompiled header can be used in a particular
21178     compilation.
21179
21180   * A precompiled header can't be used once the first C token is seen.
21181     You can have preprocessor directives before a precompiled header;
21182     you cannot include a precompiled header from inside another header.
21183
21184   * The precompiled header file must be produced for the same language
21185     as the current compilation.  You can't use a C precompiled header
21186     for a C++ compilation.
21187
21188   * The precompiled header file must have been produced by the same
21189     compiler binary as the current compilation is using.
21190
21191   * Any macros defined before the precompiled header is included must
21192     either be defined in the same way as when the precompiled header
21193     was generated, or must not affect the precompiled header, which
21194     usually means that they don't appear in the precompiled header at
21195     all.
21196
21197     The '-D' option is one way to define a macro before a precompiled
21198     header is included; using a '#define' can also do it.  There are
21199     also some options that define macros implicitly, like '-O' and
21200     '-Wdeprecated'; the same rule applies to macros defined this way.
21201
21202   * If debugging information is output when using the precompiled
21203     header, using '-g' or similar, the same kind of debugging
21204     information must have been output when building the precompiled
21205     header.  However, a precompiled header built using '-g' can be used
21206     in a compilation when no debugging information is being output.
21207
21208   * The same '-m' options must generally be used when building and
21209     using the precompiled header.  *Note Submodel Options::, for any
21210     cases where this rule is relaxed.
21211
21212   * Each of the following options must be the same when building and
21213     using the precompiled header:
21214
21215          -fexceptions
21216
21217   * Some other command-line options starting with '-f', '-p', or '-O'
21218     must be defined in the same way as when the precompiled header was
21219     generated.  At present, it's not clear which options are safe to
21220     change and which are not; the safest choice is to use exactly the
21221     same options when generating and using the precompiled header.  The
21222     following are known to be safe:
21223
21224          -fmessage-length=  -fpreprocessed  -fsched-interblock
21225          -fsched-spec  -fsched-spec-load  -fsched-spec-load-dangerous
21226          -fsched-verbose=NUMBER  -fschedule-insns  -fvisibility=
21227          -pedantic-errors
21228
21229 For all of these except the last, the compiler automatically ignores
21230the precompiled header if the conditions aren't met.  If you find an
21231option combination that doesn't work and doesn't cause the precompiled
21232header to be ignored, please consider filing a bug report, see *note
21233Bugs::.
21234
21235 If you do use differing options when generating and using the
21236precompiled header, the actual behavior is a mixture of the behavior for
21237the options.  For instance, if you use '-g' to generate the precompiled
21238header but not when using it, you may or may not get debugging
21239information for routines in the precompiled header.
21240
21241
21242File: gcc.info,  Node: C Implementation,  Next: C++ Implementation,  Prev: Invoking GCC,  Up: Top
21243
212444 C Implementation-defined behavior
21245***********************************
21246
21247A conforming implementation of ISO C is required to document its choice
21248of behavior in each of the areas that are designated "implementation
21249defined".  The following lists all such areas, along with the section
21250numbers from the ISO/IEC 9899:1990, ISO/IEC 9899:1999 and ISO/IEC
212519899:2011 standards.  Some areas are only implementation-defined in one
21252version of the standard.
21253
21254 Some choices depend on the externally determined ABI for the platform
21255(including standard character encodings) which GCC follows; these are
21256listed as "determined by ABI" below.  *Note Binary Compatibility:
21257Compatibility, and <http://gcc.gnu.org/readings.html>.  Some choices are
21258documented in the preprocessor manual.  *Note Implementation-defined
21259behavior: (cpp)Implementation-defined behavior.  Some choices are made
21260by the library and operating system (or other environment when compiling
21261for a freestanding environment); refer to their documentation for
21262details.
21263
21264* Menu:
21265
21266* Translation implementation::
21267* Environment implementation::
21268* Identifiers implementation::
21269* Characters implementation::
21270* Integers implementation::
21271* Floating point implementation::
21272* Arrays and pointers implementation::
21273* Hints implementation::
21274* Structures unions enumerations and bit-fields implementation::
21275* Qualifiers implementation::
21276* Declarators implementation::
21277* Statements implementation::
21278* Preprocessing directives implementation::
21279* Library functions implementation::
21280* Architecture implementation::
21281* Locale-specific behavior implementation::
21282
21283
21284File: gcc.info,  Node: Translation implementation,  Next: Environment implementation,  Up: C Implementation
21285
212864.1 Translation
21287===============
21288
21289   * 'How a diagnostic is identified (C90 3.7, C99 and C11 3.10, C90,
21290     C99 and C11 5.1.1.3).'
21291
21292     Diagnostics consist of all the output sent to stderr by GCC.
21293
21294   * 'Whether each nonempty sequence of white-space characters other
21295     than new-line is retained or replaced by one space character in
21296     translation phase 3 (C90, C99 and C11 5.1.1.2).'
21297
21298     *Note Implementation-defined behavior: (cpp)Implementation-defined
21299     behavior.
21300
21301
21302File: gcc.info,  Node: Environment implementation,  Next: Identifiers implementation,  Prev: Translation implementation,  Up: C Implementation
21303
213044.2 Environment
21305===============
21306
21307The behavior of most of these points are dependent on the implementation
21308of the C library, and are not defined by GCC itself.
21309
21310   * 'The mapping between physical source file multibyte characters and
21311     the source character set in translation phase 1 (C90, C99 and C11
21312     5.1.1.2).'
21313
21314     *Note Implementation-defined behavior: (cpp)Implementation-defined
21315     behavior.
21316
21317
21318File: gcc.info,  Node: Identifiers implementation,  Next: Characters implementation,  Prev: Environment implementation,  Up: C Implementation
21319
213204.3 Identifiers
21321===============
21322
21323   * 'Which additional multibyte characters may appear in identifiers
21324     and their correspondence to universal character names (C99 and C11
21325     6.4.2).'
21326
21327     *Note Implementation-defined behavior: (cpp)Implementation-defined
21328     behavior.
21329
21330   * 'The number of significant initial characters in an identifier (C90
21331     6.1.2, C90, C99 and C11 5.2.4.1, C99 and C11 6.4.2).'
21332
21333     For internal names, all characters are significant.  For external
21334     names, the number of significant characters are defined by the
21335     linker; for almost all targets, all characters are significant.
21336
21337   * 'Whether case distinctions are significant in an identifier with
21338     external linkage (C90 6.1.2).'
21339
21340     This is a property of the linker.  C99 and C11 require that case
21341     distinctions are always significant in identifiers with external
21342     linkage and systems without this property are not supported by GCC.
21343
21344
21345File: gcc.info,  Node: Characters implementation,  Next: Integers implementation,  Prev: Identifiers implementation,  Up: C Implementation
21346
213474.4 Characters
21348==============
21349
21350   * 'The number of bits in a byte (C90 3.4, C99 and C11 3.6).'
21351
21352     Determined by ABI.
21353
21354   * 'The values of the members of the execution character set (C90, C99
21355     and C11 5.2.1).'
21356
21357     Determined by ABI.
21358
21359   * 'The unique value of the member of the execution character set
21360     produced for each of the standard alphabetic escape sequences (C90,
21361     C99 and C11 5.2.2).'
21362
21363     Determined by ABI.
21364
21365   * 'The value of a 'char' object into which has been stored any
21366     character other than a member of the basic execution character set
21367     (C90 6.1.2.5, C99 and C11 6.2.5).'
21368
21369     Determined by ABI.
21370
21371   * 'Which of 'signed char' or 'unsigned char' has the same range,
21372     representation, and behavior as "plain" 'char' (C90 6.1.2.5, C90
21373     6.2.1.1, C99 and C11 6.2.5, C99 and C11 6.3.1.1).'
21374
21375     Determined by ABI.  The options '-funsigned-char' and
21376     '-fsigned-char' change the default.  *Note Options Controlling C
21377     Dialect: C Dialect Options.
21378
21379   * 'The mapping of members of the source character set (in character
21380     constants and string literals) to members of the execution
21381     character set (C90 6.1.3.4, C99 and C11 6.4.4.4, C90, C99 and C11
21382     5.1.1.2).'
21383
21384     Determined by ABI.
21385
21386   * 'The value of an integer character constant containing more than
21387     one character or containing a character or escape sequence that
21388     does not map to a single-byte execution character (C90 6.1.3.4, C99
21389     and C11 6.4.4.4).'
21390
21391     *Note Implementation-defined behavior: (cpp)Implementation-defined
21392     behavior.
21393
21394   * 'The value of a wide character constant containing more than one
21395     multibyte character or a single multibyte character that maps to
21396     multiple members of the extended execution character set, or
21397     containing a multibyte character or escape sequence not represented
21398     in the extended execution character set (C90 6.1.3.4, C99 and C11
21399     6.4.4.4).'
21400
21401     *Note Implementation-defined behavior: (cpp)Implementation-defined
21402     behavior.
21403
21404   * 'The current locale used to convert a wide character constant
21405     consisting of a single multibyte character that maps to a member of
21406     the extended execution character set into a corresponding wide
21407     character code (C90 6.1.3.4, C99 and C11 6.4.4.4).'
21408
21409     *Note Implementation-defined behavior: (cpp)Implementation-defined
21410     behavior.
21411
21412   * 'Whether differently-prefixed wide string literal tokens can be
21413     concatenated and, if so, the treatment of the resulting multibyte
21414     character sequence (C11 6.4.5).'
21415
21416     Such tokens may not be concatenated.
21417
21418   * 'The current locale used to convert a wide string literal into
21419     corresponding wide character codes (C90 6.1.4, C99 and C11 6.4.5).'
21420
21421     *Note Implementation-defined behavior: (cpp)Implementation-defined
21422     behavior.
21423
21424   * 'The value of a string literal containing a multibyte character or
21425     escape sequence not represented in the execution character set (C90
21426     6.1.4, C99 and C11 6.4.5).'
21427
21428     *Note Implementation-defined behavior: (cpp)Implementation-defined
21429     behavior.
21430
21431   * 'The encoding of any of 'wchar_t', 'char16_t', and 'char32_t' where
21432     the corresponding standard encoding macro ('__STDC_ISO_10646__',
21433     '__STDC_UTF_16__', or '__STDC_UTF_32__') is not defined (C11
21434     6.10.8.2).'
21435
21436     *Note Implementation-defined behavior: (cpp)Implementation-defined
21437     behavior.  'char16_t' and 'char32_t' literals are always encoded in
21438     UTF-16 and UTF-32 respectively.
21439
21440
21441File: gcc.info,  Node: Integers implementation,  Next: Floating point implementation,  Prev: Characters implementation,  Up: C Implementation
21442
214434.5 Integers
21444============
21445
21446   * 'Any extended integer types that exist in the implementation (C99
21447     and C11 6.2.5).'
21448
21449     GCC does not support any extended integer types.
21450
21451   * 'Whether signed integer types are represented using sign and
21452     magnitude, two's complement, or one's complement, and whether the
21453     extraordinary value is a trap representation or an ordinary value
21454     (C99 and C11 6.2.6.2).'
21455
21456     GCC supports only two's complement integer types, and all bit
21457     patterns are ordinary values.
21458
21459   * 'The rank of any extended integer type relative to another extended
21460     integer type with the same precision (C99 and C11 6.3.1.1).'
21461
21462     GCC does not support any extended integer types.
21463
21464   * 'The result of, or the signal raised by, converting an integer to a
21465     signed integer type when the value cannot be represented in an
21466     object of that type (C90 6.2.1.2, C99 and C11 6.3.1.3).'
21467
21468     For conversion to a type of width N, the value is reduced modulo
21469     2^N to be within range of the type; no signal is raised.
21470
21471   * 'The results of some bitwise operations on signed integers (C90
21472     6.3, C99 and C11 6.5).'
21473
21474     Bitwise operators act on the representation of the value including
21475     both the sign and value bits, where the sign bit is considered
21476     immediately above the highest-value value bit.  Signed '>>' acts on
21477     negative numbers by sign extension.
21478
21479     GCC does not use the latitude given in C99 and C11 only to treat
21480     certain aspects of signed '<<' as undefined, but this is subject to
21481     change.
21482
21483   * 'The sign of the remainder on integer division (C90 6.3.5).'
21484
21485     GCC always follows the C99 and C11 requirement that the result of
21486     division is truncated towards zero.
21487
21488
21489File: gcc.info,  Node: Floating point implementation,  Next: Arrays and pointers implementation,  Prev: Integers implementation,  Up: C Implementation
21490
214914.6 Floating point
21492==================
21493
21494   * 'The accuracy of the floating-point operations and of the library
21495     functions in '<math.h>' and '<complex.h>' that return
21496     floating-point results (C90, C99 and C11 5.2.4.2.2).'
21497
21498     The accuracy is unknown.
21499
21500   * 'The rounding behaviors characterized by non-standard values of
21501     'FLT_ROUNDS' (C90, C99 and C11 5.2.4.2.2).'
21502
21503     GCC does not use such values.
21504
21505   * 'The evaluation methods characterized by non-standard negative
21506     values of 'FLT_EVAL_METHOD' (C99 and C11 5.2.4.2.2).'
21507
21508     GCC does not use such values.
21509
21510   * 'The direction of rounding when an integer is converted to a
21511     floating-point number that cannot exactly represent the original
21512     value (C90 6.2.1.3, C99 and C11 6.3.1.4).'
21513
21514     C99 Annex F is followed.
21515
21516   * 'The direction of rounding when a floating-point number is
21517     converted to a narrower floating-point number (C90 6.2.1.4, C99 and
21518     C11 6.3.1.5).'
21519
21520     C99 Annex F is followed.
21521
21522   * 'How the nearest representable value or the larger or smaller
21523     representable value immediately adjacent to the nearest
21524     representable value is chosen for certain floating constants (C90
21525     6.1.3.1, C99 and C11 6.4.4.2).'
21526
21527     C99 Annex F is followed.
21528
21529   * 'Whether and how floating expressions are contracted when not
21530     disallowed by the 'FP_CONTRACT' pragma (C99 and C11 6.5).'
21531
21532     Expressions are currently only contracted if '-ffp-contract=fast',
21533     '-funsafe-math-optimizations' or '-ffast-math' are used.  This is
21534     subject to change.
21535
21536   * 'The default state for the 'FENV_ACCESS' pragma (C99 and C11
21537     7.6.1).'
21538
21539     This pragma is not implemented, but the default is to "off" unless
21540     '-frounding-math' is used in which case it is "on".
21541
21542   * 'Additional floating-point exceptions, rounding modes,
21543     environments, and classifications, and their macro names (C99 and
21544     C11 7.6, C99 and C11 7.12).'
21545
21546     This is dependent on the implementation of the C library, and is
21547     not defined by GCC itself.
21548
21549   * 'The default state for the 'FP_CONTRACT' pragma (C99 and C11
21550     7.12.2).'
21551
21552     This pragma is not implemented.  Expressions are currently only
21553     contracted if '-ffp-contract=fast', '-funsafe-math-optimizations'
21554     or '-ffast-math' are used.  This is subject to change.
21555
21556   * 'Whether the "inexact" floating-point exception can be raised when
21557     the rounded result actually does equal the mathematical result in
21558     an IEC 60559 conformant implementation (C99 F.9).'
21559
21560     This is dependent on the implementation of the C library, and is
21561     not defined by GCC itself.
21562
21563   * 'Whether the "underflow" (and "inexact") floating-point exception
21564     can be raised when a result is tiny but not inexact in an IEC 60559
21565     conformant implementation (C99 F.9).'
21566
21567     This is dependent on the implementation of the C library, and is
21568     not defined by GCC itself.
21569
21570
21571File: gcc.info,  Node: Arrays and pointers implementation,  Next: Hints implementation,  Prev: Floating point implementation,  Up: C Implementation
21572
215734.7 Arrays and pointers
21574=======================
21575
21576   * 'The result of converting a pointer to an integer or vice versa
21577     (C90 6.3.4, C99 and C11 6.3.2.3).'
21578
21579     A cast from pointer to integer discards most-significant bits if
21580     the pointer representation is larger than the integer type,
21581     sign-extends(1) if the pointer representation is smaller than the
21582     integer type, otherwise the bits are unchanged.
21583
21584     A cast from integer to pointer discards most-significant bits if
21585     the pointer representation is smaller than the integer type,
21586     extends according to the signedness of the integer type if the
21587     pointer representation is larger than the integer type, otherwise
21588     the bits are unchanged.
21589
21590     When casting from pointer to integer and back again, the resulting
21591     pointer must reference the same object as the original pointer,
21592     otherwise the behavior is undefined.  That is, one may not use
21593     integer arithmetic to avoid the undefined behavior of pointer
21594     arithmetic as proscribed in C99 and C11 6.5.6/8.
21595
21596   * 'The size of the result of subtracting two pointers to elements of
21597     the same array (C90 6.3.6, C99 and C11 6.5.6).'
21598
21599     The value is as specified in the standard and the type is
21600     determined by the ABI.
21601
21602   ---------- Footnotes ----------
21603
21604   (1) Future versions of GCC may zero-extend, or use a target-defined
21605'ptr_extend' pattern.  Do not rely on sign extension.
21606
21607
21608File: gcc.info,  Node: Hints implementation,  Next: Structures unions enumerations and bit-fields implementation,  Prev: Arrays and pointers implementation,  Up: C Implementation
21609
216104.8 Hints
21611=========
21612
21613   * 'The extent to which suggestions made by using the 'register'
21614     storage-class specifier are effective (C90 6.5.1, C99 and C11
21615     6.7.1).'
21616
21617     The 'register' specifier affects code generation only in these
21618     ways:
21619
21620        * When used as part of the register variable extension, see
21621          *note Explicit Reg Vars::.
21622
21623        * When '-O0' is in use, the compiler allocates distinct stack
21624          memory for all variables that do not have the 'register'
21625          storage-class specifier; if 'register' is specified, the
21626          variable may have a shorter lifespan than the code would
21627          indicate and may never be placed in memory.
21628
21629        * On some rare x86 targets, 'setjmp' doesn't save the registers
21630          in all circumstances.  In those cases, GCC doesn't allocate
21631          any variables in registers unless they are marked 'register'.
21632
21633   * 'The extent to which suggestions made by using the inline function
21634     specifier are effective (C99 and C11 6.7.4).'
21635
21636     GCC will not inline any functions if the '-fno-inline' option is
21637     used or if '-O0' is used.  Otherwise, GCC may still be unable to
21638     inline a function for many reasons; the '-Winline' option may be
21639     used to determine if a function has not been inlined and why not.
21640
21641
21642File: gcc.info,  Node: Structures unions enumerations and bit-fields implementation,  Next: Qualifiers implementation,  Prev: Hints implementation,  Up: C Implementation
21643
216444.9 Structures, unions, enumerations, and bit-fields
21645====================================================
21646
21647   * 'A member of a union object is accessed using a member of a
21648     different type (C90 6.3.2.3).'
21649
21650     The relevant bytes of the representation of the object are treated
21651     as an object of the type used for the access.  *Note
21652     Type-punning::.  This may be a trap representation.
21653
21654   * 'Whether a "plain" 'int' bit-field is treated as a 'signed int'
21655     bit-field or as an 'unsigned int' bit-field (C90 6.5.2, C90
21656     6.5.2.1, C99 and C11 6.7.2, C99 and C11 6.7.2.1).'
21657
21658     By default it is treated as 'signed int' but this may be changed by
21659     the '-funsigned-bitfields' option.
21660
21661   * 'Allowable bit-field types other than '_Bool', 'signed int', and
21662     'unsigned int' (C99 and C11 6.7.2.1).'
21663
21664     Other integer types, such as 'long int', and enumerated types are
21665     permitted even in strictly conforming mode.
21666
21667   * 'Whether atomic types are permitted for bit-fields (C11 6.7.2.1).'
21668
21669     Atomic types are not permitted for bit-fields.
21670
21671   * 'Whether a bit-field can straddle a storage-unit boundary (C90
21672     6.5.2.1, C99 and C11 6.7.2.1).'
21673
21674     Determined by ABI.
21675
21676   * 'The order of allocation of bit-fields within a unit (C90 6.5.2.1,
21677     C99 and C11 6.7.2.1).'
21678
21679     Determined by ABI.
21680
21681   * 'The alignment of non-bit-field members of structures (C90 6.5.2.1,
21682     C99 and C11 6.7.2.1).'
21683
21684     Determined by ABI.
21685
21686   * 'The integer type compatible with each enumerated type (C90
21687     6.5.2.2, C99 and C11 6.7.2.2).'
21688
21689     Normally, the type is 'unsigned int' if there are no negative
21690     values in the enumeration, otherwise 'int'.  If '-fshort-enums' is
21691     specified, then if there are negative values it is the first of
21692     'signed char', 'short' and 'int' that can represent all the values,
21693     otherwise it is the first of 'unsigned char', 'unsigned short' and
21694     'unsigned int' that can represent all the values.
21695
21696     On some targets, '-fshort-enums' is the default; this is determined
21697     by the ABI.
21698
21699
21700File: gcc.info,  Node: Qualifiers implementation,  Next: Declarators implementation,  Prev: Structures unions enumerations and bit-fields implementation,  Up: C Implementation
21701
217024.10 Qualifiers
21703===============
21704
21705   * 'What constitutes an access to an object that has
21706     volatile-qualified type (C90 6.5.3, C99 and C11 6.7.3).'
21707
21708     Such an object is normally accessed by pointers and used for
21709     accessing hardware.  In most expressions, it is intuitively obvious
21710     what is a read and what is a write.  For example
21711
21712          volatile int *dst = SOMEVALUE;
21713          volatile int *src = SOMEOTHERVALUE;
21714          *dst = *src;
21715
21716     will cause a read of the volatile object pointed to by SRC and
21717     store the value into the volatile object pointed to by DST.  There
21718     is no guarantee that these reads and writes are atomic, especially
21719     for objects larger than 'int'.
21720
21721     However, if the volatile storage is not being modified, and the
21722     value of the volatile storage is not used, then the situation is
21723     less obvious.  For example
21724
21725          volatile int *src = SOMEVALUE;
21726          *src;
21727
21728     According to the C standard, such an expression is an rvalue whose
21729     type is the unqualified version of its original type, i.e.  'int'.
21730     Whether GCC interprets this as a read of the volatile object being
21731     pointed to or only as a request to evaluate the expression for its
21732     side-effects depends on this type.
21733
21734     If it is a scalar type, or on most targets an aggregate type whose
21735     only member object is of a scalar type, or a union type whose
21736     member objects are of scalar types, the expression is interpreted
21737     by GCC as a read of the volatile object; in the other cases, the
21738     expression is only evaluated for its side-effects.
21739
21740
21741File: gcc.info,  Node: Declarators implementation,  Next: Statements implementation,  Prev: Qualifiers implementation,  Up: C Implementation
21742
217434.11 Declarators
21744================
21745
21746   * 'The maximum number of declarators that may modify an arithmetic,
21747     structure or union type (C90 6.5.4).'
21748
21749     GCC is only limited by available memory.
21750
21751
21752File: gcc.info,  Node: Statements implementation,  Next: Preprocessing directives implementation,  Prev: Declarators implementation,  Up: C Implementation
21753
217544.12 Statements
21755===============
21756
21757   * 'The maximum number of 'case' values in a 'switch' statement (C90
21758     6.6.4.2).'
21759
21760     GCC is only limited by available memory.
21761
21762
21763File: gcc.info,  Node: Preprocessing directives implementation,  Next: Library functions implementation,  Prev: Statements implementation,  Up: C Implementation
21764
217654.13 Preprocessing directives
21766=============================
21767
21768*Note Implementation-defined behavior: (cpp)Implementation-defined
21769behavior, for details of these aspects of implementation-defined
21770behavior.
21771
21772   * 'The locations within '#pragma' directives where header name
21773     preprocessing tokens are recognized (C11 6.4, C11 6.4.7).'
21774
21775   * 'How sequences in both forms of header names are mapped to headers
21776     or external source file names (C90 6.1.7, C99 and C11 6.4.7).'
21777
21778   * 'Whether the value of a character constant in a constant expression
21779     that controls conditional inclusion matches the value of the same
21780     character constant in the execution character set (C90 6.8.1, C99
21781     and C11 6.10.1).'
21782
21783   * 'Whether the value of a single-character character constant in a
21784     constant expression that controls conditional inclusion may have a
21785     negative value (C90 6.8.1, C99 and C11 6.10.1).'
21786
21787   * 'The places that are searched for an included '<>' delimited
21788     header, and how the places are specified or the header is
21789     identified (C90 6.8.2, C99 and C11 6.10.2).'
21790
21791   * 'How the named source file is searched for in an included '""'
21792     delimited header (C90 6.8.2, C99 and C11 6.10.2).'
21793
21794   * 'The method by which preprocessing tokens (possibly resulting from
21795     macro expansion) in a '#include' directive are combined into a
21796     header name (C90 6.8.2, C99 and C11 6.10.2).'
21797
21798   * 'The nesting limit for '#include' processing (C90 6.8.2, C99 and
21799     C11 6.10.2).'
21800
21801   * 'Whether the '#' operator inserts a '\' character before the '\'
21802     character that begins a universal character name in a character
21803     constant or string literal (C99 and C11 6.10.3.2).'
21804
21805   * 'The behavior on each recognized non-'STDC #pragma' directive (C90
21806     6.8.6, C99 and C11 6.10.6).'
21807
21808     *Note Pragmas: (cpp)Pragmas, for details of pragmas accepted by GCC
21809     on all targets.  *Note Pragmas Accepted by GCC: Pragmas, for
21810     details of target-specific pragmas.
21811
21812   * 'The definitions for '__DATE__' and '__TIME__' when respectively,
21813     the date and time of translation are not available (C90 6.8.8, C99
21814     6.10.8, C11 6.10.8.1).'
21815
21816
21817File: gcc.info,  Node: Library functions implementation,  Next: Architecture implementation,  Prev: Preprocessing directives implementation,  Up: C Implementation
21818
218194.14 Library functions
21820======================
21821
21822The behavior of most of these points are dependent on the implementation
21823of the C library, and are not defined by GCC itself.
21824
21825   * 'The null pointer constant to which the macro 'NULL' expands (C90
21826     7.1.6, C99 7.17, C11 7.19).'
21827
21828     In '<stddef.h>', 'NULL' expands to '((void *)0)'.  GCC does not
21829     provide the other headers which define 'NULL' and some library
21830     implementations may use other definitions in those headers.
21831
21832
21833File: gcc.info,  Node: Architecture implementation,  Next: Locale-specific behavior implementation,  Prev: Library functions implementation,  Up: C Implementation
21834
218354.15 Architecture
21836=================
21837
21838   * 'The values or expressions assigned to the macros specified in the
21839     headers '<float.h>', '<limits.h>', and '<stdint.h>' (C90, C99 and
21840     C11 5.2.4.2, C99 7.18.2, C99 7.18.3, C11 7.20.2, C11 7.20.3).'
21841
21842     Determined by ABI.
21843
21844   * 'The result of attempting to indirectly access an object with
21845     automatic or thread storage duration from a thread other than the
21846     one with which it is associated (C11 6.2.4).'
21847
21848     Such accesses are supported, subject to the same requirements for
21849     synchronization for concurrent accesses as for concurrent accesses
21850     to any object.
21851
21852   * 'The number, order, and encoding of bytes in any object (when not
21853     explicitly specified in this International Standard) (C99 and C11
21854     6.2.6.1).'
21855
21856     Determined by ABI.
21857
21858   * 'Whether any extended alignments are supported and the contexts in
21859     which they are supported (C11 6.2.8).'
21860
21861     Extended alignments up to 2^{28} (bytes) are supported for objects
21862     of automatic storage duration.  Alignments supported for objects of
21863     static and thread storage duration are determined by the ABI.
21864
21865   * 'Valid alignment values other than those returned by an _Alignof
21866     expression for fundamental types, if any (C11 6.2.8).'
21867
21868     Valid alignments are powers of 2 up to and including 2^{28}.
21869
21870   * 'The value of the result of the 'sizeof' and '_Alignof' operators
21871     (C90 6.3.3.4, C99 and C11 6.5.3.4).'
21872
21873     Determined by ABI.
21874
21875
21876File: gcc.info,  Node: Locale-specific behavior implementation,  Prev: Architecture implementation,  Up: C Implementation
21877
218784.16 Locale-specific behavior
21879=============================
21880
21881The behavior of these points are dependent on the implementation of the
21882C library, and are not defined by GCC itself.
21883
21884
21885File: gcc.info,  Node: C++ Implementation,  Next: C Extensions,  Prev: C Implementation,  Up: Top
21886
218875 C++ Implementation-defined behavior
21888*************************************
21889
21890A conforming implementation of ISO C++ is required to document its
21891choice of behavior in each of the areas that are designated
21892"implementation defined".  The following lists all such areas, along
21893with the section numbers from the ISO/IEC 14882:1998 and ISO/IEC
2189414882:2003 standards.  Some areas are only implementation-defined in one
21895version of the standard.
21896
21897 Some choices depend on the externally determined ABI for the platform
21898(including standard character encodings) which GCC follows; these are
21899listed as "determined by ABI" below.  *Note Binary Compatibility:
21900Compatibility, and <http://gcc.gnu.org/readings.html>.  Some choices are
21901documented in the preprocessor manual.  *Note Implementation-defined
21902behavior: (cpp)Implementation-defined behavior.  Some choices are
21903documented in the corresponding document for the C language.  *Note C
21904Implementation::.  Some choices are made by the library and operating
21905system (or other environment when compiling for a freestanding
21906environment); refer to their documentation for details.
21907
21908* Menu:
21909
21910* Conditionally-supported behavior::
21911* Exception handling::
21912
21913
21914File: gcc.info,  Node: Conditionally-supported behavior,  Next: Exception handling,  Up: C++ Implementation
21915
219165.1 Conditionally-supported behavior
21917====================================
21918
21919'Each implementation shall include documentation that identifies all
21920conditionally-supported constructs that it does not support (C++0x
219211.4).'
21922
21923   * 'Whether an argument of class type with a non-trivial copy
21924     constructor or destructor can be passed to ... (C++0x 5.2.2).'
21925
21926     Such argument passing is not supported.
21927
21928
21929File: gcc.info,  Node: Exception handling,  Prev: Conditionally-supported behavior,  Up: C++ Implementation
21930
219315.2 Exception handling
21932======================
21933
21934   * 'In the situation where no matching handler is found, it is
21935     implementation-defined whether or not the stack is unwound before
21936     std::terminate() is called (C++98 15.5.1).'
21937
21938     The stack is not unwound before std::terminate is called.
21939
21940
21941File: gcc.info,  Node: C Extensions,  Next: C++ Extensions,  Prev: C++ Implementation,  Up: Top
21942
219436 Extensions to the C Language Family
21944*************************************
21945
21946GNU C provides several language features not found in ISO standard C.
21947(The '-pedantic' option directs GCC to print a warning message if any of
21948these features is used.)  To test for the availability of these features
21949in conditional compilation, check for a predefined macro '__GNUC__',
21950which is always defined under GCC.
21951
21952 These extensions are available in C and Objective-C.  Most of them are
21953also available in C++.  *Note Extensions to the C++ Language: C++
21954Extensions, for extensions that apply _only_ to C++.
21955
21956 Some features that are in ISO C99 but not C90 or C++ are also, as
21957extensions, accepted by GCC in C90 mode and in C++.
21958
21959* Menu:
21960
21961* Statement Exprs::     Putting statements and declarations inside expressions.
21962* Local Labels::        Labels local to a block.
21963* Labels as Values::    Getting pointers to labels, and computed gotos.
21964* Nested Functions::    As in Algol and Pascal, lexical scoping of functions.
21965* Constructing Calls::  Dispatching a call to another function.
21966* Typeof::              'typeof': referring to the type of an expression.
21967* Conditionals::        Omitting the middle operand of a '?:' expression.
21968* __int128::		128-bit integers--'__int128'.
21969* Long Long::           Double-word integers--'long long int'.
21970* Complex::             Data types for complex numbers.
21971* Floating Types::      Additional Floating Types.
21972* Half-Precision::      Half-Precision Floating Point.
21973* Decimal Float::       Decimal Floating Types.
21974* Hex Floats::          Hexadecimal floating-point constants.
21975* Fixed-Point::         Fixed-Point Types.
21976* Named Address Spaces::Named address spaces.
21977* Zero Length::         Zero-length arrays.
21978* Empty Structures::    Structures with no members.
21979* Variable Length::     Arrays whose length is computed at run time.
21980* Variadic Macros::     Macros with a variable number of arguments.
21981* Escaped Newlines::    Slightly looser rules for escaped newlines.
21982* Subscripting::        Any array can be subscripted, even if not an lvalue.
21983* Pointer Arith::       Arithmetic on 'void'-pointers and function pointers.
21984* Initializers::        Non-constant initializers.
21985* Compound Literals::   Compound literals give structures, unions
21986                        or arrays as values.
21987* Designated Inits::    Labeling elements of initializers.
21988* Case Ranges::         'case 1 ... 9' and such.
21989* Cast to Union::       Casting to union type from any member of the union.
21990* Mixed Declarations::  Mixing declarations and code.
21991* Function Attributes:: Declaring that functions have no side effects,
21992                        or that they can never return.
21993* Attribute Syntax::    Formal syntax for attributes.
21994* Function Prototypes:: Prototype declarations and old-style definitions.
21995* C++ Comments::        C++ comments are recognized.
21996* Dollar Signs::        Dollar sign is allowed in identifiers.
21997* Character Escapes::   '\e' stands for the character <ESC>.
21998* Variable Attributes:: Specifying attributes of variables.
21999* Type Attributes::     Specifying attributes of types.
22000* Alignment::           Inquiring about the alignment of a type or variable.
22001* Inline::              Defining inline functions (as fast as macros).
22002* Volatiles::           What constitutes an access to a volatile object.
22003* Extended Asm::        Assembler instructions with C expressions as operands.
22004                        (With them you can define "built-in" functions.)
22005* Constraints::         Constraints for asm operands
22006* Asm Labels::          Specifying the assembler name to use for a C symbol.
22007* Explicit Reg Vars::   Defining variables residing in specified registers.
22008* Alternate Keywords::  '__const__', '__asm__', etc., for header files.
22009* Incomplete Enums::    'enum foo;', with details to follow.
22010* Function Names::      Printable strings which are the name of the current
22011                        function.
22012* Return Address::      Getting the return or frame address of a function.
22013* Vector Extensions::   Using vector instructions through built-in functions.
22014* Offsetof::            Special syntax for implementing 'offsetof'.
22015* __sync Builtins::     Legacy built-in functions for atomic memory access.
22016* __atomic Builtins::   Atomic built-in functions with memory model.
22017* x86 specific memory model extensions for transactional memory:: x86 memory models.
22018* Object Size Checking:: Built-in functions for limited buffer overflow
22019                        checking.
22020* Cilk Plus Builtins::  Built-in functions for the Cilk Plus language extension.
22021* Other Builtins::      Other built-in functions.
22022* Target Builtins::     Built-in functions specific to particular targets.
22023* Target Format Checks:: Format checks specific to particular targets.
22024* Pragmas::             Pragmas accepted by GCC.
22025* Unnamed Fields::      Unnamed struct/union fields within structs/unions.
22026* Thread-Local::        Per-thread variables.
22027* Binary constants::    Binary constants using the '0b' prefix.
22028
22029
22030File: gcc.info,  Node: Statement Exprs,  Next: Local Labels,  Up: C Extensions
22031
220326.1 Statements and Declarations in Expressions
22033==============================================
22034
22035A compound statement enclosed in parentheses may appear as an expression
22036in GNU C.  This allows you to use loops, switches, and local variables
22037within an expression.
22038
22039 Recall that a compound statement is a sequence of statements surrounded
22040by braces; in this construct, parentheses go around the braces.  For
22041example:
22042
22043     ({ int y = foo (); int z;
22044        if (y > 0) z = y;
22045        else z = - y;
22046        z; })
22047
22048is a valid (though slightly more complex than necessary) expression for
22049the absolute value of 'foo ()'.
22050
22051 The last thing in the compound statement should be an expression
22052followed by a semicolon; the value of this subexpression serves as the
22053value of the entire construct.  (If you use some other kind of statement
22054last within the braces, the construct has type 'void', and thus
22055effectively no value.)
22056
22057 This feature is especially useful in making macro definitions "safe"
22058(so that they evaluate each operand exactly once).  For example, the
22059"maximum" function is commonly defined as a macro in standard C as
22060follows:
22061
22062     #define max(a,b) ((a) > (b) ? (a) : (b))
22063
22064But this definition computes either A or B twice, with bad results if
22065the operand has side effects.  In GNU C, if you know the type of the
22066operands (here taken as 'int'), you can define the macro safely as
22067follows:
22068
22069     #define maxint(a,b) \
22070       ({int _a = (a), _b = (b); _a > _b ? _a : _b; })
22071
22072 Embedded statements are not allowed in constant expressions, such as
22073the value of an enumeration constant, the width of a bit-field, or the
22074initial value of a static variable.
22075
22076 If you don't know the type of the operand, you can still do this, but
22077you must use 'typeof' or '__auto_type' (*note Typeof::).
22078
22079 In G++, the result value of a statement expression undergoes array and
22080function pointer decay, and is returned by value to the enclosing
22081expression.  For instance, if 'A' is a class, then
22082
22083             A a;
22084
22085             ({a;}).Foo ()
22086
22087constructs a temporary 'A' object to hold the result of the statement
22088expression, and that is used to invoke 'Foo'.  Therefore the 'this'
22089pointer observed by 'Foo' is not the address of 'a'.
22090
22091 In a statement expression, any temporaries created within a statement
22092are destroyed at that statement's end.  This makes statement expressions
22093inside macros slightly different from function calls.  In the latter
22094case temporaries introduced during argument evaluation are destroyed at
22095the end of the statement that includes the function call.  In the
22096statement expression case they are destroyed during the statement
22097expression.  For instance,
22098
22099     #define macro(a)  ({__typeof__(a) b = (a); b + 3; })
22100     template<typename T> T function(T a) { T b = a; return b + 3; }
22101
22102     void foo ()
22103     {
22104       macro (X ());
22105       function (X ());
22106     }
22107
22108has different places where temporaries are destroyed.  For the 'macro'
22109case, the temporary 'X' is destroyed just after the initialization of
22110'b'.  In the 'function' case that temporary is destroyed when the
22111function returns.
22112
22113 These considerations mean that it is probably a bad idea to use
22114statement expressions of this form in header files that are designed to
22115work with C++.  (Note that some versions of the GNU C Library contained
22116header files using statement expressions that lead to precisely this
22117bug.)
22118
22119 Jumping into a statement expression with 'goto' or using a 'switch'
22120statement outside the statement expression with a 'case' or 'default'
22121label inside the statement expression is not permitted.  Jumping into a
22122statement expression with a computed 'goto' (*note Labels as Values::)
22123has undefined behavior.  Jumping out of a statement expression is
22124permitted, but if the statement expression is part of a larger
22125expression then it is unspecified which other subexpressions of that
22126expression have been evaluated except where the language definition
22127requires certain subexpressions to be evaluated before or after the
22128statement expression.  In any case, as with a function call, the
22129evaluation of a statement expression is not interleaved with the
22130evaluation of other parts of the containing expression.  For example,
22131
22132       foo (), (({ bar1 (); goto a; 0; }) + bar2 ()), baz();
22133
22134calls 'foo' and 'bar1' and does not call 'baz' but may or may not call
22135'bar2'.  If 'bar2' is called, it is called after 'foo' and before
22136'bar1'.
22137
22138
22139File: gcc.info,  Node: Local Labels,  Next: Labels as Values,  Prev: Statement Exprs,  Up: C Extensions
22140
221416.2 Locally Declared Labels
22142===========================
22143
22144GCC allows you to declare "local labels" in any nested block scope.  A
22145local label is just like an ordinary label, but you can only reference
22146it (with a 'goto' statement, or by taking its address) within the block
22147in which it is declared.
22148
22149 A local label declaration looks like this:
22150
22151     __label__ LABEL;
22152
22153or
22154
22155     __label__ LABEL1, LABEL2, /* ... */;
22156
22157 Local label declarations must come at the beginning of the block,
22158before any ordinary declarations or statements.
22159
22160 The label declaration defines the label _name_, but does not define the
22161label itself.  You must do this in the usual way, with 'LABEL:', within
22162the statements of the statement expression.
22163
22164 The local label feature is useful for complex macros.  If a macro
22165contains nested loops, a 'goto' can be useful for breaking out of them.
22166However, an ordinary label whose scope is the whole function cannot be
22167used: if the macro can be expanded several times in one function, the
22168label is multiply defined in that function.  A local label avoids this
22169problem.  For example:
22170
22171     #define SEARCH(value, array, target)              \
22172     do {                                              \
22173       __label__ found;                                \
22174       typeof (target) _SEARCH_target = (target);      \
22175       typeof (*(array)) *_SEARCH_array = (array);     \
22176       int i, j;                                       \
22177       int value;                                      \
22178       for (i = 0; i < max; i++)                       \
22179         for (j = 0; j < max; j++)                     \
22180           if (_SEARCH_array[i][j] == _SEARCH_target)  \
22181             { (value) = i; goto found; }              \
22182       (value) = -1;                                   \
22183      found:;                                          \
22184     } while (0)
22185
22186 This could also be written using a statement expression:
22187
22188     #define SEARCH(array, target)                     \
22189     ({                                                \
22190       __label__ found;                                \
22191       typeof (target) _SEARCH_target = (target);      \
22192       typeof (*(array)) *_SEARCH_array = (array);     \
22193       int i, j;                                       \
22194       int value;                                      \
22195       for (i = 0; i < max; i++)                       \
22196         for (j = 0; j < max; j++)                     \
22197           if (_SEARCH_array[i][j] == _SEARCH_target)  \
22198             { value = i; goto found; }                \
22199       value = -1;                                     \
22200      found:                                           \
22201       value;                                          \
22202     })
22203
22204 Local label declarations also make the labels they declare visible to
22205nested functions, if there are any.  *Note Nested Functions::, for
22206details.
22207
22208
22209File: gcc.info,  Node: Labels as Values,  Next: Nested Functions,  Prev: Local Labels,  Up: C Extensions
22210
222116.3 Labels as Values
22212====================
22213
22214You can get the address of a label defined in the current function (or a
22215containing function) with the unary operator '&&'.  The value has type
22216'void *'.  This value is a constant and can be used wherever a constant
22217of that type is valid.  For example:
22218
22219     void *ptr;
22220     /* ... */
22221     ptr = &&foo;
22222
22223 To use these values, you need to be able to jump to one.  This is done
22224with the computed goto statement(1), 'goto *EXP;'.  For example,
22225
22226     goto *ptr;
22227
22228Any expression of type 'void *' is allowed.
22229
22230 One way of using these constants is in initializing a static array that
22231serves as a jump table:
22232
22233     static void *array[] = { &&foo, &&bar, &&hack };
22234
22235Then you can select a label with indexing, like this:
22236
22237     goto *array[i];
22238
22239Note that this does not check whether the subscript is in bounds--array
22240indexing in C never does that.
22241
22242 Such an array of label values serves a purpose much like that of the
22243'switch' statement.  The 'switch' statement is cleaner, so use that
22244rather than an array unless the problem does not fit a 'switch'
22245statement very well.
22246
22247 Another use of label values is in an interpreter for threaded code.
22248The labels within the interpreter function can be stored in the threaded
22249code for super-fast dispatching.
22250
22251 You may not use this mechanism to jump to code in a different function.
22252If you do that, totally unpredictable things happen.  The best way to
22253avoid this is to store the label address only in automatic variables and
22254never pass it as an argument.
22255
22256 An alternate way to write the above example is
22257
22258     static const int array[] = { &&foo - &&foo, &&bar - &&foo,
22259                                  &&hack - &&foo };
22260     goto *(&&foo + array[i]);
22261
22262This is more friendly to code living in shared libraries, as it reduces
22263the number of dynamic relocations that are needed, and by consequence,
22264allows the data to be read-only.  This alternative with label
22265differences is not supported for the AVR target, please use the first
22266approach for AVR programs.
22267
22268 The '&&foo' expressions for the same label might have different values
22269if the containing function is inlined or cloned.  If a program relies on
22270them being always the same, '__attribute__((__noinline__,__noclone__))'
22271should be used to prevent inlining and cloning.  If '&&foo' is used in a
22272static variable initializer, inlining and cloning is forbidden.
22273
22274   ---------- Footnotes ----------
22275
22276   (1) The analogous feature in Fortran is called an assigned goto, but
22277that name seems inappropriate in C, where one can do more than simply
22278store label addresses in label variables.
22279
22280
22281File: gcc.info,  Node: Nested Functions,  Next: Constructing Calls,  Prev: Labels as Values,  Up: C Extensions
22282
222836.4 Nested Functions
22284====================
22285
22286A "nested function" is a function defined inside another function.
22287Nested functions are supported as an extension in GNU C, but are not
22288supported by GNU C++.
22289
22290 The nested function's name is local to the block where it is defined.
22291For example, here we define a nested function named 'square', and call
22292it twice:
22293
22294     foo (double a, double b)
22295     {
22296       double square (double z) { return z * z; }
22297
22298       return square (a) + square (b);
22299     }
22300
22301 The nested function can access all the variables of the containing
22302function that are visible at the point of its definition.  This is
22303called "lexical scoping".  For example, here we show a nested function
22304which uses an inherited variable named 'offset':
22305
22306     bar (int *array, int offset, int size)
22307     {
22308       int access (int *array, int index)
22309         { return array[index + offset]; }
22310       int i;
22311       /* ... */
22312       for (i = 0; i < size; i++)
22313         /* ... */ access (array, i) /* ... */
22314     }
22315
22316 Nested function definitions are permitted within functions in the
22317places where variable definitions are allowed; that is, in any block,
22318mixed with the other declarations and statements in the block.
22319
22320 It is possible to call the nested function from outside the scope of
22321its name by storing its address or passing the address to another
22322function:
22323
22324     hack (int *array, int size)
22325     {
22326       void store (int index, int value)
22327         { array[index] = value; }
22328
22329       intermediate (store, size);
22330     }
22331
22332 Here, the function 'intermediate' receives the address of 'store' as an
22333argument.  If 'intermediate' calls 'store', the arguments given to
22334'store' are used to store into 'array'.  But this technique works only
22335so long as the containing function ('hack', in this example) does not
22336exit.
22337
22338 If you try to call the nested function through its address after the
22339containing function exits, all hell breaks loose.  If you try to call it
22340after a containing scope level exits, and if it refers to some of the
22341variables that are no longer in scope, you may be lucky, but it's not
22342wise to take the risk.  If, however, the nested function does not refer
22343to anything that has gone out of scope, you should be safe.
22344
22345 GCC implements taking the address of a nested function using a
22346technique called "trampolines".  This technique was described in
22347'Lexical Closures for C++' (Thomas M. Breuel, USENIX C++ Conference
22348Proceedings, October 17-21, 1988).
22349
22350 A nested function can jump to a label inherited from a containing
22351function, provided the label is explicitly declared in the containing
22352function (*note Local Labels::).  Such a jump returns instantly to the
22353containing function, exiting the nested function that did the 'goto' and
22354any intermediate functions as well.  Here is an example:
22355
22356     bar (int *array, int offset, int size)
22357     {
22358       __label__ failure;
22359       int access (int *array, int index)
22360         {
22361           if (index > size)
22362             goto failure;
22363           return array[index + offset];
22364         }
22365       int i;
22366       /* ... */
22367       for (i = 0; i < size; i++)
22368         /* ... */ access (array, i) /* ... */
22369       /* ... */
22370       return 0;
22371
22372      /* Control comes here from 'access'
22373         if it detects an error.  */
22374      failure:
22375       return -1;
22376     }
22377
22378 A nested function always has no linkage.  Declaring one with 'extern'
22379or 'static' is erroneous.  If you need to declare the nested function
22380before its definition, use 'auto' (which is otherwise meaningless for
22381function declarations).
22382
22383     bar (int *array, int offset, int size)
22384     {
22385       __label__ failure;
22386       auto int access (int *, int);
22387       /* ... */
22388       int access (int *array, int index)
22389         {
22390           if (index > size)
22391             goto failure;
22392           return array[index + offset];
22393         }
22394       /* ... */
22395     }
22396
22397
22398File: gcc.info,  Node: Constructing Calls,  Next: Typeof,  Prev: Nested Functions,  Up: C Extensions
22399
224006.5 Constructing Function Calls
22401===============================
22402
22403Using the built-in functions described below, you can record the
22404arguments a function received, and call another function with the same
22405arguments, without knowing the number or types of the arguments.
22406
22407 You can also record the return value of that function call, and later
22408return that value, without knowing what data type the function tried to
22409return (as long as your caller expects that data type).
22410
22411 However, these built-in functions may interact badly with some
22412sophisticated features or other extensions of the language.  It is,
22413therefore, not recommended to use them outside very simple functions
22414acting as mere forwarders for their arguments.
22415
22416 -- Built-in Function: void * __builtin_apply_args ()
22417     This built-in function returns a pointer to data describing how to
22418     perform a call with the same arguments as are passed to the current
22419     function.
22420
22421     The function saves the arg pointer register, structure value
22422     address, and all registers that might be used to pass arguments to
22423     a function into a block of memory allocated on the stack.  Then it
22424     returns the address of that block.
22425
22426 -- Built-in Function: void * __builtin_apply (void (*FUNCTION)(), void
22427          *ARGUMENTS, size_t SIZE)
22428     This built-in function invokes FUNCTION with a copy of the
22429     parameters described by ARGUMENTS and SIZE.
22430
22431     The value of ARGUMENTS should be the value returned by
22432     '__builtin_apply_args'.  The argument SIZE specifies the size of
22433     the stack argument data, in bytes.
22434
22435     This function returns a pointer to data describing how to return
22436     whatever value is returned by FUNCTION.  The data is saved in a
22437     block of memory allocated on the stack.
22438
22439     It is not always simple to compute the proper value for SIZE.  The
22440     value is used by '__builtin_apply' to compute the amount of data
22441     that should be pushed on the stack and copied from the incoming
22442     argument area.
22443
22444 -- Built-in Function: void __builtin_return (void *RESULT)
22445     This built-in function returns the value described by RESULT from
22446     the containing function.  You should specify, for RESULT, a value
22447     returned by '__builtin_apply'.
22448
22449 -- Built-in Function: __builtin_va_arg_pack ()
22450     This built-in function represents all anonymous arguments of an
22451     inline function.  It can be used only in inline functions that are
22452     always inlined, never compiled as a separate function, such as
22453     those using '__attribute__ ((__always_inline__))' or '__attribute__
22454     ((__gnu_inline__))' extern inline functions.  It must be only
22455     passed as last argument to some other function with variable
22456     arguments.  This is useful for writing small wrapper inlines for
22457     variable argument functions, when using preprocessor macros is
22458     undesirable.  For example:
22459          extern int myprintf (FILE *f, const char *format, ...);
22460          extern inline __attribute__ ((__gnu_inline__)) int
22461          myprintf (FILE *f, const char *format, ...)
22462          {
22463            int r = fprintf (f, "myprintf: ");
22464            if (r < 0)
22465              return r;
22466            int s = fprintf (f, format, __builtin_va_arg_pack ());
22467            if (s < 0)
22468              return s;
22469            return r + s;
22470          }
22471
22472 -- Built-in Function: size_t __builtin_va_arg_pack_len ()
22473     This built-in function returns the number of anonymous arguments of
22474     an inline function.  It can be used only in inline functions that
22475     are always inlined, never compiled as a separate function, such as
22476     those using '__attribute__ ((__always_inline__))' or '__attribute__
22477     ((__gnu_inline__))' extern inline functions.  For example following
22478     does link- or run-time checking of open arguments for optimized
22479     code:
22480          #ifdef __OPTIMIZE__
22481          extern inline __attribute__((__gnu_inline__)) int
22482          myopen (const char *path, int oflag, ...)
22483          {
22484            if (__builtin_va_arg_pack_len () > 1)
22485              warn_open_too_many_arguments ();
22486
22487            if (__builtin_constant_p (oflag))
22488              {
22489                if ((oflag & O_CREAT) != 0 && __builtin_va_arg_pack_len () < 1)
22490                  {
22491                    warn_open_missing_mode ();
22492                    return __open_2 (path, oflag);
22493                  }
22494                return open (path, oflag, __builtin_va_arg_pack ());
22495              }
22496
22497            if (__builtin_va_arg_pack_len () < 1)
22498              return __open_2 (path, oflag);
22499
22500            return open (path, oflag, __builtin_va_arg_pack ());
22501          }
22502          #endif
22503
22504
22505File: gcc.info,  Node: Typeof,  Next: Conditionals,  Prev: Constructing Calls,  Up: C Extensions
22506
225076.6 Referring to a Type with 'typeof'
22508=====================================
22509
22510Another way to refer to the type of an expression is with 'typeof'.  The
22511syntax of using of this keyword looks like 'sizeof', but the construct
22512acts semantically like a type name defined with 'typedef'.
22513
22514 There are two ways of writing the argument to 'typeof': with an
22515expression or with a type.  Here is an example with an expression:
22516
22517     typeof (x[0](1))
22518
22519This assumes that 'x' is an array of pointers to functions; the type
22520described is that of the values of the functions.
22521
22522 Here is an example with a typename as the argument:
22523
22524     typeof (int *)
22525
22526Here the type described is that of pointers to 'int'.
22527
22528 If you are writing a header file that must work when included in ISO C
22529programs, write '__typeof__' instead of 'typeof'.  *Note Alternate
22530Keywords::.
22531
22532 A 'typeof' construct can be used anywhere a typedef name can be used.
22533For example, you can use it in a declaration, in a cast, or inside of
22534'sizeof' or 'typeof'.
22535
22536 The operand of 'typeof' is evaluated for its side effects if and only
22537if it is an expression of variably modified type or the name of such a
22538type.
22539
22540 'typeof' is often useful in conjunction with statement expressions
22541(*note Statement Exprs::).  Here is how the two together can be used to
22542define a safe "maximum" macro which operates on any arithmetic type and
22543evaluates each of its arguments exactly once:
22544
22545     #define max(a,b) \
22546       ({ typeof (a) _a = (a); \
22547           typeof (b) _b = (b); \
22548         _a > _b ? _a : _b; })
22549
22550 The reason for using names that start with underscores for the local
22551variables is to avoid conflicts with variable names that occur within
22552the expressions that are substituted for 'a' and 'b'.  Eventually we
22553hope to design a new form of declaration syntax that allows you to
22554declare variables whose scopes start only after their initializers; this
22555will be a more reliable way to prevent such conflicts.
22556
22557Some more examples of the use of 'typeof':
22558
22559   * This declares 'y' with the type of what 'x' points to.
22560
22561          typeof (*x) y;
22562
22563   * This declares 'y' as an array of such values.
22564
22565          typeof (*x) y[4];
22566
22567   * This declares 'y' as an array of pointers to characters:
22568
22569          typeof (typeof (char *)[4]) y;
22570
22571     It is equivalent to the following traditional C declaration:
22572
22573          char *y[4];
22574
22575     To see the meaning of the declaration using 'typeof', and why it
22576     might be a useful way to write, rewrite it with these macros:
22577
22578          #define pointer(T)  typeof(T *)
22579          #define array(T, N) typeof(T [N])
22580
22581     Now the declaration can be rewritten this way:
22582
22583          array (pointer (char), 4) y;
22584
22585     Thus, 'array (pointer (char), 4)' is the type of arrays of 4
22586     pointers to 'char'.
22587
22588 In GNU C, but not GNU C++, you may also declare the type of a variable
22589as '__auto_type'.  In that case, the declaration must declare only one
22590variable, whose declarator must just be an identifier, the declaration
22591must be initialized, and the type of the variable is determined by the
22592initializer; the name of the variable is not in scope until after the
22593initializer.  (In C++, you should use C++11 'auto' for this purpose.)
22594Using '__auto_type', the "maximum" macro above could be written as:
22595
22596     #define max(a,b) \
22597       ({ __auto_type _a = (a); \
22598           __auto_type _b = (b); \
22599         _a > _b ? _a : _b; })
22600
22601 Using '__auto_type' instead of 'typeof' has two advantages:
22602
22603   * Each argument to the macro appears only once in the expansion of
22604     the macro.  This prevents the size of the macro expansion growing
22605     exponentially when calls to such macros are nested inside arguments
22606     of such macros.
22607
22608   * If the argument to the macro has variably modified type, it is
22609     evaluated only once when using '__auto_type', but twice if 'typeof'
22610     is used.
22611
22612 _Compatibility Note:_ In addition to 'typeof', GCC 2 supported a more
22613limited extension that permitted one to write
22614
22615     typedef T = EXPR;
22616
22617with the effect of declaring T to have the type of the expression EXPR.
22618This extension does not work with GCC 3 (versions between 3.0 and 3.2
22619crash; 3.2.1 and later give an error).  Code that relies on it should be
22620rewritten to use 'typeof':
22621
22622     typedef typeof(EXPR) T;
22623
22624This works with all versions of GCC.
22625
22626
22627File: gcc.info,  Node: Conditionals,  Next: __int128,  Prev: Typeof,  Up: C Extensions
22628
226296.7 Conditionals with Omitted Operands
22630======================================
22631
22632The middle operand in a conditional expression may be omitted.  Then if
22633the first operand is nonzero, its value is the value of the conditional
22634expression.
22635
22636 Therefore, the expression
22637
22638     x ? : y
22639
22640has the value of 'x' if that is nonzero; otherwise, the value of 'y'.
22641
22642 This example is perfectly equivalent to
22643
22644     x ? x : y
22645
22646In this simple case, the ability to omit the middle operand is not
22647especially useful.  When it becomes useful is when the first operand
22648does, or may (if it is a macro argument), contain a side effect.  Then
22649repeating the operand in the middle would perform the side effect twice.
22650Omitting the middle operand uses the value already computed without the
22651undesirable effects of recomputing it.
22652
22653
22654File: gcc.info,  Node: __int128,  Next: Long Long,  Prev: Conditionals,  Up: C Extensions
22655
226566.8 128-bit integers
22657====================
22658
22659As an extension the integer scalar type '__int128' is supported for
22660targets which have an integer mode wide enough to hold 128 bits.  Simply
22661write '__int128' for a signed 128-bit integer, or 'unsigned __int128'
22662for an unsigned 128-bit integer.  There is no support in GCC for
22663expressing an integer constant of type '__int128' for targets with 'long
22664long' integer less than 128 bits wide.
22665
22666
22667File: gcc.info,  Node: Long Long,  Next: Complex,  Prev: __int128,  Up: C Extensions
22668
226696.9 Double-Word Integers
22670========================
22671
22672ISO C99 supports data types for integers that are at least 64 bits wide,
22673and as an extension GCC supports them in C90 mode and in C++.  Simply
22674write 'long long int' for a signed integer, or 'unsigned long long int'
22675for an unsigned integer.  To make an integer constant of type 'long long
22676int', add the suffix 'LL' to the integer.  To make an integer constant
22677of type 'unsigned long long int', add the suffix 'ULL' to the integer.
22678
22679 You can use these types in arithmetic like any other integer types.
22680Addition, subtraction, and bitwise boolean operations on these types are
22681open-coded on all types of machines.  Multiplication is open-coded if
22682the machine supports a fullword-to-doubleword widening multiply
22683instruction.  Division and shifts are open-coded only on machines that
22684provide special support.  The operations that are not open-coded use
22685special library routines that come with GCC.
22686
22687 There may be pitfalls when you use 'long long' types for function
22688arguments without function prototypes.  If a function expects type 'int'
22689for its argument, and you pass a value of type 'long long int',
22690confusion results because the caller and the subroutine disagree about
22691the number of bytes for the argument.  Likewise, if the function expects
22692'long long int' and you pass 'int'.  The best way to avoid such problems
22693is to use prototypes.
22694
22695
22696File: gcc.info,  Node: Complex,  Next: Floating Types,  Prev: Long Long,  Up: C Extensions
22697
226986.10 Complex Numbers
22699====================
22700
22701ISO C99 supports complex floating data types, and as an extension GCC
22702supports them in C90 mode and in C++.  GCC also supports complex integer
22703data types which are not part of ISO C99.  You can declare complex types
22704using the keyword '_Complex'.  As an extension, the older GNU keyword
22705'__complex__' is also supported.
22706
22707 For example, '_Complex double x;' declares 'x' as a variable whose real
22708part and imaginary part are both of type 'double'.  '_Complex short int
22709y;' declares 'y' to have real and imaginary parts of type 'short int';
22710this is not likely to be useful, but it shows that the set of complex
22711types is complete.
22712
22713 To write a constant with a complex data type, use the suffix 'i' or 'j'
22714(either one; they are equivalent).  For example, '2.5fi' has type
22715'_Complex float' and '3i' has type '_Complex int'.  Such a constant
22716always has a pure imaginary value, but you can form any complex value
22717you like by adding one to a real constant.  This is a GNU extension; if
22718you have an ISO C99 conforming C library (such as the GNU C Library),
22719and want to construct complex constants of floating type, you should
22720include '<complex.h>' and use the macros 'I' or '_Complex_I' instead.
22721
22722 To extract the real part of a complex-valued expression EXP, write
22723'__real__ EXP'.  Likewise, use '__imag__' to extract the imaginary part.
22724This is a GNU extension; for values of floating type, you should use the
22725ISO C99 functions 'crealf', 'creal', 'creall', 'cimagf', 'cimag' and
22726'cimagl', declared in '<complex.h>' and also provided as built-in
22727functions by GCC.
22728
22729 The operator '~' performs complex conjugation when used on a value with
22730a complex type.  This is a GNU extension; for values of floating type,
22731you should use the ISO C99 functions 'conjf', 'conj' and 'conjl',
22732declared in '<complex.h>' and also provided as built-in functions by
22733GCC.
22734
22735 GCC can allocate complex automatic variables in a noncontiguous
22736fashion; it's even possible for the real part to be in a register while
22737the imaginary part is on the stack (or vice versa).  Only the DWARF 2
22738debug info format can represent this, so use of DWARF 2 is recommended.
22739If you are using the stabs debug info format, GCC describes a
22740noncontiguous complex variable as if it were two separate variables of
22741noncomplex type.  If the variable's actual name is 'foo', the two
22742fictitious variables are named 'foo$real' and 'foo$imag'.  You can
22743examine and set these two fictitious variables with your debugger.
22744
22745
22746File: gcc.info,  Node: Floating Types,  Next: Half-Precision,  Prev: Complex,  Up: C Extensions
22747
227486.11 Additional Floating Types
22749==============================
22750
22751As an extension, GNU C supports additional floating types, '__float80'
22752and '__float128' to support 80-bit ('XFmode') and 128-bit ('TFmode')
22753floating types.  Support for additional types includes the arithmetic
22754operators: add, subtract, multiply, divide; unary arithmetic operators;
22755relational operators; equality operators; and conversions to and from
22756integer and other floating types.  Use a suffix 'w' or 'W' in a literal
22757constant of type '__float80' and 'q' or 'Q' for '_float128'.  You can
22758declare complex types using the corresponding internal complex type,
22759'XCmode' for '__float80' type and 'TCmode' for '__float128' type:
22760
22761     typedef _Complex float __attribute__((mode(TC))) _Complex128;
22762     typedef _Complex float __attribute__((mode(XC))) _Complex80;
22763
22764 Not all targets support additional floating-point types.  '__float80'
22765and '__float128' types are supported on i386, x86_64 and IA-64 targets.
22766The '__float128' type is supported on hppa HP-UX targets.
22767
22768
22769File: gcc.info,  Node: Half-Precision,  Next: Decimal Float,  Prev: Floating Types,  Up: C Extensions
22770
227716.12 Half-Precision Floating Point
22772==================================
22773
22774On ARM targets, GCC supports half-precision (16-bit) floating point via
22775the '__fp16' type.  You must enable this type explicitly with the
22776'-mfp16-format' command-line option in order to use it.
22777
22778 ARM supports two incompatible representations for half-precision
22779floating-point values.  You must choose one of the representations and
22780use it consistently in your program.
22781
22782 Specifying '-mfp16-format=ieee' selects the IEEE 754-2008 format.  This
22783format can represent normalized values in the range of 2^{-14} to 65504.
22784There are 11 bits of significand precision, approximately 3 decimal
22785digits.
22786
22787 Specifying '-mfp16-format=alternative' selects the ARM alternative
22788format.  This representation is similar to the IEEE format, but does not
22789support infinities or NaNs.  Instead, the range of exponents is
22790extended, so that this format can represent normalized values in the
22791range of 2^{-14} to 131008.
22792
22793 The '__fp16' type is a storage format only.  For purposes of arithmetic
22794and other operations, '__fp16' values in C or C++ expressions are
22795automatically promoted to 'float'.  In addition, you cannot declare a
22796function with a return value or parameters of type '__fp16'.
22797
22798 Note that conversions from 'double' to '__fp16' involve an intermediate
22799conversion to 'float'.  Because of rounding, this can sometimes produce
22800a different result than a direct conversion.
22801
22802 ARM provides hardware support for conversions between '__fp16' and
22803'float' values as an extension to VFP and NEON (Advanced SIMD). GCC
22804generates code using these hardware instructions if you compile with
22805options to select an FPU that provides them; for example,
22806'-mfpu=neon-fp16 -mfloat-abi=softfp', in addition to the '-mfp16-format'
22807option to select a half-precision format.
22808
22809 Language-level support for the '__fp16' data type is independent of
22810whether GCC generates code using hardware floating-point instructions.
22811In cases where hardware support is not specified, GCC implements
22812conversions between '__fp16' and 'float' values as library calls.
22813
22814
22815File: gcc.info,  Node: Decimal Float,  Next: Hex Floats,  Prev: Half-Precision,  Up: C Extensions
22816
228176.13 Decimal Floating Types
22818===========================
22819
22820As an extension, GNU C supports decimal floating types as defined in the
22821N1312 draft of ISO/IEC WDTR24732.  Support for decimal floating types in
22822GCC will evolve as the draft technical report changes.  Calling
22823conventions for any target might also change.  Not all targets support
22824decimal floating types.
22825
22826 The decimal floating types are '_Decimal32', '_Decimal64', and
22827'_Decimal128'.  They use a radix of ten, unlike the floating types
22828'float', 'double', and 'long double' whose radix is not specified by the
22829C standard but is usually two.
22830
22831 Support for decimal floating types includes the arithmetic operators
22832add, subtract, multiply, divide; unary arithmetic operators; relational
22833operators; equality operators; and conversions to and from integer and
22834other floating types.  Use a suffix 'df' or 'DF' in a literal constant
22835of type '_Decimal32', 'dd' or 'DD' for '_Decimal64', and 'dl' or 'DL'
22836for '_Decimal128'.
22837
22838 GCC support of decimal float as specified by the draft technical report
22839is incomplete:
22840
22841   * When the value of a decimal floating type cannot be represented in
22842     the integer type to which it is being converted, the result is
22843     undefined rather than the result value specified by the draft
22844     technical report.
22845
22846   * GCC does not provide the C library functionality associated with
22847     'math.h', 'fenv.h', 'stdio.h', 'stdlib.h', and 'wchar.h', which
22848     must come from a separate C library implementation.  Because of
22849     this the GNU C compiler does not define macro '__STDC_DEC_FP__' to
22850     indicate that the implementation conforms to the technical report.
22851
22852 Types '_Decimal32', '_Decimal64', and '_Decimal128' are supported by
22853the DWARF 2 debug information format.
22854
22855
22856File: gcc.info,  Node: Hex Floats,  Next: Fixed-Point,  Prev: Decimal Float,  Up: C Extensions
22857
228586.14 Hex Floats
22859===============
22860
22861ISO C99 supports floating-point numbers written not only in the usual
22862decimal notation, such as '1.55e1', but also numbers such as '0x1.fp3'
22863written in hexadecimal format.  As a GNU extension, GCC supports this in
22864C90 mode (except in some cases when strictly conforming) and in C++.  In
22865that format the '0x' hex introducer and the 'p' or 'P' exponent field
22866are mandatory.  The exponent is a decimal number that indicates the
22867power of 2 by which the significant part is multiplied.  Thus '0x1.f' is
228681 15/16, 'p3' multiplies it by 8, and the value of '0x1.fp3' is the same
22869as '1.55e1'.
22870
22871 Unlike for floating-point numbers in the decimal notation the exponent
22872is always required in the hexadecimal notation.  Otherwise the compiler
22873would not be able to resolve the ambiguity of, e.g., '0x1.f'.  This
22874could mean '1.0f' or '1.9375' since 'f' is also the extension for
22875floating-point constants of type 'float'.
22876
22877
22878File: gcc.info,  Node: Fixed-Point,  Next: Named Address Spaces,  Prev: Hex Floats,  Up: C Extensions
22879
228806.15 Fixed-Point Types
22881======================
22882
22883As an extension, GNU C supports fixed-point types as defined in the
22884N1169 draft of ISO/IEC DTR 18037.  Support for fixed-point types in GCC
22885will evolve as the draft technical report changes.  Calling conventions
22886for any target might also change.  Not all targets support fixed-point
22887types.
22888
22889 The fixed-point types are 'short _Fract', '_Fract', 'long _Fract',
22890'long long _Fract', 'unsigned short _Fract', 'unsigned _Fract',
22891'unsigned long _Fract', 'unsigned long long _Fract', '_Sat short
22892_Fract', '_Sat _Fract', '_Sat long _Fract', '_Sat long long _Fract',
22893'_Sat unsigned short _Fract', '_Sat unsigned _Fract', '_Sat unsigned
22894long _Fract', '_Sat unsigned long long _Fract', 'short _Accum',
22895'_Accum', 'long _Accum', 'long long _Accum', 'unsigned short _Accum',
22896'unsigned _Accum', 'unsigned long _Accum', 'unsigned long long _Accum',
22897'_Sat short _Accum', '_Sat _Accum', '_Sat long _Accum', '_Sat long long
22898_Accum', '_Sat unsigned short _Accum', '_Sat unsigned _Accum', '_Sat
22899unsigned long _Accum', '_Sat unsigned long long _Accum'.
22900
22901 Fixed-point data values contain fractional and optional integral parts.
22902The format of fixed-point data varies and depends on the target machine.
22903
22904 Support for fixed-point types includes:
22905   * prefix and postfix increment and decrement operators ('++', '--')
22906   * unary arithmetic operators ('+', '-', '!')
22907   * binary arithmetic operators ('+', '-', '*', '/')
22908   * binary shift operators ('<<', '>>')
22909   * relational operators ('<', '<=', '>=', '>')
22910   * equality operators ('==', '!=')
22911   * assignment operators ('+=', '-=', '*=', '/=', '<<=', '>>=')
22912   * conversions to and from integer, floating-point, or fixed-point
22913     types
22914
22915 Use a suffix in a fixed-point literal constant:
22916   * 'hr' or 'HR' for 'short _Fract' and '_Sat short _Fract'
22917   * 'r' or 'R' for '_Fract' and '_Sat _Fract'
22918   * 'lr' or 'LR' for 'long _Fract' and '_Sat long _Fract'
22919   * 'llr' or 'LLR' for 'long long _Fract' and '_Sat long long _Fract'
22920   * 'uhr' or 'UHR' for 'unsigned short _Fract' and '_Sat unsigned short
22921     _Fract'
22922   * 'ur' or 'UR' for 'unsigned _Fract' and '_Sat unsigned _Fract'
22923   * 'ulr' or 'ULR' for 'unsigned long _Fract' and '_Sat unsigned long
22924     _Fract'
22925   * 'ullr' or 'ULLR' for 'unsigned long long _Fract' and '_Sat unsigned
22926     long long _Fract'
22927   * 'hk' or 'HK' for 'short _Accum' and '_Sat short _Accum'
22928   * 'k' or 'K' for '_Accum' and '_Sat _Accum'
22929   * 'lk' or 'LK' for 'long _Accum' and '_Sat long _Accum'
22930   * 'llk' or 'LLK' for 'long long _Accum' and '_Sat long long _Accum'
22931   * 'uhk' or 'UHK' for 'unsigned short _Accum' and '_Sat unsigned short
22932     _Accum'
22933   * 'uk' or 'UK' for 'unsigned _Accum' and '_Sat unsigned _Accum'
22934   * 'ulk' or 'ULK' for 'unsigned long _Accum' and '_Sat unsigned long
22935     _Accum'
22936   * 'ullk' or 'ULLK' for 'unsigned long long _Accum' and '_Sat unsigned
22937     long long _Accum'
22938
22939 GCC support of fixed-point types as specified by the draft technical
22940report is incomplete:
22941
22942   * Pragmas to control overflow and rounding behaviors are not
22943     implemented.
22944
22945 Fixed-point types are supported by the DWARF 2 debug information
22946format.
22947
22948
22949File: gcc.info,  Node: Named Address Spaces,  Next: Zero Length,  Prev: Fixed-Point,  Up: C Extensions
22950
229516.16 Named Address Spaces
22952=========================
22953
22954As an extension, GNU C supports named address spaces as defined in the
22955N1275 draft of ISO/IEC DTR 18037.  Support for named address spaces in
22956GCC will evolve as the draft technical report changes.  Calling
22957conventions for any target might also change.  At present, only the AVR,
22958SPU, M32C, and RL78 targets support address spaces other than the
22959generic address space.
22960
22961 Address space identifiers may be used exactly like any other C type
22962qualifier (e.g., 'const' or 'volatile').  See the N1275 document for
22963more details.
22964
229656.16.1 AVR Named Address Spaces
22966-------------------------------
22967
22968On the AVR target, there are several address spaces that can be used in
22969order to put read-only data into the flash memory and access that data
22970by means of the special instructions 'LPM' or 'ELPM' needed to read from
22971flash.
22972
22973 Per default, any data including read-only data is located in RAM (the
22974generic address space) so that non-generic address spaces are needed to
22975locate read-only data in flash memory _and_ to generate the right
22976instructions to access this data without using (inline) assembler code.
22977
22978'__flash'
22979     The '__flash' qualifier locates data in the '.progmem.data'
22980     section.  Data is read using the 'LPM' instruction.  Pointers to
22981     this address space are 16 bits wide.
22982
22983'__flash1'
22984'__flash2'
22985'__flash3'
22986'__flash4'
22987'__flash5'
22988     These are 16-bit address spaces locating data in section
22989     '.progmemN.data' where N refers to address space '__flashN'.  The
22990     compiler sets the 'RAMPZ' segment register appropriately before
22991     reading data by means of the 'ELPM' instruction.
22992
22993'__memx'
22994     This is a 24-bit address space that linearizes flash and RAM: If
22995     the high bit of the address is set, data is read from RAM using the
22996     lower two bytes as RAM address.  If the high bit of the address is
22997     clear, data is read from flash with 'RAMPZ' set according to the
22998     high byte of the address.  *Note '__builtin_avr_flash_segment': AVR
22999     Built-in Functions.
23000
23001     Objects in this address space are located in '.progmemx.data'.
23002
23003 Example
23004
23005     char my_read (const __flash char ** p)
23006     {
23007         /* p is a pointer to RAM that points to a pointer to flash.
23008            The first indirection of p reads that flash pointer
23009            from RAM and the second indirection reads a char from this
23010            flash address.  */
23011
23012         return **p;
23013     }
23014
23015     /* Locate array[] in flash memory */
23016     const __flash int array[] = { 3, 5, 7, 11, 13, 17, 19 };
23017
23018     int i = 1;
23019
23020     int main (void)
23021     {
23022        /* Return 17 by reading from flash memory */
23023        return array[array[i]];
23024     }
23025
23026For each named address space supported by avr-gcc there is an equally
23027named but uppercase built-in macro defined.  The purpose is to
23028facilitate testing if respective address space support is available or
23029not:
23030
23031     #ifdef __FLASH
23032     const __flash int var = 1;
23033
23034     int read_var (void)
23035     {
23036         return var;
23037     }
23038     #else
23039     #include <avr/pgmspace.h> /* From AVR-LibC */
23040
23041     const int var PROGMEM = 1;
23042
23043     int read_var (void)
23044     {
23045         return (int) pgm_read_word (&var);
23046     }
23047     #endif /* __FLASH */
23048
23049Notice that attribute *note 'progmem': AVR Variable Attributes. locates
23050data in flash but accesses to these data read from generic address
23051space, i.e. from RAM, so that you need special accessors like
23052'pgm_read_byte' from AVR-LibC (http://nongnu.org/avr-libc/user-manual/)
23053together with attribute 'progmem'.
23054
23055Limitations and caveats
23056
23057   * Reading across the 64 KiB section boundary of the '__flash' or
23058     '__flashN' address spaces shows undefined behavior.  The only
23059     address space that supports reading across the 64 KiB flash segment
23060     boundaries is '__memx'.
23061
23062   * If you use one of the '__flashN' address spaces you must arrange
23063     your linker script to locate the '.progmemN.data' sections
23064     according to your needs.
23065
23066   * Any data or pointers to the non-generic address spaces must be
23067     qualified as 'const', i.e. as read-only data.  This still applies
23068     if the data in one of these address spaces like software version
23069     number or calibration lookup table are intended to be changed after
23070     load time by, say, a boot loader.  In this case the right
23071     qualification is 'const' 'volatile' so that the compiler must not
23072     optimize away known values or insert them as immediates into
23073     operands of instructions.
23074
23075   * The following code initializes a variable 'pfoo' located in static
23076     storage with a 24-bit address:
23077          extern const __memx char foo;
23078          const __memx void *pfoo = &foo;
23079
23080     Such code requires at least binutils 2.23, see
23081     PR13503 (http://sourceware.org/PR13503).
23082
230836.16.2 M32C Named Address Spaces
23084--------------------------------
23085
23086On the M32C target, with the R8C and M16C CPU variants, variables
23087qualified with '__far' are accessed using 32-bit addresses in order to
23088access memory beyond the first 64 Ki bytes.  If '__far' is used with the
23089M32CM or M32C CPU variants, it has no effect.
23090
230916.16.3 RL78 Named Address Spaces
23092--------------------------------
23093
23094On the RL78 target, variables qualified with '__far' are accessed with
2309532-bit pointers (20-bit addresses) rather than the default 16-bit
23096addresses.  Non-far variables are assumed to appear in the topmost
2309764 KiB of the address space.
23098
230996.16.4 SPU Named Address Spaces
23100-------------------------------
23101
23102On the SPU target variables may be declared as belonging to another
23103address space by qualifying the type with the '__ea' address space
23104identifier:
23105
23106     extern int __ea i;
23107
23108The compiler generates special code to access the variable 'i'.  It may
23109use runtime library support, or generate special machine instructions to
23110access that address space.
23111
23112
23113File: gcc.info,  Node: Zero Length,  Next: Empty Structures,  Prev: Named Address Spaces,  Up: C Extensions
23114
231156.17 Arrays of Length Zero
23116==========================
23117
23118Zero-length arrays are allowed in GNU C.  They are very useful as the
23119last element of a structure that is really a header for a
23120variable-length object:
23121
23122     struct line {
23123       int length;
23124       char contents[0];
23125     };
23126
23127     struct line *thisline = (struct line *)
23128       malloc (sizeof (struct line) + this_length);
23129     thisline->length = this_length;
23130
23131 In ISO C90, you would have to give 'contents' a length of 1, which
23132means either you waste space or complicate the argument to 'malloc'.
23133
23134 In ISO C99, you would use a "flexible array member", which is slightly
23135different in syntax and semantics:
23136
23137   * Flexible array members are written as 'contents[]' without the '0'.
23138
23139   * Flexible array members have incomplete type, and so the 'sizeof'
23140     operator may not be applied.  As a quirk of the original
23141     implementation of zero-length arrays, 'sizeof' evaluates to zero.
23142
23143   * Flexible array members may only appear as the last member of a
23144     'struct' that is otherwise non-empty.
23145
23146   * A structure containing a flexible array member, or a union
23147     containing such a structure (possibly recursively), may not be a
23148     member of a structure or an element of an array.  (However, these
23149     uses are permitted by GCC as extensions.)
23150
23151 GCC versions before 3.0 allowed zero-length arrays to be statically
23152initialized, as if they were flexible arrays.  In addition to those
23153cases that were useful, it also allowed initializations in situations
23154that would corrupt later data.  Non-empty initialization of zero-length
23155arrays is now treated like any case where there are more initializer
23156elements than the array holds, in that a suitable warning about "excess
23157elements in array" is given, and the excess elements (all of them, in
23158this case) are ignored.
23159
23160 Instead GCC allows static initialization of flexible array members.
23161This is equivalent to defining a new structure containing the original
23162structure followed by an array of sufficient size to contain the data.
23163E.g. in the following, 'f1' is constructed as if it were declared like
23164'f2'.
23165
23166     struct f1 {
23167       int x; int y[];
23168     } f1 = { 1, { 2, 3, 4 } };
23169
23170     struct f2 {
23171       struct f1 f1; int data[3];
23172     } f2 = { { 1 }, { 2, 3, 4 } };
23173
23174The convenience of this extension is that 'f1' has the desired type,
23175eliminating the need to consistently refer to 'f2.f1'.
23176
23177 This has symmetry with normal static arrays, in that an array of
23178unknown size is also written with '[]'.
23179
23180 Of course, this extension only makes sense if the extra data comes at
23181the end of a top-level object, as otherwise we would be overwriting data
23182at subsequent offsets.  To avoid undue complication and confusion with
23183initialization of deeply nested arrays, we simply disallow any non-empty
23184initialization except when the structure is the top-level object.  For
23185example:
23186
23187     struct foo { int x; int y[]; };
23188     struct bar { struct foo z; };
23189
23190     struct foo a = { 1, { 2, 3, 4 } };        // Valid.
23191     struct bar b = { { 1, { 2, 3, 4 } } };    // Invalid.
23192     struct bar c = { { 1, { } } };            // Valid.
23193     struct foo d[1] = { { 1 { 2, 3, 4 } } };  // Invalid.
23194
23195
23196File: gcc.info,  Node: Empty Structures,  Next: Variable Length,  Prev: Zero Length,  Up: C Extensions
23197
231986.18 Structures With No Members
23199===============================
23200
23201GCC permits a C structure to have no members:
23202
23203     struct empty {
23204     };
23205
23206 The structure has size zero.  In C++, empty structures are part of the
23207language.  G++ treats empty structures as if they had a single member of
23208type 'char'.
23209
23210
23211File: gcc.info,  Node: Variable Length,  Next: Variadic Macros,  Prev: Empty Structures,  Up: C Extensions
23212
232136.19 Arrays of Variable Length
23214==============================
23215
23216Variable-length automatic arrays are allowed in ISO C99, and as an
23217extension GCC accepts them in C90 mode and in C++.  These arrays are
23218declared like any other automatic arrays, but with a length that is not
23219a constant expression.  The storage is allocated at the point of
23220declaration and deallocated when the block scope containing the
23221declaration exits.  For example:
23222
23223     FILE *
23224     concat_fopen (char *s1, char *s2, char *mode)
23225     {
23226       char str[strlen (s1) + strlen (s2) + 1];
23227       strcpy (str, s1);
23228       strcat (str, s2);
23229       return fopen (str, mode);
23230     }
23231
23232 Jumping or breaking out of the scope of the array name deallocates the
23233storage.  Jumping into the scope is not allowed; you get an error
23234message for it.
23235
23236 As an extension, GCC accepts variable-length arrays as a member of a
23237structure or a union.  For example:
23238
23239     void
23240     foo (int n)
23241     {
23242       struct S { int x[n]; };
23243     }
23244
23245 You can use the function 'alloca' to get an effect much like
23246variable-length arrays.  The function 'alloca' is available in many
23247other C implementations (but not in all).  On the other hand,
23248variable-length arrays are more elegant.
23249
23250 There are other differences between these two methods.  Space allocated
23251with 'alloca' exists until the containing _function_ returns.  The space
23252for a variable-length array is deallocated as soon as the array name's
23253scope ends.  (If you use both variable-length arrays and 'alloca' in the
23254same function, deallocation of a variable-length array also deallocates
23255anything more recently allocated with 'alloca'.)
23256
23257 You can also use variable-length arrays as arguments to functions:
23258
23259     struct entry
23260     tester (int len, char data[len][len])
23261     {
23262       /* ... */
23263     }
23264
23265 The length of an array is computed once when the storage is allocated
23266and is remembered for the scope of the array in case you access it with
23267'sizeof'.
23268
23269 If you want to pass the array first and the length afterward, you can
23270use a forward declaration in the parameter list--another GNU extension.
23271
23272     struct entry
23273     tester (int len; char data[len][len], int len)
23274     {
23275       /* ... */
23276     }
23277
23278 The 'int len' before the semicolon is a "parameter forward
23279declaration", and it serves the purpose of making the name 'len' known
23280when the declaration of 'data' is parsed.
23281
23282 You can write any number of such parameter forward declarations in the
23283parameter list.  They can be separated by commas or semicolons, but the
23284last one must end with a semicolon, which is followed by the "real"
23285parameter declarations.  Each forward declaration must match a "real"
23286declaration in parameter name and data type.  ISO C99 does not support
23287parameter forward declarations.
23288
23289
23290File: gcc.info,  Node: Variadic Macros,  Next: Escaped Newlines,  Prev: Variable Length,  Up: C Extensions
23291
232926.20 Macros with a Variable Number of Arguments.
23293================================================
23294
23295In the ISO C standard of 1999, a macro can be declared to accept a
23296variable number of arguments much as a function can.  The syntax for
23297defining the macro is similar to that of a function.  Here is an
23298example:
23299
23300     #define debug(format, ...) fprintf (stderr, format, __VA_ARGS__)
23301
23302Here '...' is a "variable argument".  In the invocation of such a macro,
23303it represents the zero or more tokens until the closing parenthesis that
23304ends the invocation, including any commas.  This set of tokens replaces
23305the identifier '__VA_ARGS__' in the macro body wherever it appears.  See
23306the CPP manual for more information.
23307
23308 GCC has long supported variadic macros, and used a different syntax
23309that allowed you to give a name to the variable arguments just like any
23310other argument.  Here is an example:
23311
23312     #define debug(format, args...) fprintf (stderr, format, args)
23313
23314This is in all ways equivalent to the ISO C example above, but arguably
23315more readable and descriptive.
23316
23317 GNU CPP has two further variadic macro extensions, and permits them to
23318be used with either of the above forms of macro definition.
23319
23320 In standard C, you are not allowed to leave the variable argument out
23321entirely; but you are allowed to pass an empty argument.  For example,
23322this invocation is invalid in ISO C, because there is no comma after the
23323string:
23324
23325     debug ("A message")
23326
23327 GNU CPP permits you to completely omit the variable arguments in this
23328way.  In the above examples, the compiler would complain, though since
23329the expansion of the macro still has the extra comma after the format
23330string.
23331
23332 To help solve this problem, CPP behaves specially for variable
23333arguments used with the token paste operator, '##'.  If instead you
23334write
23335
23336     #define debug(format, ...) fprintf (stderr, format, ## __VA_ARGS__)
23337
23338and if the variable arguments are omitted or empty, the '##' operator
23339causes the preprocessor to remove the comma before it.  If you do
23340provide some variable arguments in your macro invocation, GNU CPP does
23341not complain about the paste operation and instead places the variable
23342arguments after the comma.  Just like any other pasted macro argument,
23343these arguments are not macro expanded.
23344
23345
23346File: gcc.info,  Node: Escaped Newlines,  Next: Subscripting,  Prev: Variadic Macros,  Up: C Extensions
23347
233486.21 Slightly Looser Rules for Escaped Newlines
23349===============================================
23350
23351Recently, the preprocessor has relaxed its treatment of escaped
23352newlines.  Previously, the newline had to immediately follow a
23353backslash.  The current implementation allows whitespace in the form of
23354spaces, horizontal and vertical tabs, and form feeds between the
23355backslash and the subsequent newline.  The preprocessor issues a
23356warning, but treats it as a valid escaped newline and combines the two
23357lines to form a single logical line.  This works within comments and
23358tokens, as well as between tokens.  Comments are _not_ treated as
23359whitespace for the purposes of this relaxation, since they have not yet
23360been replaced with spaces.
23361
23362
23363File: gcc.info,  Node: Subscripting,  Next: Pointer Arith,  Prev: Escaped Newlines,  Up: C Extensions
23364
233656.22 Non-Lvalue Arrays May Have Subscripts
23366==========================================
23367
23368In ISO C99, arrays that are not lvalues still decay to pointers, and may
23369be subscripted, although they may not be modified or used after the next
23370sequence point and the unary '&' operator may not be applied to them.
23371As an extension, GNU C allows such arrays to be subscripted in C90 mode,
23372though otherwise they do not decay to pointers outside C99 mode.  For
23373example, this is valid in GNU C though not valid in C90:
23374
23375     struct foo {int a[4];};
23376
23377     struct foo f();
23378
23379     bar (int index)
23380     {
23381       return f().a[index];
23382     }
23383
23384
23385File: gcc.info,  Node: Pointer Arith,  Next: Initializers,  Prev: Subscripting,  Up: C Extensions
23386
233876.23 Arithmetic on 'void'- and Function-Pointers
23388================================================
23389
23390In GNU C, addition and subtraction operations are supported on pointers
23391to 'void' and on pointers to functions.  This is done by treating the
23392size of a 'void' or of a function as 1.
23393
23394 A consequence of this is that 'sizeof' is also allowed on 'void' and on
23395function types, and returns 1.
23396
23397 The option '-Wpointer-arith' requests a warning if these extensions are
23398used.
23399
23400
23401File: gcc.info,  Node: Initializers,  Next: Compound Literals,  Prev: Pointer Arith,  Up: C Extensions
23402
234036.24 Non-Constant Initializers
23404==============================
23405
23406As in standard C++ and ISO C99, the elements of an aggregate initializer
23407for an automatic variable are not required to be constant expressions in
23408GNU C.  Here is an example of an initializer with run-time varying
23409elements:
23410
23411     foo (float f, float g)
23412     {
23413       float beat_freqs[2] = { f-g, f+g };
23414       /* ... */
23415     }
23416
23417
23418File: gcc.info,  Node: Compound Literals,  Next: Designated Inits,  Prev: Initializers,  Up: C Extensions
23419
234206.25 Compound Literals
23421======================
23422
23423ISO C99 supports compound literals.  A compound literal looks like a
23424cast containing an initializer.  Its value is an object of the type
23425specified in the cast, containing the elements specified in the
23426initializer; it is an lvalue.  As an extension, GCC supports compound
23427literals in C90 mode and in C++, though the semantics are somewhat
23428different in C++.
23429
23430 Usually, the specified type is a structure.  Assume that 'struct foo'
23431and 'structure' are declared as shown:
23432
23433     struct foo {int a; char b[2];} structure;
23434
23435Here is an example of constructing a 'struct foo' with a compound
23436literal:
23437
23438     structure = ((struct foo) {x + y, 'a', 0});
23439
23440This is equivalent to writing the following:
23441
23442     {
23443       struct foo temp = {x + y, 'a', 0};
23444       structure = temp;
23445     }
23446
23447 You can also construct an array, though this is dangerous in C++, as
23448explained below.  If all the elements of the compound literal are (made
23449up of) simple constant expressions, suitable for use in initializers of
23450objects of static storage duration, then the compound literal can be
23451coerced to a pointer to its first element and used in such an
23452initializer, as shown here:
23453
23454     char **foo = (char *[]) { "x", "y", "z" };
23455
23456 Compound literals for scalar types and union types are also allowed,
23457but then the compound literal is equivalent to a cast.
23458
23459 As a GNU extension, GCC allows initialization of objects with static
23460storage duration by compound literals (which is not possible in ISO C99,
23461because the initializer is not a constant).  It is handled as if the
23462object is initialized only with the bracket enclosed list if the types
23463of the compound literal and the object match.  The initializer list of
23464the compound literal must be constant.  If the object being initialized
23465has array type of unknown size, the size is determined by compound
23466literal size.
23467
23468     static struct foo x = (struct foo) {1, 'a', 'b'};
23469     static int y[] = (int []) {1, 2, 3};
23470     static int z[] = (int [3]) {1};
23471
23472The above lines are equivalent to the following:
23473     static struct foo x = {1, 'a', 'b'};
23474     static int y[] = {1, 2, 3};
23475     static int z[] = {1, 0, 0};
23476
23477 In C, a compound literal designates an unnamed object with static or
23478automatic storage duration.  In C++, a compound literal designates a
23479temporary object, which only lives until the end of its full-expression.
23480As a result, well-defined C code that takes the address of a subobject
23481of a compound literal can be undefined in C++.  For instance, if the
23482array compound literal example above appeared inside a function, any
23483subsequent use of 'foo' in C++ has undefined behavior because the
23484lifetime of the array ends after the declaration of 'foo'.  As a result,
23485the C++ compiler now rejects the conversion of a temporary array to a
23486pointer.
23487
23488 As an optimization, the C++ compiler sometimes gives array compound
23489literals longer lifetimes: when the array either appears outside a
23490function or has const-qualified type.  If 'foo' and its initializer had
23491elements of 'char *const' type rather than 'char *', or if 'foo' were a
23492global variable, the array would have static storage duration.  But it
23493is probably safest just to avoid the use of array compound literals in
23494code compiled as C++.
23495
23496
23497File: gcc.info,  Node: Designated Inits,  Next: Case Ranges,  Prev: Compound Literals,  Up: C Extensions
23498
234996.26 Designated Initializers
23500============================
23501
23502Standard C90 requires the elements of an initializer to appear in a
23503fixed order, the same as the order of the elements in the array or
23504structure being initialized.
23505
23506 In ISO C99 you can give the elements in any order, specifying the array
23507indices or structure field names they apply to, and GNU C allows this as
23508an extension in C90 mode as well.  This extension is not implemented in
23509GNU C++.
23510
23511 To specify an array index, write '[INDEX] =' before the element value.
23512For example,
23513
23514     int a[6] = { [4] = 29, [2] = 15 };
23515
23516is equivalent to
23517
23518     int a[6] = { 0, 0, 15, 0, 29, 0 };
23519
23520The index values must be constant expressions, even if the array being
23521initialized is automatic.
23522
23523 An alternative syntax for this that has been obsolete since GCC 2.5 but
23524GCC still accepts is to write '[INDEX]' before the element value, with
23525no '='.
23526
23527 To initialize a range of elements to the same value, write '[FIRST ...
23528LAST] = VALUE'.  This is a GNU extension.  For example,
23529
23530     int widths[] = { [0 ... 9] = 1, [10 ... 99] = 2, [100] = 3 };
23531
23532If the value in it has side-effects, the side-effects happen only once,
23533not for each initialized field by the range initializer.
23534
23535Note that the length of the array is the highest value specified plus
23536one.
23537
23538 In a structure initializer, specify the name of a field to initialize
23539with '.FIELDNAME =' before the element value.  For example, given the
23540following structure,
23541
23542     struct point { int x, y; };
23543
23544the following initialization
23545
23546     struct point p = { .y = yvalue, .x = xvalue };
23547
23548is equivalent to
23549
23550     struct point p = { xvalue, yvalue };
23551
23552 Another syntax that has the same meaning, obsolete since GCC 2.5, is
23553'FIELDNAME:', as shown here:
23554
23555     struct point p = { y: yvalue, x: xvalue };
23556
23557 Omitted field members are implicitly initialized the same as objects
23558that have static storage duration.
23559
23560 The '[INDEX]' or '.FIELDNAME' is known as a "designator".  You can also
23561use a designator (or the obsolete colon syntax) when initializing a
23562union, to specify which element of the union should be used.  For
23563example,
23564
23565     union foo { int i; double d; };
23566
23567     union foo f = { .d = 4 };
23568
23569converts 4 to a 'double' to store it in the union using the second
23570element.  By contrast, casting 4 to type 'union foo' stores it into the
23571union as the integer 'i', since it is an integer.  (*Note Cast to
23572Union::.)
23573
23574 You can combine this technique of naming elements with ordinary C
23575initialization of successive elements.  Each initializer element that
23576does not have a designator applies to the next consecutive element of
23577the array or structure.  For example,
23578
23579     int a[6] = { [1] = v1, v2, [4] = v4 };
23580
23581is equivalent to
23582
23583     int a[6] = { 0, v1, v2, 0, v4, 0 };
23584
23585 Labeling the elements of an array initializer is especially useful when
23586the indices are characters or belong to an 'enum' type.  For example:
23587
23588     int whitespace[256]
23589       = { [' '] = 1, ['\t'] = 1, ['\h'] = 1,
23590           ['\f'] = 1, ['\n'] = 1, ['\r'] = 1 };
23591
23592 You can also write a series of '.FIELDNAME' and '[INDEX]' designators
23593before an '=' to specify a nested subobject to initialize; the list is
23594taken relative to the subobject corresponding to the closest surrounding
23595brace pair.  For example, with the 'struct point' declaration above:
23596
23597     struct point ptarray[10] = { [2].y = yv2, [2].x = xv2, [0].x = xv0 };
23598
23599If the same field is initialized multiple times, it has the value from
23600the last initialization.  If any such overridden initialization has
23601side-effect, it is unspecified whether the side-effect happens or not.
23602Currently, GCC discards them and issues a warning.
23603
23604
23605File: gcc.info,  Node: Case Ranges,  Next: Cast to Union,  Prev: Designated Inits,  Up: C Extensions
23606
236076.27 Case Ranges
23608================
23609
23610You can specify a range of consecutive values in a single 'case' label,
23611like this:
23612
23613     case LOW ... HIGH:
23614
23615This has the same effect as the proper number of individual 'case'
23616labels, one for each integer value from LOW to HIGH, inclusive.
23617
23618 This feature is especially useful for ranges of ASCII character codes:
23619
23620     case 'A' ... 'Z':
23621
23622 *Be careful:* Write spaces around the '...', for otherwise it may be
23623parsed wrong when you use it with integer values.  For example, write
23624this:
23625
23626     case 1 ... 5:
23627
23628rather than this:
23629
23630     case 1...5:
23631
23632
23633File: gcc.info,  Node: Cast to Union,  Next: Mixed Declarations,  Prev: Case Ranges,  Up: C Extensions
23634
236356.28 Cast to a Union Type
23636=========================
23637
23638A cast to union type is similar to other casts, except that the type
23639specified is a union type.  You can specify the type either with 'union
23640TAG' or with a typedef name.  A cast to union is actually a constructor,
23641not a cast, and hence does not yield an lvalue like normal casts.
23642(*Note Compound Literals::.)
23643
23644 The types that may be cast to the union type are those of the members
23645of the union.  Thus, given the following union and variables:
23646
23647     union foo { int i; double d; };
23648     int x;
23649     double y;
23650
23651both 'x' and 'y' can be cast to type 'union foo'.
23652
23653 Using the cast as the right-hand side of an assignment to a variable of
23654union type is equivalent to storing in a member of the union:
23655
23656     union foo u;
23657     /* ... */
23658     u = (union foo) x  ==  u.i = x
23659     u = (union foo) y  ==  u.d = y
23660
23661 You can also use the union cast as a function argument:
23662
23663     void hack (union foo);
23664     /* ... */
23665     hack ((union foo) x);
23666
23667
23668File: gcc.info,  Node: Mixed Declarations,  Next: Function Attributes,  Prev: Cast to Union,  Up: C Extensions
23669
236706.29 Mixed Declarations and Code
23671================================
23672
23673ISO C99 and ISO C++ allow declarations and code to be freely mixed
23674within compound statements.  As an extension, GNU C also allows this in
23675C90 mode.  For example, you could do:
23676
23677     int i;
23678     /* ... */
23679     i++;
23680     int j = i + 2;
23681
23682 Each identifier is visible from where it is declared until the end of
23683the enclosing block.
23684
23685
23686File: gcc.info,  Node: Function Attributes,  Next: Attribute Syntax,  Prev: Mixed Declarations,  Up: C Extensions
23687
236886.30 Declaring Attributes of Functions
23689======================================
23690
23691In GNU C, you declare certain things about functions called in your
23692program which help the compiler optimize function calls and check your
23693code more carefully.
23694
23695 The keyword '__attribute__' allows you to specify special attributes
23696when making a declaration.  This keyword is followed by an attribute
23697specification inside double parentheses.  The following attributes are
23698currently defined for functions on all targets: 'aligned', 'alloc_size',
23699'alloc_align', 'assume_aligned', 'noreturn', 'returns_twice',
23700'noinline', 'noclone', 'always_inline', 'flatten', 'pure', 'const',
23701'nothrow', 'sentinel', 'format', 'format_arg', 'no_instrument_function',
23702'no_split_stack', 'section', 'constructor', 'destructor', 'used',
23703'unused', 'deprecated', 'weak', 'malloc', 'alias', 'ifunc',
23704'warn_unused_result', 'nonnull', 'returns_nonnull', 'gnu_inline',
23705'externally_visible', 'hot', 'cold', 'artificial',
23706'no_sanitize_address', 'no_address_safety_analysis',
23707'no_sanitize_undefined', 'error' and 'warning'.  Several other
23708attributes are defined for functions on particular target systems.
23709Other attributes, including 'section' are supported for variables
23710declarations (*note Variable Attributes::) and for types (*note Type
23711Attributes::).
23712
23713 GCC plugins may provide their own attributes.
23714
23715 You may also specify attributes with '__' preceding and following each
23716keyword.  This allows you to use them in header files without being
23717concerned about a possible macro of the same name.  For example, you may
23718use '__noreturn__' instead of 'noreturn'.
23719
23720 *Note Attribute Syntax::, for details of the exact syntax for using
23721attributes.
23722
23723'alias ("TARGET")'
23724     The 'alias' attribute causes the declaration to be emitted as an
23725     alias for another symbol, which must be specified.  For instance,
23726
23727          void __f () { /* Do something. */; }
23728          void f () __attribute__ ((weak, alias ("__f")));
23729
23730     defines 'f' to be a weak alias for '__f'.  In C++, the mangled name
23731     for the target must be used.  It is an error if '__f' is not
23732     defined in the same translation unit.
23733
23734     Not all target machines support this attribute.
23735
23736'aligned (ALIGNMENT)'
23737     This attribute specifies a minimum alignment for the function,
23738     measured in bytes.
23739
23740     You cannot use this attribute to decrease the alignment of a
23741     function, only to increase it.  However, when you explicitly
23742     specify a function alignment this overrides the effect of the
23743     '-falign-functions' (*note Optimize Options::) option for this
23744     function.
23745
23746     Note that the effectiveness of 'aligned' attributes may be limited
23747     by inherent limitations in your linker.  On many systems, the
23748     linker is only able to arrange for functions to be aligned up to a
23749     certain maximum alignment.  (For some linkers, the maximum
23750     supported alignment may be very very small.)  See your linker
23751     documentation for further information.
23752
23753     The 'aligned' attribute can also be used for variables and fields
23754     (*note Variable Attributes::.)
23755
23756'alloc_size'
23757     The 'alloc_size' attribute is used to tell the compiler that the
23758     function return value points to memory, where the size is given by
23759     one or two of the functions parameters.  GCC uses this information
23760     to improve the correctness of '__builtin_object_size'.
23761
23762     The function parameter(s) denoting the allocated size are specified
23763     by one or two integer arguments supplied to the attribute.  The
23764     allocated size is either the value of the single function argument
23765     specified or the product of the two function arguments specified.
23766     Argument numbering starts at one.
23767
23768     For instance,
23769
23770          void* my_calloc(size_t, size_t) __attribute__((alloc_size(1,2)))
23771          void* my_realloc(void*, size_t) __attribute__((alloc_size(2)))
23772
23773     declares that 'my_calloc' returns memory of the size given by the
23774     product of parameter 1 and 2 and that 'my_realloc' returns memory
23775     of the size given by parameter 2.
23776
23777'alloc_align'
23778     The 'alloc_align' attribute is used to tell the compiler that the
23779     function return value points to memory, where the returned pointer
23780     minimum alignment is given by one of the functions parameters.  GCC
23781     uses this information to improve pointer alignment analysis.
23782
23783     The function parameter denoting the allocated alignment is
23784     specified by one integer argument, whose number is the argument of
23785     the attribute.  Argument numbering starts at one.
23786
23787     For instance,
23788
23789          void* my_memalign(size_t, size_t) __attribute__((alloc_align(1)))
23790
23791     declares that 'my_memalign' returns memory with minimum alignment
23792     given by parameter 1.
23793
23794'assume_aligned'
23795     The 'assume_aligned' attribute is used to tell the compiler that
23796     the function return value points to memory, where the returned
23797     pointer minimum alignment is given by the first argument.  If the
23798     attribute has two arguments, the second argument is misalignment
23799     offset.
23800
23801     For instance
23802
23803          void* my_alloc1(size_t) __attribute__((assume_aligned(16)))
23804          void* my_alloc2(size_t) __attribute__((assume_aligned(32, 8)))
23805
23806     declares that 'my_alloc1' returns 16-byte aligned pointer and that
23807     'my_alloc2' returns a pointer whose value modulo 32 is equal to 8.
23808
23809'always_inline'
23810     Generally, functions are not inlined unless optimization is
23811     specified.  For functions declared inline, this attribute inlines
23812     the function even if no optimization level is specified.
23813
23814'gnu_inline'
23815     This attribute should be used with a function that is also declared
23816     with the 'inline' keyword.  It directs GCC to treat the function as
23817     if it were defined in gnu90 mode even when compiling in C99 or
23818     gnu99 mode.
23819
23820     If the function is declared 'extern', then this definition of the
23821     function is used only for inlining.  In no case is the function
23822     compiled as a standalone function, not even if you take its address
23823     explicitly.  Such an address becomes an external reference, as if
23824     you had only declared the function, and had not defined it.  This
23825     has almost the effect of a macro.  The way to use this is to put a
23826     function definition in a header file with this attribute, and put
23827     another copy of the function, without 'extern', in a library file.
23828     The definition in the header file causes most calls to the function
23829     to be inlined.  If any uses of the function remain, they refer to
23830     the single copy in the library.  Note that the two definitions of
23831     the functions need not be precisely the same, although if they do
23832     not have the same effect your program may behave oddly.
23833
23834     In C, if the function is neither 'extern' nor 'static', then the
23835     function is compiled as a standalone function, as well as being
23836     inlined where possible.
23837
23838     This is how GCC traditionally handled functions declared 'inline'.
23839     Since ISO C99 specifies a different semantics for 'inline', this
23840     function attribute is provided as a transition measure and as a
23841     useful feature in its own right.  This attribute is available in
23842     GCC 4.1.3 and later.  It is available if either of the preprocessor
23843     macros '__GNUC_GNU_INLINE__' or '__GNUC_STDC_INLINE__' are defined.
23844     *Note An Inline Function is As Fast As a Macro: Inline.
23845
23846     In C++, this attribute does not depend on 'extern' in any way, but
23847     it still requires the 'inline' keyword to enable its special
23848     behavior.
23849
23850'artificial'
23851     This attribute is useful for small inline wrappers that if possible
23852     should appear during debugging as a unit.  Depending on the debug
23853     info format it either means marking the function as artificial or
23854     using the caller location for all instructions within the inlined
23855     body.
23856
23857'bank_switch'
23858     When added to an interrupt handler with the M32C port, causes the
23859     prologue and epilogue to use bank switching to preserve the
23860     registers rather than saving them on the stack.
23861
23862'flatten'
23863     Generally, inlining into a function is limited.  For a function
23864     marked with this attribute, every call inside this function is
23865     inlined, if possible.  Whether the function itself is considered
23866     for inlining depends on its size and the current inlining
23867     parameters.
23868
23869'error ("MESSAGE")'
23870     If this attribute is used on a function declaration and a call to
23871     such a function is not eliminated through dead code elimination or
23872     other optimizations, an error that includes MESSAGE is diagnosed.
23873     This is useful for compile-time checking, especially together with
23874     '__builtin_constant_p' and inline functions where checking the
23875     inline function arguments is not possible through 'extern char
23876     [(condition) ? 1 : -1];' tricks.  While it is possible to leave the
23877     function undefined and thus invoke a link failure, when using this
23878     attribute the problem is diagnosed earlier and with exact location
23879     of the call even in presence of inline functions or when not
23880     emitting debugging information.
23881
23882'warning ("MESSAGE")'
23883     If this attribute is used on a function declaration and a call to
23884     such a function is not eliminated through dead code elimination or
23885     other optimizations, a warning that includes MESSAGE is diagnosed.
23886     This is useful for compile-time checking, especially together with
23887     '__builtin_constant_p' and inline functions.  While it is possible
23888     to define the function with a message in '.gnu.warning*' section,
23889     when using this attribute the problem is diagnosed earlier and with
23890     exact location of the call even in presence of inline functions or
23891     when not emitting debugging information.
23892
23893'cdecl'
23894     On the Intel 386, the 'cdecl' attribute causes the compiler to
23895     assume that the calling function pops off the stack space used to
23896     pass arguments.  This is useful to override the effects of the
23897     '-mrtd' switch.
23898
23899'const'
23900     Many functions do not examine any values except their arguments,
23901     and have no effects except the return value.  Basically this is
23902     just slightly more strict class than the 'pure' attribute below,
23903     since function is not allowed to read global memory.
23904
23905     Note that a function that has pointer arguments and examines the
23906     data pointed to must _not_ be declared 'const'.  Likewise, a
23907     function that calls a non-'const' function usually must not be
23908     'const'.  It does not make sense for a 'const' function to return
23909     'void'.
23910
23911     The attribute 'const' is not implemented in GCC versions earlier
23912     than 2.5.  An alternative way to declare that a function has no
23913     side effects, which works in the current version and in some older
23914     versions, is as follows:
23915
23916          typedef int intfn ();
23917
23918          extern const intfn square;
23919
23920     This approach does not work in GNU C++ from 2.6.0 on, since the
23921     language specifies that the 'const' must be attached to the return
23922     value.
23923
23924'constructor'
23925'destructor'
23926'constructor (PRIORITY)'
23927'destructor (PRIORITY)'
23928     The 'constructor' attribute causes the function to be called
23929     automatically before execution enters 'main ()'.  Similarly, the
23930     'destructor' attribute causes the function to be called
23931     automatically after 'main ()' completes or 'exit ()' is called.
23932     Functions with these attributes are useful for initializing data
23933     that is used implicitly during the execution of the program.
23934
23935     You may provide an optional integer priority to control the order
23936     in which constructor and destructor functions are run.  A
23937     constructor with a smaller priority number runs before a
23938     constructor with a larger priority number; the opposite
23939     relationship holds for destructors.  So, if you have a constructor
23940     that allocates a resource and a destructor that deallocates the
23941     same resource, both functions typically have the same priority.
23942     The priorities for constructor and destructor functions are the
23943     same as those specified for namespace-scope C++ objects (*note C++
23944     Attributes::).
23945
23946     These attributes are not currently implemented for Objective-C.
23947
23948'deprecated'
23949'deprecated (MSG)'
23950     The 'deprecated' attribute results in a warning if the function is
23951     used anywhere in the source file.  This is useful when identifying
23952     functions that are expected to be removed in a future version of a
23953     program.  The warning also includes the location of the declaration
23954     of the deprecated function, to enable users to easily find further
23955     information about why the function is deprecated, or what they
23956     should do instead.  Note that the warnings only occurs for uses:
23957
23958          int old_fn () __attribute__ ((deprecated));
23959          int old_fn ();
23960          int (*fn_ptr)() = old_fn;
23961
23962     results in a warning on line 3 but not line 2.  The optional MSG
23963     argument, which must be a string, is printed in the warning if
23964     present.
23965
23966     The 'deprecated' attribute can also be used for variables and types
23967     (*note Variable Attributes::, *note Type Attributes::.)
23968
23969'disinterrupt'
23970     On Epiphany and MeP targets, this attribute causes the compiler to
23971     emit instructions to disable interrupts for the duration of the
23972     given function.
23973
23974'dllexport'
23975     On Microsoft Windows targets and Symbian OS targets the 'dllexport'
23976     attribute causes the compiler to provide a global pointer to a
23977     pointer in a DLL, so that it can be referenced with the 'dllimport'
23978     attribute.  On Microsoft Windows targets, the pointer name is
23979     formed by combining '_imp__' and the function or variable name.
23980
23981     You can use '__declspec(dllexport)' as a synonym for '__attribute__
23982     ((dllexport))' for compatibility with other compilers.
23983
23984     On systems that support the 'visibility' attribute, this attribute
23985     also implies "default" visibility.  It is an error to explicitly
23986     specify any other visibility.
23987
23988     In previous versions of GCC, the 'dllexport' attribute was ignored
23989     for inlined functions, unless the '-fkeep-inline-functions' flag
23990     had been used.  The default behavior now is to emit all dllexported
23991     inline functions; however, this can cause object file-size bloat,
23992     in which case the old behavior can be restored by using
23993     '-fno-keep-inline-dllexport'.
23994
23995     The attribute is also ignored for undefined symbols.
23996
23997     When applied to C++ classes, the attribute marks defined
23998     non-inlined member functions and static data members as exports.
23999     Static consts initialized in-class are not marked unless they are
24000     also defined out-of-class.
24001
24002     For Microsoft Windows targets there are alternative methods for
24003     including the symbol in the DLL's export table such as using a
24004     '.def' file with an 'EXPORTS' section or, with GNU ld, using the
24005     '--export-all' linker flag.
24006
24007'dllimport'
24008     On Microsoft Windows and Symbian OS targets, the 'dllimport'
24009     attribute causes the compiler to reference a function or variable
24010     via a global pointer to a pointer that is set up by the DLL
24011     exporting the symbol.  The attribute implies 'extern'.  On
24012     Microsoft Windows targets, the pointer name is formed by combining
24013     '_imp__' and the function or variable name.
24014
24015     You can use '__declspec(dllimport)' as a synonym for '__attribute__
24016     ((dllimport))' for compatibility with other compilers.
24017
24018     On systems that support the 'visibility' attribute, this attribute
24019     also implies "default" visibility.  It is an error to explicitly
24020     specify any other visibility.
24021
24022     Currently, the attribute is ignored for inlined functions.  If the
24023     attribute is applied to a symbol _definition_, an error is
24024     reported.  If a symbol previously declared 'dllimport' is later
24025     defined, the attribute is ignored in subsequent references, and a
24026     warning is emitted.  The attribute is also overridden by a
24027     subsequent declaration as 'dllexport'.
24028
24029     When applied to C++ classes, the attribute marks non-inlined member
24030     functions and static data members as imports.  However, the
24031     attribute is ignored for virtual methods to allow creation of
24032     vtables using thunks.
24033
24034     On the SH Symbian OS target the 'dllimport' attribute also has
24035     another affect--it can cause the vtable and run-time type
24036     information for a class to be exported.  This happens when the
24037     class has a dllimported constructor or a non-inline, non-pure
24038     virtual function and, for either of those two conditions, the class
24039     also has an inline constructor or destructor and has a key function
24040     that is defined in the current translation unit.
24041
24042     For Microsoft Windows targets the use of the 'dllimport' attribute
24043     on functions is not necessary, but provides a small performance
24044     benefit by eliminating a thunk in the DLL.  The use of the
24045     'dllimport' attribute on imported variables was required on older
24046     versions of the GNU linker, but can now be avoided by passing the
24047     '--enable-auto-import' switch to the GNU linker.  As with
24048     functions, using the attribute for a variable eliminates a thunk in
24049     the DLL.
24050
24051     One drawback to using this attribute is that a pointer to a
24052     _variable_ marked as 'dllimport' cannot be used as a constant
24053     address.  However, a pointer to a _function_ with the 'dllimport'
24054     attribute can be used as a constant initializer; in this case, the
24055     address of a stub function in the import lib is referenced.  On
24056     Microsoft Windows targets, the attribute can be disabled for
24057     functions by setting the '-mnop-fun-dllimport' flag.
24058
24059'eightbit_data'
24060     Use this attribute on the H8/300, H8/300H, and H8S to indicate that
24061     the specified variable should be placed into the eight-bit data
24062     section.  The compiler generates more efficient code for certain
24063     operations on data in the eight-bit data area.  Note the eight-bit
24064     data area is limited to 256 bytes of data.
24065
24066     You must use GAS and GLD from GNU binutils version 2.7 or later for
24067     this attribute to work correctly.
24068
24069'exception'
24070     Use this attribute on the NDS32 target to indicate that the
24071     specified function is an exception handler.  The compiler will
24072     generate corresponding sections for use in an exception handler.
24073
24074'exception_handler'
24075     Use this attribute on the Blackfin to indicate that the specified
24076     function is an exception handler.  The compiler generates function
24077     entry and exit sequences suitable for use in an exception handler
24078     when this attribute is present.
24079
24080'externally_visible'
24081     This attribute, attached to a global variable or function,
24082     nullifies the effect of the '-fwhole-program' command-line option,
24083     so the object remains visible outside the current compilation unit.
24084
24085     If '-fwhole-program' is used together with '-flto' and 'gold' is
24086     used as the linker plugin, 'externally_visible' attributes are
24087     automatically added to functions (not variable yet due to a current
24088     'gold' issue) that are accessed outside of LTO objects according to
24089     resolution file produced by 'gold'.  For other linkers that cannot
24090     generate resolution file, explicit 'externally_visible' attributes
24091     are still necessary.
24092
24093'far'
24094     On 68HC11 and 68HC12 the 'far' attribute causes the compiler to use
24095     a calling convention that takes care of switching memory banks when
24096     entering and leaving a function.  This calling convention is also
24097     the default when using the '-mlong-calls' option.
24098
24099     On 68HC12 the compiler uses the 'call' and 'rtc' instructions to
24100     call and return from a function.
24101
24102     On 68HC11 the compiler generates a sequence of instructions to
24103     invoke a board-specific routine to switch the memory bank and call
24104     the real function.  The board-specific routine simulates a 'call'.
24105     At the end of a function, it jumps to a board-specific routine
24106     instead of using 'rts'.  The board-specific return routine
24107     simulates the 'rtc'.
24108
24109     On MeP targets this causes the compiler to use a calling convention
24110     that assumes the called function is too far away for the built-in
24111     addressing modes.
24112
24113'fast_interrupt'
24114     Use this attribute on the M32C and RX ports to indicate that the
24115     specified function is a fast interrupt handler.  This is just like
24116     the 'interrupt' attribute, except that 'freit' is used to return
24117     instead of 'reit'.
24118
24119'fastcall'
24120     On the Intel 386, the 'fastcall' attribute causes the compiler to
24121     pass the first argument (if of integral type) in the register ECX
24122     and the second argument (if of integral type) in the register EDX.
24123     Subsequent and other typed arguments are passed on the stack.  The
24124     called function pops the arguments off the stack.  If the number of
24125     arguments is variable all arguments are pushed on the stack.
24126
24127'thiscall'
24128     On the Intel 386, the 'thiscall' attribute causes the compiler to
24129     pass the first argument (if of integral type) in the register ECX.
24130     Subsequent and other typed arguments are passed on the stack.  The
24131     called function pops the arguments off the stack.  If the number of
24132     arguments is variable all arguments are pushed on the stack.  The
24133     'thiscall' attribute is intended for C++ non-static member
24134     functions.  As a GCC extension, this calling convention can be used
24135     for C functions and for static member methods.
24136
24137'format (ARCHETYPE, STRING-INDEX, FIRST-TO-CHECK)'
24138     The 'format' attribute specifies that a function takes 'printf',
24139     'scanf', 'strftime' or 'strfmon' style arguments that should be
24140     type-checked against a format string.  For example, the
24141     declaration:
24142
24143          extern int
24144          my_printf (void *my_object, const char *my_format, ...)
24145                __attribute__ ((format (printf, 2, 3)));
24146
24147     causes the compiler to check the arguments in calls to 'my_printf'
24148     for consistency with the 'printf' style format string argument
24149     'my_format'.
24150
24151     The parameter ARCHETYPE determines how the format string is
24152     interpreted, and should be 'printf', 'scanf', 'strftime',
24153     'gnu_printf', 'gnu_scanf', 'gnu_strftime' or 'strfmon'.  (You can
24154     also use '__printf__', '__scanf__', '__strftime__' or
24155     '__strfmon__'.)  On MinGW targets, 'ms_printf', 'ms_scanf', and
24156     'ms_strftime' are also present.  ARCHETYPE values such as 'printf'
24157     refer to the formats accepted by the system's C runtime library,
24158     while values prefixed with 'gnu_' always refer to the formats
24159     accepted by the GNU C Library.  On Microsoft Windows targets,
24160     values prefixed with 'ms_' refer to the formats accepted by the
24161     'msvcrt.dll' library.  The parameter STRING-INDEX specifies which
24162     argument is the format string argument (starting from 1), while
24163     FIRST-TO-CHECK is the number of the first argument to check against
24164     the format string.  For functions where the arguments are not
24165     available to be checked (such as 'vprintf'), specify the third
24166     parameter as zero.  In this case the compiler only checks the
24167     format string for consistency.  For 'strftime' formats, the third
24168     parameter is required to be zero.  Since non-static C++ methods
24169     have an implicit 'this' argument, the arguments of such methods
24170     should be counted from two, not one, when giving values for
24171     STRING-INDEX and FIRST-TO-CHECK.
24172
24173     In the example above, the format string ('my_format') is the second
24174     argument of the function 'my_print', and the arguments to check
24175     start with the third argument, so the correct parameters for the
24176     format attribute are 2 and 3.
24177
24178     The 'format' attribute allows you to identify your own functions
24179     that take format strings as arguments, so that GCC can check the
24180     calls to these functions for errors.  The compiler always (unless
24181     '-ffreestanding' or '-fno-builtin' is used) checks formats for the
24182     standard library functions 'printf', 'fprintf', 'sprintf', 'scanf',
24183     'fscanf', 'sscanf', 'strftime', 'vprintf', 'vfprintf' and
24184     'vsprintf' whenever such warnings are requested (using '-Wformat'),
24185     so there is no need to modify the header file 'stdio.h'.  In C99
24186     mode, the functions 'snprintf', 'vsnprintf', 'vscanf', 'vfscanf'
24187     and 'vsscanf' are also checked.  Except in strictly conforming C
24188     standard modes, the X/Open function 'strfmon' is also checked as
24189     are 'printf_unlocked' and 'fprintf_unlocked'.  *Note Options
24190     Controlling C Dialect: C Dialect Options.
24191
24192     For Objective-C dialects, 'NSString' (or '__NSString__') is
24193     recognized in the same context.  Declarations including these
24194     format attributes are parsed for correct syntax, however the result
24195     of checking of such format strings is not yet defined, and is not
24196     carried out by this version of the compiler.
24197
24198     The target may also provide additional types of format checks.
24199     *Note Format Checks Specific to Particular Target Machines: Target
24200     Format Checks.
24201
24202'format_arg (STRING-INDEX)'
24203     The 'format_arg' attribute specifies that a function takes a format
24204     string for a 'printf', 'scanf', 'strftime' or 'strfmon' style
24205     function and modifies it (for example, to translate it into another
24206     language), so the result can be passed to a 'printf', 'scanf',
24207     'strftime' or 'strfmon' style function (with the remaining
24208     arguments to the format function the same as they would have been
24209     for the unmodified string).  For example, the declaration:
24210
24211          extern char *
24212          my_dgettext (char *my_domain, const char *my_format)
24213                __attribute__ ((format_arg (2)));
24214
24215     causes the compiler to check the arguments in calls to a 'printf',
24216     'scanf', 'strftime' or 'strfmon' type function, whose format string
24217     argument is a call to the 'my_dgettext' function, for consistency
24218     with the format string argument 'my_format'.  If the 'format_arg'
24219     attribute had not been specified, all the compiler could tell in
24220     such calls to format functions would be that the format string
24221     argument is not constant; this would generate a warning when
24222     '-Wformat-nonliteral' is used, but the calls could not be checked
24223     without the attribute.
24224
24225     The parameter STRING-INDEX specifies which argument is the format
24226     string argument (starting from one).  Since non-static C++ methods
24227     have an implicit 'this' argument, the arguments of such methods
24228     should be counted from two.
24229
24230     The 'format_arg' attribute allows you to identify your own
24231     functions that modify format strings, so that GCC can check the
24232     calls to 'printf', 'scanf', 'strftime' or 'strfmon' type function
24233     whose operands are a call to one of your own function.  The
24234     compiler always treats 'gettext', 'dgettext', and 'dcgettext' in
24235     this manner except when strict ISO C support is requested by
24236     '-ansi' or an appropriate '-std' option, or '-ffreestanding' or
24237     '-fno-builtin' is used.  *Note Options Controlling C Dialect: C
24238     Dialect Options.
24239
24240     For Objective-C dialects, the 'format-arg' attribute may refer to
24241     an 'NSString' reference for compatibility with the 'format'
24242     attribute above.
24243
24244     The target may also allow additional types in 'format-arg'
24245     attributes.  *Note Format Checks Specific to Particular Target
24246     Machines: Target Format Checks.
24247
24248'function_vector'
24249     Use this attribute on the H8/300, H8/300H, and H8S to indicate that
24250     the specified function should be called through the function
24251     vector.  Calling a function through the function vector reduces
24252     code size, however; the function vector has a limited size (maximum
24253     128 entries on the H8/300 and 64 entries on the H8/300H and H8S)
24254     and shares space with the interrupt vector.
24255
24256     On SH2A targets, this attribute declares a function to be called
24257     using the TBR relative addressing mode.  The argument to this
24258     attribute is the entry number of the same function in a vector
24259     table containing all the TBR relative addressable functions.  For
24260     correct operation the TBR must be setup accordingly to point to the
24261     start of the vector table before any functions with this attribute
24262     are invoked.  Usually a good place to do the initialization is the
24263     startup routine.  The TBR relative vector table can have at max 256
24264     function entries.  The jumps to these functions are generated using
24265     a SH2A specific, non delayed branch instruction JSR/N @(disp8,TBR).
24266     You must use GAS and GLD from GNU binutils version 2.7 or later for
24267     this attribute to work correctly.
24268
24269     Please refer the example of M16C target, to see the use of this
24270     attribute while declaring a function,
24271
24272     In an application, for a function being called once, this attribute
24273     saves at least 8 bytes of code; and if other successive calls are
24274     being made to the same function, it saves 2 bytes of code per each
24275     of these calls.
24276
24277     On M16C/M32C targets, the 'function_vector' attribute declares a
24278     special page subroutine call function.  Use of this attribute
24279     reduces the code size by 2 bytes for each call generated to the
24280     subroutine.  The argument to the attribute is the vector number
24281     entry from the special page vector table which contains the 16
24282     low-order bits of the subroutine's entry address.  Each vector
24283     table has special page number (18 to 255) that is used in 'jsrs'
24284     instructions.  Jump addresses of the routines are generated by
24285     adding 0x0F0000 (in case of M16C targets) or 0xFF0000 (in case of
24286     M32C targets), to the 2-byte addresses set in the vector table.
24287     Therefore you need to ensure that all the special page vector
24288     routines should get mapped within the address range 0x0F0000 to
24289     0x0FFFFF (for M16C) and 0xFF0000 to 0xFFFFFF (for M32C).
24290
24291     In the following example 2 bytes are saved for each call to
24292     function 'foo'.
24293
24294          void foo (void) __attribute__((function_vector(0x18)));
24295          void foo (void)
24296          {
24297          }
24298
24299          void bar (void)
24300          {
24301              foo();
24302          }
24303
24304     If functions are defined in one file and are called in another
24305     file, then be sure to write this declaration in both files.
24306
24307     This attribute is ignored for R8C target.
24308
24309'ifunc ("RESOLVER")'
24310     The 'ifunc' attribute is used to mark a function as an indirect
24311     function using the STT_GNU_IFUNC symbol type extension to the ELF
24312     standard.  This allows the resolution of the symbol value to be
24313     determined dynamically at load time, and an optimized version of
24314     the routine can be selected for the particular processor or other
24315     system characteristics determined then.  To use this attribute,
24316     first define the implementation functions available, and a resolver
24317     function that returns a pointer to the selected implementation
24318     function.  The implementation functions' declarations must match
24319     the API of the function being implemented, the resolver's
24320     declaration is be a function returning pointer to void function
24321     returning void:
24322
24323          void *my_memcpy (void *dst, const void *src, size_t len)
24324          {
24325            ...
24326          }
24327
24328          static void (*resolve_memcpy (void)) (void)
24329          {
24330            return my_memcpy; // we'll just always select this routine
24331          }
24332
24333     The exported header file declaring the function the user calls
24334     would contain:
24335
24336          extern void *memcpy (void *, const void *, size_t);
24337
24338     allowing the user to call this as a regular function, unaware of
24339     the implementation.  Finally, the indirect function needs to be
24340     defined in the same translation unit as the resolver function:
24341
24342          void *memcpy (void *, const void *, size_t)
24343               __attribute__ ((ifunc ("resolve_memcpy")));
24344
24345     Indirect functions cannot be weak, and require a recent binutils
24346     (at least version 2.20.1), and GNU C library (at least version
24347     2.11.1).
24348
24349'interrupt'
24350     Use this attribute on the ARC, ARM, AVR, CR16, Epiphany, M32C,
24351     M32R/D, m68k, MeP, MIPS, MSP430, RL78, RX and Xstormy16 ports to
24352     indicate that the specified function is an interrupt handler.  The
24353     compiler generates function entry and exit sequences suitable for
24354     use in an interrupt handler when this attribute is present.  With
24355     Epiphany targets it may also generate a special section with code
24356     to initialize the interrupt vector table.
24357
24358     Note, interrupt handlers for the Blackfin, H8/300, H8/300H, H8S,
24359     MicroBlaze, and SH processors can be specified via the
24360     'interrupt_handler' attribute.
24361
24362     Note, on the ARC, you must specify the kind of interrupt to be
24363     handled in a parameter to the interrupt attribute like this:
24364
24365          void f () __attribute__ ((interrupt ("ilink1")));
24366
24367     Permissible values for this parameter are: 'ilink1' and 'ilink2'.
24368
24369     Note, on the AVR, the hardware globally disables interrupts when an
24370     interrupt is executed.  The first instruction of an interrupt
24371     handler declared with this attribute is a 'SEI' instruction to
24372     re-enable interrupts.  See also the 'signal' function attribute
24373     that does not insert a 'SEI' instruction.  If both 'signal' and
24374     'interrupt' are specified for the same function, 'signal' is
24375     silently ignored.
24376
24377     Note, for the ARM, you can specify the kind of interrupt to be
24378     handled by adding an optional parameter to the interrupt attribute
24379     like this:
24380
24381          void f () __attribute__ ((interrupt ("IRQ")));
24382
24383     Permissible values for this parameter are: 'IRQ', 'FIQ', 'SWI',
24384     'ABORT' and 'UNDEF'.
24385
24386     On ARMv7-M the interrupt type is ignored, and the attribute means
24387     the function may be called with a word-aligned stack pointer.
24388
24389     Note, for the MSP430 you can provide an argument to the interrupt
24390     attribute which specifies a name or number.  If the argument is a
24391     number it indicates the slot in the interrupt vector table (0 - 31)
24392     to which this handler should be assigned.  If the argument is a
24393     name it is treated as a symbolic name for the vector slot.  These
24394     names should match up with appropriate entries in the linker
24395     script.  By default the names 'watchdog' for vector 26, 'nmi' for
24396     vector 30 and 'reset' for vector 31 are recognised.
24397
24398     You can also use the following function attributes to modify how
24399     normal functions interact with interrupt functions:
24400
24401     'critical'
24402          Critical functions disable interrupts upon entry and restore
24403          the previous interrupt state upon exit.  Critical functions
24404          cannot also have the 'naked' or 'reentrant' attributes.  They
24405          can have the 'interrupt' attribute.
24406
24407     'reentrant'
24408          Reentrant functions disable interrupts upon entry and enable
24409          them upon exit.  Reentrant functions cannot also have the
24410          'naked' or 'critical' attributes.  They can have the
24411          'interrupt' attribute.
24412
24413     'wakeup'
24414          This attribute only applies to interrupt functions.  It is
24415          silently ignored if applied to a non-interrupt function.  A
24416          wakeup interrupt function will rouse the processor from any
24417          low-power state that it might be in when the function exits.
24418
24419     On Epiphany targets one or more optional parameters can be added
24420     like this:
24421
24422          void __attribute__ ((interrupt ("dma0, dma1"))) universal_dma_handler ();
24423
24424     Permissible values for these parameters are: 'reset',
24425     'software_exception', 'page_miss', 'timer0', 'timer1', 'message',
24426     'dma0', 'dma1', 'wand' and 'swi'.  Multiple parameters indicate
24427     that multiple entries in the interrupt vector table should be
24428     initialized for this function, i.e. for each parameter NAME, a jump
24429     to the function is emitted in the section ivt_entry_NAME.  The
24430     parameter(s) may be omitted entirely, in which case no interrupt
24431     vector table entry is provided.
24432
24433     Note, on Epiphany targets, interrupts are enabled inside the
24434     function unless the 'disinterrupt' attribute is also specified.
24435
24436     On Epiphany targets, you can also use the following attribute to
24437     modify the behavior of an interrupt handler:
24438     'forwarder_section'
24439          The interrupt handler may be in external memory which cannot
24440          be reached by a branch instruction, so generate a local memory
24441          trampoline to transfer control.  The single parameter
24442          identifies the section where the trampoline is placed.
24443
24444     The following examples are all valid uses of these attributes on
24445     Epiphany targets:
24446          void __attribute__ ((interrupt)) universal_handler ();
24447          void __attribute__ ((interrupt ("dma1"))) dma1_handler ();
24448          void __attribute__ ((interrupt ("dma0, dma1"))) universal_dma_handler ();
24449          void __attribute__ ((interrupt ("timer0"), disinterrupt))
24450            fast_timer_handler ();
24451          void __attribute__ ((interrupt ("dma0, dma1"), forwarder_section ("tramp")))
24452            external_dma_handler ();
24453
24454     On MIPS targets, you can use the following attributes to modify the
24455     behavior of an interrupt handler:
24456     'use_shadow_register_set'
24457          Assume that the handler uses a shadow register set, instead of
24458          the main general-purpose registers.
24459
24460     'keep_interrupts_masked'
24461          Keep interrupts masked for the whole function.  Without this
24462          attribute, GCC tries to reenable interrupts for as much of the
24463          function as it can.
24464
24465     'use_debug_exception_return'
24466          Return using the 'deret' instruction.  Interrupt handlers that
24467          don't have this attribute return using 'eret' instead.
24468
24469     You can use any combination of these attributes, as shown below:
24470          void __attribute__ ((interrupt)) v0 ();
24471          void __attribute__ ((interrupt, use_shadow_register_set)) v1 ();
24472          void __attribute__ ((interrupt, keep_interrupts_masked)) v2 ();
24473          void __attribute__ ((interrupt, use_debug_exception_return)) v3 ();
24474          void __attribute__ ((interrupt, use_shadow_register_set,
24475                               keep_interrupts_masked)) v4 ();
24476          void __attribute__ ((interrupt, use_shadow_register_set,
24477                               use_debug_exception_return)) v5 ();
24478          void __attribute__ ((interrupt, keep_interrupts_masked,
24479                               use_debug_exception_return)) v6 ();
24480          void __attribute__ ((interrupt, use_shadow_register_set,
24481                               keep_interrupts_masked,
24482                               use_debug_exception_return)) v7 ();
24483
24484     On NDS32 target, this attribute is to indicate that the specified
24485     function is an interrupt handler.  The compiler will generate
24486     corresponding sections for use in an interrupt handler.  You can
24487     use the following attributes to modify the behavior:
24488     'nested'
24489          This interrupt service routine is interruptible.
24490     'not_nested'
24491          This interrupt service routine is not interruptible.
24492     'nested_ready'
24493          This interrupt service routine is interruptible after
24494          'PSW.GIE' (global interrupt enable) is set.  This allows
24495          interrupt service routine to finish some short critical code
24496          before enabling interrupts.
24497     'save_all'
24498          The system will help save all registers into stack before
24499          entering interrupt handler.
24500     'partial_save'
24501          The system will help save caller registers into stack before
24502          entering interrupt handler.
24503
24504     On RL78, use 'brk_interrupt' instead of 'interrupt' for handlers
24505     intended to be used with the 'BRK' opcode (i.e. those that must end
24506     with 'RETB' instead of 'RETI').
24507
24508'interrupt_handler'
24509     Use this attribute on the Blackfin, m68k, H8/300, H8/300H, H8S, and
24510     SH to indicate that the specified function is an interrupt handler.
24511     The compiler generates function entry and exit sequences suitable
24512     for use in an interrupt handler when this attribute is present.
24513
24514'interrupt_thread'
24515     Use this attribute on fido, a subarchitecture of the m68k, to
24516     indicate that the specified function is an interrupt handler that
24517     is designed to run as a thread.  The compiler omits generate
24518     prologue/epilogue sequences and replaces the return instruction
24519     with a 'sleep' instruction.  This attribute is available only on
24520     fido.
24521
24522'isr'
24523     Use this attribute on ARM to write Interrupt Service Routines.
24524     This is an alias to the 'interrupt' attribute above.
24525
24526'kspisusp'
24527     When used together with 'interrupt_handler', 'exception_handler' or
24528     'nmi_handler', code is generated to load the stack pointer from the
24529     USP register in the function prologue.
24530
24531'l1_text'
24532     This attribute specifies a function to be placed into L1
24533     Instruction SRAM.  The function is put into a specific section
24534     named '.l1.text'.  With '-mfdpic', function calls with a such
24535     function as the callee or caller uses inlined PLT.
24536
24537'l2'
24538     On the Blackfin, this attribute specifies a function to be placed
24539     into L2 SRAM. The function is put into a specific section named
24540     '.l1.text'.  With '-mfdpic', callers of such functions use an
24541     inlined PLT.
24542
24543'leaf'
24544     Calls to external functions with this attribute must return to the
24545     current compilation unit only by return or by exception handling.
24546     In particular, leaf functions are not allowed to call callback
24547     function passed to it from the current compilation unit or directly
24548     call functions exported by the unit or longjmp into the unit.  Leaf
24549     function might still call functions from other compilation units
24550     and thus they are not necessarily leaf in the sense that they
24551     contain no function calls at all.
24552
24553     The attribute is intended for library functions to improve dataflow
24554     analysis.  The compiler takes the hint that any data not escaping
24555     the current compilation unit can not be used or modified by the
24556     leaf function.  For example, the 'sin' function is a leaf function,
24557     but 'qsort' is not.
24558
24559     Note that leaf functions might invoke signals and signal handlers
24560     might be defined in the current compilation unit and use static
24561     variables.  The only compliant way to write such a signal handler
24562     is to declare such variables 'volatile'.
24563
24564     The attribute has no effect on functions defined within the current
24565     compilation unit.  This is to allow easy merging of multiple
24566     compilation units into one, for example, by using the link-time
24567     optimization.  For this reason the attribute is not allowed on
24568     types to annotate indirect calls.
24569
24570'long_call/medium_call/short_call'
24571     These attributes specify how a particular function is called on
24572     ARC, ARM and Epiphany - with 'medium_call' being specific to ARC.
24573     These attributes override the '-mlong-calls' (*note ARM Options::
24574     and *note ARC Options::) and '-mmedium-calls' (*note ARC Options::)
24575     command-line switches and '#pragma long_calls' settings.  For ARM,
24576     the 'long_call' attribute indicates that the function might be far
24577     away from the call site and require a different (more expensive)
24578     calling sequence.  The 'short_call' attribute always places the
24579     offset to the function from the call site into the 'BL' instruction
24580     directly.
24581
24582     For ARC, a function marked with the 'long_call' attribute is always
24583     called using register-indirect jump-and-link instructions, thereby
24584     enabling the called function to be placed anywhere within the
24585     32-bit address space.  A function marked with the 'medium_call'
24586     attribute will always be close enough to be called with an
24587     unconditional branch-and-link instruction, which has a 25-bit
24588     offset from the call site.  A function marked with the 'short_call'
24589     attribute will always be close enough to be called with a
24590     conditional branch-and-link instruction, which has a 21-bit offset
24591     from the call site.
24592
24593'longcall/shortcall'
24594     On the Blackfin, RS/6000 and PowerPC, the 'longcall' attribute
24595     indicates that the function might be far away from the call site
24596     and require a different (more expensive) calling sequence.  The
24597     'shortcall' attribute indicates that the function is always close
24598     enough for the shorter calling sequence to be used.  These
24599     attributes override both the '-mlongcall' switch and, on the
24600     RS/6000 and PowerPC, the '#pragma longcall' setting.
24601
24602     *Note RS/6000 and PowerPC Options::, for more information on
24603     whether long calls are necessary.
24604
24605'long_call/near/far'
24606     These attributes specify how a particular function is called on
24607     MIPS.  The attributes override the '-mlong-calls' (*note MIPS
24608     Options::) command-line switch.  The 'long_call' and 'far'
24609     attributes are synonyms, and cause the compiler to always call the
24610     function by first loading its address into a register, and then
24611     using the contents of that register.  The 'near' attribute has the
24612     opposite effect; it specifies that non-PIC calls should be made
24613     using the more efficient 'jal' instruction.
24614
24615'malloc'
24616     The 'malloc' attribute is used to tell the compiler that a function
24617     may be treated as if any non-'NULL' pointer it returns cannot alias
24618     any other pointer valid when the function returns and that the
24619     memory has undefined content.  This often improves optimization.
24620     Standard functions with this property include 'malloc' and
24621     'calloc'.  'realloc'-like functions do not have this property as
24622     the memory pointed to does not have undefined content.
24623
24624'mips16/nomips16'
24625
24626     On MIPS targets, you can use the 'mips16' and 'nomips16' function
24627     attributes to locally select or turn off MIPS16 code generation.  A
24628     function with the 'mips16' attribute is emitted as MIPS16 code,
24629     while MIPS16 code generation is disabled for functions with the
24630     'nomips16' attribute.  These attributes override the '-mips16' and
24631     '-mno-mips16' options on the command line (*note MIPS Options::).
24632
24633     When compiling files containing mixed MIPS16 and non-MIPS16 code,
24634     the preprocessor symbol '__mips16' reflects the setting on the
24635     command line, not that within individual functions.  Mixed MIPS16
24636     and non-MIPS16 code may interact badly with some GCC extensions
24637     such as '__builtin_apply' (*note Constructing Calls::).
24638
24639'micromips/nomicromips'
24640
24641     On MIPS targets, you can use the 'micromips' and 'nomicromips'
24642     function attributes to locally select or turn off microMIPS code
24643     generation.  A function with the 'micromips' attribute is emitted
24644     as microMIPS code, while microMIPS code generation is disabled for
24645     functions with the 'nomicromips' attribute.  These attributes
24646     override the '-mmicromips' and '-mno-micromips' options on the
24647     command line (*note MIPS Options::).
24648
24649     When compiling files containing mixed microMIPS and non-microMIPS
24650     code, the preprocessor symbol '__mips_micromips' reflects the
24651     setting on the command line, not that within individual functions.
24652     Mixed microMIPS and non-microMIPS code may interact badly with some
24653     GCC extensions such as '__builtin_apply' (*note Constructing
24654     Calls::).
24655
24656'model (MODEL-NAME)'
24657
24658     On the M32R/D, use this attribute to set the addressability of an
24659     object, and of the code generated for a function.  The identifier
24660     MODEL-NAME is one of 'small', 'medium', or 'large', representing
24661     each of the code models.
24662
24663     Small model objects live in the lower 16MB of memory (so that their
24664     addresses can be loaded with the 'ld24' instruction), and are
24665     callable with the 'bl' instruction.
24666
24667     Medium model objects may live anywhere in the 32-bit address space
24668     (the compiler generates 'seth/add3' instructions to load their
24669     addresses), and are callable with the 'bl' instruction.
24670
24671     Large model objects may live anywhere in the 32-bit address space
24672     (the compiler generates 'seth/add3' instructions to load their
24673     addresses), and may not be reachable with the 'bl' instruction (the
24674     compiler generates the much slower 'seth/add3/jl' instruction
24675     sequence).
24676
24677     On IA-64, use this attribute to set the addressability of an
24678     object.  At present, the only supported identifier for MODEL-NAME
24679     is 'small', indicating addressability via "small" (22-bit)
24680     addresses (so that their addresses can be loaded with the 'addl'
24681     instruction).  Caveat: such addressing is by definition not
24682     position independent and hence this attribute must not be used for
24683     objects defined by shared libraries.
24684
24685'ms_abi/sysv_abi'
24686
24687     On 32-bit and 64-bit (i?86|x86_64)-*-* targets, you can use an ABI
24688     attribute to indicate which calling convention should be used for a
24689     function.  The 'ms_abi' attribute tells the compiler to use the
24690     Microsoft ABI, while the 'sysv_abi' attribute tells the compiler to
24691     use the ABI used on GNU/Linux and other systems.  The default is to
24692     use the Microsoft ABI when targeting Windows.  On all other
24693     systems, the default is the x86/AMD ABI.
24694
24695     Note, the 'ms_abi' attribute for Microsoft Windows 64-bit targets
24696     currently requires the '-maccumulate-outgoing-args' option.
24697
24698'callee_pop_aggregate_return (NUMBER)'
24699
24700     On 32-bit i?86-*-* targets, you can use this attribute to control
24701     how aggregates are returned in memory.  If the caller is
24702     responsible for popping the hidden pointer together with the rest
24703     of the arguments, specify NUMBER equal to zero.  If callee is
24704     responsible for popping the hidden pointer, specify NUMBER equal to
24705     one.
24706
24707     The default i386 ABI assumes that the callee pops the stack for
24708     hidden pointer.  However, on 32-bit i386 Microsoft Windows targets,
24709     the compiler assumes that the caller pops the stack for hidden
24710     pointer.
24711
24712'ms_hook_prologue'
24713
24714     On 32-bit i[34567]86-*-* targets and 64-bit x86_64-*-* targets, you
24715     can use this function attribute to make GCC generate the
24716     "hot-patching" function prologue used in Win32 API functions in
24717     Microsoft Windows XP Service Pack 2 and newer.
24718
24719'hotpatch [(PROLOGUE-HALFWORDS)]'
24720
24721     On S/390 System z targets, you can use this function attribute to
24722     make GCC generate a "hot-patching" function prologue.  The
24723     'hotpatch' has no effect on funtions that are explicitly inline.
24724     If the '-mhotpatch' or '-mno-hotpatch' command-line option is used
24725     at the same time, the 'hotpatch' attribute takes precedence.  If an
24726     argument is given, the maximum allowed value is 1000000.
24727
24728'naked'
24729     Use this attribute on the ARM, AVR, MCORE, MSP430, NDS32, RL78, RX
24730     and SPU ports to indicate that the specified function does not need
24731     prologue/epilogue sequences generated by the compiler.  It is up to
24732     the programmer to provide these sequences.  The only statements
24733     that can be safely included in naked functions are 'asm' statements
24734     that do not have operands.  All other statements, including
24735     declarations of local variables, 'if' statements, and so forth,
24736     should be avoided.  Naked functions should be used to implement the
24737     body of an assembly function, while allowing the compiler to
24738     construct the requisite function declaration for the assembler.
24739
24740'near'
24741     On 68HC11 and 68HC12 the 'near' attribute causes the compiler to
24742     use the normal calling convention based on 'jsr' and 'rts'.  This
24743     attribute can be used to cancel the effect of the '-mlong-calls'
24744     option.
24745
24746     On MeP targets this attribute causes the compiler to assume the
24747     called function is close enough to use the normal calling
24748     convention, overriding the '-mtf' command-line option.
24749
24750'nesting'
24751     Use this attribute together with 'interrupt_handler',
24752     'exception_handler' or 'nmi_handler' to indicate that the function
24753     entry code should enable nested interrupts or exceptions.
24754
24755'nmi_handler'
24756     Use this attribute on the Blackfin to indicate that the specified
24757     function is an NMI handler.  The compiler generates function entry
24758     and exit sequences suitable for use in an NMI handler when this
24759     attribute is present.
24760
24761'nocompression'
24762     On MIPS targets, you can use the 'nocompression' function attribute
24763     to locally turn off MIPS16 and microMIPS code generation.  This
24764     attribute overrides the '-mips16' and '-mmicromips' options on the
24765     command line (*note MIPS Options::).
24766
24767'no_instrument_function'
24768     If '-finstrument-functions' is given, profiling function calls are
24769     generated at entry and exit of most user-compiled functions.
24770     Functions with this attribute are not so instrumented.
24771
24772'no_split_stack'
24773     If '-fsplit-stack' is given, functions have a small prologue which
24774     decides whether to split the stack.  Functions with the
24775     'no_split_stack' attribute do not have that prologue, and thus may
24776     run with only a small amount of stack space available.
24777
24778'noinline'
24779     This function attribute prevents a function from being considered
24780     for inlining.  If the function does not have side-effects, there
24781     are optimizations other than inlining that cause function calls to
24782     be optimized away, although the function call is live.  To keep
24783     such calls from being optimized away, put
24784          asm ("");
24785
24786     (*note Extended Asm::) in the called function, to serve as a
24787     special side-effect.
24788
24789'noclone'
24790     This function attribute prevents a function from being considered
24791     for cloning--a mechanism that produces specialized copies of
24792     functions and which is (currently) performed by interprocedural
24793     constant propagation.
24794
24795'nonnull (ARG-INDEX, ...)'
24796     The 'nonnull' attribute specifies that some function parameters
24797     should be non-null pointers.  For instance, the declaration:
24798
24799          extern void *
24800          my_memcpy (void *dest, const void *src, size_t len)
24801                  __attribute__((nonnull (1, 2)));
24802
24803     causes the compiler to check that, in calls to 'my_memcpy',
24804     arguments DEST and SRC are non-null.  If the compiler determines
24805     that a null pointer is passed in an argument slot marked as
24806     non-null, and the '-Wnonnull' option is enabled, a warning is
24807     issued.  The compiler may also choose to make optimizations based
24808     on the knowledge that certain function arguments will never be
24809     null.
24810
24811     If no argument index list is given to the 'nonnull' attribute, all
24812     pointer arguments are marked as non-null.  To illustrate, the
24813     following declaration is equivalent to the previous example:
24814
24815          extern void *
24816          my_memcpy (void *dest, const void *src, size_t len)
24817                  __attribute__((nonnull));
24818
24819'returns_nonnull'
24820     The 'returns_nonnull' attribute specifies that the function return
24821     value should be a non-null pointer.  For instance, the declaration:
24822
24823          extern void *
24824          mymalloc (size_t len) __attribute__((returns_nonnull));
24825
24826     lets the compiler optimize callers based on the knowledge that the
24827     return value will never be null.
24828
24829'noreturn'
24830     A few standard library functions, such as 'abort' and 'exit',
24831     cannot return.  GCC knows this automatically.  Some programs define
24832     their own functions that never return.  You can declare them
24833     'noreturn' to tell the compiler this fact.  For example,
24834
24835          void fatal () __attribute__ ((noreturn));
24836
24837          void
24838          fatal (/* ... */)
24839          {
24840            /* ... */ /* Print error message. */ /* ... */
24841            exit (1);
24842          }
24843
24844     The 'noreturn' keyword tells the compiler to assume that 'fatal'
24845     cannot return.  It can then optimize without regard to what would
24846     happen if 'fatal' ever did return.  This makes slightly better
24847     code.  More importantly, it helps avoid spurious warnings of
24848     uninitialized variables.
24849
24850     The 'noreturn' keyword does not affect the exceptional path when
24851     that applies: a 'noreturn'-marked function may still return to the
24852     caller by throwing an exception or calling 'longjmp'.
24853
24854     Do not assume that registers saved by the calling function are
24855     restored before calling the 'noreturn' function.
24856
24857     It does not make sense for a 'noreturn' function to have a return
24858     type other than 'void'.
24859
24860     The attribute 'noreturn' is not implemented in GCC versions earlier
24861     than 2.5.  An alternative way to declare that a function does not
24862     return, which works in the current version and in some older
24863     versions, is as follows:
24864
24865          typedef void voidfn ();
24866
24867          volatile voidfn fatal;
24868
24869     This approach does not work in GNU C++.
24870
24871'nothrow'
24872     The 'nothrow' attribute is used to inform the compiler that a
24873     function cannot throw an exception.  For example, most functions in
24874     the standard C library can be guaranteed not to throw an exception
24875     with the notable exceptions of 'qsort' and 'bsearch' that take
24876     function pointer arguments.  The 'nothrow' attribute is not
24877     implemented in GCC versions earlier than 3.3.
24878
24879'nosave_low_regs'
24880     Use this attribute on SH targets to indicate that an
24881     'interrupt_handler' function should not save and restore registers
24882     R0..R7.  This can be used on SH3* and SH4* targets that have a
24883     second R0..R7 register bank for non-reentrant interrupt handlers.
24884
24885'optimize'
24886     The 'optimize' attribute is used to specify that a function is to
24887     be compiled with different optimization options than specified on
24888     the command line.  Arguments can either be numbers or strings.
24889     Numbers are assumed to be an optimization level.  Strings that
24890     begin with 'O' are assumed to be an optimization option, while
24891     other options are assumed to be used with a '-f' prefix.  You can
24892     also use the '#pragma GCC optimize' pragma to set the optimization
24893     options that affect more than one function.  *Note Function
24894     Specific Option Pragmas::, for details about the '#pragma GCC
24895     optimize' pragma.
24896
24897     This can be used for instance to have frequently-executed functions
24898     compiled with more aggressive optimization options that produce
24899     faster and larger code, while other functions can be compiled with
24900     less aggressive options.
24901
24902'OS_main/OS_task'
24903     On AVR, functions with the 'OS_main' or 'OS_task' attribute do not
24904     save/restore any call-saved register in their prologue/epilogue.
24905
24906     The 'OS_main' attribute can be used when there _is guarantee_ that
24907     interrupts are disabled at the time when the function is entered.
24908     This saves resources when the stack pointer has to be changed to
24909     set up a frame for local variables.
24910
24911     The 'OS_task' attribute can be used when there is _no guarantee_
24912     that interrupts are disabled at that time when the function is
24913     entered like for, e.g.  task functions in a multi-threading
24914     operating system.  In that case, changing the stack pointer
24915     register is guarded by save/clear/restore of the global interrupt
24916     enable flag.
24917
24918     The differences to the 'naked' function attribute are:
24919        * 'naked' functions do not have a return instruction whereas
24920          'OS_main' and 'OS_task' functions have a 'RET' or 'RETI'
24921          return instruction.
24922        * 'naked' functions do not set up a frame for local variables or
24923          a frame pointer whereas 'OS_main' and 'OS_task' do this as
24924          needed.
24925
24926'pcs'
24927
24928     The 'pcs' attribute can be used to control the calling convention
24929     used for a function on ARM. The attribute takes an argument that
24930     specifies the calling convention to use.
24931
24932     When compiling using the AAPCS ABI (or a variant of it) then valid
24933     values for the argument are '"aapcs"' and '"aapcs-vfp"'.  In order
24934     to use a variant other than '"aapcs"' then the compiler must be
24935     permitted to use the appropriate co-processor registers (i.e., the
24936     VFP registers must be available in order to use '"aapcs-vfp"').
24937     For example,
24938
24939          /* Argument passed in r0, and result returned in r0+r1.  */
24940          double f2d (float) __attribute__((pcs("aapcs")));
24941
24942     Variadic functions always use the '"aapcs"' calling convention and
24943     the compiler rejects attempts to specify an alternative.
24944
24945'pure'
24946     Many functions have no effects except the return value and their
24947     return value depends only on the parameters and/or global
24948     variables.  Such a function can be subject to common subexpression
24949     elimination and loop optimization just as an arithmetic operator
24950     would be.  These functions should be declared with the attribute
24951     'pure'.  For example,
24952
24953          int square (int) __attribute__ ((pure));
24954
24955     says that the hypothetical function 'square' is safe to call fewer
24956     times than the program says.
24957
24958     Some of common examples of pure functions are 'strlen' or 'memcmp'.
24959     Interesting non-pure functions are functions with infinite loops or
24960     those depending on volatile memory or other system resource, that
24961     may change between two consecutive calls (such as 'feof' in a
24962     multithreading environment).
24963
24964     The attribute 'pure' is not implemented in GCC versions earlier
24965     than 2.96.
24966
24967'hot'
24968     The 'hot' attribute on a function is used to inform the compiler
24969     that the function is a hot spot of the compiled program.  The
24970     function is optimized more aggressively and on many target it is
24971     placed into special subsection of the text section so all hot
24972     functions appears close together improving locality.
24973
24974     When profile feedback is available, via '-fprofile-use', hot
24975     functions are automatically detected and this attribute is ignored.
24976
24977     The 'hot' attribute on functions is not implemented in GCC versions
24978     earlier than 4.3.
24979
24980     The 'hot' attribute on a label is used to inform the compiler that
24981     path following the label are more likely than paths that are not so
24982     annotated.  This attribute is used in cases where
24983     '__builtin_expect' cannot be used, for instance with computed goto
24984     or 'asm goto'.
24985
24986     The 'hot' attribute on labels is not implemented in GCC versions
24987     earlier than 4.8.
24988
24989'cold'
24990     The 'cold' attribute on functions is used to inform the compiler
24991     that the function is unlikely to be executed.  The function is
24992     optimized for size rather than speed and on many targets it is
24993     placed into special subsection of the text section so all cold
24994     functions appears close together improving code locality of
24995     non-cold parts of program.  The paths leading to call of cold
24996     functions within code are marked as unlikely by the branch
24997     prediction mechanism.  It is thus useful to mark functions used to
24998     handle unlikely conditions, such as 'perror', as cold to improve
24999     optimization of hot functions that do call marked functions in rare
25000     occasions.
25001
25002     When profile feedback is available, via '-fprofile-use', cold
25003     functions are automatically detected and this attribute is ignored.
25004
25005     The 'cold' attribute on functions is not implemented in GCC
25006     versions earlier than 4.3.
25007
25008     The 'cold' attribute on labels is used to inform the compiler that
25009     the path following the label is unlikely to be executed.  This
25010     attribute is used in cases where '__builtin_expect' cannot be used,
25011     for instance with computed goto or 'asm goto'.
25012
25013     The 'cold' attribute on labels is not implemented in GCC versions
25014     earlier than 4.8.
25015
25016'no_sanitize_address'
25017'no_address_safety_analysis'
25018     The 'no_sanitize_address' attribute on functions is used to inform
25019     the compiler that it should not instrument memory accesses in the
25020     function when compiling with the '-fsanitize=address' option.  The
25021     'no_address_safety_analysis' is a deprecated alias of the
25022     'no_sanitize_address' attribute, new code should use
25023     'no_sanitize_address'.
25024
25025'no_sanitize_undefined'
25026     The 'no_sanitize_undefined' attribute on functions is used to
25027     inform the compiler that it should not check for undefined behavior
25028     in the function when compiling with the '-fsanitize=undefined'
25029     option.
25030
25031'regparm (NUMBER)'
25032     On the Intel 386, the 'regparm' attribute causes the compiler to
25033     pass arguments number one to NUMBER if they are of integral type in
25034     registers EAX, EDX, and ECX instead of on the stack.  Functions
25035     that take a variable number of arguments continue to be passed all
25036     of their arguments on the stack.
25037
25038     Beware that on some ELF systems this attribute is unsuitable for
25039     global functions in shared libraries with lazy binding (which is
25040     the default).  Lazy binding sends the first call via resolving code
25041     in the loader, which might assume EAX, EDX and ECX can be
25042     clobbered, as per the standard calling conventions.  Solaris 8 is
25043     affected by this.  Systems with the GNU C Library version 2.1 or
25044     higher and FreeBSD are believed to be safe since the loaders there
25045     save EAX, EDX and ECX. (Lazy binding can be disabled with the
25046     linker or the loader if desired, to avoid the problem.)
25047
25048'reset'
25049     Use this attribute on the NDS32 target to indicate that the
25050     specified function is a reset handler.  The compiler will generate
25051     corresponding sections for use in a reset handler.  You can use the
25052     following attributes to provide extra exception handling:
25053     'nmi'
25054          Provide a user-defined function to handle NMI exception.
25055     'warm'
25056          Provide a user-defined function to handle warm reset
25057          exception.
25058
25059'sseregparm'
25060     On the Intel 386 with SSE support, the 'sseregparm' attribute
25061     causes the compiler to pass up to 3 floating-point arguments in SSE
25062     registers instead of on the stack.  Functions that take a variable
25063     number of arguments continue to pass all of their floating-point
25064     arguments on the stack.
25065
25066'force_align_arg_pointer'
25067     On the Intel x86, the 'force_align_arg_pointer' attribute may be
25068     applied to individual function definitions, generating an alternate
25069     prologue and epilogue that realigns the run-time stack if
25070     necessary.  This supports mixing legacy codes that run with a
25071     4-byte aligned stack with modern codes that keep a 16-byte stack
25072     for SSE compatibility.
25073
25074'renesas'
25075     On SH targets this attribute specifies that the function or struct
25076     follows the Renesas ABI.
25077
25078'resbank'
25079     On the SH2A target, this attribute enables the high-speed register
25080     saving and restoration using a register bank for
25081     'interrupt_handler' routines.  Saving to the bank is performed
25082     automatically after the CPU accepts an interrupt that uses a
25083     register bank.
25084
25085     The nineteen 32-bit registers comprising general register R0 to
25086     R14, control register GBR, and system registers MACH, MACL, and PR
25087     and the vector table address offset are saved into a register bank.
25088     Register banks are stacked in first-in last-out (FILO) sequence.
25089     Restoration from the bank is executed by issuing a RESBANK
25090     instruction.
25091
25092'returns_twice'
25093     The 'returns_twice' attribute tells the compiler that a function
25094     may return more than one time.  The compiler ensures that all
25095     registers are dead before calling such a function and emits a
25096     warning about the variables that may be clobbered after the second
25097     return from the function.  Examples of such functions are 'setjmp'
25098     and 'vfork'.  The 'longjmp'-like counterpart of such function, if
25099     any, might need to be marked with the 'noreturn' attribute.
25100
25101'saveall'
25102     Use this attribute on the Blackfin, H8/300, H8/300H, and H8S to
25103     indicate that all registers except the stack pointer should be
25104     saved in the prologue regardless of whether they are used or not.
25105
25106'save_volatiles'
25107     Use this attribute on the MicroBlaze to indicate that the function
25108     is an interrupt handler.  All volatile registers (in addition to
25109     non-volatile registers) are saved in the function prologue.  If the
25110     function is a leaf function, only volatiles used by the function
25111     are saved.  A normal function return is generated instead of a
25112     return from interrupt.
25113
25114'section ("SECTION-NAME")'
25115     Normally, the compiler places the code it generates in the 'text'
25116     section.  Sometimes, however, you need additional sections, or you
25117     need certain particular functions to appear in special sections.
25118     The 'section' attribute specifies that a function lives in a
25119     particular section.  For example, the declaration:
25120
25121          extern void foobar (void) __attribute__ ((section ("bar")));
25122
25123     puts the function 'foobar' in the 'bar' section.
25124
25125     Some file formats do not support arbitrary sections so the
25126     'section' attribute is not available on all platforms.  If you need
25127     to map the entire contents of a module to a particular section,
25128     consider using the facilities of the linker instead.
25129
25130'sentinel'
25131     This function attribute ensures that a parameter in a function call
25132     is an explicit 'NULL'.  The attribute is only valid on variadic
25133     functions.  By default, the sentinel is located at position zero,
25134     the last parameter of the function call.  If an optional integer
25135     position argument P is supplied to the attribute, the sentinel must
25136     be located at position P counting backwards from the end of the
25137     argument list.
25138
25139          __attribute__ ((sentinel))
25140          is equivalent to
25141          __attribute__ ((sentinel(0)))
25142
25143     The attribute is automatically set with a position of 0 for the
25144     built-in functions 'execl' and 'execlp'.  The built-in function
25145     'execle' has the attribute set with a position of 1.
25146
25147     A valid 'NULL' in this context is defined as zero with any pointer
25148     type.  If your system defines the 'NULL' macro with an integer type
25149     then you need to add an explicit cast.  GCC replaces 'stddef.h'
25150     with a copy that redefines NULL appropriately.
25151
25152     The warnings for missing or incorrect sentinels are enabled with
25153     '-Wformat'.
25154
25155'short_call'
25156     See 'long_call/short_call'.
25157
25158'shortcall'
25159     See 'longcall/shortcall'.
25160
25161'signal'
25162     Use this attribute on the AVR to indicate that the specified
25163     function is an interrupt handler.  The compiler generates function
25164     entry and exit sequences suitable for use in an interrupt handler
25165     when this attribute is present.
25166
25167     See also the 'interrupt' function attribute.
25168
25169     The AVR hardware globally disables interrupts when an interrupt is
25170     executed.  Interrupt handler functions defined with the 'signal'
25171     attribute do not re-enable interrupts.  It is save to enable
25172     interrupts in a 'signal' handler.  This "save" only applies to the
25173     code generated by the compiler and not to the IRQ layout of the
25174     application which is responsibility of the application.
25175
25176     If both 'signal' and 'interrupt' are specified for the same
25177     function, 'signal' is silently ignored.
25178
25179'sp_switch'
25180     Use this attribute on the SH to indicate an 'interrupt_handler'
25181     function should switch to an alternate stack.  It expects a string
25182     argument that names a global variable holding the address of the
25183     alternate stack.
25184
25185          void *alt_stack;
25186          void f () __attribute__ ((interrupt_handler,
25187                                    sp_switch ("alt_stack")));
25188
25189'stdcall'
25190     On the Intel 386, the 'stdcall' attribute causes the compiler to
25191     assume that the called function pops off the stack space used to
25192     pass arguments, unless it takes a variable number of arguments.
25193
25194'syscall_linkage'
25195     This attribute is used to modify the IA-64 calling convention by
25196     marking all input registers as live at all function exits.  This
25197     makes it possible to restart a system call after an interrupt
25198     without having to save/restore the input registers.  This also
25199     prevents kernel data from leaking into application code.
25200
25201'target'
25202     The 'target' attribute is used to specify that a function is to be
25203     compiled with different target options than specified on the
25204     command line.  This can be used for instance to have functions
25205     compiled with a different ISA (instruction set architecture) than
25206     the default.  You can also use the '#pragma GCC target' pragma to
25207     set more than one function to be compiled with specific target
25208     options.  *Note Function Specific Option Pragmas::, for details
25209     about the '#pragma GCC target' pragma.
25210
25211     For instance on a 386, you could compile one function with
25212     'target("sse4.1,arch=core2")' and another with
25213     'target("sse4a,arch=amdfam10")'.  This is equivalent to compiling
25214     the first function with '-msse4.1' and '-march=core2' options, and
25215     the second function with '-msse4a' and '-march=amdfam10' options.
25216     It is up to the user to make sure that a function is only invoked
25217     on a machine that supports the particular ISA it is compiled for
25218     (for example by using 'cpuid' on 386 to determine what feature bits
25219     and architecture family are used).
25220
25221          int core2_func (void) __attribute__ ((__target__ ("arch=core2")));
25222          int sse3_func (void) __attribute__ ((__target__ ("sse3")));
25223
25224     You can either use multiple strings to specify multiple options, or
25225     separate the options with a comma (',').
25226
25227     The 'target' attribute is presently implemented for i386/x86_64,
25228     PowerPC, and Nios II targets only.  The options supported are
25229     specific to each target.
25230
25231     On the 386, the following options are allowed:
25232
25233     'abm'
25234     'no-abm'
25235          Enable/disable the generation of the advanced bit
25236          instructions.
25237
25238     'aes'
25239     'no-aes'
25240          Enable/disable the generation of the AES instructions.
25241
25242     'default'
25243          *Note Function Multiversioning::, where it is used to specify
25244          the default function version.
25245
25246     'mmx'
25247     'no-mmx'
25248          Enable/disable the generation of the MMX instructions.
25249
25250     'pclmul'
25251     'no-pclmul'
25252          Enable/disable the generation of the PCLMUL instructions.
25253
25254     'popcnt'
25255     'no-popcnt'
25256          Enable/disable the generation of the POPCNT instruction.
25257
25258     'sse'
25259     'no-sse'
25260          Enable/disable the generation of the SSE instructions.
25261
25262     'sse2'
25263     'no-sse2'
25264          Enable/disable the generation of the SSE2 instructions.
25265
25266     'sse3'
25267     'no-sse3'
25268          Enable/disable the generation of the SSE3 instructions.
25269
25270     'sse4'
25271     'no-sse4'
25272          Enable/disable the generation of the SSE4 instructions (both
25273          SSE4.1 and SSE4.2).
25274
25275     'sse4.1'
25276     'no-sse4.1'
25277          Enable/disable the generation of the sse4.1 instructions.
25278
25279     'sse4.2'
25280     'no-sse4.2'
25281          Enable/disable the generation of the sse4.2 instructions.
25282
25283     'sse4a'
25284     'no-sse4a'
25285          Enable/disable the generation of the SSE4A instructions.
25286
25287     'fma4'
25288     'no-fma4'
25289          Enable/disable the generation of the FMA4 instructions.
25290
25291     'xop'
25292     'no-xop'
25293          Enable/disable the generation of the XOP instructions.
25294
25295     'lwp'
25296     'no-lwp'
25297          Enable/disable the generation of the LWP instructions.
25298
25299     'ssse3'
25300     'no-ssse3'
25301          Enable/disable the generation of the SSSE3 instructions.
25302
25303     'cld'
25304     'no-cld'
25305          Enable/disable the generation of the CLD before string moves.
25306
25307     'fancy-math-387'
25308     'no-fancy-math-387'
25309          Enable/disable the generation of the 'sin', 'cos', and 'sqrt'
25310          instructions on the 387 floating-point unit.
25311
25312     'fused-madd'
25313     'no-fused-madd'
25314          Enable/disable the generation of the fused multiply/add
25315          instructions.
25316
25317     'ieee-fp'
25318     'no-ieee-fp'
25319          Enable/disable the generation of floating point that depends
25320          on IEEE arithmetic.
25321
25322     'inline-all-stringops'
25323     'no-inline-all-stringops'
25324          Enable/disable inlining of string operations.
25325
25326     'inline-stringops-dynamically'
25327     'no-inline-stringops-dynamically'
25328          Enable/disable the generation of the inline code to do small
25329          string operations and calling the library routines for large
25330          operations.
25331
25332     'align-stringops'
25333     'no-align-stringops'
25334          Do/do not align destination of inlined string operations.
25335
25336     'recip'
25337     'no-recip'
25338          Enable/disable the generation of RCPSS, RCPPS, RSQRTSS and
25339          RSQRTPS instructions followed an additional Newton-Raphson
25340          step instead of doing a floating-point division.
25341
25342     'arch=ARCH'
25343          Specify the architecture to generate code for in compiling the
25344          function.
25345
25346     'tune=TUNE'
25347          Specify the architecture to tune for in compiling the
25348          function.
25349
25350     'fpmath=FPMATH'
25351          Specify which floating-point unit to use.  The
25352          'target("fpmath=sse,387")' option must be specified as
25353          'target("fpmath=sse+387")' because the comma would separate
25354          different options.
25355
25356     On the PowerPC, the following options are allowed:
25357
25358     'altivec'
25359     'no-altivec'
25360          Generate code that uses (does not use) AltiVec instructions.
25361          In 32-bit code, you cannot enable AltiVec instructions unless
25362          '-mabi=altivec' is used on the command line.
25363
25364     'cmpb'
25365     'no-cmpb'
25366          Generate code that uses (does not use) the compare bytes
25367          instruction implemented on the POWER6 processor and other
25368          processors that support the PowerPC V2.05 architecture.
25369
25370     'dlmzb'
25371     'no-dlmzb'
25372          Generate code that uses (does not use) the string-search
25373          'dlmzb' instruction on the IBM 405, 440, 464 and 476
25374          processors.  This instruction is generated by default when
25375          targeting those processors.
25376
25377     'fprnd'
25378     'no-fprnd'
25379          Generate code that uses (does not use) the FP round to integer
25380          instructions implemented on the POWER5+ processor and other
25381          processors that support the PowerPC V2.03 architecture.
25382
25383     'hard-dfp'
25384     'no-hard-dfp'
25385          Generate code that uses (does not use) the decimal
25386          floating-point instructions implemented on some POWER
25387          processors.
25388
25389     'isel'
25390     'no-isel'
25391          Generate code that uses (does not use) ISEL instruction.
25392
25393     'mfcrf'
25394     'no-mfcrf'
25395          Generate code that uses (does not use) the move from condition
25396          register field instruction implemented on the POWER4 processor
25397          and other processors that support the PowerPC V2.01
25398          architecture.
25399
25400     'mfpgpr'
25401     'no-mfpgpr'
25402          Generate code that uses (does not use) the FP move to/from
25403          general purpose register instructions implemented on the
25404          POWER6X processor and other processors that support the
25405          extended PowerPC V2.05 architecture.
25406
25407     'mulhw'
25408     'no-mulhw'
25409          Generate code that uses (does not use) the half-word multiply
25410          and multiply-accumulate instructions on the IBM 405, 440, 464
25411          and 476 processors.  These instructions are generated by
25412          default when targeting those processors.
25413
25414     'multiple'
25415     'no-multiple'
25416          Generate code that uses (does not use) the load multiple word
25417          instructions and the store multiple word instructions.
25418
25419     'update'
25420     'no-update'
25421          Generate code that uses (does not use) the load or store
25422          instructions that update the base register to the address of
25423          the calculated memory location.
25424
25425     'popcntb'
25426     'no-popcntb'
25427          Generate code that uses (does not use) the popcount and
25428          double-precision FP reciprocal estimate instruction
25429          implemented on the POWER5 processor and other processors that
25430          support the PowerPC V2.02 architecture.
25431
25432     'popcntd'
25433     'no-popcntd'
25434          Generate code that uses (does not use) the popcount
25435          instruction implemented on the POWER7 processor and other
25436          processors that support the PowerPC V2.06 architecture.
25437
25438     'powerpc-gfxopt'
25439     'no-powerpc-gfxopt'
25440          Generate code that uses (does not use) the optional PowerPC
25441          architecture instructions in the Graphics group, including
25442          floating-point select.
25443
25444     'powerpc-gpopt'
25445     'no-powerpc-gpopt'
25446          Generate code that uses (does not use) the optional PowerPC
25447          architecture instructions in the General Purpose group,
25448          including floating-point square root.
25449
25450     'recip-precision'
25451     'no-recip-precision'
25452          Assume (do not assume) that the reciprocal estimate
25453          instructions provide higher-precision estimates than is
25454          mandated by the powerpc ABI.
25455
25456     'string'
25457     'no-string'
25458          Generate code that uses (does not use) the load string
25459          instructions and the store string word instructions to save
25460          multiple registers and do small block moves.
25461
25462     'vsx'
25463     'no-vsx'
25464          Generate code that uses (does not use) vector/scalar (VSX)
25465          instructions, and also enable the use of built-in functions
25466          that allow more direct access to the VSX instruction set.  In
25467          32-bit code, you cannot enable VSX or AltiVec instructions
25468          unless '-mabi=altivec' is used on the command line.
25469
25470     'friz'
25471     'no-friz'
25472          Generate (do not generate) the 'friz' instruction when the
25473          '-funsafe-math-optimizations' option is used to optimize
25474          rounding a floating-point value to 64-bit integer and back to
25475          floating point.  The 'friz' instruction does not return the
25476          same value if the floating-point number is too large to fit in
25477          an integer.
25478
25479     'avoid-indexed-addresses'
25480     'no-avoid-indexed-addresses'
25481          Generate code that tries to avoid (not avoid) the use of
25482          indexed load or store instructions.
25483
25484     'paired'
25485     'no-paired'
25486          Generate code that uses (does not use) the generation of
25487          PAIRED simd instructions.
25488
25489     'longcall'
25490     'no-longcall'
25491          Generate code that assumes (does not assume) that all calls
25492          are far away so that a longer more expensive calling sequence
25493          is required.
25494
25495     'cpu=CPU'
25496          Specify the architecture to generate code for when compiling
25497          the function.  If you select the 'target("cpu=power7")'
25498          attribute when generating 32-bit code, VSX and AltiVec
25499          instructions are not generated unless you use the
25500          '-mabi=altivec' option on the command line.
25501
25502     'tune=TUNE'
25503          Specify the architecture to tune for when compiling the
25504          function.  If you do not specify the 'target("tune=TUNE")'
25505          attribute and you do specify the 'target("cpu=CPU")'
25506          attribute, compilation tunes for the CPU architecture, and not
25507          the default tuning specified on the command line.
25508
25509     When compiling for Nios II, the following options are allowed:
25510
25511     'custom-INSN=N'
25512     'no-custom-INSN'
25513          Each 'custom-INSN=N' attribute locally enables use of a custom
25514          instruction with encoding N when generating code that uses
25515          INSN.  Similarly, 'no-custom-INSN' locally inhibits use of the
25516          custom instruction INSN.  These target attributes correspond
25517          to the '-mcustom-INSN=N' and '-mno-custom-INSN' command-line
25518          options, and support the same set of INSN keywords.  *Note
25519          Nios II Options::, for more information.
25520
25521     'custom-fpu-cfg=NAME'
25522          This attribute corresponds to the '-mcustom-fpu-cfg=NAME'
25523          command-line option, to select a predefined set of custom
25524          instructions named NAME.  *Note Nios II Options::, for more
25525          information.
25526
25527     On the 386/x86_64 and PowerPC back ends, the inliner does not
25528     inline a function that has different target options than the
25529     caller, unless the callee has a subset of the target options of the
25530     caller.  For example a function declared with 'target("sse3")' can
25531     inline a function with 'target("sse2")', since '-msse3' implies
25532     '-msse2'.
25533
25534'tiny_data'
25535     Use this attribute on the H8/300H and H8S to indicate that the
25536     specified variable should be placed into the tiny data section.
25537     The compiler generates more efficient code for loads and stores on
25538     data in the tiny data section.  Note the tiny data area is limited
25539     to slightly under 32KB of data.
25540
25541'trap_exit'
25542     Use this attribute on the SH for an 'interrupt_handler' to return
25543     using 'trapa' instead of 'rte'.  This attribute expects an integer
25544     argument specifying the trap number to be used.
25545
25546'trapa_handler'
25547     On SH targets this function attribute is similar to
25548     'interrupt_handler' but it does not save and restore all registers.
25549
25550'unused'
25551     This attribute, attached to a function, means that the function is
25552     meant to be possibly unused.  GCC does not produce a warning for
25553     this function.
25554
25555'used'
25556     This attribute, attached to a function, means that code must be
25557     emitted for the function even if it appears that the function is
25558     not referenced.  This is useful, for example, when the function is
25559     referenced only in inline assembly.
25560
25561     When applied to a member function of a C++ class template, the
25562     attribute also means that the function is instantiated if the class
25563     itself is instantiated.
25564
25565'version_id'
25566     This IA-64 HP-UX attribute, attached to a global variable or
25567     function, renames a symbol to contain a version string, thus
25568     allowing for function level versioning.  HP-UX system header files
25569     may use function level versioning for some system calls.
25570
25571          extern int foo () __attribute__((version_id ("20040821")));
25572
25573     Calls to FOO are mapped to calls to FOO{20040821}.
25574
25575'visibility ("VISIBILITY_TYPE")'
25576     This attribute affects the linkage of the declaration to which it
25577     is attached.  There are four supported VISIBILITY_TYPE values:
25578     default, hidden, protected or internal visibility.
25579
25580          void __attribute__ ((visibility ("protected")))
25581          f () { /* Do something. */; }
25582          int i __attribute__ ((visibility ("hidden")));
25583
25584     The possible values of VISIBILITY_TYPE correspond to the visibility
25585     settings in the ELF gABI.
25586
25587     "default"
25588          Default visibility is the normal case for the object file
25589          format.  This value is available for the visibility attribute
25590          to override other options that may change the assumed
25591          visibility of entities.
25592
25593          On ELF, default visibility means that the declaration is
25594          visible to other modules and, in shared libraries, means that
25595          the declared entity may be overridden.
25596
25597          On Darwin, default visibility means that the declaration is
25598          visible to other modules.
25599
25600          Default visibility corresponds to "external linkage" in the
25601          language.
25602
25603     "hidden"
25604          Hidden visibility indicates that the entity declared has a new
25605          form of linkage, which we call "hidden linkage".  Two
25606          declarations of an object with hidden linkage refer to the
25607          same object if they are in the same shared object.
25608
25609     "internal"
25610          Internal visibility is like hidden visibility, but with
25611          additional processor specific semantics.  Unless otherwise
25612          specified by the psABI, GCC defines internal visibility to
25613          mean that a function is _never_ called from another module.
25614          Compare this with hidden functions which, while they cannot be
25615          referenced directly by other modules, can be referenced
25616          indirectly via function pointers.  By indicating that a
25617          function cannot be called from outside the module, GCC may for
25618          instance omit the load of a PIC register since it is known
25619          that the calling function loaded the correct value.
25620
25621     "protected"
25622          Protected visibility is like default visibility except that it
25623          indicates that references within the defining module bind to
25624          the definition in that module.  That is, the declared entity
25625          cannot be overridden by another module.
25626
25627     All visibilities are supported on many, but not all, ELF targets
25628     (supported when the assembler supports the '.visibility'
25629     pseudo-op).  Default visibility is supported everywhere.  Hidden
25630     visibility is supported on Darwin targets.
25631
25632     The visibility attribute should be applied only to declarations
25633     that would otherwise have external linkage.  The attribute should
25634     be applied consistently, so that the same entity should not be
25635     declared with different settings of the attribute.
25636
25637     In C++, the visibility attribute applies to types as well as
25638     functions and objects, because in C++ types have linkage.  A class
25639     must not have greater visibility than its non-static data member
25640     types and bases, and class members default to the visibility of
25641     their class.  Also, a declaration without explicit visibility is
25642     limited to the visibility of its type.
25643
25644     In C++, you can mark member functions and static member variables
25645     of a class with the visibility attribute.  This is useful if you
25646     know a particular method or static member variable should only be
25647     used from one shared object; then you can mark it hidden while the
25648     rest of the class has default visibility.  Care must be taken to
25649     avoid breaking the One Definition Rule; for example, it is usually
25650     not useful to mark an inline method as hidden without marking the
25651     whole class as hidden.
25652
25653     A C++ namespace declaration can also have the visibility attribute.
25654
25655          namespace nspace1 __attribute__ ((visibility ("protected")))
25656          { /* Do something. */; }
25657
25658     This attribute applies only to the particular namespace body, not
25659     to other definitions of the same namespace; it is equivalent to
25660     using '#pragma GCC visibility' before and after the namespace
25661     definition (*note Visibility Pragmas::).
25662
25663     In C++, if a template argument has limited visibility, this
25664     restriction is implicitly propagated to the template instantiation.
25665     Otherwise, template instantiations and specializations default to
25666     the visibility of their template.
25667
25668     If both the template and enclosing class have explicit visibility,
25669     the visibility from the template is used.
25670
25671'vliw'
25672     On MeP, the 'vliw' attribute tells the compiler to emit
25673     instructions in VLIW mode instead of core mode.  Note that this
25674     attribute is not allowed unless a VLIW coprocessor has been
25675     configured and enabled through command-line options.
25676
25677'warn_unused_result'
25678     The 'warn_unused_result' attribute causes a warning to be emitted
25679     if a caller of the function with this attribute does not use its
25680     return value.  This is useful for functions where not checking the
25681     result is either a security problem or always a bug, such as
25682     'realloc'.
25683
25684          int fn () __attribute__ ((warn_unused_result));
25685          int foo ()
25686          {
25687            if (fn () < 0) return -1;
25688            fn ();
25689            return 0;
25690          }
25691
25692     results in warning on line 5.
25693
25694'weak'
25695     The 'weak' attribute causes the declaration to be emitted as a weak
25696     symbol rather than a global.  This is primarily useful in defining
25697     library functions that can be overridden in user code, though it
25698     can also be used with non-function declarations.  Weak symbols are
25699     supported for ELF targets, and also for a.out targets when using
25700     the GNU assembler and linker.
25701
25702'weakref'
25703'weakref ("TARGET")'
25704     The 'weakref' attribute marks a declaration as a weak reference.
25705     Without arguments, it should be accompanied by an 'alias' attribute
25706     naming the target symbol.  Optionally, the TARGET may be given as
25707     an argument to 'weakref' itself.  In either case, 'weakref'
25708     implicitly marks the declaration as 'weak'.  Without a TARGET,
25709     given as an argument to 'weakref' or to 'alias', 'weakref' is
25710     equivalent to 'weak'.
25711
25712          static int x() __attribute__ ((weakref ("y")));
25713          /* is equivalent to... */
25714          static int x() __attribute__ ((weak, weakref, alias ("y")));
25715          /* and to... */
25716          static int x() __attribute__ ((weakref));
25717          static int x() __attribute__ ((alias ("y")));
25718
25719     A weak reference is an alias that does not by itself require a
25720     definition to be given for the target symbol.  If the target symbol
25721     is only referenced through weak references, then it becomes a
25722     'weak' undefined symbol.  If it is directly referenced, however,
25723     then such strong references prevail, and a definition is required
25724     for the symbol, not necessarily in the same translation unit.
25725
25726     The effect is equivalent to moving all references to the alias to a
25727     separate translation unit, renaming the alias to the aliased
25728     symbol, declaring it as weak, compiling the two separate
25729     translation units and performing a reloadable link on them.
25730
25731     At present, a declaration to which 'weakref' is attached can only
25732     be 'static'.
25733
25734 You can specify multiple attributes in a declaration by separating them
25735by commas within the double parentheses or by immediately following an
25736attribute declaration with another attribute declaration.
25737
25738 Some people object to the '__attribute__' feature, suggesting that ISO
25739C's '#pragma' should be used instead.  At the time '__attribute__' was
25740designed, there were two reasons for not doing this.
25741
25742  1. It is impossible to generate '#pragma' commands from a macro.
25743
25744  2. There is no telling what the same '#pragma' might mean in another
25745     compiler.
25746
25747 These two reasons applied to almost any application that might have
25748been proposed for '#pragma'.  It was basically a mistake to use
25749'#pragma' for _anything_.
25750
25751 The ISO C99 standard includes '_Pragma', which now allows pragmas to be
25752generated from macros.  In addition, a '#pragma GCC' namespace is now in
25753use for GCC-specific pragmas.  However, it has been found convenient to
25754use '__attribute__' to achieve a natural attachment of attributes to
25755their corresponding declarations, whereas '#pragma GCC' is of use for
25756constructs that do not naturally form part of the grammar.  *Note
25757Pragmas Accepted by GCC: Pragmas.
25758
25759
25760File: gcc.info,  Node: Attribute Syntax,  Next: Function Prototypes,  Prev: Function Attributes,  Up: C Extensions
25761
257626.31 Attribute Syntax
25763=====================
25764
25765This section describes the syntax with which '__attribute__' may be
25766used, and the constructs to which attribute specifiers bind, for the C
25767language.  Some details may vary for C++ and Objective-C.  Because of
25768infelicities in the grammar for attributes, some forms described here
25769may not be successfully parsed in all cases.
25770
25771 There are some problems with the semantics of attributes in C++.  For
25772example, there are no manglings for attributes, although they may affect
25773code generation, so problems may arise when attributed types are used in
25774conjunction with templates or overloading.  Similarly, 'typeid' does not
25775distinguish between types with different attributes.  Support for
25776attributes in C++ may be restricted in future to attributes on
25777declarations only, but not on nested declarators.
25778
25779 *Note Function Attributes::, for details of the semantics of attributes
25780applying to functions.  *Note Variable Attributes::, for details of the
25781semantics of attributes applying to variables.  *Note Type Attributes::,
25782for details of the semantics of attributes applying to structure, union
25783and enumerated types.
25784
25785 An "attribute specifier" is of the form '__attribute__
25786((ATTRIBUTE-LIST))'.  An "attribute list" is a possibly empty
25787comma-separated sequence of "attributes", where each attribute is one of
25788the following:
25789
25790   * Empty.  Empty attributes are ignored.
25791
25792   * A word (which may be an identifier such as 'unused', or a reserved
25793     word such as 'const').
25794
25795   * A word, followed by, in parentheses, parameters for the attribute.
25796     These parameters take one of the following forms:
25797
25798        * An identifier.  For example, 'mode' attributes use this form.
25799
25800        * An identifier followed by a comma and a non-empty
25801          comma-separated list of expressions.  For example, 'format'
25802          attributes use this form.
25803
25804        * A possibly empty comma-separated list of expressions.  For
25805          example, 'format_arg' attributes use this form with the list
25806          being a single integer constant expression, and 'alias'
25807          attributes use this form with the list being a single string
25808          constant.
25809
25810 An "attribute specifier list" is a sequence of one or more attribute
25811specifiers, not separated by any other tokens.
25812
25813 In GNU C, an attribute specifier list may appear after the colon
25814following a label, other than a 'case' or 'default' label.  The only
25815attribute it makes sense to use after a label is 'unused'.  This feature
25816is intended for program-generated code that may contain unused labels,
25817but which is compiled with '-Wall'.  It is not normally appropriate to
25818use in it human-written code, though it could be useful in cases where
25819the code that jumps to the label is contained within an '#ifdef'
25820conditional.  GNU C++ only permits attributes on labels if the attribute
25821specifier is immediately followed by a semicolon (i.e., the label
25822applies to an empty statement).  If the semicolon is missing, C++ label
25823attributes are ambiguous, as it is permissible for a declaration, which
25824could begin with an attribute list, to be labelled in C++.  Declarations
25825cannot be labelled in C90 or C99, so the ambiguity does not arise there.
25826
25827 An attribute specifier list may appear as part of a 'struct', 'union'
25828or 'enum' specifier.  It may go either immediately after the 'struct',
25829'union' or 'enum' keyword, or after the closing brace.  The former
25830syntax is preferred.  Where attribute specifiers follow the closing
25831brace, they are considered to relate to the structure, union or
25832enumerated type defined, not to any enclosing declaration the type
25833specifier appears in, and the type defined is not complete until after
25834the attribute specifiers.
25835
25836 Otherwise, an attribute specifier appears as part of a declaration,
25837counting declarations of unnamed parameters and type names, and relates
25838to that declaration (which may be nested in another declaration, for
25839example in the case of a parameter declaration), or to a particular
25840declarator within a declaration.  Where an attribute specifier is
25841applied to a parameter declared as a function or an array, it should
25842apply to the function or array rather than the pointer to which the
25843parameter is implicitly converted, but this is not yet correctly
25844implemented.
25845
25846 Any list of specifiers and qualifiers at the start of a declaration may
25847contain attribute specifiers, whether or not such a list may in that
25848context contain storage class specifiers.  (Some attributes, however,
25849are essentially in the nature of storage class specifiers, and only make
25850sense where storage class specifiers may be used; for example,
25851'section'.)  There is one necessary limitation to this syntax: the first
25852old-style parameter declaration in a function definition cannot begin
25853with an attribute specifier, because such an attribute applies to the
25854function instead by syntax described below (which, however, is not yet
25855implemented in this case).  In some other cases, attribute specifiers
25856are permitted by this grammar but not yet supported by the compiler.
25857All attribute specifiers in this place relate to the declaration as a
25858whole.  In the obsolescent usage where a type of 'int' is implied by the
25859absence of type specifiers, such a list of specifiers and qualifiers may
25860be an attribute specifier list with no other specifiers or qualifiers.
25861
25862 At present, the first parameter in a function prototype must have some
25863type specifier that is not an attribute specifier; this resolves an
25864ambiguity in the interpretation of 'void f(int (__attribute__((foo))
25865x))', but is subject to change.  At present, if the parentheses of a
25866function declarator contain only attributes then those attributes are
25867ignored, rather than yielding an error or warning or implying a single
25868parameter of type int, but this is subject to change.
25869
25870 An attribute specifier list may appear immediately before a declarator
25871(other than the first) in a comma-separated list of declarators in a
25872declaration of more than one identifier using a single list of
25873specifiers and qualifiers.  Such attribute specifiers apply only to the
25874identifier before whose declarator they appear.  For example, in
25875
25876     __attribute__((noreturn)) void d0 (void),
25877         __attribute__((format(printf, 1, 2))) d1 (const char *, ...),
25878          d2 (void)
25879
25880the 'noreturn' attribute applies to all the functions declared; the
25881'format' attribute only applies to 'd1'.
25882
25883 An attribute specifier list may appear immediately before the comma,
25884'=' or semicolon terminating the declaration of an identifier other than
25885a function definition.  Such attribute specifiers apply to the declared
25886object or function.  Where an assembler name for an object or function
25887is specified (*note Asm Labels::), the attribute must follow the 'asm'
25888specification.
25889
25890 An attribute specifier list may, in future, be permitted to appear
25891after the declarator in a function definition (before any old-style
25892parameter declarations or the function body).
25893
25894 Attribute specifiers may be mixed with type qualifiers appearing inside
25895the '[]' of a parameter array declarator, in the C99 construct by which
25896such qualifiers are applied to the pointer to which the array is
25897implicitly converted.  Such attribute specifiers apply to the pointer,
25898not to the array, but at present this is not implemented and they are
25899ignored.
25900
25901 An attribute specifier list may appear at the start of a nested
25902declarator.  At present, there are some limitations in this usage: the
25903attributes correctly apply to the declarator, but for most individual
25904attributes the semantics this implies are not implemented.  When
25905attribute specifiers follow the '*' of a pointer declarator, they may be
25906mixed with any type qualifiers present.  The following describes the
25907formal semantics of this syntax.  It makes the most sense if you are
25908familiar with the formal specification of declarators in the ISO C
25909standard.
25910
25911 Consider (as in C99 subclause 6.7.5 paragraph 4) a declaration 'T D1',
25912where 'T' contains declaration specifiers that specify a type TYPE (such
25913as 'int') and 'D1' is a declarator that contains an identifier IDENT.
25914The type specified for IDENT for derived declarators whose type does not
25915include an attribute specifier is as in the ISO C standard.
25916
25917 If 'D1' has the form '( ATTRIBUTE-SPECIFIER-LIST D )', and the
25918declaration 'T D' specifies the type "DERIVED-DECLARATOR-TYPE-LIST TYPE"
25919for IDENT, then 'T D1' specifies the type "DERIVED-DECLARATOR-TYPE-LIST
25920ATTRIBUTE-SPECIFIER-LIST TYPE" for IDENT.
25921
25922 If 'D1' has the form '* TYPE-QUALIFIER-AND-ATTRIBUTE-SPECIFIER-LIST D',
25923and the declaration 'T D' specifies the type
25924"DERIVED-DECLARATOR-TYPE-LIST TYPE" for IDENT, then 'T D1' specifies the
25925type "DERIVED-DECLARATOR-TYPE-LIST
25926TYPE-QUALIFIER-AND-ATTRIBUTE-SPECIFIER-LIST pointer to TYPE" for IDENT.
25927
25928 For example,
25929
25930     void (__attribute__((noreturn)) ****f) (void);
25931
25932specifies the type "pointer to pointer to pointer to pointer to
25933non-returning function returning 'void'".  As another example,
25934
25935     char *__attribute__((aligned(8))) *f;
25936
25937specifies the type "pointer to 8-byte-aligned pointer to 'char'".  Note
25938again that this does not work with most attributes; for example, the
25939usage of 'aligned' and 'noreturn' attributes given above is not yet
25940supported.
25941
25942 For compatibility with existing code written for compiler versions that
25943did not implement attributes on nested declarators, some laxity is
25944allowed in the placing of attributes.  If an attribute that only applies
25945to types is applied to a declaration, it is treated as applying to the
25946type of that declaration.  If an attribute that only applies to
25947declarations is applied to the type of a declaration, it is treated as
25948applying to that declaration; and, for compatibility with code placing
25949the attributes immediately before the identifier declared, such an
25950attribute applied to a function return type is treated as applying to
25951the function type, and such an attribute applied to an array element
25952type is treated as applying to the array type.  If an attribute that
25953only applies to function types is applied to a pointer-to-function type,
25954it is treated as applying to the pointer target type; if such an
25955attribute is applied to a function return type that is not a
25956pointer-to-function type, it is treated as applying to the function
25957type.
25958
25959
25960File: gcc.info,  Node: Function Prototypes,  Next: C++ Comments,  Prev: Attribute Syntax,  Up: C Extensions
25961
259626.32 Prototypes and Old-Style Function Definitions
25963==================================================
25964
25965GNU C extends ISO C to allow a function prototype to override a later
25966old-style non-prototype definition.  Consider the following example:
25967
25968     /* Use prototypes unless the compiler is old-fashioned.  */
25969     #ifdef __STDC__
25970     #define P(x) x
25971     #else
25972     #define P(x) ()
25973     #endif
25974
25975     /* Prototype function declaration.  */
25976     int isroot P((uid_t));
25977
25978     /* Old-style function definition.  */
25979     int
25980     isroot (x)   /* ??? lossage here ??? */
25981          uid_t x;
25982     {
25983       return x == 0;
25984     }
25985
25986 Suppose the type 'uid_t' happens to be 'short'.  ISO C does not allow
25987this example, because subword arguments in old-style non-prototype
25988definitions are promoted.  Therefore in this example the function
25989definition's argument is really an 'int', which does not match the
25990prototype argument type of 'short'.
25991
25992 This restriction of ISO C makes it hard to write code that is portable
25993to traditional C compilers, because the programmer does not know whether
25994the 'uid_t' type is 'short', 'int', or 'long'.  Therefore, in cases like
25995these GNU C allows a prototype to override a later old-style definition.
25996More precisely, in GNU C, a function prototype argument type overrides
25997the argument type specified by a later old-style definition if the
25998former type is the same as the latter type before promotion.  Thus in
25999GNU C the above example is equivalent to the following:
26000
26001     int isroot (uid_t);
26002
26003     int
26004     isroot (uid_t x)
26005     {
26006       return x == 0;
26007     }
26008
26009GNU C++ does not support old-style function definitions, so this
26010extension is irrelevant.
26011
26012
26013File: gcc.info,  Node: C++ Comments,  Next: Dollar Signs,  Prev: Function Prototypes,  Up: C Extensions
26014
260156.33 C++ Style Comments
26016=======================
26017
26018In GNU C, you may use C++ style comments, which start with '//' and
26019continue until the end of the line.  Many other C implementations allow
26020such comments, and they are included in the 1999 C standard.  However,
26021C++ style comments are not recognized if you specify an '-std' option
26022specifying a version of ISO C before C99, or '-ansi' (equivalent to
26023'-std=c90').
26024
26025
26026File: gcc.info,  Node: Dollar Signs,  Next: Character Escapes,  Prev: C++ Comments,  Up: C Extensions
26027
260286.34 Dollar Signs in Identifier Names
26029=====================================
26030
26031In GNU C, you may normally use dollar signs in identifier names.  This
26032is because many traditional C implementations allow such identifiers.
26033However, dollar signs in identifiers are not supported on a few target
26034machines, typically because the target assembler does not allow them.
26035
26036
26037File: gcc.info,  Node: Character Escapes,  Next: Variable Attributes,  Prev: Dollar Signs,  Up: C Extensions
26038
260396.35 The Character <ESC> in Constants
26040=====================================
26041
26042You can use the sequence '\e' in a string or character constant to stand
26043for the ASCII character <ESC>.
26044
26045
26046File: gcc.info,  Node: Variable Attributes,  Next: Type Attributes,  Prev: Character Escapes,  Up: C Extensions
26047
260486.36 Specifying Attributes of Variables
26049=======================================
26050
26051The keyword '__attribute__' allows you to specify special attributes of
26052variables or structure fields.  This keyword is followed by an attribute
26053specification inside double parentheses.  Some attributes are currently
26054defined generically for variables.  Other attributes are defined for
26055variables on particular target systems.  Other attributes are available
26056for functions (*note Function Attributes::) and for types (*note Type
26057Attributes::).  Other front ends might define more attributes (*note
26058Extensions to the C++ Language: C++ Extensions.).
26059
26060 You may also specify attributes with '__' preceding and following each
26061keyword.  This allows you to use them in header files without being
26062concerned about a possible macro of the same name.  For example, you may
26063use '__aligned__' instead of 'aligned'.
26064
26065 *Note Attribute Syntax::, for details of the exact syntax for using
26066attributes.
26067
26068'aligned (ALIGNMENT)'
26069     This attribute specifies a minimum alignment for the variable or
26070     structure field, measured in bytes.  For example, the declaration:
26071
26072          int x __attribute__ ((aligned (16))) = 0;
26073
26074     causes the compiler to allocate the global variable 'x' on a
26075     16-byte boundary.  On a 68040, this could be used in conjunction
26076     with an 'asm' expression to access the 'move16' instruction which
26077     requires 16-byte aligned operands.
26078
26079     You can also specify the alignment of structure fields.  For
26080     example, to create a double-word aligned 'int' pair, you could
26081     write:
26082
26083          struct foo { int x[2] __attribute__ ((aligned (8))); };
26084
26085     This is an alternative to creating a union with a 'double' member,
26086     which forces the union to be double-word aligned.
26087
26088     As in the preceding examples, you can explicitly specify the
26089     alignment (in bytes) that you wish the compiler to use for a given
26090     variable or structure field.  Alternatively, you can leave out the
26091     alignment factor and just ask the compiler to align a variable or
26092     field to the default alignment for the target architecture you are
26093     compiling for.  The default alignment is sufficient for all scalar
26094     types, but may not be enough for all vector types on a target that
26095     supports vector operations.  The default alignment is fixed for a
26096     particular target ABI.
26097
26098     GCC also provides a target specific macro '__BIGGEST_ALIGNMENT__',
26099     which is the largest alignment ever used for any data type on the
26100     target machine you are compiling for.  For example, you could
26101     write:
26102
26103          short array[3] __attribute__ ((aligned (__BIGGEST_ALIGNMENT__)));
26104
26105     The compiler automatically sets the alignment for the declared
26106     variable or field to '__BIGGEST_ALIGNMENT__'.  Doing this can often
26107     make copy operations more efficient, because the compiler can use
26108     whatever instructions copy the biggest chunks of memory when
26109     performing copies to or from the variables or fields that you have
26110     aligned this way.  Note that the value of '__BIGGEST_ALIGNMENT__'
26111     may change depending on command-line options.
26112
26113     When used on a struct, or struct member, the 'aligned' attribute
26114     can only increase the alignment; in order to decrease it, the
26115     'packed' attribute must be specified as well.  When used as part of
26116     a typedef, the 'aligned' attribute can both increase and decrease
26117     alignment, and specifying the 'packed' attribute generates a
26118     warning.
26119
26120     Note that the effectiveness of 'aligned' attributes may be limited
26121     by inherent limitations in your linker.  On many systems, the
26122     linker is only able to arrange for variables to be aligned up to a
26123     certain maximum alignment.  (For some linkers, the maximum
26124     supported alignment may be very very small.)  If your linker is
26125     only able to align variables up to a maximum of 8-byte alignment,
26126     then specifying 'aligned(16)' in an '__attribute__' still only
26127     provides you with 8-byte alignment.  See your linker documentation
26128     for further information.
26129
26130     The 'aligned' attribute can also be used for functions (*note
26131     Function Attributes::.)
26132
26133'cleanup (CLEANUP_FUNCTION)'
26134     The 'cleanup' attribute runs a function when the variable goes out
26135     of scope.  This attribute can only be applied to auto function
26136     scope variables; it may not be applied to parameters or variables
26137     with static storage duration.  The function must take one
26138     parameter, a pointer to a type compatible with the variable.  The
26139     return value of the function (if any) is ignored.
26140
26141     If '-fexceptions' is enabled, then CLEANUP_FUNCTION is run during
26142     the stack unwinding that happens during the processing of the
26143     exception.  Note that the 'cleanup' attribute does not allow the
26144     exception to be caught, only to perform an action.  It is undefined
26145     what happens if CLEANUP_FUNCTION does not return normally.
26146
26147'common'
26148'nocommon'
26149     The 'common' attribute requests GCC to place a variable in "common"
26150     storage.  The 'nocommon' attribute requests the opposite--to
26151     allocate space for it directly.
26152
26153     These attributes override the default chosen by the '-fno-common'
26154     and '-fcommon' flags respectively.
26155
26156'deprecated'
26157'deprecated (MSG)'
26158     The 'deprecated' attribute results in a warning if the variable is
26159     used anywhere in the source file.  This is useful when identifying
26160     variables that are expected to be removed in a future version of a
26161     program.  The warning also includes the location of the declaration
26162     of the deprecated variable, to enable users to easily find further
26163     information about why the variable is deprecated, or what they
26164     should do instead.  Note that the warning only occurs for uses:
26165
26166          extern int old_var __attribute__ ((deprecated));
26167          extern int old_var;
26168          int new_fn () { return old_var; }
26169
26170     results in a warning on line 3 but not line 2.  The optional MSG
26171     argument, which must be a string, is printed in the warning if
26172     present.
26173
26174     The 'deprecated' attribute can also be used for functions and types
26175     (*note Function Attributes::, *note Type Attributes::.)
26176
26177'mode (MODE)'
26178     This attribute specifies the data type for the
26179     declaration--whichever type corresponds to the mode MODE.  This in
26180     effect lets you request an integer or floating-point type according
26181     to its width.
26182
26183     You may also specify a mode of 'byte' or '__byte__' to indicate the
26184     mode corresponding to a one-byte integer, 'word' or '__word__' for
26185     the mode of a one-word integer, and 'pointer' or '__pointer__' for
26186     the mode used to represent pointers.
26187
26188'packed'
26189     The 'packed' attribute specifies that a variable or structure field
26190     should have the smallest possible alignment--one byte for a
26191     variable, and one bit for a field, unless you specify a larger
26192     value with the 'aligned' attribute.
26193
26194     Here is a structure in which the field 'x' is packed, so that it
26195     immediately follows 'a':
26196
26197          struct foo
26198          {
26199            char a;
26200            int x[2] __attribute__ ((packed));
26201          };
26202
26203     _Note:_ The 4.1, 4.2 and 4.3 series of GCC ignore the 'packed'
26204     attribute on bit-fields of type 'char'.  This has been fixed in GCC
26205     4.4 but the change can lead to differences in the structure layout.
26206     See the documentation of '-Wpacked-bitfield-compat' for more
26207     information.
26208
26209'section ("SECTION-NAME")'
26210     Normally, the compiler places the objects it generates in sections
26211     like 'data' and 'bss'.  Sometimes, however, you need additional
26212     sections, or you need certain particular variables to appear in
26213     special sections, for example to map to special hardware.  The
26214     'section' attribute specifies that a variable (or function) lives
26215     in a particular section.  For example, this small program uses
26216     several specific section names:
26217
26218          struct duart a __attribute__ ((section ("DUART_A"))) = { 0 };
26219          struct duart b __attribute__ ((section ("DUART_B"))) = { 0 };
26220          char stack[10000] __attribute__ ((section ("STACK"))) = { 0 };
26221          int init_data __attribute__ ((section ("INITDATA")));
26222
26223          main()
26224          {
26225            /* Initialize stack pointer */
26226            init_sp (stack + sizeof (stack));
26227
26228            /* Initialize initialized data */
26229            memcpy (&init_data, &data, &edata - &data);
26230
26231            /* Turn on the serial ports */
26232            init_duart (&a);
26233            init_duart (&b);
26234          }
26235
26236     Use the 'section' attribute with _global_ variables and not _local_
26237     variables, as shown in the example.
26238
26239     You may use the 'section' attribute with initialized or
26240     uninitialized global variables but the linker requires each object
26241     be defined once, with the exception that uninitialized variables
26242     tentatively go in the 'common' (or 'bss') section and can be
26243     multiply "defined".  Using the 'section' attribute changes what
26244     section the variable goes into and may cause the linker to issue an
26245     error if an uninitialized variable has multiple definitions.  You
26246     can force a variable to be initialized with the '-fno-common' flag
26247     or the 'nocommon' attribute.
26248
26249     Some file formats do not support arbitrary sections so the
26250     'section' attribute is not available on all platforms.  If you need
26251     to map the entire contents of a module to a particular section,
26252     consider using the facilities of the linker instead.
26253
26254'shared'
26255     On Microsoft Windows, in addition to putting variable definitions
26256     in a named section, the section can also be shared among all
26257     running copies of an executable or DLL.  For example, this small
26258     program defines shared data by putting it in a named section
26259     'shared' and marking the section shareable:
26260
26261          int foo __attribute__((section ("shared"), shared)) = 0;
26262
26263          int
26264          main()
26265          {
26266            /* Read and write foo.  All running
26267               copies see the same value.  */
26268            return 0;
26269          }
26270
26271     You may only use the 'shared' attribute along with 'section'
26272     attribute with a fully-initialized global definition because of the
26273     way linkers work.  See 'section' attribute for more information.
26274
26275     The 'shared' attribute is only available on Microsoft Windows.
26276
26277'tls_model ("TLS_MODEL")'
26278     The 'tls_model' attribute sets thread-local storage model (*note
26279     Thread-Local::) of a particular '__thread' variable, overriding
26280     '-ftls-model=' command-line switch on a per-variable basis.  The
26281     TLS_MODEL argument should be one of 'global-dynamic',
26282     'local-dynamic', 'initial-exec' or 'local-exec'.
26283
26284     Not all targets support this attribute.
26285
26286'unused'
26287     This attribute, attached to a variable, means that the variable is
26288     meant to be possibly unused.  GCC does not produce a warning for
26289     this variable.
26290
26291'used'
26292     This attribute, attached to a variable with the static storage,
26293     means that the variable must be emitted even if it appears that the
26294     variable is not referenced.
26295
26296     When applied to a static data member of a C++ class template, the
26297     attribute also means that the member is instantiated if the class
26298     itself is instantiated.
26299
26300'vector_size (BYTES)'
26301     This attribute specifies the vector size for the variable, measured
26302     in bytes.  For example, the declaration:
26303
26304          int foo __attribute__ ((vector_size (16)));
26305
26306     causes the compiler to set the mode for 'foo', to be 16 bytes,
26307     divided into 'int' sized units.  Assuming a 32-bit int (a vector of
26308     4 units of 4 bytes), the corresponding mode of 'foo' is V4SI.
26309
26310     This attribute is only applicable to integral and float scalars,
26311     although arrays, pointers, and function return values are allowed
26312     in conjunction with this construct.
26313
26314     Aggregates with this attribute are invalid, even if they are of the
26315     same size as a corresponding scalar.  For example, the declaration:
26316
26317          struct S { int a; };
26318          struct S  __attribute__ ((vector_size (16))) foo;
26319
26320     is invalid even if the size of the structure is the same as the
26321     size of the 'int'.
26322
26323'selectany'
26324     The 'selectany' attribute causes an initialized global variable to
26325     have link-once semantics.  When multiple definitions of the
26326     variable are encountered by the linker, the first is selected and
26327     the remainder are discarded.  Following usage by the Microsoft
26328     compiler, the linker is told _not_ to warn about size or content
26329     differences of the multiple definitions.
26330
26331     Although the primary usage of this attribute is for POD types, the
26332     attribute can also be applied to global C++ objects that are
26333     initialized by a constructor.  In this case, the static
26334     initialization and destruction code for the object is emitted in
26335     each translation defining the object, but the calls to the
26336     constructor and destructor are protected by a link-once guard
26337     variable.
26338
26339     The 'selectany' attribute is only available on Microsoft Windows
26340     targets.  You can use '__declspec (selectany)' as a synonym for
26341     '__attribute__ ((selectany))' for compatibility with other
26342     compilers.
26343
26344'weak'
26345     The 'weak' attribute is described in *note Function Attributes::.
26346
26347'dllimport'
26348     The 'dllimport' attribute is described in *note Function
26349     Attributes::.
26350
26351'dllexport'
26352     The 'dllexport' attribute is described in *note Function
26353     Attributes::.
26354
263556.36.1 AVR Variable Attributes
26356------------------------------
26357
26358'progmem'
26359     The 'progmem' attribute is used on the AVR to place read-only data
26360     in the non-volatile program memory (flash).  The 'progmem'
26361     attribute accomplishes this by putting respective variables into a
26362     section whose name starts with '.progmem'.
26363
26364     This attribute works similar to the 'section' attribute but adds
26365     additional checking.  Notice that just like the 'section'
26366     attribute, 'progmem' affects the location of the data but not how
26367     this data is accessed.
26368
26369     In order to read data located with the 'progmem' attribute (inline)
26370     assembler must be used.
26371          /* Use custom macros from AVR-LibC (http://nongnu.org/avr-libc/user-manual/) */
26372          #include <avr/pgmspace.h>
26373
26374          /* Locate var in flash memory */
26375          const int var[2] PROGMEM = { 1, 2 };
26376
26377          int read_var (int i)
26378          {
26379              /* Access var[] by accessor macro from avr/pgmspace.h */
26380              return (int) pgm_read_word (& var[i]);
26381          }
26382
26383     AVR is a Harvard architecture processor and data and read-only data
26384     normally resides in the data memory (RAM).
26385
26386     See also the *note AVR Named Address Spaces:: section for an
26387     alternate way to locate and access data in flash memory.
26388
263896.36.2 Blackfin Variable Attributes
26390-----------------------------------
26391
26392Three attributes are currently defined for the Blackfin.
26393
26394'l1_data'
26395'l1_data_A'
26396'l1_data_B'
26397     Use these attributes on the Blackfin to place the variable into L1
26398     Data SRAM. Variables with 'l1_data' attribute are put into the
26399     specific section named '.l1.data'.  Those with 'l1_data_A'
26400     attribute are put into the specific section named '.l1.data.A'.
26401     Those with 'l1_data_B' attribute are put into the specific section
26402     named '.l1.data.B'.
26403
26404'l2'
26405     Use this attribute on the Blackfin to place the variable into L2
26406     SRAM. Variables with 'l2' attribute are put into the specific
26407     section named '.l2.data'.
26408
264096.36.3 M32R/D Variable Attributes
26410---------------------------------
26411
26412One attribute is currently defined for the M32R/D.
26413
26414'model (MODEL-NAME)'
26415     Use this attribute on the M32R/D to set the addressability of an
26416     object.  The identifier MODEL-NAME is one of 'small', 'medium', or
26417     'large', representing each of the code models.
26418
26419     Small model objects live in the lower 16MB of memory (so that their
26420     addresses can be loaded with the 'ld24' instruction).
26421
26422     Medium and large model objects may live anywhere in the 32-bit
26423     address space (the compiler generates 'seth/add3' instructions to
26424     load their addresses).
26425
264266.36.4 MeP Variable Attributes
26427------------------------------
26428
26429The MeP target has a number of addressing modes and busses.  The 'near'
26430space spans the standard memory space's first 16 megabytes (24 bits).
26431The 'far' space spans the entire 32-bit memory space.  The 'based' space
26432is a 128-byte region in the memory space that is addressed relative to
26433the '$tp' register.  The 'tiny' space is a 65536-byte region relative to
26434the '$gp' register.  In addition to these memory regions, the MeP target
26435has a separate 16-bit control bus which is specified with 'cb'
26436attributes.
26437
26438'based'
26439     Any variable with the 'based' attribute is assigned to the '.based'
26440     section, and is accessed with relative to the '$tp' register.
26441
26442'tiny'
26443     Likewise, the 'tiny' attribute assigned variables to the '.tiny'
26444     section, relative to the '$gp' register.
26445
26446'near'
26447     Variables with the 'near' attribute are assumed to have addresses
26448     that fit in a 24-bit addressing mode.  This is the default for
26449     large variables ('-mtiny=4' is the default) but this attribute can
26450     override '-mtiny=' for small variables, or override '-ml'.
26451
26452'far'
26453     Variables with the 'far' attribute are addressed using a full
26454     32-bit address.  Since this covers the entire memory space, this
26455     allows modules to make no assumptions about where variables might
26456     be stored.
26457
26458'io'
26459'io (ADDR)'
26460     Variables with the 'io' attribute are used to address memory-mapped
26461     peripherals.  If an address is specified, the variable is assigned
26462     that address, else it is not assigned an address (it is assumed
26463     some other module assigns an address).  Example:
26464
26465          int timer_count __attribute__((io(0x123)));
26466
26467'cb'
26468'cb (ADDR)'
26469     Variables with the 'cb' attribute are used to access the control
26470     bus, using special instructions.  'addr' indicates the control bus
26471     address.  Example:
26472
26473          int cpu_clock __attribute__((cb(0x123)));
26474
264756.36.5 i386 Variable Attributes
26476-------------------------------
26477
26478Two attributes are currently defined for i386 configurations:
26479'ms_struct' and 'gcc_struct'
26480
26481'ms_struct'
26482'gcc_struct'
26483
26484     If 'packed' is used on a structure, or if bit-fields are used, it
26485     may be that the Microsoft ABI lays out the structure differently
26486     than the way GCC normally does.  Particularly when moving packed
26487     data between functions compiled with GCC and the native Microsoft
26488     compiler (either via function call or as data in a file), it may be
26489     necessary to access either format.
26490
26491     Currently '-m[no-]ms-bitfields' is provided for the Microsoft
26492     Windows X86 compilers to match the native Microsoft compiler.
26493
26494     The Microsoft structure layout algorithm is fairly simple with the
26495     exception of the bit-field packing.  The padding and alignment of
26496     members of structures and whether a bit-field can straddle a
26497     storage-unit boundary are determine by these rules:
26498
26499       1. Structure members are stored sequentially in the order in
26500          which they are declared: the first member has the lowest
26501          memory address and the last member the highest.
26502
26503       2. Every data object has an alignment requirement.  The alignment
26504          requirement for all data except structures, unions, and arrays
26505          is either the size of the object or the current packing size
26506          (specified with either the 'aligned' attribute or the 'pack'
26507          pragma), whichever is less.  For structures, unions, and
26508          arrays, the alignment requirement is the largest alignment
26509          requirement of its members.  Every object is allocated an
26510          offset so that:
26511
26512               offset % alignment_requirement == 0
26513
26514       3. Adjacent bit-fields are packed into the same 1-, 2-, or 4-byte
26515          allocation unit if the integral types are the same size and if
26516          the next bit-field fits into the current allocation unit
26517          without crossing the boundary imposed by the common alignment
26518          requirements of the bit-fields.
26519
26520     MSVC interprets zero-length bit-fields in the following ways:
26521
26522       1. If a zero-length bit-field is inserted between two bit-fields
26523          that are normally coalesced, the bit-fields are not coalesced.
26524
26525          For example:
26526
26527               struct
26528                {
26529                  unsigned long bf_1 : 12;
26530                  unsigned long : 0;
26531                  unsigned long bf_2 : 12;
26532                } t1;
26533
26534          The size of 't1' is 8 bytes with the zero-length bit-field.
26535          If the zero-length bit-field were removed, 't1''s size would
26536          be 4 bytes.
26537
26538       2. If a zero-length bit-field is inserted after a bit-field,
26539          'foo', and the alignment of the zero-length bit-field is
26540          greater than the member that follows it, 'bar', 'bar' is
26541          aligned as the type of the zero-length bit-field.
26542
26543          For example:
26544
26545               struct
26546                {
26547                  char foo : 4;
26548                  short : 0;
26549                  char bar;
26550                } t2;
26551
26552               struct
26553                {
26554                  char foo : 4;
26555                  short : 0;
26556                  double bar;
26557                } t3;
26558
26559          For 't2', 'bar' is placed at offset 2, rather than offset 1.
26560          Accordingly, the size of 't2' is 4.  For 't3', the zero-length
26561          bit-field does not affect the alignment of 'bar' or, as a
26562          result, the size of the structure.
26563
26564          Taking this into account, it is important to note the
26565          following:
26566
26567            1. If a zero-length bit-field follows a normal bit-field,
26568               the type of the zero-length bit-field may affect the
26569               alignment of the structure as whole.  For example, 't2'
26570               has a size of 4 bytes, since the zero-length bit-field
26571               follows a normal bit-field, and is of type short.
26572
26573            2. Even if a zero-length bit-field is not followed by a
26574               normal bit-field, it may still affect the alignment of
26575               the structure:
26576
26577                    struct
26578                     {
26579                       char foo : 6;
26580                       long : 0;
26581                     } t4;
26582
26583               Here, 't4' takes up 4 bytes.
26584
26585       3. Zero-length bit-fields following non-bit-field members are
26586          ignored:
26587
26588               struct
26589                {
26590                  char foo;
26591                  long : 0;
26592                  char bar;
26593                } t5;
26594
26595          Here, 't5' takes up 2 bytes.
26596
265976.36.6 PowerPC Variable Attributes
26598----------------------------------
26599
26600Three attributes currently are defined for PowerPC configurations:
26601'altivec', 'ms_struct' and 'gcc_struct'.
26602
26603 For full documentation of the struct attributes please see the
26604documentation in *note i386 Variable Attributes::.
26605
26606 For documentation of 'altivec' attribute please see the documentation
26607in *note PowerPC Type Attributes::.
26608
266096.36.7 SPU Variable Attributes
26610------------------------------
26611
26612The SPU supports the 'spu_vector' attribute for variables.  For
26613documentation of this attribute please see the documentation in *note
26614SPU Type Attributes::.
26615
266166.36.8 Xstormy16 Variable Attributes
26617------------------------------------
26618
26619One attribute is currently defined for xstormy16 configurations:
26620'below100'.
26621
26622'below100'
26623
26624     If a variable has the 'below100' attribute ('BELOW100' is allowed
26625     also), GCC places the variable in the first 0x100 bytes of memory
26626     and use special opcodes to access it.  Such variables are placed in
26627     either the '.bss_below100' section or the '.data_below100' section.
26628
26629
26630File: gcc.info,  Node: Type Attributes,  Next: Alignment,  Prev: Variable Attributes,  Up: C Extensions
26631
266326.37 Specifying Attributes of Types
26633===================================
26634
26635The keyword '__attribute__' allows you to specify special attributes of
26636'struct' and 'union' types when you define such types.  This keyword is
26637followed by an attribute specification inside double parentheses.  Seven
26638attributes are currently defined for types: 'aligned', 'packed',
26639'transparent_union', 'unused', 'deprecated', 'visibility', and
26640'may_alias'.  Other attributes are defined for functions (*note Function
26641Attributes::) and for variables (*note Variable Attributes::).
26642
26643 You may also specify any one of these attributes with '__' preceding
26644and following its keyword.  This allows you to use these attributes in
26645header files without being concerned about a possible macro of the same
26646name.  For example, you may use '__aligned__' instead of 'aligned'.
26647
26648 You may specify type attributes in an enum, struct or union type
26649declaration or definition, or for other types in a 'typedef'
26650declaration.
26651
26652 For an enum, struct or union type, you may specify attributes either
26653between the enum, struct or union tag and the name of the type, or just
26654past the closing curly brace of the _definition_.  The former syntax is
26655preferred.
26656
26657 *Note Attribute Syntax::, for details of the exact syntax for using
26658attributes.
26659
26660'aligned (ALIGNMENT)'
26661     This attribute specifies a minimum alignment (in bytes) for
26662     variables of the specified type.  For example, the declarations:
26663
26664          struct S { short f[3]; } __attribute__ ((aligned (8)));
26665          typedef int more_aligned_int __attribute__ ((aligned (8)));
26666
26667     force the compiler to ensure (as far as it can) that each variable
26668     whose type is 'struct S' or 'more_aligned_int' is allocated and
26669     aligned _at least_ on a 8-byte boundary.  On a SPARC, having all
26670     variables of type 'struct S' aligned to 8-byte boundaries allows
26671     the compiler to use the 'ldd' and 'std' (doubleword load and store)
26672     instructions when copying one variable of type 'struct S' to
26673     another, thus improving run-time efficiency.
26674
26675     Note that the alignment of any given 'struct' or 'union' type is
26676     required by the ISO C standard to be at least a perfect multiple of
26677     the lowest common multiple of the alignments of all of the members
26678     of the 'struct' or 'union' in question.  This means that you _can_
26679     effectively adjust the alignment of a 'struct' or 'union' type by
26680     attaching an 'aligned' attribute to any one of the members of such
26681     a type, but the notation illustrated in the example above is a more
26682     obvious, intuitive, and readable way to request the compiler to
26683     adjust the alignment of an entire 'struct' or 'union' type.
26684
26685     As in the preceding example, you can explicitly specify the
26686     alignment (in bytes) that you wish the compiler to use for a given
26687     'struct' or 'union' type.  Alternatively, you can leave out the
26688     alignment factor and just ask the compiler to align a type to the
26689     maximum useful alignment for the target machine you are compiling
26690     for.  For example, you could write:
26691
26692          struct S { short f[3]; } __attribute__ ((aligned));
26693
26694     Whenever you leave out the alignment factor in an 'aligned'
26695     attribute specification, the compiler automatically sets the
26696     alignment for the type to the largest alignment that is ever used
26697     for any data type on the target machine you are compiling for.
26698     Doing this can often make copy operations more efficient, because
26699     the compiler can use whatever instructions copy the biggest chunks
26700     of memory when performing copies to or from the variables that have
26701     types that you have aligned this way.
26702
26703     In the example above, if the size of each 'short' is 2 bytes, then
26704     the size of the entire 'struct S' type is 6 bytes.  The smallest
26705     power of two that is greater than or equal to that is 8, so the
26706     compiler sets the alignment for the entire 'struct S' type to 8
26707     bytes.
26708
26709     Note that although you can ask the compiler to select a
26710     time-efficient alignment for a given type and then declare only
26711     individual stand-alone objects of that type, the compiler's ability
26712     to select a time-efficient alignment is primarily useful only when
26713     you plan to create arrays of variables having the relevant
26714     (efficiently aligned) type.  If you declare or use arrays of
26715     variables of an efficiently-aligned type, then it is likely that
26716     your program also does pointer arithmetic (or subscripting, which
26717     amounts to the same thing) on pointers to the relevant type, and
26718     the code that the compiler generates for these pointer arithmetic
26719     operations is often more efficient for efficiently-aligned types
26720     than for other types.
26721
26722     The 'aligned' attribute can only increase the alignment; but you
26723     can decrease it by specifying 'packed' as well.  See below.
26724
26725     Note that the effectiveness of 'aligned' attributes may be limited
26726     by inherent limitations in your linker.  On many systems, the
26727     linker is only able to arrange for variables to be aligned up to a
26728     certain maximum alignment.  (For some linkers, the maximum
26729     supported alignment may be very very small.)  If your linker is
26730     only able to align variables up to a maximum of 8-byte alignment,
26731     then specifying 'aligned(16)' in an '__attribute__' still only
26732     provides you with 8-byte alignment.  See your linker documentation
26733     for further information.
26734
26735'packed'
26736     This attribute, attached to 'struct' or 'union' type definition,
26737     specifies that each member (other than zero-width bit-fields) of
26738     the structure or union is placed to minimize the memory required.
26739     When attached to an 'enum' definition, it indicates that the
26740     smallest integral type should be used.
26741
26742     Specifying this attribute for 'struct' and 'union' types is
26743     equivalent to specifying the 'packed' attribute on each of the
26744     structure or union members.  Specifying the '-fshort-enums' flag on
26745     the line is equivalent to specifying the 'packed' attribute on all
26746     'enum' definitions.
26747
26748     In the following example 'struct my_packed_struct''s members are
26749     packed closely together, but the internal layout of its 's' member
26750     is not packed--to do that, 'struct my_unpacked_struct' needs to be
26751     packed too.
26752
26753          struct my_unpacked_struct
26754           {
26755              char c;
26756              int i;
26757           };
26758
26759          struct __attribute__ ((__packed__)) my_packed_struct
26760            {
26761               char c;
26762               int  i;
26763               struct my_unpacked_struct s;
26764            };
26765
26766     You may only specify this attribute on the definition of an 'enum',
26767     'struct' or 'union', not on a 'typedef' that does not also define
26768     the enumerated type, structure or union.
26769
26770'transparent_union'
26771     This attribute, attached to a 'union' type definition, indicates
26772     that any function parameter having that union type causes calls to
26773     that function to be treated in a special way.
26774
26775     First, the argument corresponding to a transparent union type can
26776     be of any type in the union; no cast is required.  Also, if the
26777     union contains a pointer type, the corresponding argument can be a
26778     null pointer constant or a void pointer expression; and if the
26779     union contains a void pointer type, the corresponding argument can
26780     be any pointer expression.  If the union member type is a pointer,
26781     qualifiers like 'const' on the referenced type must be respected,
26782     just as with normal pointer conversions.
26783
26784     Second, the argument is passed to the function using the calling
26785     conventions of the first member of the transparent union, not the
26786     calling conventions of the union itself.  All members of the union
26787     must have the same machine representation; this is necessary for
26788     this argument passing to work properly.
26789
26790     Transparent unions are designed for library functions that have
26791     multiple interfaces for compatibility reasons.  For example,
26792     suppose the 'wait' function must accept either a value of type 'int
26793     *' to comply with POSIX, or a value of type 'union wait *' to
26794     comply with the 4.1BSD interface.  If 'wait''s parameter were 'void
26795     *', 'wait' would accept both kinds of arguments, but it would also
26796     accept any other pointer type and this would make argument type
26797     checking less useful.  Instead, '<sys/wait.h>' might define the
26798     interface as follows:
26799
26800          typedef union __attribute__ ((__transparent_union__))
26801            {
26802              int *__ip;
26803              union wait *__up;
26804            } wait_status_ptr_t;
26805
26806          pid_t wait (wait_status_ptr_t);
26807
26808     This interface allows either 'int *' or 'union wait *' arguments to
26809     be passed, using the 'int *' calling convention.  The program can
26810     call 'wait' with arguments of either type:
26811
26812          int w1 () { int w; return wait (&w); }
26813          int w2 () { union wait w; return wait (&w); }
26814
26815     With this interface, 'wait''s implementation might look like this:
26816
26817          pid_t wait (wait_status_ptr_t p)
26818          {
26819            return waitpid (-1, p.__ip, 0);
26820          }
26821
26822'unused'
26823     When attached to a type (including a 'union' or a 'struct'), this
26824     attribute means that variables of that type are meant to appear
26825     possibly unused.  GCC does not produce a warning for any variables
26826     of that type, even if the variable appears to do nothing.  This is
26827     often the case with lock or thread classes, which are usually
26828     defined and then not referenced, but contain constructors and
26829     destructors that have nontrivial bookkeeping functions.
26830
26831'deprecated'
26832'deprecated (MSG)'
26833     The 'deprecated' attribute results in a warning if the type is used
26834     anywhere in the source file.  This is useful when identifying types
26835     that are expected to be removed in a future version of a program.
26836     If possible, the warning also includes the location of the
26837     declaration of the deprecated type, to enable users to easily find
26838     further information about why the type is deprecated, or what they
26839     should do instead.  Note that the warnings only occur for uses and
26840     then only if the type is being applied to an identifier that itself
26841     is not being declared as deprecated.
26842
26843          typedef int T1 __attribute__ ((deprecated));
26844          T1 x;
26845          typedef T1 T2;
26846          T2 y;
26847          typedef T1 T3 __attribute__ ((deprecated));
26848          T3 z __attribute__ ((deprecated));
26849
26850     results in a warning on line 2 and 3 but not lines 4, 5, or 6.  No
26851     warning is issued for line 4 because T2 is not explicitly
26852     deprecated.  Line 5 has no warning because T3 is explicitly
26853     deprecated.  Similarly for line 6.  The optional MSG argument,
26854     which must be a string, is printed in the warning if present.
26855
26856     The 'deprecated' attribute can also be used for functions and
26857     variables (*note Function Attributes::, *note Variable
26858     Attributes::.)
26859
26860'may_alias'
26861     Accesses through pointers to types with this attribute are not
26862     subject to type-based alias analysis, but are instead assumed to be
26863     able to alias any other type of objects.  In the context of section
26864     6.5 paragraph 7 of the C99 standard, an lvalue expression
26865     dereferencing such a pointer is treated like having a character
26866     type.  See '-fstrict-aliasing' for more information on aliasing
26867     issues.  This extension exists to support some vector APIs, in
26868     which pointers to one vector type are permitted to alias pointers
26869     to a different vector type.
26870
26871     Note that an object of a type with this attribute does not have any
26872     special semantics.
26873
26874     Example of use:
26875
26876          typedef short __attribute__((__may_alias__)) short_a;
26877
26878          int
26879          main (void)
26880          {
26881            int a = 0x12345678;
26882            short_a *b = (short_a *) &a;
26883
26884            b[1] = 0;
26885
26886            if (a == 0x12345678)
26887              abort();
26888
26889            exit(0);
26890          }
26891
26892     If you replaced 'short_a' with 'short' in the variable declaration,
26893     the above program would abort when compiled with
26894     '-fstrict-aliasing', which is on by default at '-O2' or above in
26895     recent GCC versions.
26896
26897'visibility'
26898     In C++, attribute visibility (*note Function Attributes::) can also
26899     be applied to class, struct, union and enum types.  Unlike other
26900     type attributes, the attribute must appear between the initial
26901     keyword and the name of the type; it cannot appear after the body
26902     of the type.
26903
26904     Note that the type visibility is applied to vague linkage entities
26905     associated with the class (vtable, typeinfo node, etc.).  In
26906     particular, if a class is thrown as an exception in one shared
26907     object and caught in another, the class must have default
26908     visibility.  Otherwise the two shared objects are unable to use the
26909     same typeinfo node and exception handling will break.
26910
26911 To specify multiple attributes, separate them by commas within the
26912double parentheses: for example, '__attribute__ ((aligned (16),
26913packed))'.
26914
269156.37.1 ARM Type Attributes
26916--------------------------
26917
26918On those ARM targets that support 'dllimport' (such as Symbian OS), you
26919can use the 'notshared' attribute to indicate that the virtual table and
26920other similar data for a class should not be exported from a DLL.  For
26921example:
26922
26923     class __declspec(notshared) C {
26924     public:
26925       __declspec(dllimport) C();
26926       virtual void f();
26927     }
26928
26929     __declspec(dllexport)
26930     C::C() {}
26931
26932In this code, 'C::C' is exported from the current DLL, but the virtual
26933table for 'C' is not exported.  (You can use '__attribute__' instead of
26934'__declspec' if you prefer, but most Symbian OS code uses '__declspec'.)
26935
269366.37.2 MeP Type Attributes
26937--------------------------
26938
26939Many of the MeP variable attributes may be applied to types as well.
26940Specifically, the 'based', 'tiny', 'near', and 'far' attributes may be
26941applied to either.  The 'io' and 'cb' attributes may not be applied to
26942types.
26943
269446.37.3 i386 Type Attributes
26945---------------------------
26946
26947Two attributes are currently defined for i386 configurations:
26948'ms_struct' and 'gcc_struct'.
26949
26950'ms_struct'
26951'gcc_struct'
26952
26953     If 'packed' is used on a structure, or if bit-fields are used it
26954     may be that the Microsoft ABI packs them differently than GCC
26955     normally packs them.  Particularly when moving packed data between
26956     functions compiled with GCC and the native Microsoft compiler
26957     (either via function call or as data in a file), it may be
26958     necessary to access either format.
26959
26960     Currently '-m[no-]ms-bitfields' is provided for the Microsoft
26961     Windows X86 compilers to match the native Microsoft compiler.
26962
269636.37.4 PowerPC Type Attributes
26964------------------------------
26965
26966Three attributes currently are defined for PowerPC configurations:
26967'altivec', 'ms_struct' and 'gcc_struct'.
26968
26969 For full documentation of the 'ms_struct' and 'gcc_struct' attributes
26970please see the documentation in *note i386 Type Attributes::.
26971
26972 The 'altivec' attribute allows one to declare AltiVec vector data types
26973supported by the AltiVec Programming Interface Manual.  The attribute
26974requires an argument to specify one of three vector types: 'vector__',
26975'pixel__' (always followed by unsigned short), and 'bool__' (always
26976followed by unsigned).
26977
26978     __attribute__((altivec(vector__)))
26979     __attribute__((altivec(pixel__))) unsigned short
26980     __attribute__((altivec(bool__))) unsigned
26981
26982 These attributes mainly are intended to support the '__vector',
26983'__pixel', and '__bool' AltiVec keywords.
26984
269856.37.5 SPU Type Attributes
26986--------------------------
26987
26988The SPU supports the 'spu_vector' attribute for types.  This attribute
26989allows one to declare vector data types supported by the
26990Sony/Toshiba/IBM SPU Language Extensions Specification.  It is intended
26991to support the '__vector' keyword.
26992
26993
26994File: gcc.info,  Node: Alignment,  Next: Inline,  Prev: Type Attributes,  Up: C Extensions
26995
269966.38 Inquiring on Alignment of Types or Variables
26997=================================================
26998
26999The keyword '__alignof__' allows you to inquire about how an object is
27000aligned, or the minimum alignment usually required by a type.  Its
27001syntax is just like 'sizeof'.
27002
27003 For example, if the target machine requires a 'double' value to be
27004aligned on an 8-byte boundary, then '__alignof__ (double)' is 8.  This
27005is true on many RISC machines.  On more traditional machine designs,
27006'__alignof__ (double)' is 4 or even 2.
27007
27008 Some machines never actually require alignment; they allow reference to
27009any data type even at an odd address.  For these machines, '__alignof__'
27010reports the smallest alignment that GCC gives the data type, usually as
27011mandated by the target ABI.
27012
27013 If the operand of '__alignof__' is an lvalue rather than a type, its
27014value is the required alignment for its type, taking into account any
27015minimum alignment specified with GCC's '__attribute__' extension (*note
27016Variable Attributes::).  For example, after this declaration:
27017
27018     struct foo { int x; char y; } foo1;
27019
27020the value of '__alignof__ (foo1.y)' is 1, even though its actual
27021alignment is probably 2 or 4, the same as '__alignof__ (int)'.
27022
27023 It is an error to ask for the alignment of an incomplete type.
27024
27025
27026File: gcc.info,  Node: Inline,  Next: Volatiles,  Prev: Alignment,  Up: C Extensions
27027
270286.39 An Inline Function is As Fast As a Macro
27029=============================================
27030
27031By declaring a function inline, you can direct GCC to make calls to that
27032function faster.  One way GCC can achieve this is to integrate that
27033function's code into the code for its callers.  This makes execution
27034faster by eliminating the function-call overhead; in addition, if any of
27035the actual argument values are constant, their known values may permit
27036simplifications at compile time so that not all of the inline function's
27037code needs to be included.  The effect on code size is less predictable;
27038object code may be larger or smaller with function inlining, depending
27039on the particular case.  You can also direct GCC to try to integrate all
27040"simple enough" functions into their callers with the option
27041'-finline-functions'.
27042
27043 GCC implements three different semantics of declaring a function
27044inline.  One is available with '-std=gnu89' or '-fgnu89-inline' or when
27045'gnu_inline' attribute is present on all inline declarations, another
27046when '-std=c99', '-std=c11', '-std=gnu99' or '-std=gnu11' (without
27047'-fgnu89-inline'), and the third is used when compiling C++.
27048
27049 To declare a function inline, use the 'inline' keyword in its
27050declaration, like this:
27051
27052     static inline int
27053     inc (int *a)
27054     {
27055       return (*a)++;
27056     }
27057
27058 If you are writing a header file to be included in ISO C90 programs,
27059write '__inline__' instead of 'inline'.  *Note Alternate Keywords::.
27060
27061 The three types of inlining behave similarly in two important cases:
27062when the 'inline' keyword is used on a 'static' function, like the
27063example above, and when a function is first declared without using the
27064'inline' keyword and then is defined with 'inline', like this:
27065
27066     extern int inc (int *a);
27067     inline int
27068     inc (int *a)
27069     {
27070       return (*a)++;
27071     }
27072
27073 In both of these common cases, the program behaves the same as if you
27074had not used the 'inline' keyword, except for its speed.
27075
27076 When a function is both inline and 'static', if all calls to the
27077function are integrated into the caller, and the function's address is
27078never used, then the function's own assembler code is never referenced.
27079In this case, GCC does not actually output assembler code for the
27080function, unless you specify the option '-fkeep-inline-functions'.  Some
27081calls cannot be integrated for various reasons (in particular, calls
27082that precede the function's definition cannot be integrated, and neither
27083can recursive calls within the definition).  If there is a nonintegrated
27084call, then the function is compiled to assembler code as usual.  The
27085function must also be compiled as usual if the program refers to its
27086address, because that can't be inlined.
27087
27088 Note that certain usages in a function definition can make it
27089unsuitable for inline substitution.  Among these usages are: variadic
27090functions, use of 'alloca', use of variable-length data types (*note
27091Variable Length::), use of computed goto (*note Labels as Values::), use
27092of nonlocal goto, and nested functions (*note Nested Functions::).
27093Using '-Winline' warns when a function marked 'inline' could not be
27094substituted, and gives the reason for the failure.
27095
27096 As required by ISO C++, GCC considers member functions defined within
27097the body of a class to be marked inline even if they are not explicitly
27098declared with the 'inline' keyword.  You can override this with
27099'-fno-default-inline'; *note Options Controlling C++ Dialect: C++
27100Dialect Options.
27101
27102 GCC does not inline any functions when not optimizing unless you
27103specify the 'always_inline' attribute for the function, like this:
27104
27105     /* Prototype.  */
27106     inline void foo (const char) __attribute__((always_inline));
27107
27108 The remainder of this section is specific to GNU C90 inlining.
27109
27110 When an inline function is not 'static', then the compiler must assume
27111that there may be calls from other source files; since a global symbol
27112can be defined only once in any program, the function must not be
27113defined in the other source files, so the calls therein cannot be
27114integrated.  Therefore, a non-'static' inline function is always
27115compiled on its own in the usual fashion.
27116
27117 If you specify both 'inline' and 'extern' in the function definition,
27118then the definition is used only for inlining.  In no case is the
27119function compiled on its own, not even if you refer to its address
27120explicitly.  Such an address becomes an external reference, as if you
27121had only declared the function, and had not defined it.
27122
27123 This combination of 'inline' and 'extern' has almost the effect of a
27124macro.  The way to use it is to put a function definition in a header
27125file with these keywords, and put another copy of the definition
27126(lacking 'inline' and 'extern') in a library file.  The definition in
27127the header file causes most calls to the function to be inlined.  If any
27128uses of the function remain, they refer to the single copy in the
27129library.
27130
27131
27132File: gcc.info,  Node: Volatiles,  Next: Extended Asm,  Prev: Inline,  Up: C Extensions
27133
271346.40 When is a Volatile Object Accessed?
27135========================================
27136
27137C has the concept of volatile objects.  These are normally accessed by
27138pointers and used for accessing hardware or inter-thread communication.
27139The standard encourages compilers to refrain from optimizations
27140concerning accesses to volatile objects, but leaves it implementation
27141defined as to what constitutes a volatile access.  The minimum
27142requirement is that at a sequence point all previous accesses to
27143volatile objects have stabilized and no subsequent accesses have
27144occurred.  Thus an implementation is free to reorder and combine
27145volatile accesses that occur between sequence points, but cannot do so
27146for accesses across a sequence point.  The use of volatile does not
27147allow you to violate the restriction on updating objects multiple times
27148between two sequence points.
27149
27150 Accesses to non-volatile objects are not ordered with respect to
27151volatile accesses.  You cannot use a volatile object as a memory barrier
27152to order a sequence of writes to non-volatile memory.  For instance:
27153
27154     int *ptr = SOMETHING;
27155     volatile int vobj;
27156     *ptr = SOMETHING;
27157     vobj = 1;
27158
27159Unless *PTR and VOBJ can be aliased, it is not guaranteed that the write
27160to *PTR occurs by the time the update of VOBJ happens.  If you need this
27161guarantee, you must use a stronger memory barrier such as:
27162
27163     int *ptr = SOMETHING;
27164     volatile int vobj;
27165     *ptr = SOMETHING;
27166     asm volatile ("" : : : "memory");
27167     vobj = 1;
27168
27169 A scalar volatile object is read when it is accessed in a void context:
27170
27171     volatile int *src = SOMEVALUE;
27172     *src;
27173
27174 Such expressions are rvalues, and GCC implements this as a read of the
27175volatile object being pointed to.
27176
27177 Assignments are also expressions and have an rvalue.  However when
27178assigning to a scalar volatile, the volatile object is not reread,
27179regardless of whether the assignment expression's rvalue is used or not.
27180If the assignment's rvalue is used, the value is that assigned to the
27181volatile object.  For instance, there is no read of VOBJ in all the
27182following cases:
27183
27184     int obj;
27185     volatile int vobj;
27186     vobj = SOMETHING;
27187     obj = vobj = SOMETHING;
27188     obj ? vobj = ONETHING : vobj = ANOTHERTHING;
27189     obj = (SOMETHING, vobj = ANOTHERTHING);
27190
27191 If you need to read the volatile object after an assignment has
27192occurred, you must use a separate expression with an intervening
27193sequence point.
27194
27195 As bit-fields are not individually addressable, volatile bit-fields may
27196be implicitly read when written to, or when adjacent bit-fields are
27197accessed.  Bit-field operations may be optimized such that adjacent
27198bit-fields are only partially accessed, if they straddle a storage unit
27199boundary.  For these reasons it is unwise to use volatile bit-fields to
27200access hardware.
27201
27202
27203File: gcc.info,  Node: Extended Asm,  Next: Constraints,  Prev: Volatiles,  Up: C Extensions
27204
272056.41 Assembler Instructions with C Expression Operands
27206======================================================
27207
27208In an assembler instruction using 'asm', you can specify the operands of
27209the instruction using C expressions.  This means you need not guess
27210which registers or memory locations contain the data you want to use.
27211
27212 You must specify an assembler instruction template much like what
27213appears in a machine description, plus an operand constraint string for
27214each operand.
27215
27216 For example, here is how to use the 68881's 'fsinx' instruction:
27217
27218     asm ("fsinx %1,%0" : "=f" (result) : "f" (angle));
27219
27220Here 'angle' is the C expression for the input operand while 'result' is
27221that of the output operand.  Each has '"f"' as its operand constraint,
27222saying that a floating-point register is required.  The '=' in '=f'
27223indicates that the operand is an output; all output operands'
27224constraints must use '='.  The constraints use the same language used in
27225the machine description (*note Constraints::).
27226
27227 Each operand is described by an operand-constraint string followed by
27228the C expression in parentheses.  A colon separates the assembler
27229template from the first output operand and another separates the last
27230output operand from the first input, if any.  Commas separate the
27231operands within each group.  The total number of operands is currently
27232limited to 30; this limitation may be lifted in some future version of
27233GCC.
27234
27235 If there are no output operands but there are input operands, you must
27236place two consecutive colons surrounding the place where the output
27237operands would go.
27238
27239 As of GCC version 3.1, it is also possible to specify input and output
27240operands using symbolic names which can be referenced within the
27241assembler code.  These names are specified inside square brackets
27242preceding the constraint string, and can be referenced inside the
27243assembler code using '%[NAME]' instead of a percentage sign followed by
27244the operand number.  Using named operands the above example could look
27245like:
27246
27247     asm ("fsinx %[angle],%[output]"
27248          : [output] "=f" (result)
27249          : [angle] "f" (angle));
27250
27251Note that the symbolic operand names have no relation whatsoever to
27252other C identifiers.  You may use any name you like, even those of
27253existing C symbols, but you must ensure that no two operands within the
27254same assembler construct use the same symbolic name.
27255
27256 Output operand expressions must be lvalues; the compiler can check
27257this.  The input operands need not be lvalues.  The compiler cannot
27258check whether the operands have data types that are reasonable for the
27259instruction being executed.  It does not parse the assembler instruction
27260template and does not know what it means or even whether it is valid
27261assembler input.  The extended 'asm' feature is most often used for
27262machine instructions the compiler itself does not know exist.  If the
27263output expression cannot be directly addressed (for example, it is a
27264bit-field), your constraint must allow a register.  In that case, GCC
27265uses the register as the output of the 'asm', and then stores that
27266register into the output.
27267
27268 The ordinary output operands must be write-only; GCC assumes that the
27269values in these operands before the instruction are dead and need not be
27270generated.  Extended asm supports input-output or read-write operands.
27271Use the constraint character '+' to indicate such an operand and list it
27272with the output operands.
27273
27274 You may, as an alternative, logically split its function into two
27275separate operands, one input operand and one write-only output operand.
27276The connection between them is expressed by constraints that say they
27277need to be in the same location when the instruction executes.  You can
27278use the same C expression for both operands, or different expressions.
27279For example, here we write the (fictitious) 'combine' instruction with
27280'bar' as its read-only source operand and 'foo' as its read-write
27281destination:
27282
27283     asm ("combine %2,%0" : "=r" (foo) : "0" (foo), "g" (bar));
27284
27285The constraint '"0"' for operand 1 says that it must occupy the same
27286location as operand 0.  A number in constraint is allowed only in an
27287input operand and it must refer to an output operand.
27288
27289 Only a number in the constraint can guarantee that one operand is in
27290the same place as another.  The mere fact that 'foo' is the value of
27291both operands is not enough to guarantee that they are in the same place
27292in the generated assembler code.  The following does not work reliably:
27293
27294     asm ("combine %2,%0" : "=r" (foo) : "r" (foo), "g" (bar));
27295
27296 Various optimizations or reloading could cause operands 0 and 1 to be
27297in different registers; GCC knows no reason not to do so.  For example,
27298the compiler might find a copy of the value of 'foo' in one register and
27299use it for operand 1, but generate the output operand 0 in a different
27300register (copying it afterward to 'foo''s own address).  Of course,
27301since the register for operand 1 is not even mentioned in the assembler
27302code, the result will not work, but GCC can't tell that.
27303
27304 As of GCC version 3.1, one may write '[NAME]' instead of the operand
27305number for a matching constraint.  For example:
27306
27307     asm ("cmoveq %1,%2,%[result]"
27308          : [result] "=r"(result)
27309          : "r" (test), "r"(new), "[result]"(old));
27310
27311 Sometimes you need to make an 'asm' operand be a specific register, but
27312there's no matching constraint letter for that register _by itself_.  To
27313force the operand into that register, use a local variable for the
27314operand and specify the register in the variable declaration.  *Note
27315Explicit Reg Vars::.  Then for the 'asm' operand, use any register
27316constraint letter that matches the register:
27317
27318     register int *p1 asm ("r0") = ...;
27319     register int *p2 asm ("r1") = ...;
27320     register int *result asm ("r0");
27321     asm ("sysint" : "=r" (result) : "0" (p1), "r" (p2));
27322
27323 In the above example, beware that a register that is call-clobbered by
27324the target ABI will be overwritten by any function call in the
27325assignment, including library calls for arithmetic operators.  Also a
27326register may be clobbered when generating some operations, like variable
27327shift, memory copy or memory move on x86.  Assuming it is a
27328call-clobbered register, this may happen to 'r0' above by the assignment
27329to 'p2'.  If you have to use such a register, use temporary variables
27330for expressions between the register assignment and use:
27331
27332     int t1 = ...;
27333     register int *p1 asm ("r0") = ...;
27334     register int *p2 asm ("r1") = t1;
27335     register int *result asm ("r0");
27336     asm ("sysint" : "=r" (result) : "0" (p1), "r" (p2));
27337
27338 Some instructions clobber specific hard registers.  To describe this,
27339write a third colon after the input operands, followed by the names of
27340the clobbered hard registers (given as strings).  Here is a realistic
27341example for the VAX:
27342
27343     asm volatile ("movc3 %0,%1,%2"
27344                   : /* no outputs */
27345                   : "g" (from), "g" (to), "g" (count)
27346                   : "r0", "r1", "r2", "r3", "r4", "r5");
27347
27348 You may not write a clobber description in a way that overlaps with an
27349input or output operand.  For example, you may not have an operand
27350describing a register class with one member if you mention that register
27351in the clobber list.  Variables declared to live in specific registers
27352(*note Explicit Reg Vars::), and used as asm input or output operands
27353must have no part mentioned in the clobber description.  There is no way
27354for you to specify that an input operand is modified without also
27355specifying it as an output operand.  Note that if all the output
27356operands you specify are for this purpose (and hence unused), you then
27357also need to specify 'volatile' for the 'asm' construct, as described
27358below, to prevent GCC from deleting the 'asm' statement as unused.
27359
27360 If you refer to a particular hardware register from the assembler code,
27361you probably have to list the register after the third colon to tell the
27362compiler the register's value is modified.  In some assemblers, the
27363register names begin with '%'; to produce one '%' in the assembler code,
27364you must write '%%' in the input.
27365
27366 If your assembler instruction can alter the condition code register,
27367add 'cc' to the list of clobbered registers.  GCC on some machines
27368represents the condition codes as a specific hardware register; 'cc'
27369serves to name this register.  On other machines, the condition code is
27370handled differently, and specifying 'cc' has no effect.  But it is valid
27371no matter what the machine.
27372
27373 If your assembler instructions access memory in an unpredictable
27374fashion, add 'memory' to the list of clobbered registers.  This causes
27375GCC to not keep memory values cached in registers across the assembler
27376instruction and not optimize stores or loads to that memory.  You also
27377should add the 'volatile' keyword if the memory affected is not listed
27378in the inputs or outputs of the 'asm', as the 'memory' clobber does not
27379count as a side-effect of the 'asm'.  If you know how large the accessed
27380memory is, you can add it as input or output but if this is not known,
27381you should add 'memory'.  As an example, if you access ten bytes of a
27382string, you can use a memory input like:
27383
27384     {"m"( ({ struct { char x[10]; } *p = (void *)ptr ; *p; }) )}.
27385
27386 Note that in the following example the memory input is necessary,
27387otherwise GCC might optimize the store to 'x' away:
27388     int foo ()
27389     {
27390       int x = 42;
27391       int *y = &x;
27392       int result;
27393       asm ("magic stuff accessing an 'int' pointed to by '%1'"
27394            : "=&d" (result) : "a" (y), "m" (*y));
27395       return result;
27396     }
27397
27398 You can put multiple assembler instructions together in a single 'asm'
27399template, separated by the characters normally used in assembly code for
27400the system.  A combination that works in most places is a newline to
27401break the line, plus a tab character to move to the instruction field
27402(written as '\n\t').  Sometimes semicolons can be used, if the assembler
27403allows semicolons as a line-breaking character.  Note that some
27404assembler dialects use semicolons to start a comment.  The input
27405operands are guaranteed not to use any of the clobbered registers, and
27406neither do the output operands' addresses, so you can read and write the
27407clobbered registers as many times as you like.  Here is an example of
27408multiple instructions in a template; it assumes the subroutine '_foo'
27409accepts arguments in registers 9 and 10:
27410
27411     asm ("movl %0,r9\n\tmovl %1,r10\n\tcall _foo"
27412          : /* no outputs */
27413          : "g" (from), "g" (to)
27414          : "r9", "r10");
27415
27416 Unless an output operand has the '&' constraint modifier, GCC may
27417allocate it in the same register as an unrelated input operand, on the
27418assumption the inputs are consumed before the outputs are produced.
27419This assumption may be false if the assembler code actually consists of
27420more than one instruction.  In such a case, use '&' for each output
27421operand that may not overlap an input.  *Note Modifiers::.
27422
27423 If you want to test the condition code produced by an assembler
27424instruction, you must include a branch and a label in the 'asm'
27425construct, as follows:
27426
27427     asm ("clr %0\n\tfrob %1\n\tbeq 0f\n\tmov #1,%0\n0:"
27428          : "g" (result)
27429          : "g" (input));
27430
27431This assumes your assembler supports local labels, as the GNU assembler
27432and most Unix assemblers do.
27433
27434 Speaking of labels, jumps from one 'asm' to another are not supported.
27435The compiler's optimizers do not know about these jumps, and therefore
27436they cannot take account of them when deciding how to optimize.  *Note
27437Extended asm with goto::.
27438
27439 Usually the most convenient way to use these 'asm' instructions is to
27440encapsulate them in macros that look like functions.  For example,
27441
27442     #define sin(x)       \
27443     ({ double __value, __arg = (x);   \
27444        asm ("fsinx %1,%0": "=f" (__value): "f" (__arg));  \
27445        __value; })
27446
27447Here the variable '__arg' is used to make sure that the instruction
27448operates on a proper 'double' value, and to accept only those arguments
27449'x' that can convert automatically to a 'double'.
27450
27451 Another way to make sure the instruction operates on the correct data
27452type is to use a cast in the 'asm'.  This is different from using a
27453variable '__arg' in that it converts more different types.  For example,
27454if the desired type is 'int', casting the argument to 'int' accepts a
27455pointer with no complaint, while assigning the argument to an 'int'
27456variable named '__arg' warns about using a pointer unless the caller
27457explicitly casts it.
27458
27459 If an 'asm' has output operands, GCC assumes for optimization purposes
27460the instruction has no side effects except to change the output
27461operands.  This does not mean instructions with a side effect cannot be
27462used, but you must be careful, because the compiler may eliminate them
27463if the output operands aren't used, or move them out of loops, or
27464replace two with one if they constitute a common subexpression.  Also,
27465if your instruction does have a side effect on a variable that otherwise
27466appears not to change, the old value of the variable may be reused later
27467if it happens to be found in a register.
27468
27469 You can prevent an 'asm' instruction from being deleted by writing the
27470keyword 'volatile' after the 'asm'.  For example:
27471
27472     #define get_and_set_priority(new)              \
27473     ({ int __old;                                  \
27474        asm volatile ("get_and_set_priority %0, %1" \
27475                      : "=g" (__old) : "g" (new));  \
27476        __old; })
27477
27478The 'volatile' keyword indicates that the instruction has important
27479side-effects.  GCC does not delete a volatile 'asm' if it is reachable.
27480(The instruction can still be deleted if GCC can prove that control flow
27481never reaches the location of the instruction.)  Note that even a
27482volatile 'asm' instruction can be moved relative to other code,
27483including across jump instructions.  For example, on many targets there
27484is a system register that can be set to control the rounding mode of
27485floating-point operations.  You might try setting it with a volatile
27486'asm', like this PowerPC example:
27487
27488            asm volatile("mtfsf 255,%0" : : "f" (fpenv));
27489            sum = x + y;
27490
27491This does not work reliably, as the compiler may move the addition back
27492before the volatile 'asm'.  To make it work you need to add an
27493artificial dependency to the 'asm' referencing a variable in the code
27494you don't want moved, for example:
27495
27496         asm volatile ("mtfsf 255,%1" : "=X"(sum): "f"(fpenv));
27497         sum = x + y;
27498
27499 Similarly, you can't expect a sequence of volatile 'asm' instructions
27500to remain perfectly consecutive.  If you want consecutive output, use a
27501single 'asm'.  Also, GCC performs some optimizations across a volatile
27502'asm' instruction; GCC does not "forget everything" when it encounters a
27503volatile 'asm' instruction the way some other compilers do.
27504
27505 An 'asm' instruction without any output operands is treated identically
27506to a volatile 'asm' instruction.
27507
27508 It is a natural idea to look for a way to give access to the condition
27509code left by the assembler instruction.  However, when we attempted to
27510implement this, we found no way to make it work reliably.  The problem
27511is that output operands might need reloading, which result in additional
27512following "store" instructions.  On most machines, these instructions
27513alter the condition code before there is time to test it.  This problem
27514doesn't arise for ordinary "test" and "compare" instructions because
27515they don't have any output operands.
27516
27517 For reasons similar to those described above, it is not possible to
27518give an assembler instruction access to the condition code left by
27519previous instructions.
27520
27521 As of GCC version 4.5, 'asm goto' may be used to have the assembly jump
27522to one or more C labels.  In this form, a fifth section after the
27523clobber list contains a list of all C labels to which the assembly may
27524jump.  Each label operand is implicitly self-named.  The 'asm' is also
27525assumed to fall through to the next statement.
27526
27527 This form of 'asm' is restricted to not have outputs.  This is due to a
27528internal restriction in the compiler that control transfer instructions
27529cannot have outputs.  This restriction on 'asm goto' may be lifted in
27530some future version of the compiler.  In the meantime, 'asm goto' may
27531include a memory clobber, and so leave outputs in memory.
27532
27533     int frob(int x)
27534     {
27535       int y;
27536       asm goto ("frob %%r5, %1; jc %l[error]; mov (%2), %%r5"
27537                 : : "r"(x), "r"(&y) : "r5", "memory" : error);
27538       return y;
27539      error:
27540       return -1;
27541     }
27542
27543In this (inefficient) example, the 'frob' instruction sets the carry bit
27544to indicate an error.  The 'jc' instruction detects this and branches to
27545the 'error' label.  Finally, the output of the 'frob' instruction
27546('%r5') is stored into the memory for variable 'y', which is later read
27547by the 'return' statement.
27548
27549     void doit(void)
27550     {
27551       int i = 0;
27552       asm goto ("mfsr %%r1, 123; jmp %%r1;"
27553                 ".pushsection doit_table;"
27554                 ".long %l0, %l1, %l2, %l3;"
27555                 ".popsection"
27556                 : : : "r1" : label1, label2, label3, label4);
27557       __builtin_unreachable ();
27558
27559      label1:
27560       f1();
27561       return;
27562      label2:
27563       f2();
27564       return;
27565      label3:
27566       i = 1;
27567      label4:
27568       f3(i);
27569     }
27570
27571In this (also inefficient) example, the 'mfsr' instruction reads an
27572address from some out-of-band machine register, and the following 'jmp'
27573instruction branches to that address.  The address read by the 'mfsr'
27574instruction is assumed to have been previously set via some
27575application-specific mechanism to be one of the four values stored in
27576the 'doit_table' section.  Finally, the 'asm' is followed by a call to
27577'__builtin_unreachable' to indicate that the 'asm' does not in fact fall
27578through.
27579
27580     #define TRACE1(NUM)                         \
27581       do {                                      \
27582         asm goto ("0: nop;"                     \
27583                   ".pushsection trace_table;"   \
27584                   ".long 0b, %l0;"              \
27585                   ".popsection"                 \
27586                   : : : : trace#NUM);           \
27587         if (0) { trace#NUM: trace(); }          \
27588       } while (0)
27589     #define TRACE  TRACE1(__COUNTER__)
27590
27591In this example (which in fact inspired the 'asm goto' feature) we want
27592on rare occasions to call the 'trace' function; on other occasions we'd
27593like to keep the overhead to the absolute minimum.  The normal code path
27594consists of a single 'nop' instruction.  However, we record the address
27595of this 'nop' together with the address of a label that calls the
27596'trace' function.  This allows the 'nop' instruction to be patched at
27597run time to be an unconditional branch to the stored label.  It is
27598assumed that an optimizing compiler moves the labeled block out of line,
27599to optimize the fall through path from the 'asm'.
27600
27601 If you are writing a header file that should be includable in ISO C
27602programs, write '__asm__' instead of 'asm'.  *Note Alternate Keywords::.
27603
276046.41.1 Size of an 'asm'
27605-----------------------
27606
27607Some targets require that GCC track the size of each instruction used in
27608order to generate correct code.  Because the final length of an 'asm' is
27609only known by the assembler, GCC must make an estimate as to how big it
27610will be.  The estimate is formed by counting the number of statements in
27611the pattern of the 'asm' and multiplying that by the length of the
27612longest instruction on that processor.  Statements in the 'asm' are
27613identified by newline characters and whatever statement separator
27614characters are supported by the assembler; on most processors this is
27615the ';' character.
27616
27617 Normally, GCC's estimate is perfectly adequate to ensure that correct
27618code is generated, but it is possible to confuse the compiler if you use
27619pseudo instructions or assembler macros that expand into multiple real
27620instructions or if you use assembler directives that expand to more
27621space in the object file than is needed for a single instruction.  If
27622this happens then the assembler produces a diagnostic saying that a
27623label is unreachable.
27624
276256.41.2 i386 floating-point asm operands
27626---------------------------------------
27627
27628On i386 targets, there are several rules on the usage of stack-like
27629registers in the operands of an 'asm'.  These rules apply only to the
27630operands that are stack-like registers:
27631
27632  1. Given a set of input registers that die in an 'asm', it is
27633     necessary to know which are implicitly popped by the 'asm', and
27634     which must be explicitly popped by GCC.
27635
27636     An input register that is implicitly popped by the 'asm' must be
27637     explicitly clobbered, unless it is constrained to match an output
27638     operand.
27639
27640  2. For any input register that is implicitly popped by an 'asm', it is
27641     necessary to know how to adjust the stack to compensate for the
27642     pop.  If any non-popped input is closer to the top of the reg-stack
27643     than the implicitly popped register, it would not be possible to
27644     know what the stack looked like--it's not clear how the rest of the
27645     stack "slides up".
27646
27647     All implicitly popped input registers must be closer to the top of
27648     the reg-stack than any input that is not implicitly popped.
27649
27650     It is possible that if an input dies in an 'asm', the compiler
27651     might use the input register for an output reload.  Consider this
27652     example:
27653
27654          asm ("foo" : "=t" (a) : "f" (b));
27655
27656     This code says that input 'b' is not popped by the 'asm', and that
27657     the 'asm' pushes a result onto the reg-stack, i.e., the stack is
27658     one deeper after the 'asm' than it was before.  But, it is possible
27659     that reload may think that it can use the same register for both
27660     the input and the output.
27661
27662     To prevent this from happening, if any input operand uses the 'f'
27663     constraint, all output register constraints must use the '&'
27664     early-clobber modifier.
27665
27666     The example above would be correctly written as:
27667
27668          asm ("foo" : "=&t" (a) : "f" (b));
27669
27670  3. Some operands need to be in particular places on the stack.  All
27671     output operands fall in this category--GCC has no other way to know
27672     which registers the outputs appear in unless you indicate this in
27673     the constraints.
27674
27675     Output operands must specifically indicate which register an output
27676     appears in after an 'asm'.  '=f' is not allowed: the operand
27677     constraints must select a class with a single register.
27678
27679  4. Output operands may not be "inserted" between existing stack
27680     registers.  Since no 387 opcode uses a read/write operand, all
27681     output operands are dead before the 'asm', and are pushed by the
27682     'asm'.  It makes no sense to push anywhere but the top of the
27683     reg-stack.
27684
27685     Output operands must start at the top of the reg-stack: output
27686     operands may not "skip" a register.
27687
27688  5. Some 'asm' statements may need extra stack space for internal
27689     calculations.  This can be guaranteed by clobbering stack registers
27690     unrelated to the inputs and outputs.
27691
27692 Here are a couple of reasonable 'asm's to want to write.  This 'asm'
27693takes one input, which is internally popped, and produces two outputs.
27694
27695     asm ("fsincos" : "=t" (cos), "=u" (sin) : "0" (inp));
27696
27697This 'asm' takes two inputs, which are popped by the 'fyl2xp1' opcode,
27698and replaces them with one output.  The 'st(1)' clobber is necessary for
27699the compiler to know that 'fyl2xp1' pops both inputs.
27700
27701     asm ("fyl2xp1" : "=t" (result) : "0" (x), "u" (y) : "st(1)");
27702
27703
27704File: gcc.info,  Node: Constraints,  Next: Asm Labels,  Prev: Extended Asm,  Up: C Extensions
27705
277066.42 Constraints for 'asm' Operands
27707===================================
27708
27709Here are specific details on what constraint letters you can use with
27710'asm' operands.  Constraints can say whether an operand may be in a
27711register, and which kinds of register; whether the operand can be a
27712memory reference, and which kinds of address; whether the operand may be
27713an immediate constant, and which possible values it may have.
27714Constraints can also require two operands to match.  Side-effects aren't
27715allowed in operands of inline 'asm', unless '<' or '>' constraints are
27716used, because there is no guarantee that the side-effects will happen
27717exactly once in an instruction that can update the addressing register.
27718
27719* Menu:
27720
27721* Simple Constraints::  Basic use of constraints.
27722* Multi-Alternative::   When an insn has two alternative constraint-patterns.
27723* Modifiers::           More precise control over effects of constraints.
27724* Machine Constraints:: Special constraints for some particular machines.
27725
27726
27727File: gcc.info,  Node: Simple Constraints,  Next: Multi-Alternative,  Up: Constraints
27728
277296.42.1 Simple Constraints
27730-------------------------
27731
27732The simplest kind of constraint is a string full of letters, each of
27733which describes one kind of operand that is permitted.  Here are the
27734letters that are allowed:
27735
27736whitespace
27737     Whitespace characters are ignored and can be inserted at any
27738     position except the first.  This enables each alternative for
27739     different operands to be visually aligned in the machine
27740     description even if they have different number of constraints and
27741     modifiers.
27742
27743'm'
27744     A memory operand is allowed, with any kind of address that the
27745     machine supports in general.  Note that the letter used for the
27746     general memory constraint can be re-defined by a back end using the
27747     'TARGET_MEM_CONSTRAINT' macro.
27748
27749'o'
27750     A memory operand is allowed, but only if the address is
27751     "offsettable".  This means that adding a small integer (actually,
27752     the width in bytes of the operand, as determined by its machine
27753     mode) may be added to the address and the result is also a valid
27754     memory address.
27755
27756     For example, an address which is constant is offsettable; so is an
27757     address that is the sum of a register and a constant (as long as a
27758     slightly larger constant is also within the range of
27759     address-offsets supported by the machine); but an autoincrement or
27760     autodecrement address is not offsettable.  More complicated
27761     indirect/indexed addresses may or may not be offsettable depending
27762     on the other addressing modes that the machine supports.
27763
27764     Note that in an output operand which can be matched by another
27765     operand, the constraint letter 'o' is valid only when accompanied
27766     by both '<' (if the target machine has predecrement addressing) and
27767     '>' (if the target machine has preincrement addressing).
27768
27769'V'
27770     A memory operand that is not offsettable.  In other words, anything
27771     that would fit the 'm' constraint but not the 'o' constraint.
27772
27773'<'
27774     A memory operand with autodecrement addressing (either predecrement
27775     or postdecrement) is allowed.  In inline 'asm' this constraint is
27776     only allowed if the operand is used exactly once in an instruction
27777     that can handle the side-effects.  Not using an operand with '<' in
27778     constraint string in the inline 'asm' pattern at all or using it in
27779     multiple instructions isn't valid, because the side-effects
27780     wouldn't be performed or would be performed more than once.
27781     Furthermore, on some targets the operand with '<' in constraint
27782     string must be accompanied by special instruction suffixes like
27783     '%U0' instruction suffix on PowerPC or '%P0' on IA-64.
27784
27785'>'
27786     A memory operand with autoincrement addressing (either preincrement
27787     or postincrement) is allowed.  In inline 'asm' the same
27788     restrictions as for '<' apply.
27789
27790'r'
27791     A register operand is allowed provided that it is in a general
27792     register.
27793
27794'i'
27795     An immediate integer operand (one with constant value) is allowed.
27796     This includes symbolic constants whose values will be known only at
27797     assembly time or later.
27798
27799'n'
27800     An immediate integer operand with a known numeric value is allowed.
27801     Many systems cannot support assembly-time constants for operands
27802     less than a word wide.  Constraints for these operands should use
27803     'n' rather than 'i'.
27804
27805'I', 'J', 'K', ... 'P'
27806     Other letters in the range 'I' through 'P' may be defined in a
27807     machine-dependent fashion to permit immediate integer operands with
27808     explicit integer values in specified ranges.  For example, on the
27809     68000, 'I' is defined to stand for the range of values 1 to 8.
27810     This is the range permitted as a shift count in the shift
27811     instructions.
27812
27813'E'
27814     An immediate floating operand (expression code 'const_double') is
27815     allowed, but only if the target floating point format is the same
27816     as that of the host machine (on which the compiler is running).
27817
27818'F'
27819     An immediate floating operand (expression code 'const_double' or
27820     'const_vector') is allowed.
27821
27822'G', 'H'
27823     'G' and 'H' may be defined in a machine-dependent fashion to permit
27824     immediate floating operands in particular ranges of values.
27825
27826's'
27827     An immediate integer operand whose value is not an explicit integer
27828     is allowed.
27829
27830     This might appear strange; if an insn allows a constant operand
27831     with a value not known at compile time, it certainly must allow any
27832     known value.  So why use 's' instead of 'i'?  Sometimes it allows
27833     better code to be generated.
27834
27835     For example, on the 68000 in a fullword instruction it is possible
27836     to use an immediate operand; but if the immediate value is between
27837     -128 and 127, better code results from loading the value into a
27838     register and using the register.  This is because the load into the
27839     register can be done with a 'moveq' instruction.  We arrange for
27840     this to happen by defining the letter 'K' to mean "any integer
27841     outside the range -128 to 127", and then specifying 'Ks' in the
27842     operand constraints.
27843
27844'g'
27845     Any register, memory or immediate integer operand is allowed,
27846     except for registers that are not general registers.
27847
27848'X'
27849     Any operand whatsoever is allowed.
27850
27851'0', '1', '2', ... '9'
27852     An operand that matches the specified operand number is allowed.
27853     If a digit is used together with letters within the same
27854     alternative, the digit should come last.
27855
27856     This number is allowed to be more than a single digit.  If multiple
27857     digits are encountered consecutively, they are interpreted as a
27858     single decimal integer.  There is scant chance for ambiguity, since
27859     to-date it has never been desirable that '10' be interpreted as
27860     matching either operand 1 _or_ operand 0.  Should this be desired,
27861     one can use multiple alternatives instead.
27862
27863     This is called a "matching constraint" and what it really means is
27864     that the assembler has only a single operand that fills two roles
27865     which 'asm' distinguishes.  For example, an add instruction uses
27866     two input operands and an output operand, but on most CISC machines
27867     an add instruction really has only two operands, one of them an
27868     input-output operand:
27869
27870          addl #35,r12
27871
27872     Matching constraints are used in these circumstances.  More
27873     precisely, the two operands that match must include one input-only
27874     operand and one output-only operand.  Moreover, the digit must be a
27875     smaller number than the number of the operand that uses it in the
27876     constraint.
27877
27878'p'
27879     An operand that is a valid memory address is allowed.  This is for
27880     "load address" and "push address" instructions.
27881
27882     'p' in the constraint must be accompanied by 'address_operand' as
27883     the predicate in the 'match_operand'.  This predicate interprets
27884     the mode specified in the 'match_operand' as the mode of the memory
27885     reference for which the address would be valid.
27886
27887OTHER-LETTERS
27888     Other letters can be defined in machine-dependent fashion to stand
27889     for particular classes of registers or other arbitrary operand
27890     types.  'd', 'a' and 'f' are defined on the 68000/68020 to stand
27891     for data, address and floating point registers.
27892
27893
27894File: gcc.info,  Node: Multi-Alternative,  Next: Modifiers,  Prev: Simple Constraints,  Up: Constraints
27895
278966.42.2 Multiple Alternative Constraints
27897---------------------------------------
27898
27899Sometimes a single instruction has multiple alternative sets of possible
27900operands.  For example, on the 68000, a logical-or instruction can
27901combine register or an immediate value into memory, or it can combine
27902any kind of operand into a register; but it cannot combine one memory
27903location into another.
27904
27905 These constraints are represented as multiple alternatives.  An
27906alternative can be described by a series of letters for each operand.
27907The overall constraint for an operand is made from the letters for this
27908operand from the first alternative, a comma, the letters for this
27909operand from the second alternative, a comma, and so on until the last
27910alternative.
27911
27912 If all the operands fit any one alternative, the instruction is valid.
27913Otherwise, for each alternative, the compiler counts how many
27914instructions must be added to copy the operands so that that alternative
27915applies.  The alternative requiring the least copying is chosen.  If two
27916alternatives need the same amount of copying, the one that comes first
27917is chosen.  These choices can be altered with the '?' and '!'
27918characters:
27919
27920'?'
27921     Disparage slightly the alternative that the '?' appears in, as a
27922     choice when no alternative applies exactly.  The compiler regards
27923     this alternative as one unit more costly for each '?' that appears
27924     in it.
27925
27926'!'
27927     Disparage severely the alternative that the '!' appears in.  This
27928     alternative can still be used if it fits without reloading, but if
27929     reloading is needed, some other alternative will be used.
27930
27931
27932File: gcc.info,  Node: Modifiers,  Next: Machine Constraints,  Prev: Multi-Alternative,  Up: Constraints
27933
279346.42.3 Constraint Modifier Characters
27935-------------------------------------
27936
27937Here are constraint modifier characters.
27938
27939'='
27940     Means that this operand is write-only for this instruction: the
27941     previous value is discarded and replaced by output data.
27942
27943'+'
27944     Means that this operand is both read and written by the
27945     instruction.
27946
27947     When the compiler fixes up the operands to satisfy the constraints,
27948     it needs to know which operands are inputs to the instruction and
27949     which are outputs from it.  '=' identifies an output; '+'
27950     identifies an operand that is both input and output; all other
27951     operands are assumed to be input only.
27952
27953     If you specify '=' or '+' in a constraint, you put it in the first
27954     character of the constraint string.
27955
27956'&'
27957     Means (in a particular alternative) that this operand is an
27958     "earlyclobber" operand, which is modified before the instruction is
27959     finished using the input operands.  Therefore, this operand may not
27960     lie in a register that is used as an input operand or as part of
27961     any memory address.
27962
27963     '&' applies only to the alternative in which it is written.  In
27964     constraints with multiple alternatives, sometimes one alternative
27965     requires '&' while others do not.  See, for example, the 'movdf'
27966     insn of the 68000.
27967
27968     An input operand can be tied to an earlyclobber operand if its only
27969     use as an input occurs before the early result is written.  Adding
27970     alternatives of this form often allows GCC to produce better code
27971     when only some of the inputs can be affected by the earlyclobber.
27972     See, for example, the 'mulsi3' insn of the ARM.
27973
27974     '&' does not obviate the need to write '='.
27975
27976'%'
27977     Declares the instruction to be commutative for this operand and the
27978     following operand.  This means that the compiler may interchange
27979     the two operands if that is the cheapest way to make all operands
27980     fit the constraints.  GCC can only handle one commutative pair in
27981     an asm; if you use more, the compiler may fail.  Note that you need
27982     not use the modifier if the two alternatives are strictly
27983     identical; this would only waste time in the reload pass.  The
27984     modifier is not operational after register allocation, so the
27985     result of 'define_peephole2' and 'define_split's performed after
27986     reload cannot rely on '%' to make the intended insn match.
27987
27988'#'
27989     Says that all following characters, up to the next comma, are to be
27990     ignored as a constraint.  They are significant only for choosing
27991     register preferences.
27992
27993'*'
27994     Says that the following character should be ignored when choosing
27995     register preferences.  '*' has no effect on the meaning of the
27996     constraint as a constraint, and no effect on reloading.  For LRA
27997     '*' additionally disparages slightly the alternative if the
27998     following character matches the operand.
27999
28000
28001File: gcc.info,  Node: Machine Constraints,  Prev: Modifiers,  Up: Constraints
28002
280036.42.4 Constraints for Particular Machines
28004------------------------------------------
28005
28006Whenever possible, you should use the general-purpose constraint letters
28007in 'asm' arguments, since they will convey meaning more readily to
28008people reading your code.  Failing that, use the constraint letters that
28009usually have very similar meanings across architectures.  The most
28010commonly used constraints are 'm' and 'r' (for memory and
28011general-purpose registers respectively; *note Simple Constraints::), and
28012'I', usually the letter indicating the most common immediate-constant
28013format.
28014
28015 Each architecture defines additional constraints.  These constraints
28016are used by the compiler itself for instruction generation, as well as
28017for 'asm' statements; therefore, some of the constraints are not
28018particularly useful for 'asm'.  Here is a summary of some of the
28019machine-dependent constraints available on some particular machines; it
28020includes both constraints that are useful for 'asm' and constraints that
28021aren't.  The compiler source file mentioned in the table heading for
28022each architecture is the definitive reference for the meanings of that
28023architecture's constraints.
28024
28025_AArch64 family--'config/aarch64/constraints.md'_
28026     'k'
28027          The stack pointer register ('SP')
28028
28029     'w'
28030          Floating point or SIMD vector register
28031
28032     'I'
28033          Integer constant that is valid as an immediate operand in an
28034          'ADD' instruction
28035
28036     'J'
28037          Integer constant that is valid as an immediate operand in a
28038          'SUB' instruction (once negated)
28039
28040     'K'
28041          Integer constant that can be used with a 32-bit logical
28042          instruction
28043
28044     'L'
28045          Integer constant that can be used with a 64-bit logical
28046          instruction
28047
28048     'M'
28049          Integer constant that is valid as an immediate operand in a
28050          32-bit 'MOV' pseudo instruction.  The 'MOV' may be assembled
28051          to one of several different machine instructions depending on
28052          the value
28053
28054     'N'
28055          Integer constant that is valid as an immediate operand in a
28056          64-bit 'MOV' pseudo instruction
28057
28058     'S'
28059          An absolute symbolic address or a label reference
28060
28061     'Y'
28062          Floating point constant zero
28063
28064     'Z'
28065          Integer constant zero
28066
28067     'Ush'
28068          The high part (bits 12 and upwards) of the pc-relative address
28069          of a symbol within 4GB of the instruction
28070
28071     'Q'
28072          A memory address which uses a single base register with no
28073          offset
28074
28075     'Ump'
28076          A memory address suitable for a load/store pair instruction in
28077          SI, DI, SF and DF modes
28078
28079_ARC --'config/arc/constraints.md'_
28080     'q'
28081          Registers usable in ARCompact 16-bit instructions: 'r0'-'r3',
28082          'r12'-'r15'.  This constraint can only match when the '-mq'
28083          option is in effect.
28084
28085     'e'
28086          Registers usable as base-regs of memory addresses in ARCompact
28087          16-bit memory instructions: 'r0'-'r3', 'r12'-'r15', 'sp'.
28088          This constraint can only match when the '-mq' option is in
28089          effect.
28090     'D'
28091          ARC FPX (dpfp) 64-bit registers.  'D0', 'D1'.
28092
28093     'I'
28094          A signed 12-bit integer constant.
28095
28096     'Cal'
28097          constant for arithmetic/logical operations.  This might be any
28098          constant that can be put into a long immediate by the assmbler
28099          or linker without involving a PIC relocation.
28100
28101     'K'
28102          A 3-bit unsigned integer constant.
28103
28104     'L'
28105          A 6-bit unsigned integer constant.
28106
28107     'CnL'
28108          One's complement of a 6-bit unsigned integer constant.
28109
28110     'CmL'
28111          Two's complement of a 6-bit unsigned integer constant.
28112
28113     'M'
28114          A 5-bit unsigned integer constant.
28115
28116     'O'
28117          A 7-bit unsigned integer constant.
28118
28119     'P'
28120          A 8-bit unsigned integer constant.
28121
28122     'H'
28123          Any const_double value.
28124
28125_ARM family--'config/arm/constraints.md'_
28126     'w'
28127          VFP floating-point register
28128
28129     'G'
28130          The floating-point constant 0.0
28131
28132     'I'
28133          Integer that is valid as an immediate operand in a data
28134          processing instruction.  That is, an integer in the range 0 to
28135          255 rotated by a multiple of 2
28136
28137     'J'
28138          Integer in the range -4095 to 4095
28139
28140     'K'
28141          Integer that satisfies constraint 'I' when inverted (ones
28142          complement)
28143
28144     'L'
28145          Integer that satisfies constraint 'I' when negated (twos
28146          complement)
28147
28148     'M'
28149          Integer in the range 0 to 32
28150
28151     'Q'
28152          A memory reference where the exact address is in a single
28153          register (''m'' is preferable for 'asm' statements)
28154
28155     'R'
28156          An item in the constant pool
28157
28158     'S'
28159          A symbol in the text segment of the current file
28160
28161     'Uv'
28162          A memory reference suitable for VFP load/store insns
28163          (reg+constant offset)
28164
28165     'Uy'
28166          A memory reference suitable for iWMMXt load/store
28167          instructions.
28168
28169     'Uq'
28170          A memory reference suitable for the ARMv4 ldrsb instruction.
28171
28172_AVR family--'config/avr/constraints.md'_
28173     'l'
28174          Registers from r0 to r15
28175
28176     'a'
28177          Registers from r16 to r23
28178
28179     'd'
28180          Registers from r16 to r31
28181
28182     'w'
28183          Registers from r24 to r31.  These registers can be used in
28184          'adiw' command
28185
28186     'e'
28187          Pointer register (r26-r31)
28188
28189     'b'
28190          Base pointer register (r28-r31)
28191
28192     'q'
28193          Stack pointer register (SPH:SPL)
28194
28195     't'
28196          Temporary register r0
28197
28198     'x'
28199          Register pair X (r27:r26)
28200
28201     'y'
28202          Register pair Y (r29:r28)
28203
28204     'z'
28205          Register pair Z (r31:r30)
28206
28207     'I'
28208          Constant greater than -1, less than 64
28209
28210     'J'
28211          Constant greater than -64, less than 1
28212
28213     'K'
28214          Constant integer 2
28215
28216     'L'
28217          Constant integer 0
28218
28219     'M'
28220          Constant that fits in 8 bits
28221
28222     'N'
28223          Constant integer -1
28224
28225     'O'
28226          Constant integer 8, 16, or 24
28227
28228     'P'
28229          Constant integer 1
28230
28231     'G'
28232          A floating point constant 0.0
28233
28234     'Q'
28235          A memory address based on Y or Z pointer with displacement.
28236
28237_Epiphany--'config/epiphany/constraints.md'_
28238     'U16'
28239          An unsigned 16-bit constant.
28240
28241     'K'
28242          An unsigned 5-bit constant.
28243
28244     'L'
28245          A signed 11-bit constant.
28246
28247     'Cm1'
28248          A signed 11-bit constant added to -1.  Can only match when the
28249          '-m1reg-REG' option is active.
28250
28251     'Cl1'
28252          Left-shift of -1, i.e., a bit mask with a block of leading
28253          ones, the rest being a block of trailing zeroes.  Can only
28254          match when the '-m1reg-REG' option is active.
28255
28256     'Cr1'
28257          Right-shift of -1, i.e., a bit mask with a trailing block of
28258          ones, the rest being zeroes.  Or to put it another way, one
28259          less than a power of two.  Can only match when the
28260          '-m1reg-REG' option is active.
28261
28262     'Cal'
28263          Constant for arithmetic/logical operations.  This is like 'i',
28264          except that for position independent code, no symbols /
28265          expressions needing relocations are allowed.
28266
28267     'Csy'
28268          Symbolic constant for call/jump instruction.
28269
28270     'Rcs'
28271          The register class usable in short insns.  This is a register
28272          class constraint, and can thus drive register allocation.
28273          This constraint won't match unless '-mprefer-short-insn-regs'
28274          is in effect.
28275
28276     'Rsc'
28277          The the register class of registers that can be used to hold a
28278          sibcall call address.  I.e., a caller-saved register.
28279
28280     'Rct'
28281          Core control register class.
28282
28283     'Rgs'
28284          The register group usable in short insns.  This constraint
28285          does not use a register class, so that it only passively
28286          matches suitable registers, and doesn't drive register
28287          allocation.
28288
28289     'Rra'
28290          Matches the return address if it can be replaced with the link
28291          register.
28292
28293     'Rcc'
28294          Matches the integer condition code register.
28295
28296     'Sra'
28297          Matches the return address if it is in a stack slot.
28298
28299     'Cfm'
28300          Matches control register values to switch fp mode, which are
28301          encapsulated in 'UNSPEC_FP_MODE'.
28302
28303_CR16 Architecture--'config/cr16/cr16.h'_
28304
28305     'b'
28306          Registers from r0 to r14 (registers without stack pointer)
28307
28308     't'
28309          Register from r0 to r11 (all 16-bit registers)
28310
28311     'p'
28312          Register from r12 to r15 (all 32-bit registers)
28313
28314     'I'
28315          Signed constant that fits in 4 bits
28316
28317     'J'
28318          Signed constant that fits in 5 bits
28319
28320     'K'
28321          Signed constant that fits in 6 bits
28322
28323     'L'
28324          Unsigned constant that fits in 4 bits
28325
28326     'M'
28327          Signed constant that fits in 32 bits
28328
28329     'N'
28330          Check for 64 bits wide constants for add/sub instructions
28331
28332     'G'
28333          Floating point constant that is legal for store immediate
28334
28335_Hewlett-Packard PA-RISC--'config/pa/pa.h'_
28336     'a'
28337          General register 1
28338
28339     'f'
28340          Floating point register
28341
28342     'q'
28343          Shift amount register
28344
28345     'x'
28346          Floating point register (deprecated)
28347
28348     'y'
28349          Upper floating point register (32-bit), floating point
28350          register (64-bit)
28351
28352     'Z'
28353          Any register
28354
28355     'I'
28356          Signed 11-bit integer constant
28357
28358     'J'
28359          Signed 14-bit integer constant
28360
28361     'K'
28362          Integer constant that can be deposited with a 'zdepi'
28363          instruction
28364
28365     'L'
28366          Signed 5-bit integer constant
28367
28368     'M'
28369          Integer constant 0
28370
28371     'N'
28372          Integer constant that can be loaded with a 'ldil' instruction
28373
28374     'O'
28375          Integer constant whose value plus one is a power of 2
28376
28377     'P'
28378          Integer constant that can be used for 'and' operations in
28379          'depi' and 'extru' instructions
28380
28381     'S'
28382          Integer constant 31
28383
28384     'U'
28385          Integer constant 63
28386
28387     'G'
28388          Floating-point constant 0.0
28389
28390     'A'
28391          A 'lo_sum' data-linkage-table memory operand
28392
28393     'Q'
28394          A memory operand that can be used as the destination operand
28395          of an integer store instruction
28396
28397     'R'
28398          A scaled or unscaled indexed memory operand
28399
28400     'T'
28401          A memory operand for floating-point loads and stores
28402
28403     'W'
28404          A register indirect memory operand
28405
28406_picoChip family--'picochip.h'_
28407     'k'
28408          Stack register.
28409
28410     'f'
28411          Pointer register.  A register which can be used to access
28412          memory without supplying an offset.  Any other register can be
28413          used to access memory, but will need a constant offset.  In
28414          the case of the offset being zero, it is more efficient to use
28415          a pointer register, since this reduces code size.
28416
28417     't'
28418          A twin register.  A register which may be paired with an
28419          adjacent register to create a 32-bit register.
28420
28421     'a'
28422          Any absolute memory address (e.g., symbolic constant, symbolic
28423          constant + offset).
28424
28425     'I'
28426          4-bit signed integer.
28427
28428     'J'
28429          4-bit unsigned integer.
28430
28431     'K'
28432          8-bit signed integer.
28433
28434     'M'
28435          Any constant whose absolute value is no greater than 4-bits.
28436
28437     'N'
28438          10-bit signed integer
28439
28440     'O'
28441          16-bit signed integer.
28442
28443_PowerPC and IBM RS6000--'config/rs6000/constraints.md'_
28444     'b'
28445          Address base register
28446
28447     'd'
28448          Floating point register (containing 64-bit value)
28449
28450     'f'
28451          Floating point register (containing 32-bit value)
28452
28453     'v'
28454          Altivec vector register
28455
28456     'wa'
28457          Any VSX register if the -mvsx option was used or NO_REGS.
28458
28459     'wd'
28460          VSX vector register to hold vector double data or NO_REGS.
28461
28462     'wf'
28463          VSX vector register to hold vector float data or NO_REGS.
28464
28465     'wg'
28466          If '-mmfpgpr' was used, a floating point register or NO_REGS.
28467
28468     'wh'
28469          Floating point register if direct moves are available, or
28470          NO_REGS.
28471
28472     'wi'
28473          FP or VSX register to hold 64-bit integers for VSX insns or
28474          NO_REGS.
28475
28476     'wj'
28477          FP or VSX register to hold 64-bit integers for direct moves or
28478          NO_REGS.
28479
28480     'wk'
28481          FP or VSX register to hold 64-bit doubles for direct moves or
28482          NO_REGS.
28483
28484     'wl'
28485          Floating point register if the LFIWAX instruction is enabled
28486          or NO_REGS.
28487
28488     'wm'
28489          VSX register if direct move instructions are enabled, or
28490          NO_REGS.
28491
28492     'wn'
28493          No register (NO_REGS).
28494
28495     'wr'
28496          General purpose register if 64-bit instructions are enabled or
28497          NO_REGS.
28498
28499     'ws'
28500          VSX vector register to hold scalar double values or NO_REGS.
28501
28502     'wt'
28503          VSX vector register to hold 128 bit integer or NO_REGS.
28504
28505     'wu'
28506          Altivec register to use for float/32-bit int loads/stores or
28507          NO_REGS.
28508
28509     'wv'
28510          Altivec register to use for double loads/stores or NO_REGS.
28511
28512     'ww'
28513          FP or VSX register to perform float operations under '-mvsx'
28514          or NO_REGS.
28515
28516     'wx'
28517          Floating point register if the STFIWX instruction is enabled
28518          or NO_REGS.
28519
28520     'wy'
28521          FP or VSX register to perform ISA 2.07 float ops or NO_REGS.
28522
28523     'wz'
28524          Floating point register if the LFIWZX instruction is enabled
28525          or NO_REGS.
28526
28527     'wD'
28528          Int constant that is the element number of the 64-bit scalar
28529          in a vector.
28530
28531     'wQ'
28532          A memory address that will work with the 'lq' and 'stq'
28533          instructions.
28534
28535     'h'
28536          'MQ', 'CTR', or 'LINK' register
28537
28538     'q'
28539          'MQ' register
28540
28541     'c'
28542          'CTR' register
28543
28544     'l'
28545          'LINK' register
28546
28547     'x'
28548          'CR' register (condition register) number 0
28549
28550     'y'
28551          'CR' register (condition register)
28552
28553     'z'
28554          'XER[CA]' carry bit (part of the XER register)
28555
28556     'I'
28557          Signed 16-bit constant
28558
28559     'J'
28560          Unsigned 16-bit constant shifted left 16 bits (use 'L' instead
28561          for 'SImode' constants)
28562
28563     'K'
28564          Unsigned 16-bit constant
28565
28566     'L'
28567          Signed 16-bit constant shifted left 16 bits
28568
28569     'M'
28570          Constant larger than 31
28571
28572     'N'
28573          Exact power of 2
28574
28575     'O'
28576          Zero
28577
28578     'P'
28579          Constant whose negation is a signed 16-bit constant
28580
28581     'G'
28582          Floating point constant that can be loaded into a register
28583          with one instruction per word
28584
28585     'H'
28586          Integer/Floating point constant that can be loaded into a
28587          register using three instructions
28588
28589     'm'
28590          Memory operand.  Normally, 'm' does not allow addresses that
28591          update the base register.  If '<' or '>' constraint is also
28592          used, they are allowed and therefore on PowerPC targets in
28593          that case it is only safe to use 'm<>' in an 'asm' statement
28594          if that 'asm' statement accesses the operand exactly once.
28595          The 'asm' statement must also use '%U<OPNO>' as a placeholder
28596          for the "update" flag in the corresponding load or store
28597          instruction.  For example:
28598
28599               asm ("st%U0 %1,%0" : "=m<>" (mem) : "r" (val));
28600
28601          is correct but:
28602
28603               asm ("st %1,%0" : "=m<>" (mem) : "r" (val));
28604
28605          is not.
28606
28607     'es'
28608          A "stable" memory operand; that is, one which does not include
28609          any automodification of the base register.  This used to be
28610          useful when 'm' allowed automodification of the base register,
28611          but as those are now only allowed when '<' or '>' is used,
28612          'es' is basically the same as 'm' without '<' and '>'.
28613
28614     'Q'
28615          Memory operand that is an offset from a register (it is
28616          usually better to use 'm' or 'es' in 'asm' statements)
28617
28618     'Z'
28619          Memory operand that is an indexed or indirect from a register
28620          (it is usually better to use 'm' or 'es' in 'asm' statements)
28621
28622     'R'
28623          AIX TOC entry
28624
28625     'a'
28626          Address operand that is an indexed or indirect from a register
28627          ('p' is preferable for 'asm' statements)
28628
28629     'S'
28630          Constant suitable as a 64-bit mask operand
28631
28632     'T'
28633          Constant suitable as a 32-bit mask operand
28634
28635     'U'
28636          System V Release 4 small data area reference
28637
28638     't'
28639          AND masks that can be performed by two rldic{l, r}
28640          instructions
28641
28642     'W'
28643          Vector constant that does not require memory
28644
28645     'j'
28646          Vector constant that is all zeros.
28647
28648_Intel 386--'config/i386/constraints.md'_
28649     'R'
28650          Legacy register--the eight integer registers available on all
28651          i386 processors ('a', 'b', 'c', 'd', 'si', 'di', 'bp', 'sp').
28652
28653     'q'
28654          Any register accessible as 'Rl'.  In 32-bit mode, 'a', 'b',
28655          'c', and 'd'; in 64-bit mode, any integer register.
28656
28657     'Q'
28658          Any register accessible as 'Rh': 'a', 'b', 'c', and 'd'.
28659
28660     'a'
28661          The 'a' register.
28662
28663     'b'
28664          The 'b' register.
28665
28666     'c'
28667          The 'c' register.
28668
28669     'd'
28670          The 'd' register.
28671
28672     'S'
28673          The 'si' register.
28674
28675     'D'
28676          The 'di' register.
28677
28678     'A'
28679          The 'a' and 'd' registers.  This class is used for
28680          instructions that return double word results in the 'ax:dx'
28681          register pair.  Single word values will be allocated either in
28682          'ax' or 'dx'.  For example on i386 the following implements
28683          'rdtsc':
28684
28685               unsigned long long rdtsc (void)
28686               {
28687                 unsigned long long tick;
28688                 __asm__ __volatile__("rdtsc":"=A"(tick));
28689                 return tick;
28690               }
28691
28692          This is not correct on x86_64 as it would allocate tick in
28693          either 'ax' or 'dx'.  You have to use the following variant
28694          instead:
28695
28696               unsigned long long rdtsc (void)
28697               {
28698                 unsigned int tickl, tickh;
28699                 __asm__ __volatile__("rdtsc":"=a"(tickl),"=d"(tickh));
28700                 return ((unsigned long long)tickh << 32)|tickl;
28701               }
28702
28703     'f'
28704          Any 80387 floating-point (stack) register.
28705
28706     't'
28707          Top of 80387 floating-point stack ('%st(0)').
28708
28709     'u'
28710          Second from top of 80387 floating-point stack ('%st(1)').
28711
28712     'y'
28713          Any MMX register.
28714
28715     'x'
28716          Any SSE register.
28717
28718     'Yz'
28719          First SSE register ('%xmm0').
28720
28721     'I'
28722          Integer constant in the range 0 ... 31, for 32-bit shifts.
28723
28724     'J'
28725          Integer constant in the range 0 ... 63, for 64-bit shifts.
28726
28727     'K'
28728          Signed 8-bit integer constant.
28729
28730     'L'
28731          '0xFF' or '0xFFFF', for andsi as a zero-extending move.
28732
28733     'M'
28734          0, 1, 2, or 3 (shifts for the 'lea' instruction).
28735
28736     'N'
28737          Unsigned 8-bit integer constant (for 'in' and 'out'
28738          instructions).
28739
28740     'G'
28741          Standard 80387 floating point constant.
28742
28743     'C'
28744          Standard SSE floating point constant.
28745
28746     'e'
28747          32-bit signed integer constant, or a symbolic reference known
28748          to fit that range (for immediate operands in sign-extending
28749          x86-64 instructions).
28750
28751     'Z'
28752          32-bit unsigned integer constant, or a symbolic reference
28753          known to fit that range (for immediate operands in
28754          zero-extending x86-64 instructions).
28755
28756_Intel IA-64--'config/ia64/ia64.h'_
28757     'a'
28758          General register 'r0' to 'r3' for 'addl' instruction
28759
28760     'b'
28761          Branch register
28762
28763     'c'
28764          Predicate register ('c' as in "conditional")
28765
28766     'd'
28767          Application register residing in M-unit
28768
28769     'e'
28770          Application register residing in I-unit
28771
28772     'f'
28773          Floating-point register
28774
28775     'm'
28776          Memory operand.  If used together with '<' or '>', the operand
28777          can have postincrement and postdecrement which require
28778          printing with '%Pn' on IA-64.
28779
28780     'G'
28781          Floating-point constant 0.0 or 1.0
28782
28783     'I'
28784          14-bit signed integer constant
28785
28786     'J'
28787          22-bit signed integer constant
28788
28789     'K'
28790          8-bit signed integer constant for logical instructions
28791
28792     'L'
28793          8-bit adjusted signed integer constant for compare pseudo-ops
28794
28795     'M'
28796          6-bit unsigned integer constant for shift counts
28797
28798     'N'
28799          9-bit signed integer constant for load and store
28800          postincrements
28801
28802     'O'
28803          The constant zero
28804
28805     'P'
28806          0 or -1 for 'dep' instruction
28807
28808     'Q'
28809          Non-volatile memory for floating-point loads and stores
28810
28811     'R'
28812          Integer constant in the range 1 to 4 for 'shladd' instruction
28813
28814     'S'
28815          Memory operand except postincrement and postdecrement.  This
28816          is now roughly the same as 'm' when not used together with '<'
28817          or '>'.
28818
28819_FRV--'config/frv/frv.h'_
28820     'a'
28821          Register in the class 'ACC_REGS' ('acc0' to 'acc7').
28822
28823     'b'
28824          Register in the class 'EVEN_ACC_REGS' ('acc0' to 'acc7').
28825
28826     'c'
28827          Register in the class 'CC_REGS' ('fcc0' to 'fcc3' and 'icc0'
28828          to 'icc3').
28829
28830     'd'
28831          Register in the class 'GPR_REGS' ('gr0' to 'gr63').
28832
28833     'e'
28834          Register in the class 'EVEN_REGS' ('gr0' to 'gr63').  Odd
28835          registers are excluded not in the class but through the use of
28836          a machine mode larger than 4 bytes.
28837
28838     'f'
28839          Register in the class 'FPR_REGS' ('fr0' to 'fr63').
28840
28841     'h'
28842          Register in the class 'FEVEN_REGS' ('fr0' to 'fr63').  Odd
28843          registers are excluded not in the class but through the use of
28844          a machine mode larger than 4 bytes.
28845
28846     'l'
28847          Register in the class 'LR_REG' (the 'lr' register).
28848
28849     'q'
28850          Register in the class 'QUAD_REGS' ('gr2' to 'gr63').  Register
28851          numbers not divisible by 4 are excluded not in the class but
28852          through the use of a machine mode larger than 8 bytes.
28853
28854     't'
28855          Register in the class 'ICC_REGS' ('icc0' to 'icc3').
28856
28857     'u'
28858          Register in the class 'FCC_REGS' ('fcc0' to 'fcc3').
28859
28860     'v'
28861          Register in the class 'ICR_REGS' ('cc4' to 'cc7').
28862
28863     'w'
28864          Register in the class 'FCR_REGS' ('cc0' to 'cc3').
28865
28866     'x'
28867          Register in the class 'QUAD_FPR_REGS' ('fr0' to 'fr63').
28868          Register numbers not divisible by 4 are excluded not in the
28869          class but through the use of a machine mode larger than 8
28870          bytes.
28871
28872     'z'
28873          Register in the class 'SPR_REGS' ('lcr' and 'lr').
28874
28875     'A'
28876          Register in the class 'QUAD_ACC_REGS' ('acc0' to 'acc7').
28877
28878     'B'
28879          Register in the class 'ACCG_REGS' ('accg0' to 'accg7').
28880
28881     'C'
28882          Register in the class 'CR_REGS' ('cc0' to 'cc7').
28883
28884     'G'
28885          Floating point constant zero
28886
28887     'I'
28888          6-bit signed integer constant
28889
28890     'J'
28891          10-bit signed integer constant
28892
28893     'L'
28894          16-bit signed integer constant
28895
28896     'M'
28897          16-bit unsigned integer constant
28898
28899     'N'
28900          12-bit signed integer constant that is negative--i.e. in the
28901          range of -2048 to -1
28902
28903     'O'
28904          Constant zero
28905
28906     'P'
28907          12-bit signed integer constant that is greater than zero--i.e.
28908          in the range of 1 to 2047.
28909
28910_Blackfin family--'config/bfin/constraints.md'_
28911     'a'
28912          P register
28913
28914     'd'
28915          D register
28916
28917     'z'
28918          A call clobbered P register.
28919
28920     'qN'
28921          A single register.  If N is in the range 0 to 7, the
28922          corresponding D register.  If it is 'A', then the register P0.
28923
28924     'D'
28925          Even-numbered D register
28926
28927     'W'
28928          Odd-numbered D register
28929
28930     'e'
28931          Accumulator register.
28932
28933     'A'
28934          Even-numbered accumulator register.
28935
28936     'B'
28937          Odd-numbered accumulator register.
28938
28939     'b'
28940          I register
28941
28942     'v'
28943          B register
28944
28945     'f'
28946          M register
28947
28948     'c'
28949          Registers used for circular buffering, i.e.  I, B, or L
28950          registers.
28951
28952     'C'
28953          The CC register.
28954
28955     't'
28956          LT0 or LT1.
28957
28958     'k'
28959          LC0 or LC1.
28960
28961     'u'
28962          LB0 or LB1.
28963
28964     'x'
28965          Any D, P, B, M, I or L register.
28966
28967     'y'
28968          Additional registers typically used only in prologues and
28969          epilogues: RETS, RETN, RETI, RETX, RETE, ASTAT, SEQSTAT and
28970          USP.
28971
28972     'w'
28973          Any register except accumulators or CC.
28974
28975     'Ksh'
28976          Signed 16 bit integer (in the range -32768 to 32767)
28977
28978     'Kuh'
28979          Unsigned 16 bit integer (in the range 0 to 65535)
28980
28981     'Ks7'
28982          Signed 7 bit integer (in the range -64 to 63)
28983
28984     'Ku7'
28985          Unsigned 7 bit integer (in the range 0 to 127)
28986
28987     'Ku5'
28988          Unsigned 5 bit integer (in the range 0 to 31)
28989
28990     'Ks4'
28991          Signed 4 bit integer (in the range -8 to 7)
28992
28993     'Ks3'
28994          Signed 3 bit integer (in the range -3 to 4)
28995
28996     'Ku3'
28997          Unsigned 3 bit integer (in the range 0 to 7)
28998
28999     'PN'
29000          Constant N, where N is a single-digit constant in the range 0
29001          to 4.
29002
29003     'PA'
29004          An integer equal to one of the MACFLAG_XXX constants that is
29005          suitable for use with either accumulator.
29006
29007     'PB'
29008          An integer equal to one of the MACFLAG_XXX constants that is
29009          suitable for use only with accumulator A1.
29010
29011     'M1'
29012          Constant 255.
29013
29014     'M2'
29015          Constant 65535.
29016
29017     'J'
29018          An integer constant with exactly a single bit set.
29019
29020     'L'
29021          An integer constant with all bits set except exactly one.
29022
29023     'H'
29024
29025     'Q'
29026          Any SYMBOL_REF.
29027
29028_M32C--'config/m32c/m32c.c'_
29029     'Rsp'
29030     'Rfb'
29031     'Rsb'
29032          '$sp', '$fb', '$sb'.
29033
29034     'Rcr'
29035          Any control register, when they're 16 bits wide (nothing if
29036          control registers are 24 bits wide)
29037
29038     'Rcl'
29039          Any control register, when they're 24 bits wide.
29040
29041     'R0w'
29042     'R1w'
29043     'R2w'
29044     'R3w'
29045          $r0, $r1, $r2, $r3.
29046
29047     'R02'
29048          $r0 or $r2, or $r2r0 for 32 bit values.
29049
29050     'R13'
29051          $r1 or $r3, or $r3r1 for 32 bit values.
29052
29053     'Rdi'
29054          A register that can hold a 64 bit value.
29055
29056     'Rhl'
29057          $r0 or $r1 (registers with addressable high/low bytes)
29058
29059     'R23'
29060          $r2 or $r3
29061
29062     'Raa'
29063          Address registers
29064
29065     'Raw'
29066          Address registers when they're 16 bits wide.
29067
29068     'Ral'
29069          Address registers when they're 24 bits wide.
29070
29071     'Rqi'
29072          Registers that can hold QI values.
29073
29074     'Rad'
29075          Registers that can be used with displacements ($a0, $a1, $sb).
29076
29077     'Rsi'
29078          Registers that can hold 32 bit values.
29079
29080     'Rhi'
29081          Registers that can hold 16 bit values.
29082
29083     'Rhc'
29084          Registers chat can hold 16 bit values, including all control
29085          registers.
29086
29087     'Rra'
29088          $r0 through R1, plus $a0 and $a1.
29089
29090     'Rfl'
29091          The flags register.
29092
29093     'Rmm'
29094          The memory-based pseudo-registers $mem0 through $mem15.
29095
29096     'Rpi'
29097          Registers that can hold pointers (16 bit registers for r8c,
29098          m16c; 24 bit registers for m32cm, m32c).
29099
29100     'Rpa'
29101          Matches multiple registers in a PARALLEL to form a larger
29102          register.  Used to match function return values.
29103
29104     'Is3'
29105          -8 ... 7
29106
29107     'IS1'
29108          -128 ... 127
29109
29110     'IS2'
29111          -32768 ... 32767
29112
29113     'IU2'
29114          0 ... 65535
29115
29116     'In4'
29117          -8 ... -1 or 1 ... 8
29118
29119     'In5'
29120          -16 ... -1 or 1 ... 16
29121
29122     'In6'
29123          -32 ... -1 or 1 ... 32
29124
29125     'IM2'
29126          -65536 ... -1
29127
29128     'Ilb'
29129          An 8 bit value with exactly one bit set.
29130
29131     'Ilw'
29132          A 16 bit value with exactly one bit set.
29133
29134     'Sd'
29135          The common src/dest memory addressing modes.
29136
29137     'Sa'
29138          Memory addressed using $a0 or $a1.
29139
29140     'Si'
29141          Memory addressed with immediate addresses.
29142
29143     'Ss'
29144          Memory addressed using the stack pointer ($sp).
29145
29146     'Sf'
29147          Memory addressed using the frame base register ($fb).
29148
29149     'Ss'
29150          Memory addressed using the small base register ($sb).
29151
29152     'S1'
29153          $r1h
29154
29155_MeP--'config/mep/constraints.md'_
29156
29157     'a'
29158          The $sp register.
29159
29160     'b'
29161          The $tp register.
29162
29163     'c'
29164          Any control register.
29165
29166     'd'
29167          Either the $hi or the $lo register.
29168
29169     'em'
29170          Coprocessor registers that can be directly loaded ($c0-$c15).
29171
29172     'ex'
29173          Coprocessor registers that can be moved to each other.
29174
29175     'er'
29176          Coprocessor registers that can be moved to core registers.
29177
29178     'h'
29179          The $hi register.
29180
29181     'j'
29182          The $rpc register.
29183
29184     'l'
29185          The $lo register.
29186
29187     't'
29188          Registers which can be used in $tp-relative addressing.
29189
29190     'v'
29191          The $gp register.
29192
29193     'x'
29194          The coprocessor registers.
29195
29196     'y'
29197          The coprocessor control registers.
29198
29199     'z'
29200          The $0 register.
29201
29202     'A'
29203          User-defined register set A.
29204
29205     'B'
29206          User-defined register set B.
29207
29208     'C'
29209          User-defined register set C.
29210
29211     'D'
29212          User-defined register set D.
29213
29214     'I'
29215          Offsets for $gp-rel addressing.
29216
29217     'J'
29218          Constants that can be used directly with boolean insns.
29219
29220     'K'
29221          Constants that can be moved directly to registers.
29222
29223     'L'
29224          Small constants that can be added to registers.
29225
29226     'M'
29227          Long shift counts.
29228
29229     'N'
29230          Small constants that can be compared to registers.
29231
29232     'O'
29233          Constants that can be loaded into the top half of registers.
29234
29235     'S'
29236          Signed 8-bit immediates.
29237
29238     'T'
29239          Symbols encoded for $tp-rel or $gp-rel addressing.
29240
29241     'U'
29242          Non-constant addresses for loading/saving coprocessor
29243          registers.
29244
29245     'W'
29246          The top half of a symbol's value.
29247
29248     'Y'
29249          A register indirect address without offset.
29250
29251     'Z'
29252          Symbolic references to the control bus.
29253
29254_MicroBlaze--'config/microblaze/constraints.md'_
29255     'd'
29256          A general register ('r0' to 'r31').
29257
29258     'z'
29259          A status register ('rmsr', '$fcc1' to '$fcc7').
29260
29261_MIPS--'config/mips/constraints.md'_
29262     'd'
29263          An address register.  This is equivalent to 'r' unless
29264          generating MIPS16 code.
29265
29266     'f'
29267          A floating-point register (if available).
29268
29269     'h'
29270          Formerly the 'hi' register.  This constraint is no longer
29271          supported.
29272
29273     'l'
29274          The 'lo' register.  Use this register to store values that are
29275          no bigger than a word.
29276
29277     'x'
29278          The concatenated 'hi' and 'lo' registers.  Use this register
29279          to store doubleword values.
29280
29281     'c'
29282          A register suitable for use in an indirect jump.  This will
29283          always be '$25' for '-mabicalls'.
29284
29285     'v'
29286          Register '$3'.  Do not use this constraint in new code; it is
29287          retained only for compatibility with glibc.
29288
29289     'y'
29290          Equivalent to 'r'; retained for backwards compatibility.
29291
29292     'z'
29293          A floating-point condition code register.
29294
29295     'I'
29296          A signed 16-bit constant (for arithmetic instructions).
29297
29298     'J'
29299          Integer zero.
29300
29301     'K'
29302          An unsigned 16-bit constant (for logic instructions).
29303
29304     'L'
29305          A signed 32-bit constant in which the lower 16 bits are zero.
29306          Such constants can be loaded using 'lui'.
29307
29308     'M'
29309          A constant that cannot be loaded using 'lui', 'addiu' or
29310          'ori'.
29311
29312     'N'
29313          A constant in the range -65535 to -1 (inclusive).
29314
29315     'O'
29316          A signed 15-bit constant.
29317
29318     'P'
29319          A constant in the range 1 to 65535 (inclusive).
29320
29321     'G'
29322          Floating-point zero.
29323
29324     'R'
29325          An address that can be used in a non-macro load or store.
29326
29327     'ZC'
29328          When compiling microMIPS code, this constraint matches a
29329          memory operand whose address is formed from a base register
29330          and a 12-bit offset.  These operands can be used for microMIPS
29331          instructions such as 'll' and 'sc'.  When not compiling for
29332          microMIPS code, 'ZC' is equivalent to 'R'.
29333
29334     'ZD'
29335          When compiling microMIPS code, this constraint matches an
29336          address operand that is formed from a base register and a
29337          12-bit offset.  These operands can be used for microMIPS
29338          instructions such as 'prefetch'.  When not compiling for
29339          microMIPS code, 'ZD' is equivalent to 'p'.
29340
29341_Motorola 680x0--'config/m68k/constraints.md'_
29342     'a'
29343          Address register
29344
29345     'd'
29346          Data register
29347
29348     'f'
29349          68881 floating-point register, if available
29350
29351     'I'
29352          Integer in the range 1 to 8
29353
29354     'J'
29355          16-bit signed number
29356
29357     'K'
29358          Signed number whose magnitude is greater than 0x80
29359
29360     'L'
29361          Integer in the range -8 to -1
29362
29363     'M'
29364          Signed number whose magnitude is greater than 0x100
29365
29366     'N'
29367          Range 24 to 31, rotatert:SI 8 to 1 expressed as rotate
29368
29369     'O'
29370          16 (for rotate using swap)
29371
29372     'P'
29373          Range 8 to 15, rotatert:HI 8 to 1 expressed as rotate
29374
29375     'R'
29376          Numbers that mov3q can handle
29377
29378     'G'
29379          Floating point constant that is not a 68881 constant
29380
29381     'S'
29382          Operands that satisfy 'm' when -mpcrel is in effect
29383
29384     'T'
29385          Operands that satisfy 's' when -mpcrel is not in effect
29386
29387     'Q'
29388          Address register indirect addressing mode
29389
29390     'U'
29391          Register offset addressing
29392
29393     'W'
29394          const_call_operand
29395
29396     'Cs'
29397          symbol_ref or const
29398
29399     'Ci'
29400          const_int
29401
29402     'C0'
29403          const_int 0
29404
29405     'Cj'
29406          Range of signed numbers that don't fit in 16 bits
29407
29408     'Cmvq'
29409          Integers valid for mvq
29410
29411     'Capsw'
29412          Integers valid for a moveq followed by a swap
29413
29414     'Cmvz'
29415          Integers valid for mvz
29416
29417     'Cmvs'
29418          Integers valid for mvs
29419
29420     'Ap'
29421          push_operand
29422
29423     'Ac'
29424          Non-register operands allowed in clr
29425
29426_Moxie--'config/moxie/constraints.md'_
29427     'A'
29428          An absolute address
29429
29430     'B'
29431          An offset address
29432
29433     'W'
29434          A register indirect memory operand
29435
29436     'I'
29437          A constant in the range of 0 to 255.
29438
29439     'N'
29440          A constant in the range of 0 to -255.
29441
29442_MSP430-'config/msp430/constraints.md'_
29443
29444     'R12'
29445          Register R12.
29446
29447     'R13'
29448          Register R13.
29449
29450     'K'
29451          Integer constant 1.
29452
29453     'L'
29454          Integer constant -1^20..1^19.
29455
29456     'M'
29457          Integer constant 1-4.
29458
29459     'Ya'
29460          Memory references which do not require an extended MOVX
29461          instruction.
29462
29463     'Yl'
29464          Memory reference, labels only.
29465
29466     'Ys'
29467          Memory reference, stack only.
29468
29469_NDS32--'config/nds32/constraints.md'_
29470     'w'
29471          LOW register class $r0 to $r7 constraint for V3/V3M ISA.
29472     'l'
29473          LOW register class $r0 to $r7.
29474     'd'
29475          MIDDLE register class $r0 to $r11, $r16 to $r19.
29476     'h'
29477          HIGH register class $r12 to $r14, $r20 to $r31.
29478     't'
29479          Temporary assist register $ta (i.e. $r15).
29480     'k'
29481          Stack register $sp.
29482     'Iu03'
29483          Unsigned immediate 3-bit value.
29484     'In03'
29485          Negative immediate 3-bit value in the range of -7-0.
29486     'Iu04'
29487          Unsigned immediate 4-bit value.
29488     'Is05'
29489          Signed immediate 5-bit value.
29490     'Iu05'
29491          Unsigned immediate 5-bit value.
29492     'In05'
29493          Negative immediate 5-bit value in the range of -31-0.
29494     'Ip05'
29495          Unsigned immediate 5-bit value for movpi45 instruction with
29496          range 16-47.
29497     'Iu06'
29498          Unsigned immediate 6-bit value constraint for addri36.sp
29499          instruction.
29500     'Iu08'
29501          Unsigned immediate 8-bit value.
29502     'Iu09'
29503          Unsigned immediate 9-bit value.
29504     'Is10'
29505          Signed immediate 10-bit value.
29506     'Is11'
29507          Signed immediate 11-bit value.
29508     'Is15'
29509          Signed immediate 15-bit value.
29510     'Iu15'
29511          Unsigned immediate 15-bit value.
29512     'Ic15'
29513          A constant which is not in the range of imm15u but ok for bclr
29514          instruction.
29515     'Ie15'
29516          A constant which is not in the range of imm15u but ok for bset
29517          instruction.
29518     'It15'
29519          A constant which is not in the range of imm15u but ok for btgl
29520          instruction.
29521     'Ii15'
29522          A constant whose compliment value is in the range of imm15u
29523          and ok for bitci instruction.
29524     'Is16'
29525          Signed immediate 16-bit value.
29526     'Is17'
29527          Signed immediate 17-bit value.
29528     'Is19'
29529          Signed immediate 19-bit value.
29530     'Is20'
29531          Signed immediate 20-bit value.
29532     'Ihig'
29533          The immediate value that can be simply set high 20-bit.
29534     'Izeb'
29535          The immediate value 0xff.
29536     'Izeh'
29537          The immediate value 0xffff.
29538     'Ixls'
29539          The immediate value 0x01.
29540     'Ix11'
29541          The immediate value 0x7ff.
29542     'Ibms'
29543          The immediate value with power of 2.
29544     'Ifex'
29545          The immediate value with power of 2 minus 1.
29546     'U33'
29547          Memory constraint for 333 format.
29548     'U45'
29549          Memory constraint for 45 format.
29550     'U37'
29551          Memory constraint for 37 format.
29552
29553_Nios II family--'config/nios2/constraints.md'_
29554
29555     'I'
29556          Integer that is valid as an immediate operand in an
29557          instruction taking a signed 16-bit number.  Range -32768 to
29558          32767.
29559
29560     'J'
29561          Integer that is valid as an immediate operand in an
29562          instruction taking an unsigned 16-bit number.  Range 0 to
29563          65535.
29564
29565     'K'
29566          Integer that is valid as an immediate operand in an
29567          instruction taking only the upper 16-bits of a 32-bit number.
29568          Range 32-bit numbers with the lower 16-bits being 0.
29569
29570     'L'
29571          Integer that is valid as an immediate operand for a shift
29572          instruction.  Range 0 to 31.
29573
29574     'M'
29575          Integer that is valid as an immediate operand for only the
29576          value 0.  Can be used in conjunction with the format modifier
29577          'z' to use 'r0' instead of '0' in the assembly output.
29578
29579     'N'
29580          Integer that is valid as an immediate operand for a custom
29581          instruction opcode.  Range 0 to 255.
29582
29583     'S'
29584          Matches immediates which are addresses in the small data
29585          section and therefore can be added to 'gp' as a 16-bit
29586          immediate to re-create their 32-bit value.
29587
29588_PDP-11--'config/pdp11/constraints.md'_
29589     'a'
29590          Floating point registers AC0 through AC3.  These can be loaded
29591          from/to memory with a single instruction.
29592
29593     'd'
29594          Odd numbered general registers (R1, R3, R5).  These are used
29595          for 16-bit multiply operations.
29596
29597     'f'
29598          Any of the floating point registers (AC0 through AC5).
29599
29600     'G'
29601          Floating point constant 0.
29602
29603     'I'
29604          An integer constant that fits in 16 bits.
29605
29606     'J'
29607          An integer constant whose low order 16 bits are zero.
29608
29609     'K'
29610          An integer constant that does not meet the constraints for
29611          codes 'I' or 'J'.
29612
29613     'L'
29614          The integer constant 1.
29615
29616     'M'
29617          The integer constant -1.
29618
29619     'N'
29620          The integer constant 0.
29621
29622     'O'
29623          Integer constants -4 through -1 and 1 through 4; shifts by
29624          these amounts are handled as multiple single-bit shifts rather
29625          than a single variable-length shift.
29626
29627     'Q'
29628          A memory reference which requires an additional word (address
29629          or offset) after the opcode.
29630
29631     'R'
29632          A memory reference that is encoded within the opcode.
29633
29634_RL78--'config/rl78/constraints.md'_
29635
29636     'Int3'
29637          An integer constant in the range 1 ... 7.
29638     'Int8'
29639          An integer constant in the range 0 ... 255.
29640     'J'
29641          An integer constant in the range -255 ... 0
29642     'K'
29643          The integer constant 1.
29644     'L'
29645          The integer constant -1.
29646     'M'
29647          The integer constant 0.
29648     'N'
29649          The integer constant 2.
29650     'O'
29651          The integer constant -2.
29652     'P'
29653          An integer constant in the range 1 ... 15.
29654     'Qbi'
29655          The built-in compare types-eq, ne, gtu, ltu, geu, and leu.
29656     'Qsc'
29657          The synthetic compare types-gt, lt, ge, and le.
29658     'Wab'
29659          A memory reference with an absolute address.
29660     'Wbc'
29661          A memory reference using 'BC' as a base register, with an
29662          optional offset.
29663     'Wca'
29664          A memory reference using 'AX', 'BC', 'DE', or 'HL' for the
29665          address, for calls.
29666     'Wcv'
29667          A memory reference using any 16-bit register pair for the
29668          address, for calls.
29669     'Wd2'
29670          A memory reference using 'DE' as a base register, with an
29671          optional offset.
29672     'Wde'
29673          A memory reference using 'DE' as a base register, without any
29674          offset.
29675     'Wfr'
29676          Any memory reference to an address in the far address space.
29677     'Wh1'
29678          A memory reference using 'HL' as a base register, with an
29679          optional one-byte offset.
29680     'Whb'
29681          A memory reference using 'HL' as a base register, with 'B' or
29682          'C' as the index register.
29683     'Whl'
29684          A memory reference using 'HL' as a base register, without any
29685          offset.
29686     'Ws1'
29687          A memory reference using 'SP' as a base register, with an
29688          optional one-byte offset.
29689     'Y'
29690          Any memory reference to an address in the near address space.
29691     'A'
29692          The 'AX' register.
29693     'B'
29694          The 'BC' register.
29695     'D'
29696          The 'DE' register.
29697     'R'
29698          'A' through 'L' registers.
29699     'S'
29700          The 'SP' register.
29701     'T'
29702          The 'HL' register.
29703     'Z08W'
29704          The 16-bit 'R8' register.
29705     'Z10W'
29706          The 16-bit 'R10' register.
29707     'Zint'
29708          The registers reserved for interrupts ('R24' to 'R31').
29709     'a'
29710          The 'A' register.
29711     'b'
29712          The 'B' register.
29713     'c'
29714          The 'C' register.
29715     'd'
29716          The 'D' register.
29717     'e'
29718          The 'E' register.
29719     'h'
29720          The 'H' register.
29721     'l'
29722          The 'L' register.
29723     'v'
29724          The virtual registers.
29725     'w'
29726          The 'PSW' register.
29727     'x'
29728          The 'X' register.
29729
29730_RX--'config/rx/constraints.md'_
29731     'Q'
29732          An address which does not involve register indirect addressing
29733          or pre/post increment/decrement addressing.
29734
29735     'Symbol'
29736          A symbol reference.
29737
29738     'Int08'
29739          A constant in the range -256 to 255, inclusive.
29740
29741     'Sint08'
29742          A constant in the range -128 to 127, inclusive.
29743
29744     'Sint16'
29745          A constant in the range -32768 to 32767, inclusive.
29746
29747     'Sint24'
29748          A constant in the range -8388608 to 8388607, inclusive.
29749
29750     'Uint04'
29751          A constant in the range 0 to 15, inclusive.
29752
29753_SPARC--'config/sparc/sparc.h'_
29754     'f'
29755          Floating-point register on the SPARC-V8 architecture and lower
29756          floating-point register on the SPARC-V9 architecture.
29757
29758     'e'
29759          Floating-point register.  It is equivalent to 'f' on the
29760          SPARC-V8 architecture and contains both lower and upper
29761          floating-point registers on the SPARC-V9 architecture.
29762
29763     'c'
29764          Floating-point condition code register.
29765
29766     'd'
29767          Lower floating-point register.  It is only valid on the
29768          SPARC-V9 architecture when the Visual Instruction Set is
29769          available.
29770
29771     'b'
29772          Floating-point register.  It is only valid on the SPARC-V9
29773          architecture when the Visual Instruction Set is available.
29774
29775     'h'
29776          64-bit global or out register for the SPARC-V8+ architecture.
29777
29778     'C'
29779          The constant all-ones, for floating-point.
29780
29781     'A'
29782          Signed 5-bit constant
29783
29784     'D'
29785          A vector constant
29786
29787     'I'
29788          Signed 13-bit constant
29789
29790     'J'
29791          Zero
29792
29793     'K'
29794          32-bit constant with the low 12 bits clear (a constant that
29795          can be loaded with the 'sethi' instruction)
29796
29797     'L'
29798          A constant in the range supported by 'movcc' instructions
29799          (11-bit signed immediate)
29800
29801     'M'
29802          A constant in the range supported by 'movrcc' instructions
29803          (10-bit signed immediate)
29804
29805     'N'
29806          Same as 'K', except that it verifies that bits that are not in
29807          the lower 32-bit range are all zero.  Must be used instead of
29808          'K' for modes wider than 'SImode'
29809
29810     'O'
29811          The constant 4096
29812
29813     'G'
29814          Floating-point zero
29815
29816     'H'
29817          Signed 13-bit constant, sign-extended to 32 or 64 bits
29818
29819     'P'
29820          The constant -1
29821
29822     'Q'
29823          Floating-point constant whose integral representation can be
29824          moved into an integer register using a single sethi
29825          instruction
29826
29827     'R'
29828          Floating-point constant whose integral representation can be
29829          moved into an integer register using a single mov instruction
29830
29831     'S'
29832          Floating-point constant whose integral representation can be
29833          moved into an integer register using a high/lo_sum instruction
29834          sequence
29835
29836     'T'
29837          Memory address aligned to an 8-byte boundary
29838
29839     'U'
29840          Even register
29841
29842     'W'
29843          Memory address for 'e' constraint registers
29844
29845     'w'
29846          Memory address with only a base register
29847
29848     'Y'
29849          Vector zero
29850
29851_SPU--'config/spu/spu.h'_
29852     'a'
29853          An immediate which can be loaded with the il/ila/ilh/ilhu
29854          instructions.  const_int is treated as a 64 bit value.
29855
29856     'c'
29857          An immediate for and/xor/or instructions.  const_int is
29858          treated as a 64 bit value.
29859
29860     'd'
29861          An immediate for the 'iohl' instruction.  const_int is treated
29862          as a 64 bit value.
29863
29864     'f'
29865          An immediate which can be loaded with 'fsmbi'.
29866
29867     'A'
29868          An immediate which can be loaded with the il/ila/ilh/ilhu
29869          instructions.  const_int is treated as a 32 bit value.
29870
29871     'B'
29872          An immediate for most arithmetic instructions.  const_int is
29873          treated as a 32 bit value.
29874
29875     'C'
29876          An immediate for and/xor/or instructions.  const_int is
29877          treated as a 32 bit value.
29878
29879     'D'
29880          An immediate for the 'iohl' instruction.  const_int is treated
29881          as a 32 bit value.
29882
29883     'I'
29884          A constant in the range [-64, 63] for shift/rotate
29885          instructions.
29886
29887     'J'
29888          An unsigned 7-bit constant for conversion/nop/channel
29889          instructions.
29890
29891     'K'
29892          A signed 10-bit constant for most arithmetic instructions.
29893
29894     'M'
29895          A signed 16 bit immediate for 'stop'.
29896
29897     'N'
29898          An unsigned 16-bit constant for 'iohl' and 'fsmbi'.
29899
29900     'O'
29901          An unsigned 7-bit constant whose 3 least significant bits are
29902          0.
29903
29904     'P'
29905          An unsigned 3-bit constant for 16-byte rotates and shifts
29906
29907     'R'
29908          Call operand, reg, for indirect calls
29909
29910     'S'
29911          Call operand, symbol, for relative calls.
29912
29913     'T'
29914          Call operand, const_int, for absolute calls.
29915
29916     'U'
29917          An immediate which can be loaded with the il/ila/ilh/ilhu
29918          instructions.  const_int is sign extended to 128 bit.
29919
29920     'W'
29921          An immediate for shift and rotate instructions.  const_int is
29922          treated as a 32 bit value.
29923
29924     'Y'
29925          An immediate for and/xor/or instructions.  const_int is sign
29926          extended as a 128 bit.
29927
29928     'Z'
29929          An immediate for the 'iohl' instruction.  const_int is sign
29930          extended to 128 bit.
29931
29932_S/390 and zSeries--'config/s390/s390.h'_
29933     'a'
29934          Address register (general purpose register except r0)
29935
29936     'c'
29937          Condition code register
29938
29939     'd'
29940          Data register (arbitrary general purpose register)
29941
29942     'f'
29943          Floating-point register
29944
29945     'I'
29946          Unsigned 8-bit constant (0-255)
29947
29948     'J'
29949          Unsigned 12-bit constant (0-4095)
29950
29951     'K'
29952          Signed 16-bit constant (-32768-32767)
29953
29954     'L'
29955          Value appropriate as displacement.
29956          '(0..4095)'
29957               for short displacement
29958          '(-524288..524287)'
29959               for long displacement
29960
29961     'M'
29962          Constant integer with a value of 0x7fffffff.
29963
29964     'N'
29965          Multiple letter constraint followed by 4 parameter letters.
29966          '0..9:'
29967               number of the part counting from most to least
29968               significant
29969          'H,Q:'
29970               mode of the part
29971          'D,S,H:'
29972               mode of the containing operand
29973          '0,F:'
29974               value of the other parts (F--all bits set)
29975          The constraint matches if the specified part of a constant has
29976          a value different from its other parts.
29977
29978     'Q'
29979          Memory reference without index register and with short
29980          displacement.
29981
29982     'R'
29983          Memory reference with index register and short displacement.
29984
29985     'S'
29986          Memory reference without index register but with long
29987          displacement.
29988
29989     'T'
29990          Memory reference with index register and long displacement.
29991
29992     'U'
29993          Pointer with short displacement.
29994
29995     'W'
29996          Pointer with long displacement.
29997
29998     'Y'
29999          Shift count operand.
30000
30001_Score family--'config/score/score.h'_
30002     'd'
30003          Registers from r0 to r32.
30004
30005     'e'
30006          Registers from r0 to r16.
30007
30008     't'
30009          r8--r11 or r22--r27 registers.
30010
30011     'h'
30012          hi register.
30013
30014     'l'
30015          lo register.
30016
30017     'x'
30018          hi + lo register.
30019
30020     'q'
30021          cnt register.
30022
30023     'y'
30024          lcb register.
30025
30026     'z'
30027          scb register.
30028
30029     'a'
30030          cnt + lcb + scb register.
30031
30032     'c'
30033          cr0--cr15 register.
30034
30035     'b'
30036          cp1 registers.
30037
30038     'f'
30039          cp2 registers.
30040
30041     'i'
30042          cp3 registers.
30043
30044     'j'
30045          cp1 + cp2 + cp3 registers.
30046
30047     'I'
30048          High 16-bit constant (32-bit constant with 16 LSBs zero).
30049
30050     'J'
30051          Unsigned 5 bit integer (in the range 0 to 31).
30052
30053     'K'
30054          Unsigned 16 bit integer (in the range 0 to 65535).
30055
30056     'L'
30057          Signed 16 bit integer (in the range -32768 to 32767).
30058
30059     'M'
30060          Unsigned 14 bit integer (in the range 0 to 16383).
30061
30062     'N'
30063          Signed 14 bit integer (in the range -8192 to 8191).
30064
30065     'Z'
30066          Any SYMBOL_REF.
30067
30068_Xstormy16--'config/stormy16/stormy16.h'_
30069     'a'
30070          Register r0.
30071
30072     'b'
30073          Register r1.
30074
30075     'c'
30076          Register r2.
30077
30078     'd'
30079          Register r8.
30080
30081     'e'
30082          Registers r0 through r7.
30083
30084     't'
30085          Registers r0 and r1.
30086
30087     'y'
30088          The carry register.
30089
30090     'z'
30091          Registers r8 and r9.
30092
30093     'I'
30094          A constant between 0 and 3 inclusive.
30095
30096     'J'
30097          A constant that has exactly one bit set.
30098
30099     'K'
30100          A constant that has exactly one bit clear.
30101
30102     'L'
30103          A constant between 0 and 255 inclusive.
30104
30105     'M'
30106          A constant between -255 and 0 inclusive.
30107
30108     'N'
30109          A constant between -3 and 0 inclusive.
30110
30111     'O'
30112          A constant between 1 and 4 inclusive.
30113
30114     'P'
30115          A constant between -4 and -1 inclusive.
30116
30117     'Q'
30118          A memory reference that is a stack push.
30119
30120     'R'
30121          A memory reference that is a stack pop.
30122
30123     'S'
30124          A memory reference that refers to a constant address of known
30125          value.
30126
30127     'T'
30128          The register indicated by Rx (not implemented yet).
30129
30130     'U'
30131          A constant that is not between 2 and 15 inclusive.
30132
30133     'Z'
30134          The constant 0.
30135
30136_TI C6X family--'config/c6x/constraints.md'_
30137     'a'
30138          Register file A (A0-A31).
30139
30140     'b'
30141          Register file B (B0-B31).
30142
30143     'A'
30144          Predicate registers in register file A (A0-A2 on C64X and
30145          higher, A1 and A2 otherwise).
30146
30147     'B'
30148          Predicate registers in register file B (B0-B2).
30149
30150     'C'
30151          A call-used register in register file B (B0-B9, B16-B31).
30152
30153     'Da'
30154          Register file A, excluding predicate registers (A3-A31, plus
30155          A0 if not C64X or higher).
30156
30157     'Db'
30158          Register file B, excluding predicate registers (B3-B31).
30159
30160     'Iu4'
30161          Integer constant in the range 0 ... 15.
30162
30163     'Iu5'
30164          Integer constant in the range 0 ... 31.
30165
30166     'In5'
30167          Integer constant in the range -31 ... 0.
30168
30169     'Is5'
30170          Integer constant in the range -16 ... 15.
30171
30172     'I5x'
30173          Integer constant that can be the operand of an ADDA or a SUBA
30174          insn.
30175
30176     'IuB'
30177          Integer constant in the range 0 ... 65535.
30178
30179     'IsB'
30180          Integer constant in the range -32768 ... 32767.
30181
30182     'IsC'
30183          Integer constant in the range -2^{20} ... 2^{20} - 1.
30184
30185     'Jc'
30186          Integer constant that is a valid mask for the clr instruction.
30187
30188     'Js'
30189          Integer constant that is a valid mask for the set instruction.
30190
30191     'Q'
30192          Memory location with A base register.
30193
30194     'R'
30195          Memory location with B base register.
30196
30197     'Z'
30198          Register B14 (aka DP).
30199
30200_TILE-Gx--'config/tilegx/constraints.md'_
30201     'R00'
30202     'R01'
30203     'R02'
30204     'R03'
30205     'R04'
30206     'R05'
30207     'R06'
30208     'R07'
30209     'R08'
30210     'R09'
30211     'R10'
30212          Each of these represents a register constraint for an
30213          individual register, from r0 to r10.
30214
30215     'I'
30216          Signed 8-bit integer constant.
30217
30218     'J'
30219          Signed 16-bit integer constant.
30220
30221     'K'
30222          Unsigned 16-bit integer constant.
30223
30224     'L'
30225          Integer constant that fits in one signed byte when incremented
30226          by one (-129 ... 126).
30227
30228     'm'
30229          Memory operand.  If used together with '<' or '>', the operand
30230          can have postincrement which requires printing with '%In' and
30231          '%in' on TILE-Gx.  For example:
30232
30233               asm ("st_add %I0,%1,%i0" : "=m<>" (*mem) : "r" (val));
30234
30235     'M'
30236          A bit mask suitable for the BFINS instruction.
30237
30238     'N'
30239          Integer constant that is a byte tiled out eight times.
30240
30241     'O'
30242          The integer zero constant.
30243
30244     'P'
30245          Integer constant that is a sign-extended byte tiled out as
30246          four shorts.
30247
30248     'Q'
30249          Integer constant that fits in one signed byte when incremented
30250          (-129 ... 126), but excluding -1.
30251
30252     'S'
30253          Integer constant that has all 1 bits consecutive and starting
30254          at bit 0.
30255
30256     'T'
30257          A 16-bit fragment of a got, tls, or pc-relative reference.
30258
30259     'U'
30260          Memory operand except postincrement.  This is roughly the same
30261          as 'm' when not used together with '<' or '>'.
30262
30263     'W'
30264          An 8-element vector constant with identical elements.
30265
30266     'Y'
30267          A 4-element vector constant with identical elements.
30268
30269     'Z0'
30270          The integer constant 0xffffffff.
30271
30272     'Z1'
30273          The integer constant 0xffffffff00000000.
30274
30275_TILEPro--'config/tilepro/constraints.md'_
30276     'R00'
30277     'R01'
30278     'R02'
30279     'R03'
30280     'R04'
30281     'R05'
30282     'R06'
30283     'R07'
30284     'R08'
30285     'R09'
30286     'R10'
30287          Each of these represents a register constraint for an
30288          individual register, from r0 to r10.
30289
30290     'I'
30291          Signed 8-bit integer constant.
30292
30293     'J'
30294          Signed 16-bit integer constant.
30295
30296     'K'
30297          Nonzero integer constant with low 16 bits zero.
30298
30299     'L'
30300          Integer constant that fits in one signed byte when incremented
30301          by one (-129 ... 126).
30302
30303     'm'
30304          Memory operand.  If used together with '<' or '>', the operand
30305          can have postincrement which requires printing with '%In' and
30306          '%in' on TILEPro.  For example:
30307
30308               asm ("swadd %I0,%1,%i0" : "=m<>" (mem) : "r" (val));
30309
30310     'M'
30311          A bit mask suitable for the MM instruction.
30312
30313     'N'
30314          Integer constant that is a byte tiled out four times.
30315
30316     'O'
30317          The integer zero constant.
30318
30319     'P'
30320          Integer constant that is a sign-extended byte tiled out as two
30321          shorts.
30322
30323     'Q'
30324          Integer constant that fits in one signed byte when incremented
30325          (-129 ... 126), but excluding -1.
30326
30327     'T'
30328          A symbolic operand, or a 16-bit fragment of a got, tls, or
30329          pc-relative reference.
30330
30331     'U'
30332          Memory operand except postincrement.  This is roughly the same
30333          as 'm' when not used together with '<' or '>'.
30334
30335     'W'
30336          A 4-element vector constant with identical elements.
30337
30338     'Y'
30339          A 2-element vector constant with identical elements.
30340
30341_Xtensa--'config/xtensa/constraints.md'_
30342     'a'
30343          General-purpose 32-bit register
30344
30345     'b'
30346          One-bit boolean register
30347
30348     'A'
30349          MAC16 40-bit accumulator register
30350
30351     'I'
30352          Signed 12-bit integer constant, for use in MOVI instructions
30353
30354     'J'
30355          Signed 8-bit integer constant, for use in ADDI instructions
30356
30357     'K'
30358          Integer constant valid for BccI instructions
30359
30360     'L'
30361          Unsigned constant valid for BccUI instructions
30362
30363
30364File: gcc.info,  Node: Asm Labels,  Next: Explicit Reg Vars,  Prev: Constraints,  Up: C Extensions
30365
303666.43 Controlling Names Used in Assembler Code
30367=============================================
30368
30369You can specify the name to be used in the assembler code for a C
30370function or variable by writing the 'asm' (or '__asm__') keyword after
30371the declarator as follows:
30372
30373     int foo asm ("myfoo") = 2;
30374
30375This specifies that the name to be used for the variable 'foo' in the
30376assembler code should be 'myfoo' rather than the usual '_foo'.
30377
30378 On systems where an underscore is normally prepended to the name of a C
30379function or variable, this feature allows you to define names for the
30380linker that do not start with an underscore.
30381
30382 It does not make sense to use this feature with a non-static local
30383variable since such variables do not have assembler names.  If you are
30384trying to put the variable in a particular register, see *note Explicit
30385Reg Vars::.  GCC presently accepts such code with a warning, but will
30386probably be changed to issue an error, rather than a warning, in the
30387future.
30388
30389 You cannot use 'asm' in this way in a function _definition_; but you
30390can get the same effect by writing a declaration for the function before
30391its definition and putting 'asm' there, like this:
30392
30393     extern func () asm ("FUNC");
30394
30395     func (x, y)
30396          int x, y;
30397     /* ... */
30398
30399 It is up to you to make sure that the assembler names you choose do not
30400conflict with any other assembler symbols.  Also, you must not use a
30401register name; that would produce completely invalid assembler code.
30402GCC does not as yet have the ability to store static variables in
30403registers.  Perhaps that will be added.
30404
30405
30406File: gcc.info,  Node: Explicit Reg Vars,  Next: Alternate Keywords,  Prev: Asm Labels,  Up: C Extensions
30407
304086.44 Variables in Specified Registers
30409=====================================
30410
30411GNU C allows you to put a few global variables into specified hardware
30412registers.  You can also specify the register in which an ordinary
30413register variable should be allocated.
30414
30415   * Global register variables reserve registers throughout the program.
30416     This may be useful in programs such as programming language
30417     interpreters that have a couple of global variables that are
30418     accessed very often.
30419
30420   * Local register variables in specific registers do not reserve the
30421     registers, except at the point where they are used as input or
30422     output operands in an 'asm' statement and the 'asm' statement
30423     itself is not deleted.  The compiler's data flow analysis is
30424     capable of determining where the specified registers contain live
30425     values, and where they are available for other uses.  Stores into
30426     local register variables may be deleted when they appear to be dead
30427     according to dataflow analysis.  References to local register
30428     variables may be deleted or moved or simplified.
30429
30430     These local variables are sometimes convenient for use with the
30431     extended 'asm' feature (*note Extended Asm::), if you want to write
30432     one output of the assembler instruction directly into a particular
30433     register.  (This works provided the register you specify fits the
30434     constraints specified for that operand in the 'asm'.)
30435
30436* Menu:
30437
30438* Global Reg Vars::
30439* Local Reg Vars::
30440
30441
30442File: gcc.info,  Node: Global Reg Vars,  Next: Local Reg Vars,  Up: Explicit Reg Vars
30443
304446.44.1 Defining Global Register Variables
30445-----------------------------------------
30446
30447You can define a global register variable in GNU C like this:
30448
30449     register int *foo asm ("a5");
30450
30451Here 'a5' is the name of the register that should be used.  Choose a
30452register that is normally saved and restored by function calls on your
30453machine, so that library routines will not clobber it.
30454
30455 Naturally the register name is cpu-dependent, so you need to
30456conditionalize your program according to cpu type.  The register 'a5' is
30457a good choice on a 68000 for a variable of pointer type.  On machines
30458with register windows, be sure to choose a "global" register that is not
30459affected magically by the function call mechanism.
30460
30461 In addition, different operating systems on the same CPU may differ in
30462how they name the registers; then you need additional conditionals.  For
30463example, some 68000 operating systems call this register '%a5'.
30464
30465 Eventually there may be a way of asking the compiler to choose a
30466register automatically, but first we need to figure out how it should
30467choose and how to enable you to guide the choice.  No solution is
30468evident.
30469
30470 Defining a global register variable in a certain register reserves that
30471register entirely for this use, at least within the current compilation.
30472The register is not allocated for any other purpose in the functions in
30473the current compilation, and is not saved and restored by these
30474functions.  Stores into this register are never deleted even if they
30475appear to be dead, but references may be deleted or moved or simplified.
30476
30477 It is not safe to access the global register variables from signal
30478handlers, or from more than one thread of control, because the system
30479library routines may temporarily use the register for other things
30480(unless you recompile them specially for the task at hand).
30481
30482 It is not safe for one function that uses a global register variable to
30483call another such function 'foo' by way of a third function 'lose' that
30484is compiled without knowledge of this variable (i.e. in a different
30485source file in which the variable isn't declared).  This is because
30486'lose' might save the register and put some other value there.  For
30487example, you can't expect a global register variable to be available in
30488the comparison-function that you pass to 'qsort', since 'qsort' might
30489have put something else in that register.  (If you are prepared to
30490recompile 'qsort' with the same global register variable, you can solve
30491this problem.)
30492
30493 If you want to recompile 'qsort' or other source files that do not
30494actually use your global register variable, so that they do not use that
30495register for any other purpose, then it suffices to specify the compiler
30496option '-ffixed-REG'.  You need not actually add a global register
30497declaration to their source code.
30498
30499 A function that can alter the value of a global register variable
30500cannot safely be called from a function compiled without this variable,
30501because it could clobber the value the caller expects to find there on
30502return.  Therefore, the function that is the entry point into the part
30503of the program that uses the global register variable must explicitly
30504save and restore the value that belongs to its caller.
30505
30506 On most machines, 'longjmp' restores to each global register variable
30507the value it had at the time of the 'setjmp'.  On some machines,
30508however, 'longjmp' does not change the value of global register
30509variables.  To be portable, the function that called 'setjmp' should
30510make other arrangements to save the values of the global register
30511variables, and to restore them in a 'longjmp'.  This way, the same thing
30512happens regardless of what 'longjmp' does.
30513
30514 All global register variable declarations must precede all function
30515definitions.  If such a declaration could appear after function
30516definitions, the declaration would be too late to prevent the register
30517from being used for other purposes in the preceding functions.
30518
30519 Global register variables may not have initial values, because an
30520executable file has no means to supply initial contents for a register.
30521
30522 On the SPARC, there are reports that g3 ... g7 are suitable registers,
30523but certain library functions, such as 'getwd', as well as the
30524subroutines for division and remainder, modify g3 and g4.  g1 and g2 are
30525local temporaries.
30526
30527 On the 68000, a2 ... a5 should be suitable, as should d2 ... d7.  Of
30528course, it does not do to use more than a few of those.
30529
30530
30531File: gcc.info,  Node: Local Reg Vars,  Prev: Global Reg Vars,  Up: Explicit Reg Vars
30532
305336.44.2 Specifying Registers for Local Variables
30534-----------------------------------------------
30535
30536You can define a local register variable with a specified register like
30537this:
30538
30539     register int *foo asm ("a5");
30540
30541Here 'a5' is the name of the register that should be used.  Note that
30542this is the same syntax used for defining global register variables, but
30543for a local variable it appears within a function.
30544
30545 Naturally the register name is cpu-dependent, but this is not a
30546problem, since specific registers are most often useful with explicit
30547assembler instructions (*note Extended Asm::).  Both of these things
30548generally require that you conditionalize your program according to cpu
30549type.
30550
30551 In addition, operating systems on one type of cpu may differ in how
30552they name the registers; then you need additional conditionals.  For
30553example, some 68000 operating systems call this register '%a5'.
30554
30555 Defining such a register variable does not reserve the register; it
30556remains available for other uses in places where flow control determines
30557the variable's value is not live.
30558
30559 This option does not guarantee that GCC generates code that has this
30560variable in the register you specify at all times.  You may not code an
30561explicit reference to this register in the _assembler instruction
30562template_ part of an 'asm' statement and assume it always refers to this
30563variable.  However, using the variable as an 'asm' _operand_ guarantees
30564that the specified register is used for the operand.
30565
30566 Stores into local register variables may be deleted when they appear to
30567be dead according to dataflow analysis.  References to local register
30568variables may be deleted or moved or simplified.
30569
30570 As for global register variables, it's recommended that you choose a
30571register that is normally saved and restored by function calls on your
30572machine, so that library routines will not clobber it.  A common pitfall
30573is to initialize multiple call-clobbered registers with arbitrary
30574expressions, where a function call or library call for an arithmetic
30575operator overwrites a register value from a previous assignment, for
30576example 'r0' below:
30577     register int *p1 asm ("r0") = ...;
30578     register int *p2 asm ("r1") = ...;
30579
30580In those cases, a solution is to use a temporary variable for each
30581arbitrary expression.  *Note Example of asm with clobbered asm reg::.
30582
30583
30584File: gcc.info,  Node: Alternate Keywords,  Next: Incomplete Enums,  Prev: Explicit Reg Vars,  Up: C Extensions
30585
305866.45 Alternate Keywords
30587=======================
30588
30589'-ansi' and the various '-std' options disable certain keywords.  This
30590causes trouble when you want to use GNU C extensions, or a
30591general-purpose header file that should be usable by all programs,
30592including ISO C programs.  The keywords 'asm', 'typeof' and 'inline' are
30593not available in programs compiled with '-ansi' or '-std' (although
30594'inline' can be used in a program compiled with '-std=c99' or
30595'-std=c11').  The ISO C99 keyword 'restrict' is only available when
30596'-std=gnu99' (which will eventually be the default) or '-std=c99' (or
30597the equivalent '-std=iso9899:1999'), or an option for a later standard
30598version, is used.
30599
30600 The way to solve these problems is to put '__' at the beginning and end
30601of each problematical keyword.  For example, use '__asm__' instead of
30602'asm', and '__inline__' instead of 'inline'.
30603
30604 Other C compilers won't accept these alternative keywords; if you want
30605to compile with another compiler, you can define the alternate keywords
30606as macros to replace them with the customary keywords.  It looks like
30607this:
30608
30609     #ifndef __GNUC__
30610     #define __asm__ asm
30611     #endif
30612
30613 '-pedantic' and other options cause warnings for many GNU C extensions.
30614You can prevent such warnings within one expression by writing
30615'__extension__' before the expression.  '__extension__' has no effect
30616aside from this.
30617
30618
30619File: gcc.info,  Node: Incomplete Enums,  Next: Function Names,  Prev: Alternate Keywords,  Up: C Extensions
30620
306216.46 Incomplete 'enum' Types
30622============================
30623
30624You can define an 'enum' tag without specifying its possible values.
30625This results in an incomplete type, much like what you get if you write
30626'struct foo' without describing the elements.  A later declaration that
30627does specify the possible values completes the type.
30628
30629 You can't allocate variables or storage using the type while it is
30630incomplete.  However, you can work with pointers to that type.
30631
30632 This extension may not be very useful, but it makes the handling of
30633'enum' more consistent with the way 'struct' and 'union' are handled.
30634
30635 This extension is not supported by GNU C++.
30636
30637
30638File: gcc.info,  Node: Function Names,  Next: Return Address,  Prev: Incomplete Enums,  Up: C Extensions
30639
306406.47 Function Names as Strings
30641==============================
30642
30643GCC provides three magic variables that hold the name of the current
30644function, as a string.  The first of these is '__func__', which is part
30645of the C99 standard:
30646
30647 The identifier '__func__' is implicitly declared by the translator as
30648if, immediately following the opening brace of each function definition,
30649the declaration
30650
30651     static const char __func__[] = "function-name";
30652
30653appeared, where function-name is the name of the lexically-enclosing
30654function.  This name is the unadorned name of the function.
30655
30656 '__FUNCTION__' is another name for '__func__'.  Older versions of GCC
30657recognize only this name.  However, it is not standardized.  For maximum
30658portability, we recommend you use '__func__', but provide a fallback
30659definition with the preprocessor:
30660
30661     #if __STDC_VERSION__ < 199901L
30662     # if __GNUC__ >= 2
30663     #  define __func__ __FUNCTION__
30664     # else
30665     #  define __func__ "<unknown>"
30666     # endif
30667     #endif
30668
30669 In C, '__PRETTY_FUNCTION__' is yet another name for '__func__'.
30670However, in C++, '__PRETTY_FUNCTION__' contains the type signature of
30671the function as well as its bare name.  For example, this program:
30672
30673     extern "C" {
30674     extern int printf (char *, ...);
30675     }
30676
30677     class a {
30678      public:
30679       void sub (int i)
30680         {
30681           printf ("__FUNCTION__ = %s\n", __FUNCTION__);
30682           printf ("__PRETTY_FUNCTION__ = %s\n", __PRETTY_FUNCTION__);
30683         }
30684     };
30685
30686     int
30687     main (void)
30688     {
30689       a ax;
30690       ax.sub (0);
30691       return 0;
30692     }
30693
30694gives this output:
30695
30696     __FUNCTION__ = sub
30697     __PRETTY_FUNCTION__ = void a::sub(int)
30698
30699 These identifiers are not preprocessor macros.  In GCC 3.3 and earlier,
30700in C only, '__FUNCTION__' and '__PRETTY_FUNCTION__' were treated as
30701string literals; they could be used to initialize 'char' arrays, and
30702they could be concatenated with other string literals.  GCC 3.4 and
30703later treat them as variables, like '__func__'.  In C++, '__FUNCTION__'
30704and '__PRETTY_FUNCTION__' have always been variables.
30705
30706
30707File: gcc.info,  Node: Return Address,  Next: Vector Extensions,  Prev: Function Names,  Up: C Extensions
30708
307096.48 Getting the Return or Frame Address of a Function
30710======================================================
30711
30712These functions may be used to get information about the callers of a
30713function.
30714
30715 -- Built-in Function: void * __builtin_return_address (unsigned int
30716          LEVEL)
30717     This function returns the return address of the current function,
30718     or of one of its callers.  The LEVEL argument is number of frames
30719     to scan up the call stack.  A value of '0' yields the return
30720     address of the current function, a value of '1' yields the return
30721     address of the caller of the current function, and so forth.  When
30722     inlining the expected behavior is that the function returns the
30723     address of the function that is returned to.  To work around this
30724     behavior use the 'noinline' function attribute.
30725
30726     The LEVEL argument must be a constant integer.
30727
30728     On some machines it may be impossible to determine the return
30729     address of any function other than the current one; in such cases,
30730     or when the top of the stack has been reached, this function
30731     returns '0' or a random value.  In addition,
30732     '__builtin_frame_address' may be used to determine if the top of
30733     the stack has been reached.
30734
30735     Additional post-processing of the returned value may be needed, see
30736     '__builtin_extract_return_addr'.
30737
30738     This function should only be used with a nonzero argument for
30739     debugging purposes.
30740
30741 -- Built-in Function: void * __builtin_extract_return_addr (void *ADDR)
30742     The address as returned by '__builtin_return_address' may have to
30743     be fed through this function to get the actual encoded address.
30744     For example, on the 31-bit S/390 platform the highest bit has to be
30745     masked out, or on SPARC platforms an offset has to be added for the
30746     true next instruction to be executed.
30747
30748     If no fixup is needed, this function simply passes through ADDR.
30749
30750 -- Built-in Function: void * __builtin_frob_return_address (void *ADDR)
30751     This function does the reverse of '__builtin_extract_return_addr'.
30752
30753 -- Built-in Function: void * __builtin_frame_address (unsigned int
30754          LEVEL)
30755     This function is similar to '__builtin_return_address', but it
30756     returns the address of the function frame rather than the return
30757     address of the function.  Calling '__builtin_frame_address' with a
30758     value of '0' yields the frame address of the current function, a
30759     value of '1' yields the frame address of the caller of the current
30760     function, and so forth.
30761
30762     The frame is the area on the stack that holds local variables and
30763     saved registers.  The frame address is normally the address of the
30764     first word pushed on to the stack by the function.  However, the
30765     exact definition depends upon the processor and the calling
30766     convention.  If the processor has a dedicated frame pointer
30767     register, and the function has a frame, then
30768     '__builtin_frame_address' returns the value of the frame pointer
30769     register.
30770
30771     On some machines it may be impossible to determine the frame
30772     address of any function other than the current one; in such cases,
30773     or when the top of the stack has been reached, this function
30774     returns '0' if the first frame pointer is properly initialized by
30775     the startup code.
30776
30777     This function should only be used with a nonzero argument for
30778     debugging purposes.
30779
30780
30781File: gcc.info,  Node: Vector Extensions,  Next: Offsetof,  Prev: Return Address,  Up: C Extensions
30782
307836.49 Using Vector Instructions through Built-in Functions
30784=========================================================
30785
30786On some targets, the instruction set contains SIMD vector instructions
30787which operate on multiple values contained in one large register at the
30788same time.  For example, on the i386 the MMX, 3DNow! and SSE extensions
30789can be used this way.
30790
30791 The first step in using these extensions is to provide the necessary
30792data types.  This should be done using an appropriate 'typedef':
30793
30794     typedef int v4si __attribute__ ((vector_size (16)));
30795
30796The 'int' type specifies the base type, while the attribute specifies
30797the vector size for the variable, measured in bytes.  For example, the
30798declaration above causes the compiler to set the mode for the 'v4si'
30799type to be 16 bytes wide and divided into 'int' sized units.  For a
3080032-bit 'int' this means a vector of 4 units of 4 bytes, and the
30801corresponding mode of 'foo' is V4SI.
30802
30803 The 'vector_size' attribute is only applicable to integral and float
30804scalars, although arrays, pointers, and function return values are
30805allowed in conjunction with this construct.  Only sizes that are a power
30806of two are currently allowed.
30807
30808 All the basic integer types can be used as base types, both as signed
30809and as unsigned: 'char', 'short', 'int', 'long', 'long long'.  In
30810addition, 'float' and 'double' can be used to build floating-point
30811vector types.
30812
30813 Specifying a combination that is not valid for the current architecture
30814causes GCC to synthesize the instructions using a narrower mode.  For
30815example, if you specify a variable of type 'V4SI' and your architecture
30816does not allow for this specific SIMD type, GCC produces code that uses
308174 'SIs'.
30818
30819 The types defined in this manner can be used with a subset of normal C
30820operations.  Currently, GCC allows using the following operators on
30821these types: '+, -, *, /, unary minus, ^, |, &, ~, %'.
30822
30823 The operations behave like C++ 'valarrays'.  Addition is defined as the
30824addition of the corresponding elements of the operands.  For example, in
30825the code below, each of the 4 elements in A is added to the
30826corresponding 4 elements in B and the resulting vector is stored in C.
30827
30828     typedef int v4si __attribute__ ((vector_size (16)));
30829
30830     v4si a, b, c;
30831
30832     c = a + b;
30833
30834 Subtraction, multiplication, division, and the logical operations
30835operate in a similar manner.  Likewise, the result of using the unary
30836minus or complement operators on a vector type is a vector whose
30837elements are the negative or complemented values of the corresponding
30838elements in the operand.
30839
30840 It is possible to use shifting operators '<<', '>>' on integer-type
30841vectors.  The operation is defined as following: '{a0, a1, ..., an} >>
30842{b0, b1, ..., bn} == {a0 >> b0, a1 >> b1, ..., an >> bn}'.  Vector
30843operands must have the same number of elements.
30844
30845 For convenience, it is allowed to use a binary vector operation where
30846one operand is a scalar.  In that case the compiler transforms the
30847scalar operand into a vector where each element is the scalar from the
30848operation.  The transformation happens only if the scalar could be
30849safely converted to the vector-element type.  Consider the following
30850code.
30851
30852     typedef int v4si __attribute__ ((vector_size (16)));
30853
30854     v4si a, b, c;
30855     long l;
30856
30857     a = b + 1;    /* a = b + {1,1,1,1}; */
30858     a = 2 * b;    /* a = {2,2,2,2} * b; */
30859
30860     a = l + a;    /* Error, cannot convert long to int. */
30861
30862 Vectors can be subscripted as if the vector were an array with the same
30863number of elements and base type.  Out of bound accesses invoke
30864undefined behavior at run time.  Warnings for out of bound accesses for
30865vector subscription can be enabled with '-Warray-bounds'.
30866
30867 Vector comparison is supported with standard comparison operators: '==,
30868!=, <, <=, >, >='.  Comparison operands can be vector expressions of
30869integer-type or real-type.  Comparison between integer-type vectors and
30870real-type vectors are not supported.  The result of the comparison is a
30871vector of the same width and number of elements as the comparison
30872operands with a signed integral element type.
30873
30874 Vectors are compared element-wise producing 0 when comparison is false
30875and -1 (constant of the appropriate type where all bits are set)
30876otherwise.  Consider the following example.
30877
30878     typedef int v4si __attribute__ ((vector_size (16)));
30879
30880     v4si a = {1,2,3,4};
30881     v4si b = {3,2,1,4};
30882     v4si c;
30883
30884     c = a >  b;     /* The result would be {0, 0,-1, 0}  */
30885     c = a == b;     /* The result would be {0,-1, 0,-1}  */
30886
30887 In C++, the ternary operator '?:' is available.  'a?b:c', where 'b' and
30888'c' are vectors of the same type and 'a' is an integer vector with the
30889same number of elements of the same size as 'b' and 'c', computes all
30890three arguments and creates a vector '{a[0]?b[0]:c[0], a[1]?b[1]:c[1],
30891...}'.  Note that unlike in OpenCL, 'a' is thus interpreted as 'a != 0'
30892and not 'a < 0'.  As in the case of binary operations, this syntax is
30893also accepted when one of 'b' or 'c' is a scalar that is then
30894transformed into a vector.  If both 'b' and 'c' are scalars and the type
30895of 'true?b:c' has the same size as the element type of 'a', then 'b' and
30896'c' are converted to a vector type whose elements have this type and
30897with the same number of elements as 'a'.
30898
30899 Vector shuffling is available using functions '__builtin_shuffle (vec,
30900mask)' and '__builtin_shuffle (vec0, vec1, mask)'.  Both functions
30901construct a permutation of elements from one or two vectors and return a
30902vector of the same type as the input vector(s).  The MASK is an integral
30903vector with the same width (W) and element count (N) as the output
30904vector.
30905
30906 The elements of the input vectors are numbered in memory ordering of
30907VEC0 beginning at 0 and VEC1 beginning at N.  The elements of MASK are
30908considered modulo N in the single-operand case and modulo 2*N in the
30909two-operand case.
30910
30911 Consider the following example,
30912
30913     typedef int v4si __attribute__ ((vector_size (16)));
30914
30915     v4si a = {1,2,3,4};
30916     v4si b = {5,6,7,8};
30917     v4si mask1 = {0,1,1,3};
30918     v4si mask2 = {0,4,2,5};
30919     v4si res;
30920
30921     res = __builtin_shuffle (a, mask1);       /* res is {1,2,2,4}  */
30922     res = __builtin_shuffle (a, b, mask2);    /* res is {1,5,3,6}  */
30923
30924 Note that '__builtin_shuffle' is intentionally semantically compatible
30925with the OpenCL 'shuffle' and 'shuffle2' functions.
30926
30927 You can declare variables and use them in function calls and returns,
30928as well as in assignments and some casts.  You can specify a vector type
30929as a return type for a function.  Vector types can also be used as
30930function arguments.  It is possible to cast from one vector type to
30931another, provided they are of the same size (in fact, you can also cast
30932vectors to and from other datatypes of the same size).
30933
30934 You cannot operate between vectors of different lengths or different
30935signedness without a cast.
30936
30937
30938File: gcc.info,  Node: Offsetof,  Next: __sync Builtins,  Prev: Vector Extensions,  Up: C Extensions
30939
309406.50 Offsetof
30941=============
30942
30943GCC implements for both C and C++ a syntactic extension to implement the
30944'offsetof' macro.
30945
30946     primary:
30947             "__builtin_offsetof" "(" typename "," offsetof_member_designator ")"
30948
30949     offsetof_member_designator:
30950               identifier
30951             | offsetof_member_designator "." identifier
30952             | offsetof_member_designator "[" expr "]"
30953
30954 This extension is sufficient such that
30955
30956     #define offsetof(TYPE, MEMBER)  __builtin_offsetof (TYPE, MEMBER)
30957
30958is a suitable definition of the 'offsetof' macro.  In C++, TYPE may be
30959dependent.  In either case, MEMBER may consist of a single identifier,
30960or a sequence of member accesses and array references.
30961
30962
30963File: gcc.info,  Node: __sync Builtins,  Next: __atomic Builtins,  Prev: Offsetof,  Up: C Extensions
30964
309656.51 Legacy __sync Built-in Functions for Atomic Memory Access
30966==============================================================
30967
30968The following built-in functions are intended to be compatible with
30969those described in the 'Intel Itanium Processor-specific Application
30970Binary Interface', section 7.4.  As such, they depart from the normal
30971GCC practice of using the '__builtin_' prefix, and further that they are
30972overloaded such that they work on multiple types.
30973
30974 The definition given in the Intel documentation allows only for the use
30975of the types 'int', 'long', 'long long' as well as their unsigned
30976counterparts.  GCC allows any integral scalar or pointer type that is 1,
309772, 4 or 8 bytes in length.
30978
30979 Not all operations are supported by all target processors.  If a
30980particular operation cannot be implemented on the target processor, a
30981warning is generated and a call an external function is generated.  The
30982external function carries the same name as the built-in version, with an
30983additional suffix '_N' where N is the size of the data type.
30984
30985 In most cases, these built-in functions are considered a "full
30986barrier".  That is, no memory operand is moved across the operation,
30987either forward or backward.  Further, instructions are issued as
30988necessary to prevent the processor from speculating loads across the
30989operation and from queuing stores after the operation.
30990
30991 All of the routines are described in the Intel documentation to take
30992"an optional list of variables protected by the memory barrier".  It's
30993not clear what is meant by that; it could mean that _only_ the following
30994variables are protected, or it could mean that these variables should in
30995addition be protected.  At present GCC ignores this list and protects
30996all variables that are globally accessible.  If in the future we make
30997some use of this list, an empty list will continue to mean all globally
30998accessible variables.
30999
31000'TYPE __sync_fetch_and_add (TYPE *ptr, TYPE value, ...)'
31001'TYPE __sync_fetch_and_sub (TYPE *ptr, TYPE value, ...)'
31002'TYPE __sync_fetch_and_or (TYPE *ptr, TYPE value, ...)'
31003'TYPE __sync_fetch_and_and (TYPE *ptr, TYPE value, ...)'
31004'TYPE __sync_fetch_and_xor (TYPE *ptr, TYPE value, ...)'
31005'TYPE __sync_fetch_and_nand (TYPE *ptr, TYPE value, ...)'
31006     These built-in functions perform the operation suggested by the
31007     name, and returns the value that had previously been in memory.
31008     That is,
31009
31010          { tmp = *ptr; *ptr OP= value; return tmp; }
31011          { tmp = *ptr; *ptr = ~(tmp & value); return tmp; }   // nand
31012
31013     _Note:_ GCC 4.4 and later implement '__sync_fetch_and_nand' as
31014     '*ptr = ~(tmp & value)' instead of '*ptr = ~tmp & value'.
31015
31016'TYPE __sync_add_and_fetch (TYPE *ptr, TYPE value, ...)'
31017'TYPE __sync_sub_and_fetch (TYPE *ptr, TYPE value, ...)'
31018'TYPE __sync_or_and_fetch (TYPE *ptr, TYPE value, ...)'
31019'TYPE __sync_and_and_fetch (TYPE *ptr, TYPE value, ...)'
31020'TYPE __sync_xor_and_fetch (TYPE *ptr, TYPE value, ...)'
31021'TYPE __sync_nand_and_fetch (TYPE *ptr, TYPE value, ...)'
31022     These built-in functions perform the operation suggested by the
31023     name, and return the new value.  That is,
31024
31025          { *ptr OP= value; return *ptr; }
31026          { *ptr = ~(*ptr & value); return *ptr; }   // nand
31027
31028     _Note:_ GCC 4.4 and later implement '__sync_nand_and_fetch' as
31029     '*ptr = ~(*ptr & value)' instead of '*ptr = ~*ptr & value'.
31030
31031'bool __sync_bool_compare_and_swap (TYPE *ptr, TYPE oldval, TYPE newval, ...)'
31032'TYPE __sync_val_compare_and_swap (TYPE *ptr, TYPE oldval, TYPE newval, ...)'
31033     These built-in functions perform an atomic compare and swap.  That
31034     is, if the current value of '*PTR' is OLDVAL, then write NEWVAL
31035     into '*PTR'.
31036
31037     The "bool" version returns true if the comparison is successful and
31038     NEWVAL is written.  The "val" version returns the contents of
31039     '*PTR' before the operation.
31040
31041'__sync_synchronize (...)'
31042     This built-in function issues a full memory barrier.
31043
31044'TYPE __sync_lock_test_and_set (TYPE *ptr, TYPE value, ...)'
31045     This built-in function, as described by Intel, is not a traditional
31046     test-and-set operation, but rather an atomic exchange operation.
31047     It writes VALUE into '*PTR', and returns the previous contents of
31048     '*PTR'.
31049
31050     Many targets have only minimal support for such locks, and do not
31051     support a full exchange operation.  In this case, a target may
31052     support reduced functionality here by which the _only_ valid value
31053     to store is the immediate constant 1.  The exact value actually
31054     stored in '*PTR' is implementation defined.
31055
31056     This built-in function is not a full barrier, but rather an
31057     "acquire barrier".  This means that references after the operation
31058     cannot move to (or be speculated to) before the operation, but
31059     previous memory stores may not be globally visible yet, and
31060     previous memory loads may not yet be satisfied.
31061
31062'void __sync_lock_release (TYPE *ptr, ...)'
31063     This built-in function releases the lock acquired by
31064     '__sync_lock_test_and_set'.  Normally this means writing the
31065     constant 0 to '*PTR'.
31066
31067     This built-in function is not a full barrier, but rather a "release
31068     barrier".  This means that all previous memory stores are globally
31069     visible, and all previous memory loads have been satisfied, but
31070     following memory reads are not prevented from being speculated to
31071     before the barrier.
31072
31073
31074File: gcc.info,  Node: __atomic Builtins,  Next: x86 specific memory model extensions for transactional memory,  Prev: __sync Builtins,  Up: C Extensions
31075
310766.52 Built-in functions for memory model aware atomic operations
31077================================================================
31078
31079The following built-in functions approximately match the requirements
31080for C++11 memory model.  Many are similar to the '__sync' prefixed
31081built-in functions, but all also have a memory model parameter.  These
31082are all identified by being prefixed with '__atomic', and most are
31083overloaded such that they work with multiple types.
31084
31085 GCC allows any integral scalar or pointer type that is 1, 2, 4, or 8
31086bytes in length.  16-byte integral types are also allowed if '__int128'
31087(*note __int128::) is supported by the architecture.
31088
31089 Target architectures are encouraged to provide their own patterns for
31090each of these built-in functions.  If no target is provided, the
31091original non-memory model set of '__sync' atomic built-in functions are
31092utilized, along with any required synchronization fences surrounding it
31093in order to achieve the proper behavior.  Execution in this case is
31094subject to the same restrictions as those built-in functions.
31095
31096 If there is no pattern or mechanism to provide a lock free instruction
31097sequence, a call is made to an external routine with the same parameters
31098to be resolved at run time.
31099
31100 The four non-arithmetic functions (load, store, exchange, and
31101compare_exchange) all have a generic version as well.  This generic
31102version works on any data type.  If the data type size maps to one of
31103the integral sizes that may have lock free support, the generic version
31104utilizes the lock free built-in function.  Otherwise an external call is
31105left to be resolved at run time.  This external call is the same format
31106with the addition of a 'size_t' parameter inserted as the first
31107parameter indicating the size of the object being pointed to.  All
31108objects must be the same size.
31109
31110 There are 6 different memory models that can be specified.  These map
31111to the same names in the C++11 standard.  Refer there or to the GCC wiki
31112on atomic synchronization
31113(http://gcc.gnu.org/wiki/Atomic/GCCMM/AtomicSync) for more detailed
31114definitions.  These memory models integrate both barriers to code motion
31115as well as synchronization requirements with other threads.  These are
31116listed in approximately ascending order of strength.  It is also
31117possible to use target specific flags for memory model flags, like
31118Hardware Lock Elision.
31119
31120'__ATOMIC_RELAXED'
31121     No barriers or synchronization.
31122'__ATOMIC_CONSUME'
31123     Data dependency only for both barrier and synchronization with
31124     another thread.
31125'__ATOMIC_ACQUIRE'
31126     Barrier to hoisting of code and synchronizes with release (or
31127     stronger) semantic stores from another thread.
31128'__ATOMIC_RELEASE'
31129     Barrier to sinking of code and synchronizes with acquire (or
31130     stronger) semantic loads from another thread.
31131'__ATOMIC_ACQ_REL'
31132     Full barrier in both directions and synchronizes with acquire loads
31133     and release stores in another thread.
31134'__ATOMIC_SEQ_CST'
31135     Full barrier in both directions and synchronizes with acquire loads
31136     and release stores in all threads.
31137
31138 When implementing patterns for these built-in functions, the memory
31139model parameter can be ignored as long as the pattern implements the
31140most restrictive '__ATOMIC_SEQ_CST' model.  Any of the other memory
31141models execute correctly with this memory model but they may not execute
31142as efficiently as they could with a more appropriate implementation of
31143the relaxed requirements.
31144
31145 Note that the C++11 standard allows for the memory model parameter to
31146be determined at run time rather than at compile time.  These built-in
31147functions map any run-time value to '__ATOMIC_SEQ_CST' rather than
31148invoke a runtime library call or inline a switch statement.  This is
31149standard compliant, safe, and the simplest approach for now.
31150
31151 The memory model parameter is a signed int, but only the lower 8 bits
31152are reserved for the memory model.  The remainder of the signed int is
31153reserved for future use and should be 0.  Use of the predefined atomic
31154values ensures proper usage.
31155
31156 -- Built-in Function: TYPE __atomic_load_n (TYPE *ptr, int memmodel)
31157     This built-in function implements an atomic load operation.  It
31158     returns the contents of '*PTR'.
31159
31160     The valid memory model variants are '__ATOMIC_RELAXED',
31161     '__ATOMIC_SEQ_CST', '__ATOMIC_ACQUIRE', and '__ATOMIC_CONSUME'.
31162
31163 -- Built-in Function: void __atomic_load (TYPE *ptr, TYPE *ret, int
31164          memmodel)
31165     This is the generic version of an atomic load.  It returns the
31166     contents of '*PTR' in '*RET'.
31167
31168 -- Built-in Function: void __atomic_store_n (TYPE *ptr, TYPE val, int
31169          memmodel)
31170     This built-in function implements an atomic store operation.  It
31171     writes 'VAL' into '*PTR'.
31172
31173     The valid memory model variants are '__ATOMIC_RELAXED',
31174     '__ATOMIC_SEQ_CST', and '__ATOMIC_RELEASE'.
31175
31176 -- Built-in Function: void __atomic_store (TYPE *ptr, TYPE *val, int
31177          memmodel)
31178     This is the generic version of an atomic store.  It stores the
31179     value of '*VAL' into '*PTR'.
31180
31181 -- Built-in Function: TYPE __atomic_exchange_n (TYPE *ptr, TYPE val,
31182          int memmodel)
31183     This built-in function implements an atomic exchange operation.  It
31184     writes VAL into '*PTR', and returns the previous contents of
31185     '*PTR'.
31186
31187     The valid memory model variants are '__ATOMIC_RELAXED',
31188     '__ATOMIC_SEQ_CST', '__ATOMIC_ACQUIRE', '__ATOMIC_RELEASE', and
31189     '__ATOMIC_ACQ_REL'.
31190
31191 -- Built-in Function: void __atomic_exchange (TYPE *ptr, TYPE *val,
31192          TYPE *ret, int memmodel)
31193     This is the generic version of an atomic exchange.  It stores the
31194     contents of '*VAL' into '*PTR'.  The original value of '*PTR' is
31195     copied into '*RET'.
31196
31197 -- Built-in Function: bool __atomic_compare_exchange_n (TYPE *ptr, TYPE
31198          *expected, TYPE desired, bool weak, int success_memmodel, int
31199          failure_memmodel)
31200     This built-in function implements an atomic compare and exchange
31201     operation.  This compares the contents of '*PTR' with the contents
31202     of '*EXPECTED' and if equal, writes DESIRED into '*PTR'.  If they
31203     are not equal, the current contents of '*PTR' is written into
31204     '*EXPECTED'.  WEAK is true for weak compare_exchange, and false for
31205     the strong variation.  Many targets only offer the strong variation
31206     and ignore the parameter.  When in doubt, use the strong variation.
31207
31208     True is returned if DESIRED is written into '*PTR' and the
31209     execution is considered to conform to the memory model specified by
31210     SUCCESS_MEMMODEL.  There are no restrictions on what memory model
31211     can be used here.
31212
31213     False is returned otherwise, and the execution is considered to
31214     conform to FAILURE_MEMMODEL.  This memory model cannot be
31215     '__ATOMIC_RELEASE' nor '__ATOMIC_ACQ_REL'.  It also cannot be a
31216     stronger model than that specified by SUCCESS_MEMMODEL.
31217
31218 -- Built-in Function: bool __atomic_compare_exchange (TYPE *ptr, TYPE
31219          *expected, TYPE *desired, bool weak, int success_memmodel, int
31220          failure_memmodel)
31221     This built-in function implements the generic version of
31222     '__atomic_compare_exchange'.  The function is virtually identical
31223     to '__atomic_compare_exchange_n', except the desired value is also
31224     a pointer.
31225
31226 -- Built-in Function: TYPE __atomic_add_fetch (TYPE *ptr, TYPE val, int
31227          memmodel)
31228 -- Built-in Function: TYPE __atomic_sub_fetch (TYPE *ptr, TYPE val, int
31229          memmodel)
31230 -- Built-in Function: TYPE __atomic_and_fetch (TYPE *ptr, TYPE val, int
31231          memmodel)
31232 -- Built-in Function: TYPE __atomic_xor_fetch (TYPE *ptr, TYPE val, int
31233          memmodel)
31234 -- Built-in Function: TYPE __atomic_or_fetch (TYPE *ptr, TYPE val, int
31235          memmodel)
31236 -- Built-in Function: TYPE __atomic_nand_fetch (TYPE *ptr, TYPE val,
31237          int memmodel)
31238     These built-in functions perform the operation suggested by the
31239     name, and return the result of the operation.  That is,
31240
31241          { *ptr OP= val; return *ptr; }
31242
31243     All memory models are valid.
31244
31245 -- Built-in Function: TYPE __atomic_fetch_add (TYPE *ptr, TYPE val, int
31246          memmodel)
31247 -- Built-in Function: TYPE __atomic_fetch_sub (TYPE *ptr, TYPE val, int
31248          memmodel)
31249 -- Built-in Function: TYPE __atomic_fetch_and (TYPE *ptr, TYPE val, int
31250          memmodel)
31251 -- Built-in Function: TYPE __atomic_fetch_xor (TYPE *ptr, TYPE val, int
31252          memmodel)
31253 -- Built-in Function: TYPE __atomic_fetch_or (TYPE *ptr, TYPE val, int
31254          memmodel)
31255 -- Built-in Function: TYPE __atomic_fetch_nand (TYPE *ptr, TYPE val,
31256          int memmodel)
31257     These built-in functions perform the operation suggested by the
31258     name, and return the value that had previously been in '*PTR'.
31259     That is,
31260
31261          { tmp = *ptr; *ptr OP= val; return tmp; }
31262
31263     All memory models are valid.
31264
31265 -- Built-in Function: bool __atomic_test_and_set (void *ptr, int
31266          memmodel)
31267
31268     This built-in function performs an atomic test-and-set operation on
31269     the byte at '*PTR'.  The byte is set to some implementation defined
31270     nonzero "set" value and the return value is 'true' if and only if
31271     the previous contents were "set".  It should be only used for
31272     operands of type 'bool' or 'char'.  For other types only part of
31273     the value may be set.
31274
31275     All memory models are valid.
31276
31277 -- Built-in Function: void __atomic_clear (bool *ptr, int memmodel)
31278
31279     This built-in function performs an atomic clear operation on
31280     '*PTR'.  After the operation, '*PTR' contains 0.  It should be only
31281     used for operands of type 'bool' or 'char' and in conjunction with
31282     '__atomic_test_and_set'.  For other types it may only clear
31283     partially.  If the type is not 'bool' prefer using
31284     '__atomic_store'.
31285
31286     The valid memory model variants are '__ATOMIC_RELAXED',
31287     '__ATOMIC_SEQ_CST', and '__ATOMIC_RELEASE'.
31288
31289 -- Built-in Function: void __atomic_thread_fence (int memmodel)
31290
31291     This built-in function acts as a synchronization fence between
31292     threads based on the specified memory model.
31293
31294     All memory orders are valid.
31295
31296 -- Built-in Function: void __atomic_signal_fence (int memmodel)
31297
31298     This built-in function acts as a synchronization fence between a
31299     thread and signal handlers based in the same thread.
31300
31301     All memory orders are valid.
31302
31303 -- Built-in Function: bool __atomic_always_lock_free (size_t size, void
31304          *ptr)
31305
31306     This built-in function returns true if objects of SIZE bytes always
31307     generate lock free atomic instructions for the target architecture.
31308     SIZE must resolve to a compile-time constant and the result also
31309     resolves to a compile-time constant.
31310
31311     PTR is an optional pointer to the object that may be used to
31312     determine alignment.  A value of 0 indicates typical alignment
31313     should be used.  The compiler may also ignore this parameter.
31314
31315          if (_atomic_always_lock_free (sizeof (long long), 0))
31316
31317 -- Built-in Function: bool __atomic_is_lock_free (size_t size, void
31318          *ptr)
31319
31320     This built-in function returns true if objects of SIZE bytes always
31321     generate lock free atomic instructions for the target architecture.
31322     If it is not known to be lock free a call is made to a runtime
31323     routine named '__atomic_is_lock_free'.
31324
31325     PTR is an optional pointer to the object that may be used to
31326     determine alignment.  A value of 0 indicates typical alignment
31327     should be used.  The compiler may also ignore this parameter.
31328
31329
31330File: gcc.info,  Node: x86 specific memory model extensions for transactional memory,  Next: Object Size Checking,  Prev: __atomic Builtins,  Up: C Extensions
31331
313326.53 x86 specific memory model extensions for transactional memory
31333==================================================================
31334
31335The i386 architecture supports additional memory ordering flags to mark
31336lock critical sections for hardware lock elision.  These must be
31337specified in addition to an existing memory model to atomic intrinsics.
31338
31339'__ATOMIC_HLE_ACQUIRE'
31340     Start lock elision on a lock variable.  Memory model must be
31341     '__ATOMIC_ACQUIRE' or stronger.
31342'__ATOMIC_HLE_RELEASE'
31343     End lock elision on a lock variable.  Memory model must be
31344     '__ATOMIC_RELEASE' or stronger.
31345
31346 When a lock acquire fails it is required for good performance to abort
31347the transaction quickly.  This can be done with a '_mm_pause'
31348
31349     #include <immintrin.h> // For _mm_pause
31350
31351     int lockvar;
31352
31353     /* Acquire lock with lock elision */
31354     while (__atomic_exchange_n(&lockvar, 1, __ATOMIC_ACQUIRE|__ATOMIC_HLE_ACQUIRE))
31355         _mm_pause(); /* Abort failed transaction */
31356     ...
31357     /* Free lock with lock elision */
31358     __atomic_store_n(&lockvar, 0, __ATOMIC_RELEASE|__ATOMIC_HLE_RELEASE);
31359
31360
31361File: gcc.info,  Node: Object Size Checking,  Next: Cilk Plus Builtins,  Prev: x86 specific memory model extensions for transactional memory,  Up: C Extensions
31362
313636.54 Object Size Checking Built-in Functions
31364============================================
31365
31366GCC implements a limited buffer overflow protection mechanism that can
31367prevent some buffer overflow attacks.
31368
31369 -- Built-in Function: size_t __builtin_object_size (void * PTR, int
31370          TYPE)
31371     is a built-in construct that returns a constant number of bytes
31372     from PTR to the end of the object PTR pointer points to (if known
31373     at compile time).  '__builtin_object_size' never evaluates its
31374     arguments for side-effects.  If there are any side-effects in them,
31375     it returns '(size_t) -1' for TYPE 0 or 1 and '(size_t) 0' for TYPE
31376     2 or 3.  If there are multiple objects PTR can point to and all of
31377     them are known at compile time, the returned number is the maximum
31378     of remaining byte counts in those objects if TYPE & 2 is 0 and
31379     minimum if nonzero.  If it is not possible to determine which
31380     objects PTR points to at compile time, '__builtin_object_size'
31381     should return '(size_t) -1' for TYPE 0 or 1 and '(size_t) 0' for
31382     TYPE 2 or 3.
31383
31384     TYPE is an integer constant from 0 to 3.  If the least significant
31385     bit is clear, objects are whole variables, if it is set, a closest
31386     surrounding subobject is considered the object a pointer points to.
31387     The second bit determines if maximum or minimum of remaining bytes
31388     is computed.
31389
31390          struct V { char buf1[10]; int b; char buf2[10]; } var;
31391          char *p = &var.buf1[1], *q = &var.b;
31392
31393          /* Here the object p points to is var.  */
31394          assert (__builtin_object_size (p, 0) == sizeof (var) - 1);
31395          /* The subobject p points to is var.buf1.  */
31396          assert (__builtin_object_size (p, 1) == sizeof (var.buf1) - 1);
31397          /* The object q points to is var.  */
31398          assert (__builtin_object_size (q, 0)
31399                  == (char *) (&var + 1) - (char *) &var.b);
31400          /* The subobject q points to is var.b.  */
31401          assert (__builtin_object_size (q, 1) == sizeof (var.b));
31402
31403 There are built-in functions added for many common string operation
31404functions, e.g., for 'memcpy' '__builtin___memcpy_chk' built-in is
31405provided.  This built-in has an additional last argument, which is the
31406number of bytes remaining in object the DEST argument points to or
31407'(size_t) -1' if the size is not known.
31408
31409 The built-in functions are optimized into the normal string functions
31410like 'memcpy' if the last argument is '(size_t) -1' or if it is known at
31411compile time that the destination object will not be overflown.  If the
31412compiler can determine at compile time the object will be always
31413overflown, it issues a warning.
31414
31415 The intended use can be e.g.
31416
31417     #undef memcpy
31418     #define bos0(dest) __builtin_object_size (dest, 0)
31419     #define memcpy(dest, src, n) \
31420       __builtin___memcpy_chk (dest, src, n, bos0 (dest))
31421
31422     char *volatile p;
31423     char buf[10];
31424     /* It is unknown what object p points to, so this is optimized
31425        into plain memcpy - no checking is possible.  */
31426     memcpy (p, "abcde", n);
31427     /* Destination is known and length too.  It is known at compile
31428        time there will be no overflow.  */
31429     memcpy (&buf[5], "abcde", 5);
31430     /* Destination is known, but the length is not known at compile time.
31431        This will result in __memcpy_chk call that can check for overflow
31432        at run time.  */
31433     memcpy (&buf[5], "abcde", n);
31434     /* Destination is known and it is known at compile time there will
31435        be overflow.  There will be a warning and __memcpy_chk call that
31436        will abort the program at run time.  */
31437     memcpy (&buf[6], "abcde", 5);
31438
31439 Such built-in functions are provided for 'memcpy', 'mempcpy',
31440'memmove', 'memset', 'strcpy', 'stpcpy', 'strncpy', 'strcat' and
31441'strncat'.
31442
31443 There are also checking built-in functions for formatted output
31444functions.
31445     int __builtin___sprintf_chk (char *s, int flag, size_t os, const char *fmt, ...);
31446     int __builtin___snprintf_chk (char *s, size_t maxlen, int flag, size_t os,
31447                                   const char *fmt, ...);
31448     int __builtin___vsprintf_chk (char *s, int flag, size_t os, const char *fmt,
31449                                   va_list ap);
31450     int __builtin___vsnprintf_chk (char *s, size_t maxlen, int flag, size_t os,
31451                                    const char *fmt, va_list ap);
31452
31453 The added FLAG argument is passed unchanged to '__sprintf_chk' etc.
31454functions and can contain implementation specific flags on what
31455additional security measures the checking function might take, such as
31456handling '%n' differently.
31457
31458 The OS argument is the object size S points to, like in the other
31459built-in functions.  There is a small difference in the behavior though,
31460if OS is '(size_t) -1', the built-in functions are optimized into the
31461non-checking functions only if FLAG is 0, otherwise the checking
31462function is called with OS argument set to '(size_t) -1'.
31463
31464 In addition to this, there are checking built-in functions
31465'__builtin___printf_chk', '__builtin___vprintf_chk',
31466'__builtin___fprintf_chk' and '__builtin___vfprintf_chk'.  These have
31467just one additional argument, FLAG, right before format string FMT.  If
31468the compiler is able to optimize them to 'fputc' etc. functions, it
31469does, otherwise the checking function is called and the FLAG argument
31470passed to it.
31471
31472
31473File: gcc.info,  Node: Cilk Plus Builtins,  Next: Other Builtins,  Prev: Object Size Checking,  Up: C Extensions
31474
314756.55 Cilk Plus C/C++ language extension Built-in Functions.
31476===========================================================
31477
31478GCC provides support for the following built-in reduction funtions if
31479Cilk Plus is enabled.  Cilk Plus can be enabled using the '-fcilkplus'
31480flag.
31481
31482   * __sec_implicit_index
31483   * __sec_reduce
31484   * __sec_reduce_add
31485   * __sec_reduce_all_nonzero
31486   * __sec_reduce_all_zero
31487   * __sec_reduce_any_nonzero
31488   * __sec_reduce_any_zero
31489   * __sec_reduce_max
31490   * __sec_reduce_min
31491   * __sec_reduce_max_ind
31492   * __sec_reduce_min_ind
31493   * __sec_reduce_mul
31494   * __sec_reduce_mutating
31495
31496 Further details and examples about these built-in functions are
31497described in the Cilk Plus language manual which can be found at
31498<http://www.cilkplus.org>.
31499
31500
31501File: gcc.info,  Node: Other Builtins,  Next: Target Builtins,  Prev: Cilk Plus Builtins,  Up: C Extensions
31502
315036.56 Other Built-in Functions Provided by GCC
31504=============================================
31505
31506GCC provides a large number of built-in functions other than the ones
31507mentioned above.  Some of these are for internal use in the processing
31508of exceptions or variable-length argument lists and are not documented
31509here because they may change from time to time; we do not recommend
31510general use of these functions.
31511
31512 The remaining functions are provided for optimization purposes.
31513
31514 GCC includes built-in versions of many of the functions in the standard
31515C library.  The versions prefixed with '__builtin_' are always treated
31516as having the same meaning as the C library function even if you specify
31517the '-fno-builtin' option.  (*note C Dialect Options::) Many of these
31518functions are only optimized in certain cases; if they are not optimized
31519in a particular case, a call to the library function is emitted.
31520
31521 Outside strict ISO C mode ('-ansi', '-std=c90', '-std=c99' or
31522'-std=c11'), the functions '_exit', 'alloca', 'bcmp', 'bzero',
31523'dcgettext', 'dgettext', 'dremf', 'dreml', 'drem', 'exp10f', 'exp10l',
31524'exp10', 'ffsll', 'ffsl', 'ffs', 'fprintf_unlocked', 'fputs_unlocked',
31525'gammaf', 'gammal', 'gamma', 'gammaf_r', 'gammal_r', 'gamma_r',
31526'gettext', 'index', 'isascii', 'j0f', 'j0l', 'j0', 'j1f', 'j1l', 'j1',
31527'jnf', 'jnl', 'jn', 'lgammaf_r', 'lgammal_r', 'lgamma_r', 'mempcpy',
31528'pow10f', 'pow10l', 'pow10', 'printf_unlocked', 'rindex', 'scalbf',
31529'scalbl', 'scalb', 'signbit', 'signbitf', 'signbitl', 'signbitd32',
31530'signbitd64', 'signbitd128', 'significandf', 'significandl',
31531'significand', 'sincosf', 'sincosl', 'sincos', 'stpcpy', 'stpncpy',
31532'strcasecmp', 'strdup', 'strfmon', 'strncasecmp', 'strndup', 'toascii',
31533'y0f', 'y0l', 'y0', 'y1f', 'y1l', 'y1', 'ynf', 'ynl' and 'yn' may be
31534handled as built-in functions.  All these functions have corresponding
31535versions prefixed with '__builtin_', which may be used even in strict
31536C90 mode.
31537
31538 The ISO C99 functions '_Exit', 'acoshf', 'acoshl', 'acosh', 'asinhf',
31539'asinhl', 'asinh', 'atanhf', 'atanhl', 'atanh', 'cabsf', 'cabsl',
31540'cabs', 'cacosf', 'cacoshf', 'cacoshl', 'cacosh', 'cacosl', 'cacos',
31541'cargf', 'cargl', 'carg', 'casinf', 'casinhf', 'casinhl', 'casinh',
31542'casinl', 'casin', 'catanf', 'catanhf', 'catanhl', 'catanh', 'catanl',
31543'catan', 'cbrtf', 'cbrtl', 'cbrt', 'ccosf', 'ccoshf', 'ccoshl', 'ccosh',
31544'ccosl', 'ccos', 'cexpf', 'cexpl', 'cexp', 'cimagf', 'cimagl', 'cimag',
31545'clogf', 'clogl', 'clog', 'conjf', 'conjl', 'conj', 'copysignf',
31546'copysignl', 'copysign', 'cpowf', 'cpowl', 'cpow', 'cprojf', 'cprojl',
31547'cproj', 'crealf', 'creall', 'creal', 'csinf', 'csinhf', 'csinhl',
31548'csinh', 'csinl', 'csin', 'csqrtf', 'csqrtl', 'csqrt', 'ctanf',
31549'ctanhf', 'ctanhl', 'ctanh', 'ctanl', 'ctan', 'erfcf', 'erfcl', 'erfc',
31550'erff', 'erfl', 'erf', 'exp2f', 'exp2l', 'exp2', 'expm1f', 'expm1l',
31551'expm1', 'fdimf', 'fdiml', 'fdim', 'fmaf', 'fmal', 'fmaxf', 'fmaxl',
31552'fmax', 'fma', 'fminf', 'fminl', 'fmin', 'hypotf', 'hypotl', 'hypot',
31553'ilogbf', 'ilogbl', 'ilogb', 'imaxabs', 'isblank', 'iswblank',
31554'lgammaf', 'lgammal', 'lgamma', 'llabs', 'llrintf', 'llrintl', 'llrint',
31555'llroundf', 'llroundl', 'llround', 'log1pf', 'log1pl', 'log1p', 'log2f',
31556'log2l', 'log2', 'logbf', 'logbl', 'logb', 'lrintf', 'lrintl', 'lrint',
31557'lroundf', 'lroundl', 'lround', 'nearbyintf', 'nearbyintl', 'nearbyint',
31558'nextafterf', 'nextafterl', 'nextafter', 'nexttowardf', 'nexttowardl',
31559'nexttoward', 'remainderf', 'remainderl', 'remainder', 'remquof',
31560'remquol', 'remquo', 'rintf', 'rintl', 'rint', 'roundf', 'roundl',
31561'round', 'scalblnf', 'scalblnl', 'scalbln', 'scalbnf', 'scalbnl',
31562'scalbn', 'snprintf', 'tgammaf', 'tgammal', 'tgamma', 'truncf',
31563'truncl', 'trunc', 'vfscanf', 'vscanf', 'vsnprintf' and 'vsscanf' are
31564handled as built-in functions except in strict ISO C90 mode ('-ansi' or
31565'-std=c90').
31566
31567 There are also built-in versions of the ISO C99 functions 'acosf',
31568'acosl', 'asinf', 'asinl', 'atan2f', 'atan2l', 'atanf', 'atanl',
31569'ceilf', 'ceill', 'cosf', 'coshf', 'coshl', 'cosl', 'expf', 'expl',
31570'fabsf', 'fabsl', 'floorf', 'floorl', 'fmodf', 'fmodl', 'frexpf',
31571'frexpl', 'ldexpf', 'ldexpl', 'log10f', 'log10l', 'logf', 'logl',
31572'modfl', 'modf', 'powf', 'powl', 'sinf', 'sinhf', 'sinhl', 'sinl',
31573'sqrtf', 'sqrtl', 'tanf', 'tanhf', 'tanhl' and 'tanl' that are
31574recognized in any mode since ISO C90 reserves these names for the
31575purpose to which ISO C99 puts them.  All these functions have
31576corresponding versions prefixed with '__builtin_'.
31577
31578 The ISO C94 functions 'iswalnum', 'iswalpha', 'iswcntrl', 'iswdigit',
31579'iswgraph', 'iswlower', 'iswprint', 'iswpunct', 'iswspace', 'iswupper',
31580'iswxdigit', 'towlower' and 'towupper' are handled as built-in functions
31581except in strict ISO C90 mode ('-ansi' or '-std=c90').
31582
31583 The ISO C90 functions 'abort', 'abs', 'acos', 'asin', 'atan2', 'atan',
31584'calloc', 'ceil', 'cosh', 'cos', 'exit', 'exp', 'fabs', 'floor', 'fmod',
31585'fprintf', 'fputs', 'frexp', 'fscanf', 'isalnum', 'isalpha', 'iscntrl',
31586'isdigit', 'isgraph', 'islower', 'isprint', 'ispunct', 'isspace',
31587'isupper', 'isxdigit', 'tolower', 'toupper', 'labs', 'ldexp', 'log10',
31588'log', 'malloc', 'memchr', 'memcmp', 'memcpy', 'memset', 'modf', 'pow',
31589'printf', 'putchar', 'puts', 'scanf', 'sinh', 'sin', 'snprintf',
31590'sprintf', 'sqrt', 'sscanf', 'strcat', 'strchr', 'strcmp', 'strcpy',
31591'strcspn', 'strlen', 'strncat', 'strncmp', 'strncpy', 'strpbrk',
31592'strrchr', 'strspn', 'strstr', 'tanh', 'tan', 'vfprintf', 'vprintf' and
31593'vsprintf' are all recognized as built-in functions unless
31594'-fno-builtin' is specified (or '-fno-builtin-FUNCTION' is specified for
31595an individual function).  All of these functions have corresponding
31596versions prefixed with '__builtin_'.
31597
31598 GCC provides built-in versions of the ISO C99 floating-point comparison
31599macros that avoid raising exceptions for unordered operands.  They have
31600the same names as the standard macros ( 'isgreater', 'isgreaterequal',
31601'isless', 'islessequal', 'islessgreater', and 'isunordered') , with
31602'__builtin_' prefixed.  We intend for a library implementor to be able
31603to simply '#define' each standard macro to its built-in equivalent.  In
31604the same fashion, GCC provides 'fpclassify', 'isfinite', 'isinf_sign'
31605and 'isnormal' built-ins used with '__builtin_' prefixed.  The 'isinf'
31606and 'isnan' built-in functions appear both with and without the
31607'__builtin_' prefix.
31608
31609 -- Built-in Function: int __builtin_types_compatible_p (TYPE1, TYPE2)
31610
31611     You can use the built-in function '__builtin_types_compatible_p' to
31612     determine whether two types are the same.
31613
31614     This built-in function returns 1 if the unqualified versions of the
31615     types TYPE1 and TYPE2 (which are types, not expressions) are
31616     compatible, 0 otherwise.  The result of this built-in function can
31617     be used in integer constant expressions.
31618
31619     This built-in function ignores top level qualifiers (e.g., 'const',
31620     'volatile').  For example, 'int' is equivalent to 'const int'.
31621
31622     The type 'int[]' and 'int[5]' are compatible.  On the other hand,
31623     'int' and 'char *' are not compatible, even if the size of their
31624     types, on the particular architecture are the same.  Also, the
31625     amount of pointer indirection is taken into account when
31626     determining similarity.  Consequently, 'short *' is not similar to
31627     'short **'.  Furthermore, two types that are typedefed are
31628     considered compatible if their underlying types are compatible.
31629
31630     An 'enum' type is not considered to be compatible with another
31631     'enum' type even if both are compatible with the same integer type;
31632     this is what the C standard specifies.  For example, 'enum {foo,
31633     bar}' is not similar to 'enum {hot, dog}'.
31634
31635     You typically use this function in code whose execution varies
31636     depending on the arguments' types.  For example:
31637
31638          #define foo(x)                                                  \
31639            ({                                                           \
31640              typeof (x) tmp = (x);                                       \
31641              if (__builtin_types_compatible_p (typeof (x), long double)) \
31642                tmp = foo_long_double (tmp);                              \
31643              else if (__builtin_types_compatible_p (typeof (x), double)) \
31644                tmp = foo_double (tmp);                                   \
31645              else if (__builtin_types_compatible_p (typeof (x), float))  \
31646                tmp = foo_float (tmp);                                    \
31647              else                                                        \
31648                abort ();                                                 \
31649              tmp;                                                        \
31650            })
31651
31652     _Note:_ This construct is only available for C.
31653
31654 -- Built-in Function: TYPE __builtin_choose_expr (CONST_EXP, EXP1,
31655          EXP2)
31656
31657     You can use the built-in function '__builtin_choose_expr' to
31658     evaluate code depending on the value of a constant expression.
31659     This built-in function returns EXP1 if CONST_EXP, which is an
31660     integer constant expression, is nonzero.  Otherwise it returns
31661     EXP2.
31662
31663     This built-in function is analogous to the '? :' operator in C,
31664     except that the expression returned has its type unaltered by
31665     promotion rules.  Also, the built-in function does not evaluate the
31666     expression that is not chosen.  For example, if CONST_EXP evaluates
31667     to true, EXP2 is not evaluated even if it has side-effects.
31668
31669     This built-in function can return an lvalue if the chosen argument
31670     is an lvalue.
31671
31672     If EXP1 is returned, the return type is the same as EXP1's type.
31673     Similarly, if EXP2 is returned, its return type is the same as
31674     EXP2.
31675
31676     Example:
31677
31678          #define foo(x)                                                    \
31679            __builtin_choose_expr (                                         \
31680              __builtin_types_compatible_p (typeof (x), double),            \
31681              foo_double (x),                                               \
31682              __builtin_choose_expr (                                       \
31683                __builtin_types_compatible_p (typeof (x), float),           \
31684                foo_float (x),                                              \
31685                /* The void expression results in a compile-time error  \
31686                   when assigning the result to something.  */          \
31687                (void)0))
31688
31689     _Note:_ This construct is only available for C.  Furthermore, the
31690     unused expression (EXP1 or EXP2 depending on the value of
31691     CONST_EXP) may still generate syntax errors.  This may change in
31692     future revisions.
31693
31694 -- Built-in Function: TYPE __builtin_complex (REAL, IMAG)
31695
31696     The built-in function '__builtin_complex' is provided for use in
31697     implementing the ISO C11 macros 'CMPLXF', 'CMPLX' and 'CMPLXL'.
31698     REAL and IMAG must have the same type, a real binary floating-point
31699     type, and the result has the corresponding complex type with real
31700     and imaginary parts REAL and IMAG.  Unlike 'REAL + I * IMAG', this
31701     works even when infinities, NaNs and negative zeros are involved.
31702
31703 -- Built-in Function: int __builtin_constant_p (EXP)
31704     You can use the built-in function '__builtin_constant_p' to
31705     determine if a value is known to be constant at compile time and
31706     hence that GCC can perform constant-folding on expressions
31707     involving that value.  The argument of the function is the value to
31708     test.  The function returns the integer 1 if the argument is known
31709     to be a compile-time constant and 0 if it is not known to be a
31710     compile-time constant.  A return of 0 does not indicate that the
31711     value is _not_ a constant, but merely that GCC cannot prove it is a
31712     constant with the specified value of the '-O' option.
31713
31714     You typically use this function in an embedded application where
31715     memory is a critical resource.  If you have some complex
31716     calculation, you may want it to be folded if it involves constants,
31717     but need to call a function if it does not.  For example:
31718
31719          #define Scale_Value(X)      \
31720            (__builtin_constant_p (X) \
31721            ? ((X) * SCALE + OFFSET) : Scale (X))
31722
31723     You may use this built-in function in either a macro or an inline
31724     function.  However, if you use it in an inlined function and pass
31725     an argument of the function as the argument to the built-in, GCC
31726     never returns 1 when you call the inline function with a string
31727     constant or compound literal (*note Compound Literals::) and does
31728     not return 1 when you pass a constant numeric value to the inline
31729     function unless you specify the '-O' option.
31730
31731     You may also use '__builtin_constant_p' in initializers for static
31732     data.  For instance, you can write
31733
31734          static const int table[] = {
31735             __builtin_constant_p (EXPRESSION) ? (EXPRESSION) : -1,
31736             /* ... */
31737          };
31738
31739     This is an acceptable initializer even if EXPRESSION is not a
31740     constant expression, including the case where
31741     '__builtin_constant_p' returns 1 because EXPRESSION can be folded
31742     to a constant but EXPRESSION contains operands that are not
31743     otherwise permitted in a static initializer (for example, '0 && foo
31744     ()').  GCC must be more conservative about evaluating the built-in
31745     in this case, because it has no opportunity to perform
31746     optimization.
31747
31748     Previous versions of GCC did not accept this built-in in data
31749     initializers.  The earliest version where it is completely safe is
31750     3.0.1.
31751
31752 -- Built-in Function: long __builtin_expect (long EXP, long C)
31753     You may use '__builtin_expect' to provide the compiler with branch
31754     prediction information.  In general, you should prefer to use
31755     actual profile feedback for this ('-fprofile-arcs'), as programmers
31756     are notoriously bad at predicting how their programs actually
31757     perform.  However, there are applications in which this data is
31758     hard to collect.
31759
31760     The return value is the value of EXP, which should be an integral
31761     expression.  The semantics of the built-in are that it is expected
31762     that EXP == C.  For example:
31763
31764          if (__builtin_expect (x, 0))
31765            foo ();
31766
31767     indicates that we do not expect to call 'foo', since we expect 'x'
31768     to be zero.  Since you are limited to integral expressions for EXP,
31769     you should use constructions such as
31770
31771          if (__builtin_expect (ptr != NULL, 1))
31772            foo (*ptr);
31773
31774     when testing pointer or floating-point values.
31775
31776 -- Built-in Function: void __builtin_trap (void)
31777     This function causes the program to exit abnormally.  GCC
31778     implements this function by using a target-dependent mechanism
31779     (such as intentionally executing an illegal instruction) or by
31780     calling 'abort'.  The mechanism used may vary from release to
31781     release so you should not rely on any particular implementation.
31782
31783 -- Built-in Function: void __builtin_unreachable (void)
31784     If control flow reaches the point of the '__builtin_unreachable',
31785     the program is undefined.  It is useful in situations where the
31786     compiler cannot deduce the unreachability of the code.
31787
31788     One such case is immediately following an 'asm' statement that
31789     either never terminates, or one that transfers control elsewhere
31790     and never returns.  In this example, without the
31791     '__builtin_unreachable', GCC issues a warning that control reaches
31792     the end of a non-void function.  It also generates code to return
31793     after the 'asm'.
31794
31795          int f (int c, int v)
31796          {
31797            if (c)
31798              {
31799                return v;
31800              }
31801            else
31802              {
31803                asm("jmp error_handler");
31804                __builtin_unreachable ();
31805              }
31806          }
31807
31808     Because the 'asm' statement unconditionally transfers control out
31809     of the function, control never reaches the end of the function
31810     body.  The '__builtin_unreachable' is in fact unreachable and
31811     communicates this fact to the compiler.
31812
31813     Another use for '__builtin_unreachable' is following a call a
31814     function that never returns but that is not declared
31815     '__attribute__((noreturn))', as in this example:
31816
31817          void function_that_never_returns (void);
31818
31819          int g (int c)
31820          {
31821            if (c)
31822              {
31823                return 1;
31824              }
31825            else
31826              {
31827                function_that_never_returns ();
31828                __builtin_unreachable ();
31829              }
31830          }
31831
31832 -- Built-in Function: void *__builtin_assume_aligned (const void *EXP,
31833          size_t ALIGN, ...)
31834     This function returns its first argument, and allows the compiler
31835     to assume that the returned pointer is at least ALIGN bytes
31836     aligned.  This built-in can have either two or three arguments, if
31837     it has three, the third argument should have integer type, and if
31838     it is nonzero means misalignment offset.  For example:
31839
31840          void *x = __builtin_assume_aligned (arg, 16);
31841
31842     means that the compiler can assume 'x', set to 'arg', is at least
31843     16-byte aligned, while:
31844
31845          void *x = __builtin_assume_aligned (arg, 32, 8);
31846
31847     means that the compiler can assume for 'x', set to 'arg', that
31848     '(char *) x - 8' is 32-byte aligned.
31849
31850 -- Built-in Function: int __builtin_LINE ()
31851     This function is the equivalent to the preprocessor '__LINE__'
31852     macro and returns the line number of the invocation of the
31853     built-in.  In a C++ default argument for a function F, it gets the
31854     line number of the call to F.
31855
31856 -- Built-in Function: const char * __builtin_FUNCTION ()
31857     This function is the equivalent to the preprocessor '__FUNCTION__'
31858     macro and returns the function name the invocation of the built-in
31859     is in.
31860
31861 -- Built-in Function: const char * __builtin_FILE ()
31862     This function is the equivalent to the preprocessor '__FILE__'
31863     macro and returns the file name the invocation of the built-in is
31864     in.  In a C++ default argument for a function F, it gets the file
31865     name of the call to F.
31866
31867 -- Built-in Function: void __builtin___clear_cache (char *BEGIN, char
31868          *END)
31869     This function is used to flush the processor's instruction cache
31870     for the region of memory between BEGIN inclusive and END exclusive.
31871     Some targets require that the instruction cache be flushed, after
31872     modifying memory containing code, in order to obtain deterministic
31873     behavior.
31874
31875     If the target does not require instruction cache flushes,
31876     '__builtin___clear_cache' has no effect.  Otherwise either
31877     instructions are emitted in-line to clear the instruction cache or
31878     a call to the '__clear_cache' function in libgcc is made.
31879
31880 -- Built-in Function: void __builtin_prefetch (const void *ADDR, ...)
31881     This function is used to minimize cache-miss latency by moving data
31882     into a cache before it is accessed.  You can insert calls to
31883     '__builtin_prefetch' into code for which you know addresses of data
31884     in memory that is likely to be accessed soon.  If the target
31885     supports them, data prefetch instructions are generated.  If the
31886     prefetch is done early enough before the access then the data will
31887     be in the cache by the time it is accessed.
31888
31889     The value of ADDR is the address of the memory to prefetch.  There
31890     are two optional arguments, RW and LOCALITY.  The value of RW is a
31891     compile-time constant one or zero; one means that the prefetch is
31892     preparing for a write to the memory address and zero, the default,
31893     means that the prefetch is preparing for a read.  The value
31894     LOCALITY must be a compile-time constant integer between zero and
31895     three.  A value of zero means that the data has no temporal
31896     locality, so it need not be left in the cache after the access.  A
31897     value of three means that the data has a high degree of temporal
31898     locality and should be left in all levels of cache possible.
31899     Values of one and two mean, respectively, a low or moderate degree
31900     of temporal locality.  The default is three.
31901
31902          for (i = 0; i < n; i++)
31903            {
31904              a[i] = a[i] + b[i];
31905              __builtin_prefetch (&a[i+j], 1, 1);
31906              __builtin_prefetch (&b[i+j], 0, 1);
31907              /* ... */
31908            }
31909
31910     Data prefetch does not generate faults if ADDR is invalid, but the
31911     address expression itself must be valid.  For example, a prefetch
31912     of 'p->next' does not fault if 'p->next' is not a valid address,
31913     but evaluation faults if 'p' is not a valid address.
31914
31915     If the target does not support data prefetch, the address
31916     expression is evaluated if it includes side effects but no other
31917     code is generated and GCC does not issue a warning.
31918
31919 -- Built-in Function: double __builtin_huge_val (void)
31920     Returns a positive infinity, if supported by the floating-point
31921     format, else 'DBL_MAX'.  This function is suitable for implementing
31922     the ISO C macro 'HUGE_VAL'.
31923
31924 -- Built-in Function: float __builtin_huge_valf (void)
31925     Similar to '__builtin_huge_val', except the return type is 'float'.
31926
31927 -- Built-in Function: long double __builtin_huge_vall (void)
31928     Similar to '__builtin_huge_val', except the return type is 'long
31929     double'.
31930
31931 -- Built-in Function: int __builtin_fpclassify (int, int, int, int,
31932          int, ...)
31933     This built-in implements the C99 fpclassify functionality.  The
31934     first five int arguments should be the target library's notion of
31935     the possible FP classes and are used for return values.  They must
31936     be constant values and they must appear in this order: 'FP_NAN',
31937     'FP_INFINITE', 'FP_NORMAL', 'FP_SUBNORMAL' and 'FP_ZERO'.  The
31938     ellipsis is for exactly one floating-point value to classify.  GCC
31939     treats the last argument as type-generic, which means it does not
31940     do default promotion from float to double.
31941
31942 -- Built-in Function: double __builtin_inf (void)
31943     Similar to '__builtin_huge_val', except a warning is generated if
31944     the target floating-point format does not support infinities.
31945
31946 -- Built-in Function: _Decimal32 __builtin_infd32 (void)
31947     Similar to '__builtin_inf', except the return type is '_Decimal32'.
31948
31949 -- Built-in Function: _Decimal64 __builtin_infd64 (void)
31950     Similar to '__builtin_inf', except the return type is '_Decimal64'.
31951
31952 -- Built-in Function: _Decimal128 __builtin_infd128 (void)
31953     Similar to '__builtin_inf', except the return type is
31954     '_Decimal128'.
31955
31956 -- Built-in Function: float __builtin_inff (void)
31957     Similar to '__builtin_inf', except the return type is 'float'.
31958     This function is suitable for implementing the ISO C99 macro
31959     'INFINITY'.
31960
31961 -- Built-in Function: long double __builtin_infl (void)
31962     Similar to '__builtin_inf', except the return type is 'long
31963     double'.
31964
31965 -- Built-in Function: int __builtin_isinf_sign (...)
31966     Similar to 'isinf', except the return value is -1 for an argument
31967     of '-Inf' and 1 for an argument of '+Inf'.  Note while the
31968     parameter list is an ellipsis, this function only accepts exactly
31969     one floating-point argument.  GCC treats this parameter as
31970     type-generic, which means it does not do default promotion from
31971     float to double.
31972
31973 -- Built-in Function: double __builtin_nan (const char *str)
31974     This is an implementation of the ISO C99 function 'nan'.
31975
31976     Since ISO C99 defines this function in terms of 'strtod', which we
31977     do not implement, a description of the parsing is in order.  The
31978     string is parsed as by 'strtol'; that is, the base is recognized by
31979     leading '0' or '0x' prefixes.  The number parsed is placed in the
31980     significand such that the least significant bit of the number is at
31981     the least significant bit of the significand.  The number is
31982     truncated to fit the significand field provided.  The significand
31983     is forced to be a quiet NaN.
31984
31985     This function, if given a string literal all of which would have
31986     been consumed by 'strtol', is evaluated early enough that it is
31987     considered a compile-time constant.
31988
31989 -- Built-in Function: _Decimal32 __builtin_nand32 (const char *str)
31990     Similar to '__builtin_nan', except the return type is '_Decimal32'.
31991
31992 -- Built-in Function: _Decimal64 __builtin_nand64 (const char *str)
31993     Similar to '__builtin_nan', except the return type is '_Decimal64'.
31994
31995 -- Built-in Function: _Decimal128 __builtin_nand128 (const char *str)
31996     Similar to '__builtin_nan', except the return type is
31997     '_Decimal128'.
31998
31999 -- Built-in Function: float __builtin_nanf (const char *str)
32000     Similar to '__builtin_nan', except the return type is 'float'.
32001
32002 -- Built-in Function: long double __builtin_nanl (const char *str)
32003     Similar to '__builtin_nan', except the return type is 'long
32004     double'.
32005
32006 -- Built-in Function: double __builtin_nans (const char *str)
32007     Similar to '__builtin_nan', except the significand is forced to be
32008     a signaling NaN.  The 'nans' function is proposed by WG14 N965.
32009
32010 -- Built-in Function: float __builtin_nansf (const char *str)
32011     Similar to '__builtin_nans', except the return type is 'float'.
32012
32013 -- Built-in Function: long double __builtin_nansl (const char *str)
32014     Similar to '__builtin_nans', except the return type is 'long
32015     double'.
32016
32017 -- Built-in Function: int __builtin_ffs (int x)
32018     Returns one plus the index of the least significant 1-bit of X, or
32019     if X is zero, returns zero.
32020
32021 -- Built-in Function: int __builtin_clz (unsigned int x)
32022     Returns the number of leading 0-bits in X, starting at the most
32023     significant bit position.  If X is 0, the result is undefined.
32024
32025 -- Built-in Function: int __builtin_ctz (unsigned int x)
32026     Returns the number of trailing 0-bits in X, starting at the least
32027     significant bit position.  If X is 0, the result is undefined.
32028
32029 -- Built-in Function: int __builtin_clrsb (int x)
32030     Returns the number of leading redundant sign bits in X, i.e. the
32031     number of bits following the most significant bit that are
32032     identical to it.  There are no special cases for 0 or other values.
32033
32034 -- Built-in Function: int __builtin_popcount (unsigned int x)
32035     Returns the number of 1-bits in X.
32036
32037 -- Built-in Function: int __builtin_parity (unsigned int x)
32038     Returns the parity of X, i.e. the number of 1-bits in X modulo 2.
32039
32040 -- Built-in Function: int __builtin_ffsl (long)
32041     Similar to '__builtin_ffs', except the argument type is 'long'.
32042
32043 -- Built-in Function: int __builtin_clzl (unsigned long)
32044     Similar to '__builtin_clz', except the argument type is 'unsigned
32045     long'.
32046
32047 -- Built-in Function: int __builtin_ctzl (unsigned long)
32048     Similar to '__builtin_ctz', except the argument type is 'unsigned
32049     long'.
32050
32051 -- Built-in Function: int __builtin_clrsbl (long)
32052     Similar to '__builtin_clrsb', except the argument type is 'long'.
32053
32054 -- Built-in Function: int __builtin_popcountl (unsigned long)
32055     Similar to '__builtin_popcount', except the argument type is
32056     'unsigned long'.
32057
32058 -- Built-in Function: int __builtin_parityl (unsigned long)
32059     Similar to '__builtin_parity', except the argument type is
32060     'unsigned long'.
32061
32062 -- Built-in Function: int __builtin_ffsll (long long)
32063     Similar to '__builtin_ffs', except the argument type is 'long
32064     long'.
32065
32066 -- Built-in Function: int __builtin_clzll (unsigned long long)
32067     Similar to '__builtin_clz', except the argument type is 'unsigned
32068     long long'.
32069
32070 -- Built-in Function: int __builtin_ctzll (unsigned long long)
32071     Similar to '__builtin_ctz', except the argument type is 'unsigned
32072     long long'.
32073
32074 -- Built-in Function: int __builtin_clrsbll (long long)
32075     Similar to '__builtin_clrsb', except the argument type is 'long
32076     long'.
32077
32078 -- Built-in Function: int __builtin_popcountll (unsigned long long)
32079     Similar to '__builtin_popcount', except the argument type is
32080     'unsigned long long'.
32081
32082 -- Built-in Function: int __builtin_parityll (unsigned long long)
32083     Similar to '__builtin_parity', except the argument type is
32084     'unsigned long long'.
32085
32086 -- Built-in Function: double __builtin_powi (double, int)
32087     Returns the first argument raised to the power of the second.
32088     Unlike the 'pow' function no guarantees about precision and
32089     rounding are made.
32090
32091 -- Built-in Function: float __builtin_powif (float, int)
32092     Similar to '__builtin_powi', except the argument and return types
32093     are 'float'.
32094
32095 -- Built-in Function: long double __builtin_powil (long double, int)
32096     Similar to '__builtin_powi', except the argument and return types
32097     are 'long double'.
32098
32099 -- Built-in Function: uint16_t __builtin_bswap16 (uint16_t x)
32100     Returns X with the order of the bytes reversed; for example,
32101     '0xaabb' becomes '0xbbaa'.  Byte here always means exactly 8 bits.
32102
32103 -- Built-in Function: uint32_t __builtin_bswap32 (uint32_t x)
32104     Similar to '__builtin_bswap16', except the argument and return
32105     types are 32 bit.
32106
32107 -- Built-in Function: uint64_t __builtin_bswap64 (uint64_t x)
32108     Similar to '__builtin_bswap32', except the argument and return
32109     types are 64 bit.
32110
32111
32112File: gcc.info,  Node: Target Builtins,  Next: Target Format Checks,  Prev: Other Builtins,  Up: C Extensions
32113
321146.57 Built-in Functions Specific to Particular Target Machines
32115==============================================================
32116
32117On some target machines, GCC supports many built-in functions specific
32118to those machines.  Generally these generate calls to specific machine
32119instructions, but allow the compiler to schedule those calls.
32120
32121* Menu:
32122
32123* Alpha Built-in Functions::
32124* Altera Nios II Built-in Functions::
32125* ARC Built-in Functions::
32126* ARC SIMD Built-in Functions::
32127* ARM iWMMXt Built-in Functions::
32128* ARM NEON Intrinsics::
32129* ARM ACLE Intrinsics::
32130* AVR Built-in Functions::
32131* Blackfin Built-in Functions::
32132* FR-V Built-in Functions::
32133* X86 Built-in Functions::
32134* X86 transactional memory intrinsics::
32135* MIPS DSP Built-in Functions::
32136* MIPS Paired-Single Support::
32137* MIPS Loongson Built-in Functions::
32138* Other MIPS Built-in Functions::
32139* MSP430 Built-in Functions::
32140* NDS32 Built-in Functions::
32141* picoChip Built-in Functions::
32142* PowerPC Built-in Functions::
32143* PowerPC AltiVec/VSX Built-in Functions::
32144* PowerPC Hardware Transactional Memory Built-in Functions::
32145* RX Built-in Functions::
32146* S/390 System z Built-in Functions::
32147* SH Built-in Functions::
32148* SPARC VIS Built-in Functions::
32149* SPU Built-in Functions::
32150* TI C6X Built-in Functions::
32151* TILE-Gx Built-in Functions::
32152* TILEPro Built-in Functions::
32153
32154
32155File: gcc.info,  Node: Alpha Built-in Functions,  Next: Altera Nios II Built-in Functions,  Up: Target Builtins
32156
321576.57.1 Alpha Built-in Functions
32158-------------------------------
32159
32160These built-in functions are available for the Alpha family of
32161processors, depending on the command-line switches used.
32162
32163 The following built-in functions are always available.  They all
32164generate the machine instruction that is part of the name.
32165
32166     long __builtin_alpha_implver (void)
32167     long __builtin_alpha_rpcc (void)
32168     long __builtin_alpha_amask (long)
32169     long __builtin_alpha_cmpbge (long, long)
32170     long __builtin_alpha_extbl (long, long)
32171     long __builtin_alpha_extwl (long, long)
32172     long __builtin_alpha_extll (long, long)
32173     long __builtin_alpha_extql (long, long)
32174     long __builtin_alpha_extwh (long, long)
32175     long __builtin_alpha_extlh (long, long)
32176     long __builtin_alpha_extqh (long, long)
32177     long __builtin_alpha_insbl (long, long)
32178     long __builtin_alpha_inswl (long, long)
32179     long __builtin_alpha_insll (long, long)
32180     long __builtin_alpha_insql (long, long)
32181     long __builtin_alpha_inswh (long, long)
32182     long __builtin_alpha_inslh (long, long)
32183     long __builtin_alpha_insqh (long, long)
32184     long __builtin_alpha_mskbl (long, long)
32185     long __builtin_alpha_mskwl (long, long)
32186     long __builtin_alpha_mskll (long, long)
32187     long __builtin_alpha_mskql (long, long)
32188     long __builtin_alpha_mskwh (long, long)
32189     long __builtin_alpha_msklh (long, long)
32190     long __builtin_alpha_mskqh (long, long)
32191     long __builtin_alpha_umulh (long, long)
32192     long __builtin_alpha_zap (long, long)
32193     long __builtin_alpha_zapnot (long, long)
32194
32195 The following built-in functions are always with '-mmax' or '-mcpu=CPU'
32196where CPU is 'pca56' or later.  They all generate the machine
32197instruction that is part of the name.
32198
32199     long __builtin_alpha_pklb (long)
32200     long __builtin_alpha_pkwb (long)
32201     long __builtin_alpha_unpkbl (long)
32202     long __builtin_alpha_unpkbw (long)
32203     long __builtin_alpha_minub8 (long, long)
32204     long __builtin_alpha_minsb8 (long, long)
32205     long __builtin_alpha_minuw4 (long, long)
32206     long __builtin_alpha_minsw4 (long, long)
32207     long __builtin_alpha_maxub8 (long, long)
32208     long __builtin_alpha_maxsb8 (long, long)
32209     long __builtin_alpha_maxuw4 (long, long)
32210     long __builtin_alpha_maxsw4 (long, long)
32211     long __builtin_alpha_perr (long, long)
32212
32213 The following built-in functions are always with '-mcix' or '-mcpu=CPU'
32214where CPU is 'ev67' or later.  They all generate the machine instruction
32215that is part of the name.
32216
32217     long __builtin_alpha_cttz (long)
32218     long __builtin_alpha_ctlz (long)
32219     long __builtin_alpha_ctpop (long)
32220
32221 The following built-in functions are available on systems that use the
32222OSF/1 PALcode.  Normally they invoke the 'rduniq' and 'wruniq' PAL
32223calls, but when invoked with '-mtls-kernel', they invoke 'rdval' and
32224'wrval'.
32225
32226     void *__builtin_thread_pointer (void)
32227     void __builtin_set_thread_pointer (void *)
32228
32229
32230File: gcc.info,  Node: Altera Nios II Built-in Functions,  Next: ARC Built-in Functions,  Prev: Alpha Built-in Functions,  Up: Target Builtins
32231
322326.57.2 Altera Nios II Built-in Functions
32233----------------------------------------
32234
32235These built-in functions are available for the Altera Nios II family of
32236processors.
32237
32238 The following built-in functions are always available.  They all
32239generate the machine instruction that is part of the name.
32240
32241     int __builtin_ldbio (volatile const void *)
32242     int __builtin_ldbuio (volatile const void *)
32243     int __builtin_ldhio (volatile const void *)
32244     int __builtin_ldhuio (volatile const void *)
32245     int __builtin_ldwio (volatile const void *)
32246     void __builtin_stbio (volatile void *, int)
32247     void __builtin_sthio (volatile void *, int)
32248     void __builtin_stwio (volatile void *, int)
32249     void __builtin_sync (void)
32250     int __builtin_rdctl (int)
32251     void __builtin_wrctl (int, int)
32252
32253 The following built-in functions are always available.  They all
32254generate a Nios II Custom Instruction.  The name of the function
32255represents the types that the function takes and returns.  The letter
32256before the 'n' is the return type or void if absent.  The 'n' represents
32257the first parameter to all the custom instructions, the custom
32258instruction number.  The two letters after the 'n' represent the up to
32259two parameters to the function.
32260
32261 The letters represent the following data types:
32262'<no letter>'
32263     'void' for return type and no parameter for parameter types.
32264
32265'i'
32266     'int' for return type and parameter type
32267
32268'f'
32269     'float' for return type and parameter type
32270
32271'p'
32272     'void *' for return type and parameter type
32273
32274 And the function names are:
32275     void __builtin_custom_n (void)
32276     void __builtin_custom_ni (int)
32277     void __builtin_custom_nf (float)
32278     void __builtin_custom_np (void *)
32279     void __builtin_custom_nii (int, int)
32280     void __builtin_custom_nif (int, float)
32281     void __builtin_custom_nip (int, void *)
32282     void __builtin_custom_nfi (float, int)
32283     void __builtin_custom_nff (float, float)
32284     void __builtin_custom_nfp (float, void *)
32285     void __builtin_custom_npi (void *, int)
32286     void __builtin_custom_npf (void *, float)
32287     void __builtin_custom_npp (void *, void *)
32288     int __builtin_custom_in (void)
32289     int __builtin_custom_ini (int)
32290     int __builtin_custom_inf (float)
32291     int __builtin_custom_inp (void *)
32292     int __builtin_custom_inii (int, int)
32293     int __builtin_custom_inif (int, float)
32294     int __builtin_custom_inip (int, void *)
32295     int __builtin_custom_infi (float, int)
32296     int __builtin_custom_inff (float, float)
32297     int __builtin_custom_infp (float, void *)
32298     int __builtin_custom_inpi (void *, int)
32299     int __builtin_custom_inpf (void *, float)
32300     int __builtin_custom_inpp (void *, void *)
32301     float __builtin_custom_fn (void)
32302     float __builtin_custom_fni (int)
32303     float __builtin_custom_fnf (float)
32304     float __builtin_custom_fnp (void *)
32305     float __builtin_custom_fnii (int, int)
32306     float __builtin_custom_fnif (int, float)
32307     float __builtin_custom_fnip (int, void *)
32308     float __builtin_custom_fnfi (float, int)
32309     float __builtin_custom_fnff (float, float)
32310     float __builtin_custom_fnfp (float, void *)
32311     float __builtin_custom_fnpi (void *, int)
32312     float __builtin_custom_fnpf (void *, float)
32313     float __builtin_custom_fnpp (void *, void *)
32314     void * __builtin_custom_pn (void)
32315     void * __builtin_custom_pni (int)
32316     void * __builtin_custom_pnf (float)
32317     void * __builtin_custom_pnp (void *)
32318     void * __builtin_custom_pnii (int, int)
32319     void * __builtin_custom_pnif (int, float)
32320     void * __builtin_custom_pnip (int, void *)
32321     void * __builtin_custom_pnfi (float, int)
32322     void * __builtin_custom_pnff (float, float)
32323     void * __builtin_custom_pnfp (float, void *)
32324     void * __builtin_custom_pnpi (void *, int)
32325     void * __builtin_custom_pnpf (void *, float)
32326     void * __builtin_custom_pnpp (void *, void *)
32327
32328
32329File: gcc.info,  Node: ARC Built-in Functions,  Next: ARC SIMD Built-in Functions,  Prev: Altera Nios II Built-in Functions,  Up: Target Builtins
32330
323316.57.3 ARC Built-in Functions
32332-----------------------------
32333
32334The following built-in functions are provided for ARC targets.  The
32335built-ins generate the corresponding assembly instructions.  In the
32336examples given below, the generated code often requires an operand or
32337result to be in a register.  Where necessary further code will be
32338generated to ensure this is true, but for brevity this is not described
32339in each case.
32340
32341 _Note:_ Using a built-in to generate an instruction not supported by a
32342target may cause problems.  At present the compiler is not guaranteed to
32343detect such misuse, and as a result an internal compiler error may be
32344generated.
32345
32346 -- Built-in Function: int __builtin_arc_aligned (void *VAL, int
32347          ALIGNVAL)
32348     Return 1 if VAL is known to have the byte alignment given by
32349     ALIGNVAL, otherwise return 0.  Note that this is different from
32350          __alignof__(*(char *)VAL) >= alignval
32351     because __alignof__ sees only the type of the dereference, whereas
32352     __builtin_arc_align uses alignment information from the pointer as
32353     well as from the pointed-to type.  The information available will
32354     depend on optimization level.
32355
32356 -- Built-in Function: void __builtin_arc_brk (void)
32357     Generates
32358          brk
32359
32360 -- Built-in Function: unsigned int __builtin_arc_core_read (unsigned
32361          int REGNO)
32362     The operand is the number of a register to be read.  Generates:
32363          mov  DEST, rREGNO
32364     where the value in DEST will be the result returned from the
32365     built-in.
32366
32367 -- Built-in Function: void __builtin_arc_core_write (unsigned int
32368          REGNO, unsigned int VAL)
32369     The first operand is the number of a register to be written, the
32370     second operand is a compile time constant to write into that
32371     register.  Generates:
32372          mov  rREGNO, VAL
32373
32374 -- Built-in Function: int __builtin_arc_divaw (int A, int B)
32375     Only available if either '-mcpu=ARC700' or '-meA' is set.
32376     Generates:
32377          divaw  DEST, A, B
32378     where the value in DEST will be the result returned from the
32379     built-in.
32380
32381 -- Built-in Function: void __builtin_arc_flag (unsigned int A)
32382     Generates
32383          flag  A
32384
32385 -- Built-in Function: unsigned int __builtin_arc_lr (unsigned int AUXR)
32386     The operand, AUXV, is the address of an auxiliary register and must
32387     be a compile time constant.  Generates:
32388          lr  DEST, [AUXR]
32389     Where the value in DEST will be the result returned from the
32390     built-in.
32391
32392 -- Built-in Function: void __builtin_arc_mul64 (int A, int B)
32393     Only available with '-mmul64'.  Generates:
32394          mul64  A, B
32395
32396 -- Built-in Function: void __builtin_arc_mulu64 (unsigned int A,
32397          unsigned int B)
32398     Only available with '-mmul64'.  Generates:
32399          mulu64  A, B
32400
32401 -- Built-in Function: void __builtin_arc_nop (void)
32402     Generates:
32403          nop
32404
32405 -- Built-in Function: int __builtin_arc_norm (int SRC)
32406     Only valid if the 'norm' instruction is available through the
32407     '-mnorm' option or by default with '-mcpu=ARC700'.  Generates:
32408          norm  DEST, SRC
32409     Where the value in DEST will be the result returned from the
32410     built-in.
32411
32412 -- Built-in Function: short int __builtin_arc_normw (short int SRC)
32413     Only valid if the 'normw' instruction is available through the
32414     '-mnorm' option or by default with '-mcpu=ARC700'.  Generates:
32415          normw  DEST, SRC
32416     Where the value in DEST will be the result returned from the
32417     built-in.
32418
32419 -- Built-in Function: void __builtin_arc_rtie (void)
32420     Generates:
32421          rtie
32422
32423 -- Built-in Function: void __builtin_arc_sleep (int A
32424     Generates:
32425          sleep  A
32426
32427 -- Built-in Function: void __builtin_arc_sr (unsigned int AUXR,
32428          unsigned int VAL)
32429     The first argument, AUXV, is the address of an auxiliary register,
32430     the second argument, VAL, is a compile time constant to be written
32431     to the register.  Generates:
32432          sr  AUXR, [VAL]
32433
32434 -- Built-in Function: int __builtin_arc_swap (int SRC)
32435     Only valid with '-mswap'.  Generates:
32436          swap  DEST, SRC
32437     Where the value in DEST will be the result returned from the
32438     built-in.
32439
32440 -- Built-in Function: void __builtin_arc_swi (void)
32441     Generates:
32442          swi
32443
32444 -- Built-in Function: void __builtin_arc_sync (void)
32445     Only available with '-mcpu=ARC700'.  Generates:
32446          sync
32447
32448 -- Built-in Function: void __builtin_arc_trap_s (unsigned int C)
32449     Only available with '-mcpu=ARC700'.  Generates:
32450          trap_s  C
32451
32452 -- Built-in Function: void __builtin_arc_unimp_s (void)
32453     Only available with '-mcpu=ARC700'.  Generates:
32454          unimp_s
32455
32456 The instructions generated by the following builtins are not considered
32457as candidates for scheduling.  They are not moved around by the compiler
32458during scheduling, and thus can be expected to appear where they are put
32459in the C code:
32460     __builtin_arc_brk()
32461     __builtin_arc_core_read()
32462     __builtin_arc_core_write()
32463     __builtin_arc_flag()
32464     __builtin_arc_lr()
32465     __builtin_arc_sleep()
32466     __builtin_arc_sr()
32467     __builtin_arc_swi()
32468
32469
32470File: gcc.info,  Node: ARC SIMD Built-in Functions,  Next: ARM iWMMXt Built-in Functions,  Prev: ARC Built-in Functions,  Up: Target Builtins
32471
324726.57.4 ARC SIMD Built-in Functions
32473----------------------------------
32474
32475SIMD builtins provided by the compiler can be used to generate the
32476vector instructions.  This section describes the available builtins and
32477their usage in programs.  With the '-msimd' option, the compiler
32478provides 128-bit vector types, which can be specified using the
32479'vector_size' attribute.  The header file 'arc-simd.h' can be included
32480to use the following predefined types:
32481     typedef int __v4si   __attribute__((vector_size(16)));
32482     typedef short __v8hi __attribute__((vector_size(16)));
32483
32484 These types can be used to define 128-bit variables.  The built-in
32485functions listed in the following section can be used on these variables
32486to generate the vector operations.
32487
32488 For all builtins, '__builtin_arc_SOMEINSN', the header file
32489'arc-simd.h' also provides equivalent macros called '_SOMEINSN' that can
32490be used for programming ease and improved readability.  The following
32491macros for DMA control are also provided:
32492     #define _setup_dma_in_channel_reg _vdiwr
32493     #define _setup_dma_out_channel_reg _vdowr
32494
32495 The following is a complete list of all the SIMD built-ins provided for
32496ARC, grouped by calling signature.
32497
32498 The following take two '__v8hi' arguments and return a '__v8hi' result:
32499     __v8hi __builtin_arc_vaddaw (__v8hi, __v8hi)
32500     __v8hi __builtin_arc_vaddw (__v8hi, __v8hi)
32501     __v8hi __builtin_arc_vand (__v8hi, __v8hi)
32502     __v8hi __builtin_arc_vandaw (__v8hi, __v8hi)
32503     __v8hi __builtin_arc_vavb (__v8hi, __v8hi)
32504     __v8hi __builtin_arc_vavrb (__v8hi, __v8hi)
32505     __v8hi __builtin_arc_vbic (__v8hi, __v8hi)
32506     __v8hi __builtin_arc_vbicaw (__v8hi, __v8hi)
32507     __v8hi __builtin_arc_vdifaw (__v8hi, __v8hi)
32508     __v8hi __builtin_arc_vdifw (__v8hi, __v8hi)
32509     __v8hi __builtin_arc_veqw (__v8hi, __v8hi)
32510     __v8hi __builtin_arc_vh264f (__v8hi, __v8hi)
32511     __v8hi __builtin_arc_vh264ft (__v8hi, __v8hi)
32512     __v8hi __builtin_arc_vh264fw (__v8hi, __v8hi)
32513     __v8hi __builtin_arc_vlew (__v8hi, __v8hi)
32514     __v8hi __builtin_arc_vltw (__v8hi, __v8hi)
32515     __v8hi __builtin_arc_vmaxaw (__v8hi, __v8hi)
32516     __v8hi __builtin_arc_vmaxw (__v8hi, __v8hi)
32517     __v8hi __builtin_arc_vminaw (__v8hi, __v8hi)
32518     __v8hi __builtin_arc_vminw (__v8hi, __v8hi)
32519     __v8hi __builtin_arc_vmr1aw (__v8hi, __v8hi)
32520     __v8hi __builtin_arc_vmr1w (__v8hi, __v8hi)
32521     __v8hi __builtin_arc_vmr2aw (__v8hi, __v8hi)
32522     __v8hi __builtin_arc_vmr2w (__v8hi, __v8hi)
32523     __v8hi __builtin_arc_vmr3aw (__v8hi, __v8hi)
32524     __v8hi __builtin_arc_vmr3w (__v8hi, __v8hi)
32525     __v8hi __builtin_arc_vmr4aw (__v8hi, __v8hi)
32526     __v8hi __builtin_arc_vmr4w (__v8hi, __v8hi)
32527     __v8hi __builtin_arc_vmr5aw (__v8hi, __v8hi)
32528     __v8hi __builtin_arc_vmr5w (__v8hi, __v8hi)
32529     __v8hi __builtin_arc_vmr6aw (__v8hi, __v8hi)
32530     __v8hi __builtin_arc_vmr6w (__v8hi, __v8hi)
32531     __v8hi __builtin_arc_vmr7aw (__v8hi, __v8hi)
32532     __v8hi __builtin_arc_vmr7w (__v8hi, __v8hi)
32533     __v8hi __builtin_arc_vmrb (__v8hi, __v8hi)
32534     __v8hi __builtin_arc_vmulaw (__v8hi, __v8hi)
32535     __v8hi __builtin_arc_vmulfaw (__v8hi, __v8hi)
32536     __v8hi __builtin_arc_vmulfw (__v8hi, __v8hi)
32537     __v8hi __builtin_arc_vmulw (__v8hi, __v8hi)
32538     __v8hi __builtin_arc_vnew (__v8hi, __v8hi)
32539     __v8hi __builtin_arc_vor (__v8hi, __v8hi)
32540     __v8hi __builtin_arc_vsubaw (__v8hi, __v8hi)
32541     __v8hi __builtin_arc_vsubw (__v8hi, __v8hi)
32542     __v8hi __builtin_arc_vsummw (__v8hi, __v8hi)
32543     __v8hi __builtin_arc_vvc1f (__v8hi, __v8hi)
32544     __v8hi __builtin_arc_vvc1ft (__v8hi, __v8hi)
32545     __v8hi __builtin_arc_vxor (__v8hi, __v8hi)
32546     __v8hi __builtin_arc_vxoraw (__v8hi, __v8hi)
32547
32548 The following take one '__v8hi' and one 'int' argument and return a
32549'__v8hi' result:
32550
32551     __v8hi __builtin_arc_vbaddw (__v8hi, int)
32552     __v8hi __builtin_arc_vbmaxw (__v8hi, int)
32553     __v8hi __builtin_arc_vbminw (__v8hi, int)
32554     __v8hi __builtin_arc_vbmulaw (__v8hi, int)
32555     __v8hi __builtin_arc_vbmulfw (__v8hi, int)
32556     __v8hi __builtin_arc_vbmulw (__v8hi, int)
32557     __v8hi __builtin_arc_vbrsubw (__v8hi, int)
32558     __v8hi __builtin_arc_vbsubw (__v8hi, int)
32559
32560 The following take one '__v8hi' argument and one 'int' argument which
32561must be a 3-bit compile time constant indicating a register number
32562I0-I7.  They return a '__v8hi' result.
32563     __v8hi __builtin_arc_vasrw (__v8hi, const int)
32564     __v8hi __builtin_arc_vsr8 (__v8hi, const int)
32565     __v8hi __builtin_arc_vsr8aw (__v8hi, const int)
32566
32567 The following take one '__v8hi' argument and one 'int' argument which
32568must be a 6-bit compile time constant.  They return a '__v8hi' result.
32569     __v8hi __builtin_arc_vasrpwbi (__v8hi, const int)
32570     __v8hi __builtin_arc_vasrrpwbi (__v8hi, const int)
32571     __v8hi __builtin_arc_vasrrwi (__v8hi, const int)
32572     __v8hi __builtin_arc_vasrsrwi (__v8hi, const int)
32573     __v8hi __builtin_arc_vasrwi (__v8hi, const int)
32574     __v8hi __builtin_arc_vsr8awi (__v8hi, const int)
32575     __v8hi __builtin_arc_vsr8i (__v8hi, const int)
32576
32577 The following take one '__v8hi' argument and one 'int' argument which
32578must be a 8-bit compile time constant.  They return a '__v8hi' result.
32579     __v8hi __builtin_arc_vd6tapf (__v8hi, const int)
32580     __v8hi __builtin_arc_vmvaw (__v8hi, const int)
32581     __v8hi __builtin_arc_vmvw (__v8hi, const int)
32582     __v8hi __builtin_arc_vmvzw (__v8hi, const int)
32583
32584 The following take two 'int' arguments, the second of which which must
32585be a 8-bit compile time constant.  They return a '__v8hi' result:
32586     __v8hi __builtin_arc_vmovaw (int, const int)
32587     __v8hi __builtin_arc_vmovw (int, const int)
32588     __v8hi __builtin_arc_vmovzw (int, const int)
32589
32590 The following take a single '__v8hi' argument and return a '__v8hi'
32591result:
32592     __v8hi __builtin_arc_vabsaw (__v8hi)
32593     __v8hi __builtin_arc_vabsw (__v8hi)
32594     __v8hi __builtin_arc_vaddsuw (__v8hi)
32595     __v8hi __builtin_arc_vexch1 (__v8hi)
32596     __v8hi __builtin_arc_vexch2 (__v8hi)
32597     __v8hi __builtin_arc_vexch4 (__v8hi)
32598     __v8hi __builtin_arc_vsignw (__v8hi)
32599     __v8hi __builtin_arc_vupbaw (__v8hi)
32600     __v8hi __builtin_arc_vupbw (__v8hi)
32601     __v8hi __builtin_arc_vupsbaw (__v8hi)
32602     __v8hi __builtin_arc_vupsbw (__v8hi)
32603
32604 The followign take two 'int' arguments and return no result:
32605     void __builtin_arc_vdirun (int, int)
32606     void __builtin_arc_vdorun (int, int)
32607
32608 The following take two 'int' arguments and return no result.  The first
32609argument must a 3-bit compile time constant indicating one of the
32610DR0-DR7 DMA setup channels:
32611     void __builtin_arc_vdiwr (const int, int)
32612     void __builtin_arc_vdowr (const int, int)
32613
32614 The following take an 'int' argument and return no result:
32615     void __builtin_arc_vendrec (int)
32616     void __builtin_arc_vrec (int)
32617     void __builtin_arc_vrecrun (int)
32618     void __builtin_arc_vrun (int)
32619
32620 The following take a '__v8hi' argument and two 'int' arguments and
32621return a '__v8hi' result.  The second argument must be a 3-bit compile
32622time constants, indicating one the registers I0-I7, and the third
32623argument must be an 8-bit compile time constant.
32624
32625 _Note:_ Although the equivalent hardware instructions do not take an
32626SIMD register as an operand, these builtins overwrite the relevant bits
32627of the '__v8hi' register provided as the first argument with the value
32628loaded from the '[Ib, u8]' location in the SDM.
32629
32630     __v8hi __builtin_arc_vld32 (__v8hi, const int, const int)
32631     __v8hi __builtin_arc_vld32wh (__v8hi, const int, const int)
32632     __v8hi __builtin_arc_vld32wl (__v8hi, const int, const int)
32633     __v8hi __builtin_arc_vld64 (__v8hi, const int, const int)
32634
32635 The following take two 'int' arguments and return a '__v8hi' result.
32636The first argument must be a 3-bit compile time constants, indicating
32637one the registers I0-I7, and the second argument must be an 8-bit
32638compile time constant.
32639
32640     __v8hi __builtin_arc_vld128 (const int, const int)
32641     __v8hi __builtin_arc_vld64w (const int, const int)
32642
32643 The following take a '__v8hi' argument and two 'int' arguments and
32644return no result.  The second argument must be a 3-bit compile time
32645constants, indicating one the registers I0-I7, and the third argument
32646must be an 8-bit compile time constant.
32647
32648     void __builtin_arc_vst128 (__v8hi, const int, const int)
32649     void __builtin_arc_vst64 (__v8hi, const int, const int)
32650
32651 The following take a '__v8hi' argument and three 'int' arguments and
32652return no result.  The second argument must be a 3-bit compile-time
32653constant, identifying the 16-bit sub-register to be stored, the third
32654argument must be a 3-bit compile time constants, indicating one the
32655registers I0-I7, and the fourth argument must be an 8-bit compile time
32656constant.
32657
32658     void __builtin_arc_vst16_n (__v8hi, const int, const int, const int)
32659     void __builtin_arc_vst32_n (__v8hi, const int, const int, const int)
32660
32661
32662File: gcc.info,  Node: ARM iWMMXt Built-in Functions,  Next: ARM NEON Intrinsics,  Prev: ARC SIMD Built-in Functions,  Up: Target Builtins
32663
326646.57.5 ARM iWMMXt Built-in Functions
32665------------------------------------
32666
32667These built-in functions are available for the ARM family of processors
32668when the '-mcpu=iwmmxt' switch is used:
32669
32670     typedef int v2si __attribute__ ((vector_size (8)));
32671     typedef short v4hi __attribute__ ((vector_size (8)));
32672     typedef char v8qi __attribute__ ((vector_size (8)));
32673
32674     int __builtin_arm_getwcgr0 (void)
32675     void __builtin_arm_setwcgr0 (int)
32676     int __builtin_arm_getwcgr1 (void)
32677     void __builtin_arm_setwcgr1 (int)
32678     int __builtin_arm_getwcgr2 (void)
32679     void __builtin_arm_setwcgr2 (int)
32680     int __builtin_arm_getwcgr3 (void)
32681     void __builtin_arm_setwcgr3 (int)
32682     int __builtin_arm_textrmsb (v8qi, int)
32683     int __builtin_arm_textrmsh (v4hi, int)
32684     int __builtin_arm_textrmsw (v2si, int)
32685     int __builtin_arm_textrmub (v8qi, int)
32686     int __builtin_arm_textrmuh (v4hi, int)
32687     int __builtin_arm_textrmuw (v2si, int)
32688     v8qi __builtin_arm_tinsrb (v8qi, int, int)
32689     v4hi __builtin_arm_tinsrh (v4hi, int, int)
32690     v2si __builtin_arm_tinsrw (v2si, int, int)
32691     long long __builtin_arm_tmia (long long, int, int)
32692     long long __builtin_arm_tmiabb (long long, int, int)
32693     long long __builtin_arm_tmiabt (long long, int, int)
32694     long long __builtin_arm_tmiaph (long long, int, int)
32695     long long __builtin_arm_tmiatb (long long, int, int)
32696     long long __builtin_arm_tmiatt (long long, int, int)
32697     int __builtin_arm_tmovmskb (v8qi)
32698     int __builtin_arm_tmovmskh (v4hi)
32699     int __builtin_arm_tmovmskw (v2si)
32700     long long __builtin_arm_waccb (v8qi)
32701     long long __builtin_arm_wacch (v4hi)
32702     long long __builtin_arm_waccw (v2si)
32703     v8qi __builtin_arm_waddb (v8qi, v8qi)
32704     v8qi __builtin_arm_waddbss (v8qi, v8qi)
32705     v8qi __builtin_arm_waddbus (v8qi, v8qi)
32706     v4hi __builtin_arm_waddh (v4hi, v4hi)
32707     v4hi __builtin_arm_waddhss (v4hi, v4hi)
32708     v4hi __builtin_arm_waddhus (v4hi, v4hi)
32709     v2si __builtin_arm_waddw (v2si, v2si)
32710     v2si __builtin_arm_waddwss (v2si, v2si)
32711     v2si __builtin_arm_waddwus (v2si, v2si)
32712     v8qi __builtin_arm_walign (v8qi, v8qi, int)
32713     long long __builtin_arm_wand(long long, long long)
32714     long long __builtin_arm_wandn (long long, long long)
32715     v8qi __builtin_arm_wavg2b (v8qi, v8qi)
32716     v8qi __builtin_arm_wavg2br (v8qi, v8qi)
32717     v4hi __builtin_arm_wavg2h (v4hi, v4hi)
32718     v4hi __builtin_arm_wavg2hr (v4hi, v4hi)
32719     v8qi __builtin_arm_wcmpeqb (v8qi, v8qi)
32720     v4hi __builtin_arm_wcmpeqh (v4hi, v4hi)
32721     v2si __builtin_arm_wcmpeqw (v2si, v2si)
32722     v8qi __builtin_arm_wcmpgtsb (v8qi, v8qi)
32723     v4hi __builtin_arm_wcmpgtsh (v4hi, v4hi)
32724     v2si __builtin_arm_wcmpgtsw (v2si, v2si)
32725     v8qi __builtin_arm_wcmpgtub (v8qi, v8qi)
32726     v4hi __builtin_arm_wcmpgtuh (v4hi, v4hi)
32727     v2si __builtin_arm_wcmpgtuw (v2si, v2si)
32728     long long __builtin_arm_wmacs (long long, v4hi, v4hi)
32729     long long __builtin_arm_wmacsz (v4hi, v4hi)
32730     long long __builtin_arm_wmacu (long long, v4hi, v4hi)
32731     long long __builtin_arm_wmacuz (v4hi, v4hi)
32732     v4hi __builtin_arm_wmadds (v4hi, v4hi)
32733     v4hi __builtin_arm_wmaddu (v4hi, v4hi)
32734     v8qi __builtin_arm_wmaxsb (v8qi, v8qi)
32735     v4hi __builtin_arm_wmaxsh (v4hi, v4hi)
32736     v2si __builtin_arm_wmaxsw (v2si, v2si)
32737     v8qi __builtin_arm_wmaxub (v8qi, v8qi)
32738     v4hi __builtin_arm_wmaxuh (v4hi, v4hi)
32739     v2si __builtin_arm_wmaxuw (v2si, v2si)
32740     v8qi __builtin_arm_wminsb (v8qi, v8qi)
32741     v4hi __builtin_arm_wminsh (v4hi, v4hi)
32742     v2si __builtin_arm_wminsw (v2si, v2si)
32743     v8qi __builtin_arm_wminub (v8qi, v8qi)
32744     v4hi __builtin_arm_wminuh (v4hi, v4hi)
32745     v2si __builtin_arm_wminuw (v2si, v2si)
32746     v4hi __builtin_arm_wmulsm (v4hi, v4hi)
32747     v4hi __builtin_arm_wmulul (v4hi, v4hi)
32748     v4hi __builtin_arm_wmulum (v4hi, v4hi)
32749     long long __builtin_arm_wor (long long, long long)
32750     v2si __builtin_arm_wpackdss (long long, long long)
32751     v2si __builtin_arm_wpackdus (long long, long long)
32752     v8qi __builtin_arm_wpackhss (v4hi, v4hi)
32753     v8qi __builtin_arm_wpackhus (v4hi, v4hi)
32754     v4hi __builtin_arm_wpackwss (v2si, v2si)
32755     v4hi __builtin_arm_wpackwus (v2si, v2si)
32756     long long __builtin_arm_wrord (long long, long long)
32757     long long __builtin_arm_wrordi (long long, int)
32758     v4hi __builtin_arm_wrorh (v4hi, long long)
32759     v4hi __builtin_arm_wrorhi (v4hi, int)
32760     v2si __builtin_arm_wrorw (v2si, long long)
32761     v2si __builtin_arm_wrorwi (v2si, int)
32762     v2si __builtin_arm_wsadb (v2si, v8qi, v8qi)
32763     v2si __builtin_arm_wsadbz (v8qi, v8qi)
32764     v2si __builtin_arm_wsadh (v2si, v4hi, v4hi)
32765     v2si __builtin_arm_wsadhz (v4hi, v4hi)
32766     v4hi __builtin_arm_wshufh (v4hi, int)
32767     long long __builtin_arm_wslld (long long, long long)
32768     long long __builtin_arm_wslldi (long long, int)
32769     v4hi __builtin_arm_wsllh (v4hi, long long)
32770     v4hi __builtin_arm_wsllhi (v4hi, int)
32771     v2si __builtin_arm_wsllw (v2si, long long)
32772     v2si __builtin_arm_wsllwi (v2si, int)
32773     long long __builtin_arm_wsrad (long long, long long)
32774     long long __builtin_arm_wsradi (long long, int)
32775     v4hi __builtin_arm_wsrah (v4hi, long long)
32776     v4hi __builtin_arm_wsrahi (v4hi, int)
32777     v2si __builtin_arm_wsraw (v2si, long long)
32778     v2si __builtin_arm_wsrawi (v2si, int)
32779     long long __builtin_arm_wsrld (long long, long long)
32780     long long __builtin_arm_wsrldi (long long, int)
32781     v4hi __builtin_arm_wsrlh (v4hi, long long)
32782     v4hi __builtin_arm_wsrlhi (v4hi, int)
32783     v2si __builtin_arm_wsrlw (v2si, long long)
32784     v2si __builtin_arm_wsrlwi (v2si, int)
32785     v8qi __builtin_arm_wsubb (v8qi, v8qi)
32786     v8qi __builtin_arm_wsubbss (v8qi, v8qi)
32787     v8qi __builtin_arm_wsubbus (v8qi, v8qi)
32788     v4hi __builtin_arm_wsubh (v4hi, v4hi)
32789     v4hi __builtin_arm_wsubhss (v4hi, v4hi)
32790     v4hi __builtin_arm_wsubhus (v4hi, v4hi)
32791     v2si __builtin_arm_wsubw (v2si, v2si)
32792     v2si __builtin_arm_wsubwss (v2si, v2si)
32793     v2si __builtin_arm_wsubwus (v2si, v2si)
32794     v4hi __builtin_arm_wunpckehsb (v8qi)
32795     v2si __builtin_arm_wunpckehsh (v4hi)
32796     long long __builtin_arm_wunpckehsw (v2si)
32797     v4hi __builtin_arm_wunpckehub (v8qi)
32798     v2si __builtin_arm_wunpckehuh (v4hi)
32799     long long __builtin_arm_wunpckehuw (v2si)
32800     v4hi __builtin_arm_wunpckelsb (v8qi)
32801     v2si __builtin_arm_wunpckelsh (v4hi)
32802     long long __builtin_arm_wunpckelsw (v2si)
32803     v4hi __builtin_arm_wunpckelub (v8qi)
32804     v2si __builtin_arm_wunpckeluh (v4hi)
32805     long long __builtin_arm_wunpckeluw (v2si)
32806     v8qi __builtin_arm_wunpckihb (v8qi, v8qi)
32807     v4hi __builtin_arm_wunpckihh (v4hi, v4hi)
32808     v2si __builtin_arm_wunpckihw (v2si, v2si)
32809     v8qi __builtin_arm_wunpckilb (v8qi, v8qi)
32810     v4hi __builtin_arm_wunpckilh (v4hi, v4hi)
32811     v2si __builtin_arm_wunpckilw (v2si, v2si)
32812     long long __builtin_arm_wxor (long long, long long)
32813     long long __builtin_arm_wzero ()
32814
32815
32816File: gcc.info,  Node: ARM NEON Intrinsics,  Next: ARM ACLE Intrinsics,  Prev: ARM iWMMXt Built-in Functions,  Up: Target Builtins
32817
328186.57.6 ARM NEON Intrinsics
32819--------------------------
32820
32821These built-in intrinsics for the ARM Advanced SIMD extension are
32822available when the '-mfpu=neon' switch is used:
32823
328246.57.6.1 Addition
32825.................
32826
32827   * uint32x2_t vadd_u32 (uint32x2_t, uint32x2_t)
32828     _Form of expected instruction(s):_ 'vadd.i32 D0, D0, D0'
32829
32830   * uint16x4_t vadd_u16 (uint16x4_t, uint16x4_t)
32831     _Form of expected instruction(s):_ 'vadd.i16 D0, D0, D0'
32832
32833   * uint8x8_t vadd_u8 (uint8x8_t, uint8x8_t)
32834     _Form of expected instruction(s):_ 'vadd.i8 D0, D0, D0'
32835
32836   * int32x2_t vadd_s32 (int32x2_t, int32x2_t)
32837     _Form of expected instruction(s):_ 'vadd.i32 D0, D0, D0'
32838
32839   * int16x4_t vadd_s16 (int16x4_t, int16x4_t)
32840     _Form of expected instruction(s):_ 'vadd.i16 D0, D0, D0'
32841
32842   * int8x8_t vadd_s8 (int8x8_t, int8x8_t)
32843     _Form of expected instruction(s):_ 'vadd.i8 D0, D0, D0'
32844
32845   * float32x2_t vadd_f32 (float32x2_t, float32x2_t)
32846     _Form of expected instruction(s):_ 'vadd.f32 D0, D0, D0'
32847
32848   * uint64x1_t vadd_u64 (uint64x1_t, uint64x1_t)
32849
32850   * int64x1_t vadd_s64 (int64x1_t, int64x1_t)
32851
32852   * uint32x4_t vaddq_u32 (uint32x4_t, uint32x4_t)
32853     _Form of expected instruction(s):_ 'vadd.i32 Q0, Q0, Q0'
32854
32855   * uint16x8_t vaddq_u16 (uint16x8_t, uint16x8_t)
32856     _Form of expected instruction(s):_ 'vadd.i16 Q0, Q0, Q0'
32857
32858   * uint8x16_t vaddq_u8 (uint8x16_t, uint8x16_t)
32859     _Form of expected instruction(s):_ 'vadd.i8 Q0, Q0, Q0'
32860
32861   * int32x4_t vaddq_s32 (int32x4_t, int32x4_t)
32862     _Form of expected instruction(s):_ 'vadd.i32 Q0, Q0, Q0'
32863
32864   * int16x8_t vaddq_s16 (int16x8_t, int16x8_t)
32865     _Form of expected instruction(s):_ 'vadd.i16 Q0, Q0, Q0'
32866
32867   * int8x16_t vaddq_s8 (int8x16_t, int8x16_t)
32868     _Form of expected instruction(s):_ 'vadd.i8 Q0, Q0, Q0'
32869
32870   * uint64x2_t vaddq_u64 (uint64x2_t, uint64x2_t)
32871     _Form of expected instruction(s):_ 'vadd.i64 Q0, Q0, Q0'
32872
32873   * int64x2_t vaddq_s64 (int64x2_t, int64x2_t)
32874     _Form of expected instruction(s):_ 'vadd.i64 Q0, Q0, Q0'
32875
32876   * float32x4_t vaddq_f32 (float32x4_t, float32x4_t)
32877     _Form of expected instruction(s):_ 'vadd.f32 Q0, Q0, Q0'
32878
32879   * uint64x2_t vaddl_u32 (uint32x2_t, uint32x2_t)
32880     _Form of expected instruction(s):_ 'vaddl.u32 Q0, D0, D0'
32881
32882   * uint32x4_t vaddl_u16 (uint16x4_t, uint16x4_t)
32883     _Form of expected instruction(s):_ 'vaddl.u16 Q0, D0, D0'
32884
32885   * uint16x8_t vaddl_u8 (uint8x8_t, uint8x8_t)
32886     _Form of expected instruction(s):_ 'vaddl.u8 Q0, D0, D0'
32887
32888   * int64x2_t vaddl_s32 (int32x2_t, int32x2_t)
32889     _Form of expected instruction(s):_ 'vaddl.s32 Q0, D0, D0'
32890
32891   * int32x4_t vaddl_s16 (int16x4_t, int16x4_t)
32892     _Form of expected instruction(s):_ 'vaddl.s16 Q0, D0, D0'
32893
32894   * int16x8_t vaddl_s8 (int8x8_t, int8x8_t)
32895     _Form of expected instruction(s):_ 'vaddl.s8 Q0, D0, D0'
32896
32897   * uint64x2_t vaddw_u32 (uint64x2_t, uint32x2_t)
32898     _Form of expected instruction(s):_ 'vaddw.u32 Q0, Q0, D0'
32899
32900   * uint32x4_t vaddw_u16 (uint32x4_t, uint16x4_t)
32901     _Form of expected instruction(s):_ 'vaddw.u16 Q0, Q0, D0'
32902
32903   * uint16x8_t vaddw_u8 (uint16x8_t, uint8x8_t)
32904     _Form of expected instruction(s):_ 'vaddw.u8 Q0, Q0, D0'
32905
32906   * int64x2_t vaddw_s32 (int64x2_t, int32x2_t)
32907     _Form of expected instruction(s):_ 'vaddw.s32 Q0, Q0, D0'
32908
32909   * int32x4_t vaddw_s16 (int32x4_t, int16x4_t)
32910     _Form of expected instruction(s):_ 'vaddw.s16 Q0, Q0, D0'
32911
32912   * int16x8_t vaddw_s8 (int16x8_t, int8x8_t)
32913     _Form of expected instruction(s):_ 'vaddw.s8 Q0, Q0, D0'
32914
32915   * uint32x2_t vhadd_u32 (uint32x2_t, uint32x2_t)
32916     _Form of expected instruction(s):_ 'vhadd.u32 D0, D0, D0'
32917
32918   * uint16x4_t vhadd_u16 (uint16x4_t, uint16x4_t)
32919     _Form of expected instruction(s):_ 'vhadd.u16 D0, D0, D0'
32920
32921   * uint8x8_t vhadd_u8 (uint8x8_t, uint8x8_t)
32922     _Form of expected instruction(s):_ 'vhadd.u8 D0, D0, D0'
32923
32924   * int32x2_t vhadd_s32 (int32x2_t, int32x2_t)
32925     _Form of expected instruction(s):_ 'vhadd.s32 D0, D0, D0'
32926
32927   * int16x4_t vhadd_s16 (int16x4_t, int16x4_t)
32928     _Form of expected instruction(s):_ 'vhadd.s16 D0, D0, D0'
32929
32930   * int8x8_t vhadd_s8 (int8x8_t, int8x8_t)
32931     _Form of expected instruction(s):_ 'vhadd.s8 D0, D0, D0'
32932
32933   * uint32x4_t vhaddq_u32 (uint32x4_t, uint32x4_t)
32934     _Form of expected instruction(s):_ 'vhadd.u32 Q0, Q0, Q0'
32935
32936   * uint16x8_t vhaddq_u16 (uint16x8_t, uint16x8_t)
32937     _Form of expected instruction(s):_ 'vhadd.u16 Q0, Q0, Q0'
32938
32939   * uint8x16_t vhaddq_u8 (uint8x16_t, uint8x16_t)
32940     _Form of expected instruction(s):_ 'vhadd.u8 Q0, Q0, Q0'
32941
32942   * int32x4_t vhaddq_s32 (int32x4_t, int32x4_t)
32943     _Form of expected instruction(s):_ 'vhadd.s32 Q0, Q0, Q0'
32944
32945   * int16x8_t vhaddq_s16 (int16x8_t, int16x8_t)
32946     _Form of expected instruction(s):_ 'vhadd.s16 Q0, Q0, Q0'
32947
32948   * int8x16_t vhaddq_s8 (int8x16_t, int8x16_t)
32949     _Form of expected instruction(s):_ 'vhadd.s8 Q0, Q0, Q0'
32950
32951   * uint32x2_t vrhadd_u32 (uint32x2_t, uint32x2_t)
32952     _Form of expected instruction(s):_ 'vrhadd.u32 D0, D0, D0'
32953
32954   * uint16x4_t vrhadd_u16 (uint16x4_t, uint16x4_t)
32955     _Form of expected instruction(s):_ 'vrhadd.u16 D0, D0, D0'
32956
32957   * uint8x8_t vrhadd_u8 (uint8x8_t, uint8x8_t)
32958     _Form of expected instruction(s):_ 'vrhadd.u8 D0, D0, D0'
32959
32960   * int32x2_t vrhadd_s32 (int32x2_t, int32x2_t)
32961     _Form of expected instruction(s):_ 'vrhadd.s32 D0, D0, D0'
32962
32963   * int16x4_t vrhadd_s16 (int16x4_t, int16x4_t)
32964     _Form of expected instruction(s):_ 'vrhadd.s16 D0, D0, D0'
32965
32966   * int8x8_t vrhadd_s8 (int8x8_t, int8x8_t)
32967     _Form of expected instruction(s):_ 'vrhadd.s8 D0, D0, D0'
32968
32969   * uint32x4_t vrhaddq_u32 (uint32x4_t, uint32x4_t)
32970     _Form of expected instruction(s):_ 'vrhadd.u32 Q0, Q0, Q0'
32971
32972   * uint16x8_t vrhaddq_u16 (uint16x8_t, uint16x8_t)
32973     _Form of expected instruction(s):_ 'vrhadd.u16 Q0, Q0, Q0'
32974
32975   * uint8x16_t vrhaddq_u8 (uint8x16_t, uint8x16_t)
32976     _Form of expected instruction(s):_ 'vrhadd.u8 Q0, Q0, Q0'
32977
32978   * int32x4_t vrhaddq_s32 (int32x4_t, int32x4_t)
32979     _Form of expected instruction(s):_ 'vrhadd.s32 Q0, Q0, Q0'
32980
32981   * int16x8_t vrhaddq_s16 (int16x8_t, int16x8_t)
32982     _Form of expected instruction(s):_ 'vrhadd.s16 Q0, Q0, Q0'
32983
32984   * int8x16_t vrhaddq_s8 (int8x16_t, int8x16_t)
32985     _Form of expected instruction(s):_ 'vrhadd.s8 Q0, Q0, Q0'
32986
32987   * uint32x2_t vqadd_u32 (uint32x2_t, uint32x2_t)
32988     _Form of expected instruction(s):_ 'vqadd.u32 D0, D0, D0'
32989
32990   * uint16x4_t vqadd_u16 (uint16x4_t, uint16x4_t)
32991     _Form of expected instruction(s):_ 'vqadd.u16 D0, D0, D0'
32992
32993   * uint8x8_t vqadd_u8 (uint8x8_t, uint8x8_t)
32994     _Form of expected instruction(s):_ 'vqadd.u8 D0, D0, D0'
32995
32996   * int32x2_t vqadd_s32 (int32x2_t, int32x2_t)
32997     _Form of expected instruction(s):_ 'vqadd.s32 D0, D0, D0'
32998
32999   * int16x4_t vqadd_s16 (int16x4_t, int16x4_t)
33000     _Form of expected instruction(s):_ 'vqadd.s16 D0, D0, D0'
33001
33002   * int8x8_t vqadd_s8 (int8x8_t, int8x8_t)
33003     _Form of expected instruction(s):_ 'vqadd.s8 D0, D0, D0'
33004
33005   * uint64x1_t vqadd_u64 (uint64x1_t, uint64x1_t)
33006     _Form of expected instruction(s):_ 'vqadd.u64 D0, D0, D0'
33007
33008   * int64x1_t vqadd_s64 (int64x1_t, int64x1_t)
33009     _Form of expected instruction(s):_ 'vqadd.s64 D0, D0, D0'
33010
33011   * uint32x4_t vqaddq_u32 (uint32x4_t, uint32x4_t)
33012     _Form of expected instruction(s):_ 'vqadd.u32 Q0, Q0, Q0'
33013
33014   * uint16x8_t vqaddq_u16 (uint16x8_t, uint16x8_t)
33015     _Form of expected instruction(s):_ 'vqadd.u16 Q0, Q0, Q0'
33016
33017   * uint8x16_t vqaddq_u8 (uint8x16_t, uint8x16_t)
33018     _Form of expected instruction(s):_ 'vqadd.u8 Q0, Q0, Q0'
33019
33020   * int32x4_t vqaddq_s32 (int32x4_t, int32x4_t)
33021     _Form of expected instruction(s):_ 'vqadd.s32 Q0, Q0, Q0'
33022
33023   * int16x8_t vqaddq_s16 (int16x8_t, int16x8_t)
33024     _Form of expected instruction(s):_ 'vqadd.s16 Q0, Q0, Q0'
33025
33026   * int8x16_t vqaddq_s8 (int8x16_t, int8x16_t)
33027     _Form of expected instruction(s):_ 'vqadd.s8 Q0, Q0, Q0'
33028
33029   * uint64x2_t vqaddq_u64 (uint64x2_t, uint64x2_t)
33030     _Form of expected instruction(s):_ 'vqadd.u64 Q0, Q0, Q0'
33031
33032   * int64x2_t vqaddq_s64 (int64x2_t, int64x2_t)
33033     _Form of expected instruction(s):_ 'vqadd.s64 Q0, Q0, Q0'
33034
33035   * uint32x2_t vaddhn_u64 (uint64x2_t, uint64x2_t)
33036     _Form of expected instruction(s):_ 'vaddhn.i64 D0, Q0, Q0'
33037
33038   * uint16x4_t vaddhn_u32 (uint32x4_t, uint32x4_t)
33039     _Form of expected instruction(s):_ 'vaddhn.i32 D0, Q0, Q0'
33040
33041   * uint8x8_t vaddhn_u16 (uint16x8_t, uint16x8_t)
33042     _Form of expected instruction(s):_ 'vaddhn.i16 D0, Q0, Q0'
33043
33044   * int32x2_t vaddhn_s64 (int64x2_t, int64x2_t)
33045     _Form of expected instruction(s):_ 'vaddhn.i64 D0, Q0, Q0'
33046
33047   * int16x4_t vaddhn_s32 (int32x4_t, int32x4_t)
33048     _Form of expected instruction(s):_ 'vaddhn.i32 D0, Q0, Q0'
33049
33050   * int8x8_t vaddhn_s16 (int16x8_t, int16x8_t)
33051     _Form of expected instruction(s):_ 'vaddhn.i16 D0, Q0, Q0'
33052
33053   * uint32x2_t vraddhn_u64 (uint64x2_t, uint64x2_t)
33054     _Form of expected instruction(s):_ 'vraddhn.i64 D0, Q0, Q0'
33055
33056   * uint16x4_t vraddhn_u32 (uint32x4_t, uint32x4_t)
33057     _Form of expected instruction(s):_ 'vraddhn.i32 D0, Q0, Q0'
33058
33059   * uint8x8_t vraddhn_u16 (uint16x8_t, uint16x8_t)
33060     _Form of expected instruction(s):_ 'vraddhn.i16 D0, Q0, Q0'
33061
33062   * int32x2_t vraddhn_s64 (int64x2_t, int64x2_t)
33063     _Form of expected instruction(s):_ 'vraddhn.i64 D0, Q0, Q0'
33064
33065   * int16x4_t vraddhn_s32 (int32x4_t, int32x4_t)
33066     _Form of expected instruction(s):_ 'vraddhn.i32 D0, Q0, Q0'
33067
33068   * int8x8_t vraddhn_s16 (int16x8_t, int16x8_t)
33069     _Form of expected instruction(s):_ 'vraddhn.i16 D0, Q0, Q0'
33070
330716.57.6.2 Multiplication
33072.......................
33073
33074   * uint32x2_t vmul_u32 (uint32x2_t, uint32x2_t)
33075     _Form of expected instruction(s):_ 'vmul.i32 D0, D0, D0'
33076
33077   * uint16x4_t vmul_u16 (uint16x4_t, uint16x4_t)
33078     _Form of expected instruction(s):_ 'vmul.i16 D0, D0, D0'
33079
33080   * uint8x8_t vmul_u8 (uint8x8_t, uint8x8_t)
33081     _Form of expected instruction(s):_ 'vmul.i8 D0, D0, D0'
33082
33083   * int32x2_t vmul_s32 (int32x2_t, int32x2_t)
33084     _Form of expected instruction(s):_ 'vmul.i32 D0, D0, D0'
33085
33086   * int16x4_t vmul_s16 (int16x4_t, int16x4_t)
33087     _Form of expected instruction(s):_ 'vmul.i16 D0, D0, D0'
33088
33089   * int8x8_t vmul_s8 (int8x8_t, int8x8_t)
33090     _Form of expected instruction(s):_ 'vmul.i8 D0, D0, D0'
33091
33092   * float32x2_t vmul_f32 (float32x2_t, float32x2_t)
33093     _Form of expected instruction(s):_ 'vmul.f32 D0, D0, D0'
33094
33095   * poly8x8_t vmul_p8 (poly8x8_t, poly8x8_t)
33096     _Form of expected instruction(s):_ 'vmul.p8 D0, D0, D0'
33097
33098   * uint32x4_t vmulq_u32 (uint32x4_t, uint32x4_t)
33099     _Form of expected instruction(s):_ 'vmul.i32 Q0, Q0, Q0'
33100
33101   * uint16x8_t vmulq_u16 (uint16x8_t, uint16x8_t)
33102     _Form of expected instruction(s):_ 'vmul.i16 Q0, Q0, Q0'
33103
33104   * uint8x16_t vmulq_u8 (uint8x16_t, uint8x16_t)
33105     _Form of expected instruction(s):_ 'vmul.i8 Q0, Q0, Q0'
33106
33107   * int32x4_t vmulq_s32 (int32x4_t, int32x4_t)
33108     _Form of expected instruction(s):_ 'vmul.i32 Q0, Q0, Q0'
33109
33110   * int16x8_t vmulq_s16 (int16x8_t, int16x8_t)
33111     _Form of expected instruction(s):_ 'vmul.i16 Q0, Q0, Q0'
33112
33113   * int8x16_t vmulq_s8 (int8x16_t, int8x16_t)
33114     _Form of expected instruction(s):_ 'vmul.i8 Q0, Q0, Q0'
33115
33116   * float32x4_t vmulq_f32 (float32x4_t, float32x4_t)
33117     _Form of expected instruction(s):_ 'vmul.f32 Q0, Q0, Q0'
33118
33119   * poly8x16_t vmulq_p8 (poly8x16_t, poly8x16_t)
33120     _Form of expected instruction(s):_ 'vmul.p8 Q0, Q0, Q0'
33121
33122   * int32x2_t vqdmulh_s32 (int32x2_t, int32x2_t)
33123     _Form of expected instruction(s):_ 'vqdmulh.s32 D0, D0, D0'
33124
33125   * int16x4_t vqdmulh_s16 (int16x4_t, int16x4_t)
33126     _Form of expected instruction(s):_ 'vqdmulh.s16 D0, D0, D0'
33127
33128   * int32x4_t vqdmulhq_s32 (int32x4_t, int32x4_t)
33129     _Form of expected instruction(s):_ 'vqdmulh.s32 Q0, Q0, Q0'
33130
33131   * int16x8_t vqdmulhq_s16 (int16x8_t, int16x8_t)
33132     _Form of expected instruction(s):_ 'vqdmulh.s16 Q0, Q0, Q0'
33133
33134   * int32x2_t vqrdmulh_s32 (int32x2_t, int32x2_t)
33135     _Form of expected instruction(s):_ 'vqrdmulh.s32 D0, D0, D0'
33136
33137   * int16x4_t vqrdmulh_s16 (int16x4_t, int16x4_t)
33138     _Form of expected instruction(s):_ 'vqrdmulh.s16 D0, D0, D0'
33139
33140   * int32x4_t vqrdmulhq_s32 (int32x4_t, int32x4_t)
33141     _Form of expected instruction(s):_ 'vqrdmulh.s32 Q0, Q0, Q0'
33142
33143   * int16x8_t vqrdmulhq_s16 (int16x8_t, int16x8_t)
33144     _Form of expected instruction(s):_ 'vqrdmulh.s16 Q0, Q0, Q0'
33145
33146   * uint64x2_t vmull_u32 (uint32x2_t, uint32x2_t)
33147     _Form of expected instruction(s):_ 'vmull.u32 Q0, D0, D0'
33148
33149   * uint32x4_t vmull_u16 (uint16x4_t, uint16x4_t)
33150     _Form of expected instruction(s):_ 'vmull.u16 Q0, D0, D0'
33151
33152   * uint16x8_t vmull_u8 (uint8x8_t, uint8x8_t)
33153     _Form of expected instruction(s):_ 'vmull.u8 Q0, D0, D0'
33154
33155   * int64x2_t vmull_s32 (int32x2_t, int32x2_t)
33156     _Form of expected instruction(s):_ 'vmull.s32 Q0, D0, D0'
33157
33158   * int32x4_t vmull_s16 (int16x4_t, int16x4_t)
33159     _Form of expected instruction(s):_ 'vmull.s16 Q0, D0, D0'
33160
33161   * int16x8_t vmull_s8 (int8x8_t, int8x8_t)
33162     _Form of expected instruction(s):_ 'vmull.s8 Q0, D0, D0'
33163
33164   * poly16x8_t vmull_p8 (poly8x8_t, poly8x8_t)
33165     _Form of expected instruction(s):_ 'vmull.p8 Q0, D0, D0'
33166
33167   * int64x2_t vqdmull_s32 (int32x2_t, int32x2_t)
33168     _Form of expected instruction(s):_ 'vqdmull.s32 Q0, D0, D0'
33169
33170   * int32x4_t vqdmull_s16 (int16x4_t, int16x4_t)
33171     _Form of expected instruction(s):_ 'vqdmull.s16 Q0, D0, D0'
33172
331736.57.6.3 Multiply-accumulate
33174............................
33175
33176   * uint32x2_t vmla_u32 (uint32x2_t, uint32x2_t, uint32x2_t)
33177     _Form of expected instruction(s):_ 'vmla.i32 D0, D0, D0'
33178
33179   * uint16x4_t vmla_u16 (uint16x4_t, uint16x4_t, uint16x4_t)
33180     _Form of expected instruction(s):_ 'vmla.i16 D0, D0, D0'
33181
33182   * uint8x8_t vmla_u8 (uint8x8_t, uint8x8_t, uint8x8_t)
33183     _Form of expected instruction(s):_ 'vmla.i8 D0, D0, D0'
33184
33185   * int32x2_t vmla_s32 (int32x2_t, int32x2_t, int32x2_t)
33186     _Form of expected instruction(s):_ 'vmla.i32 D0, D0, D0'
33187
33188   * int16x4_t vmla_s16 (int16x4_t, int16x4_t, int16x4_t)
33189     _Form of expected instruction(s):_ 'vmla.i16 D0, D0, D0'
33190
33191   * int8x8_t vmla_s8 (int8x8_t, int8x8_t, int8x8_t)
33192     _Form of expected instruction(s):_ 'vmla.i8 D0, D0, D0'
33193
33194   * float32x2_t vmla_f32 (float32x2_t, float32x2_t, float32x2_t)
33195     _Form of expected instruction(s):_ 'vmla.f32 D0, D0, D0'
33196
33197   * uint32x4_t vmlaq_u32 (uint32x4_t, uint32x4_t, uint32x4_t)
33198     _Form of expected instruction(s):_ 'vmla.i32 Q0, Q0, Q0'
33199
33200   * uint16x8_t vmlaq_u16 (uint16x8_t, uint16x8_t, uint16x8_t)
33201     _Form of expected instruction(s):_ 'vmla.i16 Q0, Q0, Q0'
33202
33203   * uint8x16_t vmlaq_u8 (uint8x16_t, uint8x16_t, uint8x16_t)
33204     _Form of expected instruction(s):_ 'vmla.i8 Q0, Q0, Q0'
33205
33206   * int32x4_t vmlaq_s32 (int32x4_t, int32x4_t, int32x4_t)
33207     _Form of expected instruction(s):_ 'vmla.i32 Q0, Q0, Q0'
33208
33209   * int16x8_t vmlaq_s16 (int16x8_t, int16x8_t, int16x8_t)
33210     _Form of expected instruction(s):_ 'vmla.i16 Q0, Q0, Q0'
33211
33212   * int8x16_t vmlaq_s8 (int8x16_t, int8x16_t, int8x16_t)
33213     _Form of expected instruction(s):_ 'vmla.i8 Q0, Q0, Q0'
33214
33215   * float32x4_t vmlaq_f32 (float32x4_t, float32x4_t, float32x4_t)
33216     _Form of expected instruction(s):_ 'vmla.f32 Q0, Q0, Q0'
33217
33218   * uint64x2_t vmlal_u32 (uint64x2_t, uint32x2_t, uint32x2_t)
33219     _Form of expected instruction(s):_ 'vmlal.u32 Q0, D0, D0'
33220
33221   * uint32x4_t vmlal_u16 (uint32x4_t, uint16x4_t, uint16x4_t)
33222     _Form of expected instruction(s):_ 'vmlal.u16 Q0, D0, D0'
33223
33224   * uint16x8_t vmlal_u8 (uint16x8_t, uint8x8_t, uint8x8_t)
33225     _Form of expected instruction(s):_ 'vmlal.u8 Q0, D0, D0'
33226
33227   * int64x2_t vmlal_s32 (int64x2_t, int32x2_t, int32x2_t)
33228     _Form of expected instruction(s):_ 'vmlal.s32 Q0, D0, D0'
33229
33230   * int32x4_t vmlal_s16 (int32x4_t, int16x4_t, int16x4_t)
33231     _Form of expected instruction(s):_ 'vmlal.s16 Q0, D0, D0'
33232
33233   * int16x8_t vmlal_s8 (int16x8_t, int8x8_t, int8x8_t)
33234     _Form of expected instruction(s):_ 'vmlal.s8 Q0, D0, D0'
33235
33236   * int64x2_t vqdmlal_s32 (int64x2_t, int32x2_t, int32x2_t)
33237     _Form of expected instruction(s):_ 'vqdmlal.s32 Q0, D0, D0'
33238
33239   * int32x4_t vqdmlal_s16 (int32x4_t, int16x4_t, int16x4_t)
33240     _Form of expected instruction(s):_ 'vqdmlal.s16 Q0, D0, D0'
33241
332426.57.6.4 Multiply-subtract
33243..........................
33244
33245   * uint32x2_t vmls_u32 (uint32x2_t, uint32x2_t, uint32x2_t)
33246     _Form of expected instruction(s):_ 'vmls.i32 D0, D0, D0'
33247
33248   * uint16x4_t vmls_u16 (uint16x4_t, uint16x4_t, uint16x4_t)
33249     _Form of expected instruction(s):_ 'vmls.i16 D0, D0, D0'
33250
33251   * uint8x8_t vmls_u8 (uint8x8_t, uint8x8_t, uint8x8_t)
33252     _Form of expected instruction(s):_ 'vmls.i8 D0, D0, D0'
33253
33254   * int32x2_t vmls_s32 (int32x2_t, int32x2_t, int32x2_t)
33255     _Form of expected instruction(s):_ 'vmls.i32 D0, D0, D0'
33256
33257   * int16x4_t vmls_s16 (int16x4_t, int16x4_t, int16x4_t)
33258     _Form of expected instruction(s):_ 'vmls.i16 D0, D0, D0'
33259
33260   * int8x8_t vmls_s8 (int8x8_t, int8x8_t, int8x8_t)
33261     _Form of expected instruction(s):_ 'vmls.i8 D0, D0, D0'
33262
33263   * float32x2_t vmls_f32 (float32x2_t, float32x2_t, float32x2_t)
33264     _Form of expected instruction(s):_ 'vmls.f32 D0, D0, D0'
33265
33266   * uint32x4_t vmlsq_u32 (uint32x4_t, uint32x4_t, uint32x4_t)
33267     _Form of expected instruction(s):_ 'vmls.i32 Q0, Q0, Q0'
33268
33269   * uint16x8_t vmlsq_u16 (uint16x8_t, uint16x8_t, uint16x8_t)
33270     _Form of expected instruction(s):_ 'vmls.i16 Q0, Q0, Q0'
33271
33272   * uint8x16_t vmlsq_u8 (uint8x16_t, uint8x16_t, uint8x16_t)
33273     _Form of expected instruction(s):_ 'vmls.i8 Q0, Q0, Q0'
33274
33275   * int32x4_t vmlsq_s32 (int32x4_t, int32x4_t, int32x4_t)
33276     _Form of expected instruction(s):_ 'vmls.i32 Q0, Q0, Q0'
33277
33278   * int16x8_t vmlsq_s16 (int16x8_t, int16x8_t, int16x8_t)
33279     _Form of expected instruction(s):_ 'vmls.i16 Q0, Q0, Q0'
33280
33281   * int8x16_t vmlsq_s8 (int8x16_t, int8x16_t, int8x16_t)
33282     _Form of expected instruction(s):_ 'vmls.i8 Q0, Q0, Q0'
33283
33284   * float32x4_t vmlsq_f32 (float32x4_t, float32x4_t, float32x4_t)
33285     _Form of expected instruction(s):_ 'vmls.f32 Q0, Q0, Q0'
33286
33287   * uint64x2_t vmlsl_u32 (uint64x2_t, uint32x2_t, uint32x2_t)
33288     _Form of expected instruction(s):_ 'vmlsl.u32 Q0, D0, D0'
33289
33290   * uint32x4_t vmlsl_u16 (uint32x4_t, uint16x4_t, uint16x4_t)
33291     _Form of expected instruction(s):_ 'vmlsl.u16 Q0, D0, D0'
33292
33293   * uint16x8_t vmlsl_u8 (uint16x8_t, uint8x8_t, uint8x8_t)
33294     _Form of expected instruction(s):_ 'vmlsl.u8 Q0, D0, D0'
33295
33296   * int64x2_t vmlsl_s32 (int64x2_t, int32x2_t, int32x2_t)
33297     _Form of expected instruction(s):_ 'vmlsl.s32 Q0, D0, D0'
33298
33299   * int32x4_t vmlsl_s16 (int32x4_t, int16x4_t, int16x4_t)
33300     _Form of expected instruction(s):_ 'vmlsl.s16 Q0, D0, D0'
33301
33302   * int16x8_t vmlsl_s8 (int16x8_t, int8x8_t, int8x8_t)
33303     _Form of expected instruction(s):_ 'vmlsl.s8 Q0, D0, D0'
33304
33305   * int64x2_t vqdmlsl_s32 (int64x2_t, int32x2_t, int32x2_t)
33306     _Form of expected instruction(s):_ 'vqdmlsl.s32 Q0, D0, D0'
33307
33308   * int32x4_t vqdmlsl_s16 (int32x4_t, int16x4_t, int16x4_t)
33309     _Form of expected instruction(s):_ 'vqdmlsl.s16 Q0, D0, D0'
33310
333116.57.6.5 Fused-multiply-accumulate
33312..................................
33313
33314   * float32x2_t vfma_f32 (float32x2_t, float32x2_t, float32x2_t)
33315     _Form of expected instruction(s):_ 'vfma.f32 D0, D0, D0'
33316
33317   * float32x4_t vfmaq_f32 (float32x4_t, float32x4_t, float32x4_t)
33318     _Form of expected instruction(s):_ 'vfma.f32 Q0, Q0, Q0'
33319
333206.57.6.6 Fused-multiply-subtract
33321................................
33322
33323   * float32x2_t vfms_f32 (float32x2_t, float32x2_t, float32x2_t)
33324     _Form of expected instruction(s):_ 'vfms.f32 D0, D0, D0'
33325
33326   * float32x4_t vfmsq_f32 (float32x4_t, float32x4_t, float32x4_t)
33327     _Form of expected instruction(s):_ 'vfms.f32 Q0, Q0, Q0'
33328
333296.57.6.7 Round to integral (to nearest, ties to even)
33330.....................................................
33331
33332   * float32x2_t vrndn_f32 (float32x2_t)
33333     _Form of expected instruction(s):_ 'vrintn.f32 D0, D0'
33334
33335   * float32x4_t vrndqn_f32 (float32x4_t)
33336     _Form of expected instruction(s):_ 'vrintn.f32 Q0, Q0'
33337
333386.57.6.8 Round to integral (to nearest, ties away from zero)
33339............................................................
33340
33341   * float32x2_t vrnda_f32 (float32x2_t)
33342     _Form of expected instruction(s):_ 'vrinta.f32 D0, D0'
33343
33344   * float32x4_t vrndqa_f32 (float32x4_t)
33345     _Form of expected instruction(s):_ 'vrinta.f32 Q0, Q0'
33346
333476.57.6.9 Round to integral (towards +Inf)
33348.........................................
33349
33350   * float32x2_t vrndp_f32 (float32x2_t)
33351     _Form of expected instruction(s):_ 'vrintp.f32 D0, D0'
33352
33353   * float32x4_t vrndqp_f32 (float32x4_t)
33354     _Form of expected instruction(s):_ 'vrintp.f32 Q0, Q0'
33355
333566.57.6.10 Round to integral (towards -Inf)
33357..........................................
33358
33359   * float32x2_t vrndm_f32 (float32x2_t)
33360     _Form of expected instruction(s):_ 'vrintm.f32 D0, D0'
33361
33362   * float32x4_t vrndqm_f32 (float32x4_t)
33363     _Form of expected instruction(s):_ 'vrintm.f32 Q0, Q0'
33364
333656.57.6.11 Round to integral (towards 0)
33366.......................................
33367
33368   * float32x2_t vrnd_f32 (float32x2_t)
33369     _Form of expected instruction(s):_ 'vrintz.f32 D0, D0'
33370
33371   * float32x4_t vrndq_f32 (float32x4_t)
33372     _Form of expected instruction(s):_ 'vrintz.f32 Q0, Q0'
33373
333746.57.6.12 Subtraction
33375.....................
33376
33377   * uint32x2_t vsub_u32 (uint32x2_t, uint32x2_t)
33378     _Form of expected instruction(s):_ 'vsub.i32 D0, D0, D0'
33379
33380   * uint16x4_t vsub_u16 (uint16x4_t, uint16x4_t)
33381     _Form of expected instruction(s):_ 'vsub.i16 D0, D0, D0'
33382
33383   * uint8x8_t vsub_u8 (uint8x8_t, uint8x8_t)
33384     _Form of expected instruction(s):_ 'vsub.i8 D0, D0, D0'
33385
33386   * int32x2_t vsub_s32 (int32x2_t, int32x2_t)
33387     _Form of expected instruction(s):_ 'vsub.i32 D0, D0, D0'
33388
33389   * int16x4_t vsub_s16 (int16x4_t, int16x4_t)
33390     _Form of expected instruction(s):_ 'vsub.i16 D0, D0, D0'
33391
33392   * int8x8_t vsub_s8 (int8x8_t, int8x8_t)
33393     _Form of expected instruction(s):_ 'vsub.i8 D0, D0, D0'
33394
33395   * float32x2_t vsub_f32 (float32x2_t, float32x2_t)
33396     _Form of expected instruction(s):_ 'vsub.f32 D0, D0, D0'
33397
33398   * uint64x1_t vsub_u64 (uint64x1_t, uint64x1_t)
33399
33400   * int64x1_t vsub_s64 (int64x1_t, int64x1_t)
33401
33402   * uint32x4_t vsubq_u32 (uint32x4_t, uint32x4_t)
33403     _Form of expected instruction(s):_ 'vsub.i32 Q0, Q0, Q0'
33404
33405   * uint16x8_t vsubq_u16 (uint16x8_t, uint16x8_t)
33406     _Form of expected instruction(s):_ 'vsub.i16 Q0, Q0, Q0'
33407
33408   * uint8x16_t vsubq_u8 (uint8x16_t, uint8x16_t)
33409     _Form of expected instruction(s):_ 'vsub.i8 Q0, Q0, Q0'
33410
33411   * int32x4_t vsubq_s32 (int32x4_t, int32x4_t)
33412     _Form of expected instruction(s):_ 'vsub.i32 Q0, Q0, Q0'
33413
33414   * int16x8_t vsubq_s16 (int16x8_t, int16x8_t)
33415     _Form of expected instruction(s):_ 'vsub.i16 Q0, Q0, Q0'
33416
33417   * int8x16_t vsubq_s8 (int8x16_t, int8x16_t)
33418     _Form of expected instruction(s):_ 'vsub.i8 Q0, Q0, Q0'
33419
33420   * uint64x2_t vsubq_u64 (uint64x2_t, uint64x2_t)
33421     _Form of expected instruction(s):_ 'vsub.i64 Q0, Q0, Q0'
33422
33423   * int64x2_t vsubq_s64 (int64x2_t, int64x2_t)
33424     _Form of expected instruction(s):_ 'vsub.i64 Q0, Q0, Q0'
33425
33426   * float32x4_t vsubq_f32 (float32x4_t, float32x4_t)
33427     _Form of expected instruction(s):_ 'vsub.f32 Q0, Q0, Q0'
33428
33429   * uint64x2_t vsubl_u32 (uint32x2_t, uint32x2_t)
33430     _Form of expected instruction(s):_ 'vsubl.u32 Q0, D0, D0'
33431
33432   * uint32x4_t vsubl_u16 (uint16x4_t, uint16x4_t)
33433     _Form of expected instruction(s):_ 'vsubl.u16 Q0, D0, D0'
33434
33435   * uint16x8_t vsubl_u8 (uint8x8_t, uint8x8_t)
33436     _Form of expected instruction(s):_ 'vsubl.u8 Q0, D0, D0'
33437
33438   * int64x2_t vsubl_s32 (int32x2_t, int32x2_t)
33439     _Form of expected instruction(s):_ 'vsubl.s32 Q0, D0, D0'
33440
33441   * int32x4_t vsubl_s16 (int16x4_t, int16x4_t)
33442     _Form of expected instruction(s):_ 'vsubl.s16 Q0, D0, D0'
33443
33444   * int16x8_t vsubl_s8 (int8x8_t, int8x8_t)
33445     _Form of expected instruction(s):_ 'vsubl.s8 Q0, D0, D0'
33446
33447   * uint64x2_t vsubw_u32 (uint64x2_t, uint32x2_t)
33448     _Form of expected instruction(s):_ 'vsubw.u32 Q0, Q0, D0'
33449
33450   * uint32x4_t vsubw_u16 (uint32x4_t, uint16x4_t)
33451     _Form of expected instruction(s):_ 'vsubw.u16 Q0, Q0, D0'
33452
33453   * uint16x8_t vsubw_u8 (uint16x8_t, uint8x8_t)
33454     _Form of expected instruction(s):_ 'vsubw.u8 Q0, Q0, D0'
33455
33456   * int64x2_t vsubw_s32 (int64x2_t, int32x2_t)
33457     _Form of expected instruction(s):_ 'vsubw.s32 Q0, Q0, D0'
33458
33459   * int32x4_t vsubw_s16 (int32x4_t, int16x4_t)
33460     _Form of expected instruction(s):_ 'vsubw.s16 Q0, Q0, D0'
33461
33462   * int16x8_t vsubw_s8 (int16x8_t, int8x8_t)
33463     _Form of expected instruction(s):_ 'vsubw.s8 Q0, Q0, D0'
33464
33465   * uint32x2_t vhsub_u32 (uint32x2_t, uint32x2_t)
33466     _Form of expected instruction(s):_ 'vhsub.u32 D0, D0, D0'
33467
33468   * uint16x4_t vhsub_u16 (uint16x4_t, uint16x4_t)
33469     _Form of expected instruction(s):_ 'vhsub.u16 D0, D0, D0'
33470
33471   * uint8x8_t vhsub_u8 (uint8x8_t, uint8x8_t)
33472     _Form of expected instruction(s):_ 'vhsub.u8 D0, D0, D0'
33473
33474   * int32x2_t vhsub_s32 (int32x2_t, int32x2_t)
33475     _Form of expected instruction(s):_ 'vhsub.s32 D0, D0, D0'
33476
33477   * int16x4_t vhsub_s16 (int16x4_t, int16x4_t)
33478     _Form of expected instruction(s):_ 'vhsub.s16 D0, D0, D0'
33479
33480   * int8x8_t vhsub_s8 (int8x8_t, int8x8_t)
33481     _Form of expected instruction(s):_ 'vhsub.s8 D0, D0, D0'
33482
33483   * uint32x4_t vhsubq_u32 (uint32x4_t, uint32x4_t)
33484     _Form of expected instruction(s):_ 'vhsub.u32 Q0, Q0, Q0'
33485
33486   * uint16x8_t vhsubq_u16 (uint16x8_t, uint16x8_t)
33487     _Form of expected instruction(s):_ 'vhsub.u16 Q0, Q0, Q0'
33488
33489   * uint8x16_t vhsubq_u8 (uint8x16_t, uint8x16_t)
33490     _Form of expected instruction(s):_ 'vhsub.u8 Q0, Q0, Q0'
33491
33492   * int32x4_t vhsubq_s32 (int32x4_t, int32x4_t)
33493     _Form of expected instruction(s):_ 'vhsub.s32 Q0, Q0, Q0'
33494
33495   * int16x8_t vhsubq_s16 (int16x8_t, int16x8_t)
33496     _Form of expected instruction(s):_ 'vhsub.s16 Q0, Q0, Q0'
33497
33498   * int8x16_t vhsubq_s8 (int8x16_t, int8x16_t)
33499     _Form of expected instruction(s):_ 'vhsub.s8 Q0, Q0, Q0'
33500
33501   * uint32x2_t vqsub_u32 (uint32x2_t, uint32x2_t)
33502     _Form of expected instruction(s):_ 'vqsub.u32 D0, D0, D0'
33503
33504   * uint16x4_t vqsub_u16 (uint16x4_t, uint16x4_t)
33505     _Form of expected instruction(s):_ 'vqsub.u16 D0, D0, D0'
33506
33507   * uint8x8_t vqsub_u8 (uint8x8_t, uint8x8_t)
33508     _Form of expected instruction(s):_ 'vqsub.u8 D0, D0, D0'
33509
33510   * int32x2_t vqsub_s32 (int32x2_t, int32x2_t)
33511     _Form of expected instruction(s):_ 'vqsub.s32 D0, D0, D0'
33512
33513   * int16x4_t vqsub_s16 (int16x4_t, int16x4_t)
33514     _Form of expected instruction(s):_ 'vqsub.s16 D0, D0, D0'
33515
33516   * int8x8_t vqsub_s8 (int8x8_t, int8x8_t)
33517     _Form of expected instruction(s):_ 'vqsub.s8 D0, D0, D0'
33518
33519   * uint64x1_t vqsub_u64 (uint64x1_t, uint64x1_t)
33520     _Form of expected instruction(s):_ 'vqsub.u64 D0, D0, D0'
33521
33522   * int64x1_t vqsub_s64 (int64x1_t, int64x1_t)
33523     _Form of expected instruction(s):_ 'vqsub.s64 D0, D0, D0'
33524
33525   * uint32x4_t vqsubq_u32 (uint32x4_t, uint32x4_t)
33526     _Form of expected instruction(s):_ 'vqsub.u32 Q0, Q0, Q0'
33527
33528   * uint16x8_t vqsubq_u16 (uint16x8_t, uint16x8_t)
33529     _Form of expected instruction(s):_ 'vqsub.u16 Q0, Q0, Q0'
33530
33531   * uint8x16_t vqsubq_u8 (uint8x16_t, uint8x16_t)
33532     _Form of expected instruction(s):_ 'vqsub.u8 Q0, Q0, Q0'
33533
33534   * int32x4_t vqsubq_s32 (int32x4_t, int32x4_t)
33535     _Form of expected instruction(s):_ 'vqsub.s32 Q0, Q0, Q0'
33536
33537   * int16x8_t vqsubq_s16 (int16x8_t, int16x8_t)
33538     _Form of expected instruction(s):_ 'vqsub.s16 Q0, Q0, Q0'
33539
33540   * int8x16_t vqsubq_s8 (int8x16_t, int8x16_t)
33541     _Form of expected instruction(s):_ 'vqsub.s8 Q0, Q0, Q0'
33542
33543   * uint64x2_t vqsubq_u64 (uint64x2_t, uint64x2_t)
33544     _Form of expected instruction(s):_ 'vqsub.u64 Q0, Q0, Q0'
33545
33546   * int64x2_t vqsubq_s64 (int64x2_t, int64x2_t)
33547     _Form of expected instruction(s):_ 'vqsub.s64 Q0, Q0, Q0'
33548
33549   * uint32x2_t vsubhn_u64 (uint64x2_t, uint64x2_t)
33550     _Form of expected instruction(s):_ 'vsubhn.i64 D0, Q0, Q0'
33551
33552   * uint16x4_t vsubhn_u32 (uint32x4_t, uint32x4_t)
33553     _Form of expected instruction(s):_ 'vsubhn.i32 D0, Q0, Q0'
33554
33555   * uint8x8_t vsubhn_u16 (uint16x8_t, uint16x8_t)
33556     _Form of expected instruction(s):_ 'vsubhn.i16 D0, Q0, Q0'
33557
33558   * int32x2_t vsubhn_s64 (int64x2_t, int64x2_t)
33559     _Form of expected instruction(s):_ 'vsubhn.i64 D0, Q0, Q0'
33560
33561   * int16x4_t vsubhn_s32 (int32x4_t, int32x4_t)
33562     _Form of expected instruction(s):_ 'vsubhn.i32 D0, Q0, Q0'
33563
33564   * int8x8_t vsubhn_s16 (int16x8_t, int16x8_t)
33565     _Form of expected instruction(s):_ 'vsubhn.i16 D0, Q0, Q0'
33566
33567   * uint32x2_t vrsubhn_u64 (uint64x2_t, uint64x2_t)
33568     _Form of expected instruction(s):_ 'vrsubhn.i64 D0, Q0, Q0'
33569
33570   * uint16x4_t vrsubhn_u32 (uint32x4_t, uint32x4_t)
33571     _Form of expected instruction(s):_ 'vrsubhn.i32 D0, Q0, Q0'
33572
33573   * uint8x8_t vrsubhn_u16 (uint16x8_t, uint16x8_t)
33574     _Form of expected instruction(s):_ 'vrsubhn.i16 D0, Q0, Q0'
33575
33576   * int32x2_t vrsubhn_s64 (int64x2_t, int64x2_t)
33577     _Form of expected instruction(s):_ 'vrsubhn.i64 D0, Q0, Q0'
33578
33579   * int16x4_t vrsubhn_s32 (int32x4_t, int32x4_t)
33580     _Form of expected instruction(s):_ 'vrsubhn.i32 D0, Q0, Q0'
33581
33582   * int8x8_t vrsubhn_s16 (int16x8_t, int16x8_t)
33583     _Form of expected instruction(s):_ 'vrsubhn.i16 D0, Q0, Q0'
33584
335856.57.6.13 Comparison (equal-to)
33586...............................
33587
33588   * uint32x2_t vceq_u32 (uint32x2_t, uint32x2_t)
33589     _Form of expected instruction(s):_ 'vceq.i32 D0, D0, D0'
33590
33591   * uint16x4_t vceq_u16 (uint16x4_t, uint16x4_t)
33592     _Form of expected instruction(s):_ 'vceq.i16 D0, D0, D0'
33593
33594   * uint8x8_t vceq_u8 (uint8x8_t, uint8x8_t)
33595     _Form of expected instruction(s):_ 'vceq.i8 D0, D0, D0'
33596
33597   * uint32x2_t vceq_s32 (int32x2_t, int32x2_t)
33598     _Form of expected instruction(s):_ 'vceq.i32 D0, D0, D0'
33599
33600   * uint16x4_t vceq_s16 (int16x4_t, int16x4_t)
33601     _Form of expected instruction(s):_ 'vceq.i16 D0, D0, D0'
33602
33603   * uint8x8_t vceq_s8 (int8x8_t, int8x8_t)
33604     _Form of expected instruction(s):_ 'vceq.i8 D0, D0, D0'
33605
33606   * uint32x2_t vceq_f32 (float32x2_t, float32x2_t)
33607     _Form of expected instruction(s):_ 'vceq.f32 D0, D0, D0'
33608
33609   * uint8x8_t vceq_p8 (poly8x8_t, poly8x8_t)
33610     _Form of expected instruction(s):_ 'vceq.i8 D0, D0, D0'
33611
33612   * uint32x4_t vceqq_u32 (uint32x4_t, uint32x4_t)
33613     _Form of expected instruction(s):_ 'vceq.i32 Q0, Q0, Q0'
33614
33615   * uint16x8_t vceqq_u16 (uint16x8_t, uint16x8_t)
33616     _Form of expected instruction(s):_ 'vceq.i16 Q0, Q0, Q0'
33617
33618   * uint8x16_t vceqq_u8 (uint8x16_t, uint8x16_t)
33619     _Form of expected instruction(s):_ 'vceq.i8 Q0, Q0, Q0'
33620
33621   * uint32x4_t vceqq_s32 (int32x4_t, int32x4_t)
33622     _Form of expected instruction(s):_ 'vceq.i32 Q0, Q0, Q0'
33623
33624   * uint16x8_t vceqq_s16 (int16x8_t, int16x8_t)
33625     _Form of expected instruction(s):_ 'vceq.i16 Q0, Q0, Q0'
33626
33627   * uint8x16_t vceqq_s8 (int8x16_t, int8x16_t)
33628     _Form of expected instruction(s):_ 'vceq.i8 Q0, Q0, Q0'
33629
33630   * uint32x4_t vceqq_f32 (float32x4_t, float32x4_t)
33631     _Form of expected instruction(s):_ 'vceq.f32 Q0, Q0, Q0'
33632
33633   * uint8x16_t vceqq_p8 (poly8x16_t, poly8x16_t)
33634     _Form of expected instruction(s):_ 'vceq.i8 Q0, Q0, Q0'
33635
336366.57.6.14 Comparison (greater-than-or-equal-to)
33637...............................................
33638
33639   * uint32x2_t vcge_s32 (int32x2_t, int32x2_t)
33640     _Form of expected instruction(s):_ 'vcge.s32 D0, D0, D0'
33641
33642   * uint16x4_t vcge_s16 (int16x4_t, int16x4_t)
33643     _Form of expected instruction(s):_ 'vcge.s16 D0, D0, D0'
33644
33645   * uint8x8_t vcge_s8 (int8x8_t, int8x8_t)
33646     _Form of expected instruction(s):_ 'vcge.s8 D0, D0, D0'
33647
33648   * uint32x2_t vcge_f32 (float32x2_t, float32x2_t)
33649     _Form of expected instruction(s):_ 'vcge.f32 D0, D0, D0'
33650
33651   * uint32x2_t vcge_u32 (uint32x2_t, uint32x2_t)
33652     _Form of expected instruction(s):_ 'vcge.u32 D0, D0, D0'
33653
33654   * uint16x4_t vcge_u16 (uint16x4_t, uint16x4_t)
33655     _Form of expected instruction(s):_ 'vcge.u16 D0, D0, D0'
33656
33657   * uint8x8_t vcge_u8 (uint8x8_t, uint8x8_t)
33658     _Form of expected instruction(s):_ 'vcge.u8 D0, D0, D0'
33659
33660   * uint32x4_t vcgeq_s32 (int32x4_t, int32x4_t)
33661     _Form of expected instruction(s):_ 'vcge.s32 Q0, Q0, Q0'
33662
33663   * uint16x8_t vcgeq_s16 (int16x8_t, int16x8_t)
33664     _Form of expected instruction(s):_ 'vcge.s16 Q0, Q0, Q0'
33665
33666   * uint8x16_t vcgeq_s8 (int8x16_t, int8x16_t)
33667     _Form of expected instruction(s):_ 'vcge.s8 Q0, Q0, Q0'
33668
33669   * uint32x4_t vcgeq_f32 (float32x4_t, float32x4_t)
33670     _Form of expected instruction(s):_ 'vcge.f32 Q0, Q0, Q0'
33671
33672   * uint32x4_t vcgeq_u32 (uint32x4_t, uint32x4_t)
33673     _Form of expected instruction(s):_ 'vcge.u32 Q0, Q0, Q0'
33674
33675   * uint16x8_t vcgeq_u16 (uint16x8_t, uint16x8_t)
33676     _Form of expected instruction(s):_ 'vcge.u16 Q0, Q0, Q0'
33677
33678   * uint8x16_t vcgeq_u8 (uint8x16_t, uint8x16_t)
33679     _Form of expected instruction(s):_ 'vcge.u8 Q0, Q0, Q0'
33680
336816.57.6.15 Comparison (less-than-or-equal-to)
33682............................................
33683
33684   * uint32x2_t vcle_s32 (int32x2_t, int32x2_t)
33685     _Form of expected instruction(s):_ 'vcge.s32 D0, D0, D0'
33686
33687   * uint16x4_t vcle_s16 (int16x4_t, int16x4_t)
33688     _Form of expected instruction(s):_ 'vcge.s16 D0, D0, D0'
33689
33690   * uint8x8_t vcle_s8 (int8x8_t, int8x8_t)
33691     _Form of expected instruction(s):_ 'vcge.s8 D0, D0, D0'
33692
33693   * uint32x2_t vcle_f32 (float32x2_t, float32x2_t)
33694     _Form of expected instruction(s):_ 'vcge.f32 D0, D0, D0'
33695
33696   * uint32x2_t vcle_u32 (uint32x2_t, uint32x2_t)
33697     _Form of expected instruction(s):_ 'vcge.u32 D0, D0, D0'
33698
33699   * uint16x4_t vcle_u16 (uint16x4_t, uint16x4_t)
33700     _Form of expected instruction(s):_ 'vcge.u16 D0, D0, D0'
33701
33702   * uint8x8_t vcle_u8 (uint8x8_t, uint8x8_t)
33703     _Form of expected instruction(s):_ 'vcge.u8 D0, D0, D0'
33704
33705   * uint32x4_t vcleq_s32 (int32x4_t, int32x4_t)
33706     _Form of expected instruction(s):_ 'vcge.s32 Q0, Q0, Q0'
33707
33708   * uint16x8_t vcleq_s16 (int16x8_t, int16x8_t)
33709     _Form of expected instruction(s):_ 'vcge.s16 Q0, Q0, Q0'
33710
33711   * uint8x16_t vcleq_s8 (int8x16_t, int8x16_t)
33712     _Form of expected instruction(s):_ 'vcge.s8 Q0, Q0, Q0'
33713
33714   * uint32x4_t vcleq_f32 (float32x4_t, float32x4_t)
33715     _Form of expected instruction(s):_ 'vcge.f32 Q0, Q0, Q0'
33716
33717   * uint32x4_t vcleq_u32 (uint32x4_t, uint32x4_t)
33718     _Form of expected instruction(s):_ 'vcge.u32 Q0, Q0, Q0'
33719
33720   * uint16x8_t vcleq_u16 (uint16x8_t, uint16x8_t)
33721     _Form of expected instruction(s):_ 'vcge.u16 Q0, Q0, Q0'
33722
33723   * uint8x16_t vcleq_u8 (uint8x16_t, uint8x16_t)
33724     _Form of expected instruction(s):_ 'vcge.u8 Q0, Q0, Q0'
33725
337266.57.6.16 Comparison (greater-than)
33727...................................
33728
33729   * uint32x2_t vcgt_s32 (int32x2_t, int32x2_t)
33730     _Form of expected instruction(s):_ 'vcgt.s32 D0, D0, D0'
33731
33732   * uint16x4_t vcgt_s16 (int16x4_t, int16x4_t)
33733     _Form of expected instruction(s):_ 'vcgt.s16 D0, D0, D0'
33734
33735   * uint8x8_t vcgt_s8 (int8x8_t, int8x8_t)
33736     _Form of expected instruction(s):_ 'vcgt.s8 D0, D0, D0'
33737
33738   * uint32x2_t vcgt_f32 (float32x2_t, float32x2_t)
33739     _Form of expected instruction(s):_ 'vcgt.f32 D0, D0, D0'
33740
33741   * uint32x2_t vcgt_u32 (uint32x2_t, uint32x2_t)
33742     _Form of expected instruction(s):_ 'vcgt.u32 D0, D0, D0'
33743
33744   * uint16x4_t vcgt_u16 (uint16x4_t, uint16x4_t)
33745     _Form of expected instruction(s):_ 'vcgt.u16 D0, D0, D0'
33746
33747   * uint8x8_t vcgt_u8 (uint8x8_t, uint8x8_t)
33748     _Form of expected instruction(s):_ 'vcgt.u8 D0, D0, D0'
33749
33750   * uint32x4_t vcgtq_s32 (int32x4_t, int32x4_t)
33751     _Form of expected instruction(s):_ 'vcgt.s32 Q0, Q0, Q0'
33752
33753   * uint16x8_t vcgtq_s16 (int16x8_t, int16x8_t)
33754     _Form of expected instruction(s):_ 'vcgt.s16 Q0, Q0, Q0'
33755
33756   * uint8x16_t vcgtq_s8 (int8x16_t, int8x16_t)
33757     _Form of expected instruction(s):_ 'vcgt.s8 Q0, Q0, Q0'
33758
33759   * uint32x4_t vcgtq_f32 (float32x4_t, float32x4_t)
33760     _Form of expected instruction(s):_ 'vcgt.f32 Q0, Q0, Q0'
33761
33762   * uint32x4_t vcgtq_u32 (uint32x4_t, uint32x4_t)
33763     _Form of expected instruction(s):_ 'vcgt.u32 Q0, Q0, Q0'
33764
33765   * uint16x8_t vcgtq_u16 (uint16x8_t, uint16x8_t)
33766     _Form of expected instruction(s):_ 'vcgt.u16 Q0, Q0, Q0'
33767
33768   * uint8x16_t vcgtq_u8 (uint8x16_t, uint8x16_t)
33769     _Form of expected instruction(s):_ 'vcgt.u8 Q0, Q0, Q0'
33770
337716.57.6.17 Comparison (less-than)
33772................................
33773
33774   * uint32x2_t vclt_s32 (int32x2_t, int32x2_t)
33775     _Form of expected instruction(s):_ 'vcgt.s32 D0, D0, D0'
33776
33777   * uint16x4_t vclt_s16 (int16x4_t, int16x4_t)
33778     _Form of expected instruction(s):_ 'vcgt.s16 D0, D0, D0'
33779
33780   * uint8x8_t vclt_s8 (int8x8_t, int8x8_t)
33781     _Form of expected instruction(s):_ 'vcgt.s8 D0, D0, D0'
33782
33783   * uint32x2_t vclt_f32 (float32x2_t, float32x2_t)
33784     _Form of expected instruction(s):_ 'vcgt.f32 D0, D0, D0'
33785
33786   * uint32x2_t vclt_u32 (uint32x2_t, uint32x2_t)
33787     _Form of expected instruction(s):_ 'vcgt.u32 D0, D0, D0'
33788
33789   * uint16x4_t vclt_u16 (uint16x4_t, uint16x4_t)
33790     _Form of expected instruction(s):_ 'vcgt.u16 D0, D0, D0'
33791
33792   * uint8x8_t vclt_u8 (uint8x8_t, uint8x8_t)
33793     _Form of expected instruction(s):_ 'vcgt.u8 D0, D0, D0'
33794
33795   * uint32x4_t vcltq_s32 (int32x4_t, int32x4_t)
33796     _Form of expected instruction(s):_ 'vcgt.s32 Q0, Q0, Q0'
33797
33798   * uint16x8_t vcltq_s16 (int16x8_t, int16x8_t)
33799     _Form of expected instruction(s):_ 'vcgt.s16 Q0, Q0, Q0'
33800
33801   * uint8x16_t vcltq_s8 (int8x16_t, int8x16_t)
33802     _Form of expected instruction(s):_ 'vcgt.s8 Q0, Q0, Q0'
33803
33804   * uint32x4_t vcltq_f32 (float32x4_t, float32x4_t)
33805     _Form of expected instruction(s):_ 'vcgt.f32 Q0, Q0, Q0'
33806
33807   * uint32x4_t vcltq_u32 (uint32x4_t, uint32x4_t)
33808     _Form of expected instruction(s):_ 'vcgt.u32 Q0, Q0, Q0'
33809
33810   * uint16x8_t vcltq_u16 (uint16x8_t, uint16x8_t)
33811     _Form of expected instruction(s):_ 'vcgt.u16 Q0, Q0, Q0'
33812
33813   * uint8x16_t vcltq_u8 (uint8x16_t, uint8x16_t)
33814     _Form of expected instruction(s):_ 'vcgt.u8 Q0, Q0, Q0'
33815
338166.57.6.18 Comparison (absolute greater-than-or-equal-to)
33817........................................................
33818
33819   * uint32x2_t vcage_f32 (float32x2_t, float32x2_t)
33820     _Form of expected instruction(s):_ 'vacge.f32 D0, D0, D0'
33821
33822   * uint32x4_t vcageq_f32 (float32x4_t, float32x4_t)
33823     _Form of expected instruction(s):_ 'vacge.f32 Q0, Q0, Q0'
33824
338256.57.6.19 Comparison (absolute less-than-or-equal-to)
33826.....................................................
33827
33828   * uint32x2_t vcale_f32 (float32x2_t, float32x2_t)
33829     _Form of expected instruction(s):_ 'vacge.f32 D0, D0, D0'
33830
33831   * uint32x4_t vcaleq_f32 (float32x4_t, float32x4_t)
33832     _Form of expected instruction(s):_ 'vacge.f32 Q0, Q0, Q0'
33833
338346.57.6.20 Comparison (absolute greater-than)
33835............................................
33836
33837   * uint32x2_t vcagt_f32 (float32x2_t, float32x2_t)
33838     _Form of expected instruction(s):_ 'vacgt.f32 D0, D0, D0'
33839
33840   * uint32x4_t vcagtq_f32 (float32x4_t, float32x4_t)
33841     _Form of expected instruction(s):_ 'vacgt.f32 Q0, Q0, Q0'
33842
338436.57.6.21 Comparison (absolute less-than)
33844.........................................
33845
33846   * uint32x2_t vcalt_f32 (float32x2_t, float32x2_t)
33847     _Form of expected instruction(s):_ 'vacgt.f32 D0, D0, D0'
33848
33849   * uint32x4_t vcaltq_f32 (float32x4_t, float32x4_t)
33850     _Form of expected instruction(s):_ 'vacgt.f32 Q0, Q0, Q0'
33851
338526.57.6.22 Test bits
33853...................
33854
33855   * uint32x2_t vtst_u32 (uint32x2_t, uint32x2_t)
33856     _Form of expected instruction(s):_ 'vtst.32 D0, D0, D0'
33857
33858   * uint16x4_t vtst_u16 (uint16x4_t, uint16x4_t)
33859     _Form of expected instruction(s):_ 'vtst.16 D0, D0, D0'
33860
33861   * uint8x8_t vtst_u8 (uint8x8_t, uint8x8_t)
33862     _Form of expected instruction(s):_ 'vtst.8 D0, D0, D0'
33863
33864   * uint32x2_t vtst_s32 (int32x2_t, int32x2_t)
33865     _Form of expected instruction(s):_ 'vtst.32 D0, D0, D0'
33866
33867   * uint16x4_t vtst_s16 (int16x4_t, int16x4_t)
33868     _Form of expected instruction(s):_ 'vtst.16 D0, D0, D0'
33869
33870   * uint8x8_t vtst_s8 (int8x8_t, int8x8_t)
33871     _Form of expected instruction(s):_ 'vtst.8 D0, D0, D0'
33872
33873   * uint8x8_t vtst_p8 (poly8x8_t, poly8x8_t)
33874     _Form of expected instruction(s):_ 'vtst.8 D0, D0, D0'
33875
33876   * uint32x4_t vtstq_u32 (uint32x4_t, uint32x4_t)
33877     _Form of expected instruction(s):_ 'vtst.32 Q0, Q0, Q0'
33878
33879   * uint16x8_t vtstq_u16 (uint16x8_t, uint16x8_t)
33880     _Form of expected instruction(s):_ 'vtst.16 Q0, Q0, Q0'
33881
33882   * uint8x16_t vtstq_u8 (uint8x16_t, uint8x16_t)
33883     _Form of expected instruction(s):_ 'vtst.8 Q0, Q0, Q0'
33884
33885   * uint32x4_t vtstq_s32 (int32x4_t, int32x4_t)
33886     _Form of expected instruction(s):_ 'vtst.32 Q0, Q0, Q0'
33887
33888   * uint16x8_t vtstq_s16 (int16x8_t, int16x8_t)
33889     _Form of expected instruction(s):_ 'vtst.16 Q0, Q0, Q0'
33890
33891   * uint8x16_t vtstq_s8 (int8x16_t, int8x16_t)
33892     _Form of expected instruction(s):_ 'vtst.8 Q0, Q0, Q0'
33893
33894   * uint8x16_t vtstq_p8 (poly8x16_t, poly8x16_t)
33895     _Form of expected instruction(s):_ 'vtst.8 Q0, Q0, Q0'
33896
338976.57.6.23 Absolute difference
33898.............................
33899
33900   * uint32x2_t vabd_u32 (uint32x2_t, uint32x2_t)
33901     _Form of expected instruction(s):_ 'vabd.u32 D0, D0, D0'
33902
33903   * uint16x4_t vabd_u16 (uint16x4_t, uint16x4_t)
33904     _Form of expected instruction(s):_ 'vabd.u16 D0, D0, D0'
33905
33906   * uint8x8_t vabd_u8 (uint8x8_t, uint8x8_t)
33907     _Form of expected instruction(s):_ 'vabd.u8 D0, D0, D0'
33908
33909   * int32x2_t vabd_s32 (int32x2_t, int32x2_t)
33910     _Form of expected instruction(s):_ 'vabd.s32 D0, D0, D0'
33911
33912   * int16x4_t vabd_s16 (int16x4_t, int16x4_t)
33913     _Form of expected instruction(s):_ 'vabd.s16 D0, D0, D0'
33914
33915   * int8x8_t vabd_s8 (int8x8_t, int8x8_t)
33916     _Form of expected instruction(s):_ 'vabd.s8 D0, D0, D0'
33917
33918   * float32x2_t vabd_f32 (float32x2_t, float32x2_t)
33919     _Form of expected instruction(s):_ 'vabd.f32 D0, D0, D0'
33920
33921   * uint32x4_t vabdq_u32 (uint32x4_t, uint32x4_t)
33922     _Form of expected instruction(s):_ 'vabd.u32 Q0, Q0, Q0'
33923
33924   * uint16x8_t vabdq_u16 (uint16x8_t, uint16x8_t)
33925     _Form of expected instruction(s):_ 'vabd.u16 Q0, Q0, Q0'
33926
33927   * uint8x16_t vabdq_u8 (uint8x16_t, uint8x16_t)
33928     _Form of expected instruction(s):_ 'vabd.u8 Q0, Q0, Q0'
33929
33930   * int32x4_t vabdq_s32 (int32x4_t, int32x4_t)
33931     _Form of expected instruction(s):_ 'vabd.s32 Q0, Q0, Q0'
33932
33933   * int16x8_t vabdq_s16 (int16x8_t, int16x8_t)
33934     _Form of expected instruction(s):_ 'vabd.s16 Q0, Q0, Q0'
33935
33936   * int8x16_t vabdq_s8 (int8x16_t, int8x16_t)
33937     _Form of expected instruction(s):_ 'vabd.s8 Q0, Q0, Q0'
33938
33939   * float32x4_t vabdq_f32 (float32x4_t, float32x4_t)
33940     _Form of expected instruction(s):_ 'vabd.f32 Q0, Q0, Q0'
33941
33942   * uint64x2_t vabdl_u32 (uint32x2_t, uint32x2_t)
33943     _Form of expected instruction(s):_ 'vabdl.u32 Q0, D0, D0'
33944
33945   * uint32x4_t vabdl_u16 (uint16x4_t, uint16x4_t)
33946     _Form of expected instruction(s):_ 'vabdl.u16 Q0, D0, D0'
33947
33948   * uint16x8_t vabdl_u8 (uint8x8_t, uint8x8_t)
33949     _Form of expected instruction(s):_ 'vabdl.u8 Q0, D0, D0'
33950
33951   * int64x2_t vabdl_s32 (int32x2_t, int32x2_t)
33952     _Form of expected instruction(s):_ 'vabdl.s32 Q0, D0, D0'
33953
33954   * int32x4_t vabdl_s16 (int16x4_t, int16x4_t)
33955     _Form of expected instruction(s):_ 'vabdl.s16 Q0, D0, D0'
33956
33957   * int16x8_t vabdl_s8 (int8x8_t, int8x8_t)
33958     _Form of expected instruction(s):_ 'vabdl.s8 Q0, D0, D0'
33959
339606.57.6.24 Absolute difference and accumulate
33961............................................
33962
33963   * uint32x2_t vaba_u32 (uint32x2_t, uint32x2_t, uint32x2_t)
33964     _Form of expected instruction(s):_ 'vaba.u32 D0, D0, D0'
33965
33966   * uint16x4_t vaba_u16 (uint16x4_t, uint16x4_t, uint16x4_t)
33967     _Form of expected instruction(s):_ 'vaba.u16 D0, D0, D0'
33968
33969   * uint8x8_t vaba_u8 (uint8x8_t, uint8x8_t, uint8x8_t)
33970     _Form of expected instruction(s):_ 'vaba.u8 D0, D0, D0'
33971
33972   * int32x2_t vaba_s32 (int32x2_t, int32x2_t, int32x2_t)
33973     _Form of expected instruction(s):_ 'vaba.s32 D0, D0, D0'
33974
33975   * int16x4_t vaba_s16 (int16x4_t, int16x4_t, int16x4_t)
33976     _Form of expected instruction(s):_ 'vaba.s16 D0, D0, D0'
33977
33978   * int8x8_t vaba_s8 (int8x8_t, int8x8_t, int8x8_t)
33979     _Form of expected instruction(s):_ 'vaba.s8 D0, D0, D0'
33980
33981   * uint32x4_t vabaq_u32 (uint32x4_t, uint32x4_t, uint32x4_t)
33982     _Form of expected instruction(s):_ 'vaba.u32 Q0, Q0, Q0'
33983
33984   * uint16x8_t vabaq_u16 (uint16x8_t, uint16x8_t, uint16x8_t)
33985     _Form of expected instruction(s):_ 'vaba.u16 Q0, Q0, Q0'
33986
33987   * uint8x16_t vabaq_u8 (uint8x16_t, uint8x16_t, uint8x16_t)
33988     _Form of expected instruction(s):_ 'vaba.u8 Q0, Q0, Q0'
33989
33990   * int32x4_t vabaq_s32 (int32x4_t, int32x4_t, int32x4_t)
33991     _Form of expected instruction(s):_ 'vaba.s32 Q0, Q0, Q0'
33992
33993   * int16x8_t vabaq_s16 (int16x8_t, int16x8_t, int16x8_t)
33994     _Form of expected instruction(s):_ 'vaba.s16 Q0, Q0, Q0'
33995
33996   * int8x16_t vabaq_s8 (int8x16_t, int8x16_t, int8x16_t)
33997     _Form of expected instruction(s):_ 'vaba.s8 Q0, Q0, Q0'
33998
33999   * uint64x2_t vabal_u32 (uint64x2_t, uint32x2_t, uint32x2_t)
34000     _Form of expected instruction(s):_ 'vabal.u32 Q0, D0, D0'
34001
34002   * uint32x4_t vabal_u16 (uint32x4_t, uint16x4_t, uint16x4_t)
34003     _Form of expected instruction(s):_ 'vabal.u16 Q0, D0, D0'
34004
34005   * uint16x8_t vabal_u8 (uint16x8_t, uint8x8_t, uint8x8_t)
34006     _Form of expected instruction(s):_ 'vabal.u8 Q0, D0, D0'
34007
34008   * int64x2_t vabal_s32 (int64x2_t, int32x2_t, int32x2_t)
34009     _Form of expected instruction(s):_ 'vabal.s32 Q0, D0, D0'
34010
34011   * int32x4_t vabal_s16 (int32x4_t, int16x4_t, int16x4_t)
34012     _Form of expected instruction(s):_ 'vabal.s16 Q0, D0, D0'
34013
34014   * int16x8_t vabal_s8 (int16x8_t, int8x8_t, int8x8_t)
34015     _Form of expected instruction(s):_ 'vabal.s8 Q0, D0, D0'
34016
340176.57.6.25 Maximum
34018.................
34019
34020   * uint32x2_t vmax_u32 (uint32x2_t, uint32x2_t)
34021     _Form of expected instruction(s):_ 'vmax.u32 D0, D0, D0'
34022
34023   * uint16x4_t vmax_u16 (uint16x4_t, uint16x4_t)
34024     _Form of expected instruction(s):_ 'vmax.u16 D0, D0, D0'
34025
34026   * uint8x8_t vmax_u8 (uint8x8_t, uint8x8_t)
34027     _Form of expected instruction(s):_ 'vmax.u8 D0, D0, D0'
34028
34029   * int32x2_t vmax_s32 (int32x2_t, int32x2_t)
34030     _Form of expected instruction(s):_ 'vmax.s32 D0, D0, D0'
34031
34032   * int16x4_t vmax_s16 (int16x4_t, int16x4_t)
34033     _Form of expected instruction(s):_ 'vmax.s16 D0, D0, D0'
34034
34035   * int8x8_t vmax_s8 (int8x8_t, int8x8_t)
34036     _Form of expected instruction(s):_ 'vmax.s8 D0, D0, D0'
34037
34038   * float32x2_t vmax_f32 (float32x2_t, float32x2_t)
34039     _Form of expected instruction(s):_ 'vmax.f32 D0, D0, D0'
34040
34041   * uint32x4_t vmaxq_u32 (uint32x4_t, uint32x4_t)
34042     _Form of expected instruction(s):_ 'vmax.u32 Q0, Q0, Q0'
34043
34044   * uint16x8_t vmaxq_u16 (uint16x8_t, uint16x8_t)
34045     _Form of expected instruction(s):_ 'vmax.u16 Q0, Q0, Q0'
34046
34047   * uint8x16_t vmaxq_u8 (uint8x16_t, uint8x16_t)
34048     _Form of expected instruction(s):_ 'vmax.u8 Q0, Q0, Q0'
34049
34050   * int32x4_t vmaxq_s32 (int32x4_t, int32x4_t)
34051     _Form of expected instruction(s):_ 'vmax.s32 Q0, Q0, Q0'
34052
34053   * int16x8_t vmaxq_s16 (int16x8_t, int16x8_t)
34054     _Form of expected instruction(s):_ 'vmax.s16 Q0, Q0, Q0'
34055
34056   * int8x16_t vmaxq_s8 (int8x16_t, int8x16_t)
34057     _Form of expected instruction(s):_ 'vmax.s8 Q0, Q0, Q0'
34058
34059   * float32x4_t vmaxq_f32 (float32x4_t, float32x4_t)
34060     _Form of expected instruction(s):_ 'vmax.f32 Q0, Q0, Q0'
34061
340626.57.6.26 Minimum
34063.................
34064
34065   * uint32x2_t vmin_u32 (uint32x2_t, uint32x2_t)
34066     _Form of expected instruction(s):_ 'vmin.u32 D0, D0, D0'
34067
34068   * uint16x4_t vmin_u16 (uint16x4_t, uint16x4_t)
34069     _Form of expected instruction(s):_ 'vmin.u16 D0, D0, D0'
34070
34071   * uint8x8_t vmin_u8 (uint8x8_t, uint8x8_t)
34072     _Form of expected instruction(s):_ 'vmin.u8 D0, D0, D0'
34073
34074   * int32x2_t vmin_s32 (int32x2_t, int32x2_t)
34075     _Form of expected instruction(s):_ 'vmin.s32 D0, D0, D0'
34076
34077   * int16x4_t vmin_s16 (int16x4_t, int16x4_t)
34078     _Form of expected instruction(s):_ 'vmin.s16 D0, D0, D0'
34079
34080   * int8x8_t vmin_s8 (int8x8_t, int8x8_t)
34081     _Form of expected instruction(s):_ 'vmin.s8 D0, D0, D0'
34082
34083   * float32x2_t vmin_f32 (float32x2_t, float32x2_t)
34084     _Form of expected instruction(s):_ 'vmin.f32 D0, D0, D0'
34085
34086   * uint32x4_t vminq_u32 (uint32x4_t, uint32x4_t)
34087     _Form of expected instruction(s):_ 'vmin.u32 Q0, Q0, Q0'
34088
34089   * uint16x8_t vminq_u16 (uint16x8_t, uint16x8_t)
34090     _Form of expected instruction(s):_ 'vmin.u16 Q0, Q0, Q0'
34091
34092   * uint8x16_t vminq_u8 (uint8x16_t, uint8x16_t)
34093     _Form of expected instruction(s):_ 'vmin.u8 Q0, Q0, Q0'
34094
34095   * int32x4_t vminq_s32 (int32x4_t, int32x4_t)
34096     _Form of expected instruction(s):_ 'vmin.s32 Q0, Q0, Q0'
34097
34098   * int16x8_t vminq_s16 (int16x8_t, int16x8_t)
34099     _Form of expected instruction(s):_ 'vmin.s16 Q0, Q0, Q0'
34100
34101   * int8x16_t vminq_s8 (int8x16_t, int8x16_t)
34102     _Form of expected instruction(s):_ 'vmin.s8 Q0, Q0, Q0'
34103
34104   * float32x4_t vminq_f32 (float32x4_t, float32x4_t)
34105     _Form of expected instruction(s):_ 'vmin.f32 Q0, Q0, Q0'
34106
341076.57.6.27 Pairwise add
34108......................
34109
34110   * uint32x2_t vpadd_u32 (uint32x2_t, uint32x2_t)
34111     _Form of expected instruction(s):_ 'vpadd.i32 D0, D0, D0'
34112
34113   * uint16x4_t vpadd_u16 (uint16x4_t, uint16x4_t)
34114     _Form of expected instruction(s):_ 'vpadd.i16 D0, D0, D0'
34115
34116   * uint8x8_t vpadd_u8 (uint8x8_t, uint8x8_t)
34117     _Form of expected instruction(s):_ 'vpadd.i8 D0, D0, D0'
34118
34119   * int32x2_t vpadd_s32 (int32x2_t, int32x2_t)
34120     _Form of expected instruction(s):_ 'vpadd.i32 D0, D0, D0'
34121
34122   * int16x4_t vpadd_s16 (int16x4_t, int16x4_t)
34123     _Form of expected instruction(s):_ 'vpadd.i16 D0, D0, D0'
34124
34125   * int8x8_t vpadd_s8 (int8x8_t, int8x8_t)
34126     _Form of expected instruction(s):_ 'vpadd.i8 D0, D0, D0'
34127
34128   * float32x2_t vpadd_f32 (float32x2_t, float32x2_t)
34129     _Form of expected instruction(s):_ 'vpadd.f32 D0, D0, D0'
34130
34131   * uint64x1_t vpaddl_u32 (uint32x2_t)
34132     _Form of expected instruction(s):_ 'vpaddl.u32 D0, D0'
34133
34134   * uint32x2_t vpaddl_u16 (uint16x4_t)
34135     _Form of expected instruction(s):_ 'vpaddl.u16 D0, D0'
34136
34137   * uint16x4_t vpaddl_u8 (uint8x8_t)
34138     _Form of expected instruction(s):_ 'vpaddl.u8 D0, D0'
34139
34140   * int64x1_t vpaddl_s32 (int32x2_t)
34141     _Form of expected instruction(s):_ 'vpaddl.s32 D0, D0'
34142
34143   * int32x2_t vpaddl_s16 (int16x4_t)
34144     _Form of expected instruction(s):_ 'vpaddl.s16 D0, D0'
34145
34146   * int16x4_t vpaddl_s8 (int8x8_t)
34147     _Form of expected instruction(s):_ 'vpaddl.s8 D0, D0'
34148
34149   * uint64x2_t vpaddlq_u32 (uint32x4_t)
34150     _Form of expected instruction(s):_ 'vpaddl.u32 Q0, Q0'
34151
34152   * uint32x4_t vpaddlq_u16 (uint16x8_t)
34153     _Form of expected instruction(s):_ 'vpaddl.u16 Q0, Q0'
34154
34155   * uint16x8_t vpaddlq_u8 (uint8x16_t)
34156     _Form of expected instruction(s):_ 'vpaddl.u8 Q0, Q0'
34157
34158   * int64x2_t vpaddlq_s32 (int32x4_t)
34159     _Form of expected instruction(s):_ 'vpaddl.s32 Q0, Q0'
34160
34161   * int32x4_t vpaddlq_s16 (int16x8_t)
34162     _Form of expected instruction(s):_ 'vpaddl.s16 Q0, Q0'
34163
34164   * int16x8_t vpaddlq_s8 (int8x16_t)
34165     _Form of expected instruction(s):_ 'vpaddl.s8 Q0, Q0'
34166
341676.57.6.28 Pairwise add, single_opcode widen and accumulate
34168..........................................................
34169
34170   * uint64x1_t vpadal_u32 (uint64x1_t, uint32x2_t)
34171     _Form of expected instruction(s):_ 'vpadal.u32 D0, D0'
34172
34173   * uint32x2_t vpadal_u16 (uint32x2_t, uint16x4_t)
34174     _Form of expected instruction(s):_ 'vpadal.u16 D0, D0'
34175
34176   * uint16x4_t vpadal_u8 (uint16x4_t, uint8x8_t)
34177     _Form of expected instruction(s):_ 'vpadal.u8 D0, D0'
34178
34179   * int64x1_t vpadal_s32 (int64x1_t, int32x2_t)
34180     _Form of expected instruction(s):_ 'vpadal.s32 D0, D0'
34181
34182   * int32x2_t vpadal_s16 (int32x2_t, int16x4_t)
34183     _Form of expected instruction(s):_ 'vpadal.s16 D0, D0'
34184
34185   * int16x4_t vpadal_s8 (int16x4_t, int8x8_t)
34186     _Form of expected instruction(s):_ 'vpadal.s8 D0, D0'
34187
34188   * uint64x2_t vpadalq_u32 (uint64x2_t, uint32x4_t)
34189     _Form of expected instruction(s):_ 'vpadal.u32 Q0, Q0'
34190
34191   * uint32x4_t vpadalq_u16 (uint32x4_t, uint16x8_t)
34192     _Form of expected instruction(s):_ 'vpadal.u16 Q0, Q0'
34193
34194   * uint16x8_t vpadalq_u8 (uint16x8_t, uint8x16_t)
34195     _Form of expected instruction(s):_ 'vpadal.u8 Q0, Q0'
34196
34197   * int64x2_t vpadalq_s32 (int64x2_t, int32x4_t)
34198     _Form of expected instruction(s):_ 'vpadal.s32 Q0, Q0'
34199
34200   * int32x4_t vpadalq_s16 (int32x4_t, int16x8_t)
34201     _Form of expected instruction(s):_ 'vpadal.s16 Q0, Q0'
34202
34203   * int16x8_t vpadalq_s8 (int16x8_t, int8x16_t)
34204     _Form of expected instruction(s):_ 'vpadal.s8 Q0, Q0'
34205
342066.57.6.29 Folding maximum
34207.........................
34208
34209   * uint32x2_t vpmax_u32 (uint32x2_t, uint32x2_t)
34210     _Form of expected instruction(s):_ 'vpmax.u32 D0, D0, D0'
34211
34212   * uint16x4_t vpmax_u16 (uint16x4_t, uint16x4_t)
34213     _Form of expected instruction(s):_ 'vpmax.u16 D0, D0, D0'
34214
34215   * uint8x8_t vpmax_u8 (uint8x8_t, uint8x8_t)
34216     _Form of expected instruction(s):_ 'vpmax.u8 D0, D0, D0'
34217
34218   * int32x2_t vpmax_s32 (int32x2_t, int32x2_t)
34219     _Form of expected instruction(s):_ 'vpmax.s32 D0, D0, D0'
34220
34221   * int16x4_t vpmax_s16 (int16x4_t, int16x4_t)
34222     _Form of expected instruction(s):_ 'vpmax.s16 D0, D0, D0'
34223
34224   * int8x8_t vpmax_s8 (int8x8_t, int8x8_t)
34225     _Form of expected instruction(s):_ 'vpmax.s8 D0, D0, D0'
34226
34227   * float32x2_t vpmax_f32 (float32x2_t, float32x2_t)
34228     _Form of expected instruction(s):_ 'vpmax.f32 D0, D0, D0'
34229
342306.57.6.30 Folding minimum
34231.........................
34232
34233   * uint32x2_t vpmin_u32 (uint32x2_t, uint32x2_t)
34234     _Form of expected instruction(s):_ 'vpmin.u32 D0, D0, D0'
34235
34236   * uint16x4_t vpmin_u16 (uint16x4_t, uint16x4_t)
34237     _Form of expected instruction(s):_ 'vpmin.u16 D0, D0, D0'
34238
34239   * uint8x8_t vpmin_u8 (uint8x8_t, uint8x8_t)
34240     _Form of expected instruction(s):_ 'vpmin.u8 D0, D0, D0'
34241
34242   * int32x2_t vpmin_s32 (int32x2_t, int32x2_t)
34243     _Form of expected instruction(s):_ 'vpmin.s32 D0, D0, D0'
34244
34245   * int16x4_t vpmin_s16 (int16x4_t, int16x4_t)
34246     _Form of expected instruction(s):_ 'vpmin.s16 D0, D0, D0'
34247
34248   * int8x8_t vpmin_s8 (int8x8_t, int8x8_t)
34249     _Form of expected instruction(s):_ 'vpmin.s8 D0, D0, D0'
34250
34251   * float32x2_t vpmin_f32 (float32x2_t, float32x2_t)
34252     _Form of expected instruction(s):_ 'vpmin.f32 D0, D0, D0'
34253
342546.57.6.31 Reciprocal step
34255.........................
34256
34257   * float32x2_t vrecps_f32 (float32x2_t, float32x2_t)
34258     _Form of expected instruction(s):_ 'vrecps.f32 D0, D0, D0'
34259
34260   * float32x4_t vrecpsq_f32 (float32x4_t, float32x4_t)
34261     _Form of expected instruction(s):_ 'vrecps.f32 Q0, Q0, Q0'
34262
34263   * float32x2_t vrsqrts_f32 (float32x2_t, float32x2_t)
34264     _Form of expected instruction(s):_ 'vrsqrts.f32 D0, D0, D0'
34265
34266   * float32x4_t vrsqrtsq_f32 (float32x4_t, float32x4_t)
34267     _Form of expected instruction(s):_ 'vrsqrts.f32 Q0, Q0, Q0'
34268
342696.57.6.32 Vector shift left
34270...........................
34271
34272   * uint32x2_t vshl_u32 (uint32x2_t, int32x2_t)
34273     _Form of expected instruction(s):_ 'vshl.u32 D0, D0, D0'
34274
34275   * uint16x4_t vshl_u16 (uint16x4_t, int16x4_t)
34276     _Form of expected instruction(s):_ 'vshl.u16 D0, D0, D0'
34277
34278   * uint8x8_t vshl_u8 (uint8x8_t, int8x8_t)
34279     _Form of expected instruction(s):_ 'vshl.u8 D0, D0, D0'
34280
34281   * int32x2_t vshl_s32 (int32x2_t, int32x2_t)
34282     _Form of expected instruction(s):_ 'vshl.s32 D0, D0, D0'
34283
34284   * int16x4_t vshl_s16 (int16x4_t, int16x4_t)
34285     _Form of expected instruction(s):_ 'vshl.s16 D0, D0, D0'
34286
34287   * int8x8_t vshl_s8 (int8x8_t, int8x8_t)
34288     _Form of expected instruction(s):_ 'vshl.s8 D0, D0, D0'
34289
34290   * uint64x1_t vshl_u64 (uint64x1_t, int64x1_t)
34291     _Form of expected instruction(s):_ 'vshl.u64 D0, D0, D0'
34292
34293   * int64x1_t vshl_s64 (int64x1_t, int64x1_t)
34294     _Form of expected instruction(s):_ 'vshl.s64 D0, D0, D0'
34295
34296   * uint32x4_t vshlq_u32 (uint32x4_t, int32x4_t)
34297     _Form of expected instruction(s):_ 'vshl.u32 Q0, Q0, Q0'
34298
34299   * uint16x8_t vshlq_u16 (uint16x8_t, int16x8_t)
34300     _Form of expected instruction(s):_ 'vshl.u16 Q0, Q0, Q0'
34301
34302   * uint8x16_t vshlq_u8 (uint8x16_t, int8x16_t)
34303     _Form of expected instruction(s):_ 'vshl.u8 Q0, Q0, Q0'
34304
34305   * int32x4_t vshlq_s32 (int32x4_t, int32x4_t)
34306     _Form of expected instruction(s):_ 'vshl.s32 Q0, Q0, Q0'
34307
34308   * int16x8_t vshlq_s16 (int16x8_t, int16x8_t)
34309     _Form of expected instruction(s):_ 'vshl.s16 Q0, Q0, Q0'
34310
34311   * int8x16_t vshlq_s8 (int8x16_t, int8x16_t)
34312     _Form of expected instruction(s):_ 'vshl.s8 Q0, Q0, Q0'
34313
34314   * uint64x2_t vshlq_u64 (uint64x2_t, int64x2_t)
34315     _Form of expected instruction(s):_ 'vshl.u64 Q0, Q0, Q0'
34316
34317   * int64x2_t vshlq_s64 (int64x2_t, int64x2_t)
34318     _Form of expected instruction(s):_ 'vshl.s64 Q0, Q0, Q0'
34319
34320   * uint32x2_t vrshl_u32 (uint32x2_t, int32x2_t)
34321     _Form of expected instruction(s):_ 'vrshl.u32 D0, D0, D0'
34322
34323   * uint16x4_t vrshl_u16 (uint16x4_t, int16x4_t)
34324     _Form of expected instruction(s):_ 'vrshl.u16 D0, D0, D0'
34325
34326   * uint8x8_t vrshl_u8 (uint8x8_t, int8x8_t)
34327     _Form of expected instruction(s):_ 'vrshl.u8 D0, D0, D0'
34328
34329   * int32x2_t vrshl_s32 (int32x2_t, int32x2_t)
34330     _Form of expected instruction(s):_ 'vrshl.s32 D0, D0, D0'
34331
34332   * int16x4_t vrshl_s16 (int16x4_t, int16x4_t)
34333     _Form of expected instruction(s):_ 'vrshl.s16 D0, D0, D0'
34334
34335   * int8x8_t vrshl_s8 (int8x8_t, int8x8_t)
34336     _Form of expected instruction(s):_ 'vrshl.s8 D0, D0, D0'
34337
34338   * uint64x1_t vrshl_u64 (uint64x1_t, int64x1_t)
34339     _Form of expected instruction(s):_ 'vrshl.u64 D0, D0, D0'
34340
34341   * int64x1_t vrshl_s64 (int64x1_t, int64x1_t)
34342     _Form of expected instruction(s):_ 'vrshl.s64 D0, D0, D0'
34343
34344   * uint32x4_t vrshlq_u32 (uint32x4_t, int32x4_t)
34345     _Form of expected instruction(s):_ 'vrshl.u32 Q0, Q0, Q0'
34346
34347   * uint16x8_t vrshlq_u16 (uint16x8_t, int16x8_t)
34348     _Form of expected instruction(s):_ 'vrshl.u16 Q0, Q0, Q0'
34349
34350   * uint8x16_t vrshlq_u8 (uint8x16_t, int8x16_t)
34351     _Form of expected instruction(s):_ 'vrshl.u8 Q0, Q0, Q0'
34352
34353   * int32x4_t vrshlq_s32 (int32x4_t, int32x4_t)
34354     _Form of expected instruction(s):_ 'vrshl.s32 Q0, Q0, Q0'
34355
34356   * int16x8_t vrshlq_s16 (int16x8_t, int16x8_t)
34357     _Form of expected instruction(s):_ 'vrshl.s16 Q0, Q0, Q0'
34358
34359   * int8x16_t vrshlq_s8 (int8x16_t, int8x16_t)
34360     _Form of expected instruction(s):_ 'vrshl.s8 Q0, Q0, Q0'
34361
34362   * uint64x2_t vrshlq_u64 (uint64x2_t, int64x2_t)
34363     _Form of expected instruction(s):_ 'vrshl.u64 Q0, Q0, Q0'
34364
34365   * int64x2_t vrshlq_s64 (int64x2_t, int64x2_t)
34366     _Form of expected instruction(s):_ 'vrshl.s64 Q0, Q0, Q0'
34367
34368   * uint32x2_t vqshl_u32 (uint32x2_t, int32x2_t)
34369     _Form of expected instruction(s):_ 'vqshl.u32 D0, D0, D0'
34370
34371   * uint16x4_t vqshl_u16 (uint16x4_t, int16x4_t)
34372     _Form of expected instruction(s):_ 'vqshl.u16 D0, D0, D0'
34373
34374   * uint8x8_t vqshl_u8 (uint8x8_t, int8x8_t)
34375     _Form of expected instruction(s):_ 'vqshl.u8 D0, D0, D0'
34376
34377   * int32x2_t vqshl_s32 (int32x2_t, int32x2_t)
34378     _Form of expected instruction(s):_ 'vqshl.s32 D0, D0, D0'
34379
34380   * int16x4_t vqshl_s16 (int16x4_t, int16x4_t)
34381     _Form of expected instruction(s):_ 'vqshl.s16 D0, D0, D0'
34382
34383   * int8x8_t vqshl_s8 (int8x8_t, int8x8_t)
34384     _Form of expected instruction(s):_ 'vqshl.s8 D0, D0, D0'
34385
34386   * uint64x1_t vqshl_u64 (uint64x1_t, int64x1_t)
34387     _Form of expected instruction(s):_ 'vqshl.u64 D0, D0, D0'
34388
34389   * int64x1_t vqshl_s64 (int64x1_t, int64x1_t)
34390     _Form of expected instruction(s):_ 'vqshl.s64 D0, D0, D0'
34391
34392   * uint32x4_t vqshlq_u32 (uint32x4_t, int32x4_t)
34393     _Form of expected instruction(s):_ 'vqshl.u32 Q0, Q0, Q0'
34394
34395   * uint16x8_t vqshlq_u16 (uint16x8_t, int16x8_t)
34396     _Form of expected instruction(s):_ 'vqshl.u16 Q0, Q0, Q0'
34397
34398   * uint8x16_t vqshlq_u8 (uint8x16_t, int8x16_t)
34399     _Form of expected instruction(s):_ 'vqshl.u8 Q0, Q0, Q0'
34400
34401   * int32x4_t vqshlq_s32 (int32x4_t, int32x4_t)
34402     _Form of expected instruction(s):_ 'vqshl.s32 Q0, Q0, Q0'
34403
34404   * int16x8_t vqshlq_s16 (int16x8_t, int16x8_t)
34405     _Form of expected instruction(s):_ 'vqshl.s16 Q0, Q0, Q0'
34406
34407   * int8x16_t vqshlq_s8 (int8x16_t, int8x16_t)
34408     _Form of expected instruction(s):_ 'vqshl.s8 Q0, Q0, Q0'
34409
34410   * uint64x2_t vqshlq_u64 (uint64x2_t, int64x2_t)
34411     _Form of expected instruction(s):_ 'vqshl.u64 Q0, Q0, Q0'
34412
34413   * int64x2_t vqshlq_s64 (int64x2_t, int64x2_t)
34414     _Form of expected instruction(s):_ 'vqshl.s64 Q0, Q0, Q0'
34415
34416   * uint32x2_t vqrshl_u32 (uint32x2_t, int32x2_t)
34417     _Form of expected instruction(s):_ 'vqrshl.u32 D0, D0, D0'
34418
34419   * uint16x4_t vqrshl_u16 (uint16x4_t, int16x4_t)
34420     _Form of expected instruction(s):_ 'vqrshl.u16 D0, D0, D0'
34421
34422   * uint8x8_t vqrshl_u8 (uint8x8_t, int8x8_t)
34423     _Form of expected instruction(s):_ 'vqrshl.u8 D0, D0, D0'
34424
34425   * int32x2_t vqrshl_s32 (int32x2_t, int32x2_t)
34426     _Form of expected instruction(s):_ 'vqrshl.s32 D0, D0, D0'
34427
34428   * int16x4_t vqrshl_s16 (int16x4_t, int16x4_t)
34429     _Form of expected instruction(s):_ 'vqrshl.s16 D0, D0, D0'
34430
34431   * int8x8_t vqrshl_s8 (int8x8_t, int8x8_t)
34432     _Form of expected instruction(s):_ 'vqrshl.s8 D0, D0, D0'
34433
34434   * uint64x1_t vqrshl_u64 (uint64x1_t, int64x1_t)
34435     _Form of expected instruction(s):_ 'vqrshl.u64 D0, D0, D0'
34436
34437   * int64x1_t vqrshl_s64 (int64x1_t, int64x1_t)
34438     _Form of expected instruction(s):_ 'vqrshl.s64 D0, D0, D0'
34439
34440   * uint32x4_t vqrshlq_u32 (uint32x4_t, int32x4_t)
34441     _Form of expected instruction(s):_ 'vqrshl.u32 Q0, Q0, Q0'
34442
34443   * uint16x8_t vqrshlq_u16 (uint16x8_t, int16x8_t)
34444     _Form of expected instruction(s):_ 'vqrshl.u16 Q0, Q0, Q0'
34445
34446   * uint8x16_t vqrshlq_u8 (uint8x16_t, int8x16_t)
34447     _Form of expected instruction(s):_ 'vqrshl.u8 Q0, Q0, Q0'
34448
34449   * int32x4_t vqrshlq_s32 (int32x4_t, int32x4_t)
34450     _Form of expected instruction(s):_ 'vqrshl.s32 Q0, Q0, Q0'
34451
34452   * int16x8_t vqrshlq_s16 (int16x8_t, int16x8_t)
34453     _Form of expected instruction(s):_ 'vqrshl.s16 Q0, Q0, Q0'
34454
34455   * int8x16_t vqrshlq_s8 (int8x16_t, int8x16_t)
34456     _Form of expected instruction(s):_ 'vqrshl.s8 Q0, Q0, Q0'
34457
34458   * uint64x2_t vqrshlq_u64 (uint64x2_t, int64x2_t)
34459     _Form of expected instruction(s):_ 'vqrshl.u64 Q0, Q0, Q0'
34460
34461   * int64x2_t vqrshlq_s64 (int64x2_t, int64x2_t)
34462     _Form of expected instruction(s):_ 'vqrshl.s64 Q0, Q0, Q0'
34463
344646.57.6.33 Vector shift left by constant
34465.......................................
34466
34467   * uint32x2_t vshl_n_u32 (uint32x2_t, const int)
34468     _Form of expected instruction(s):_ 'vshl.i32 D0, D0, #0'
34469
34470   * uint16x4_t vshl_n_u16 (uint16x4_t, const int)
34471     _Form of expected instruction(s):_ 'vshl.i16 D0, D0, #0'
34472
34473   * uint8x8_t vshl_n_u8 (uint8x8_t, const int)
34474     _Form of expected instruction(s):_ 'vshl.i8 D0, D0, #0'
34475
34476   * int32x2_t vshl_n_s32 (int32x2_t, const int)
34477     _Form of expected instruction(s):_ 'vshl.i32 D0, D0, #0'
34478
34479   * int16x4_t vshl_n_s16 (int16x4_t, const int)
34480     _Form of expected instruction(s):_ 'vshl.i16 D0, D0, #0'
34481
34482   * int8x8_t vshl_n_s8 (int8x8_t, const int)
34483     _Form of expected instruction(s):_ 'vshl.i8 D0, D0, #0'
34484
34485   * uint64x1_t vshl_n_u64 (uint64x1_t, const int)
34486     _Form of expected instruction(s):_ 'vshl.i64 D0, D0, #0'
34487
34488   * int64x1_t vshl_n_s64 (int64x1_t, const int)
34489     _Form of expected instruction(s):_ 'vshl.i64 D0, D0, #0'
34490
34491   * uint32x4_t vshlq_n_u32 (uint32x4_t, const int)
34492     _Form of expected instruction(s):_ 'vshl.i32 Q0, Q0, #0'
34493
34494   * uint16x8_t vshlq_n_u16 (uint16x8_t, const int)
34495     _Form of expected instruction(s):_ 'vshl.i16 Q0, Q0, #0'
34496
34497   * uint8x16_t vshlq_n_u8 (uint8x16_t, const int)
34498     _Form of expected instruction(s):_ 'vshl.i8 Q0, Q0, #0'
34499
34500   * int32x4_t vshlq_n_s32 (int32x4_t, const int)
34501     _Form of expected instruction(s):_ 'vshl.i32 Q0, Q0, #0'
34502
34503   * int16x8_t vshlq_n_s16 (int16x8_t, const int)
34504     _Form of expected instruction(s):_ 'vshl.i16 Q0, Q0, #0'
34505
34506   * int8x16_t vshlq_n_s8 (int8x16_t, const int)
34507     _Form of expected instruction(s):_ 'vshl.i8 Q0, Q0, #0'
34508
34509   * uint64x2_t vshlq_n_u64 (uint64x2_t, const int)
34510     _Form of expected instruction(s):_ 'vshl.i64 Q0, Q0, #0'
34511
34512   * int64x2_t vshlq_n_s64 (int64x2_t, const int)
34513     _Form of expected instruction(s):_ 'vshl.i64 Q0, Q0, #0'
34514
34515   * uint32x2_t vqshl_n_u32 (uint32x2_t, const int)
34516     _Form of expected instruction(s):_ 'vqshl.u32 D0, D0, #0'
34517
34518   * uint16x4_t vqshl_n_u16 (uint16x4_t, const int)
34519     _Form of expected instruction(s):_ 'vqshl.u16 D0, D0, #0'
34520
34521   * uint8x8_t vqshl_n_u8 (uint8x8_t, const int)
34522     _Form of expected instruction(s):_ 'vqshl.u8 D0, D0, #0'
34523
34524   * int32x2_t vqshl_n_s32 (int32x2_t, const int)
34525     _Form of expected instruction(s):_ 'vqshl.s32 D0, D0, #0'
34526
34527   * int16x4_t vqshl_n_s16 (int16x4_t, const int)
34528     _Form of expected instruction(s):_ 'vqshl.s16 D0, D0, #0'
34529
34530   * int8x8_t vqshl_n_s8 (int8x8_t, const int)
34531     _Form of expected instruction(s):_ 'vqshl.s8 D0, D0, #0'
34532
34533   * uint64x1_t vqshl_n_u64 (uint64x1_t, const int)
34534     _Form of expected instruction(s):_ 'vqshl.u64 D0, D0, #0'
34535
34536   * int64x1_t vqshl_n_s64 (int64x1_t, const int)
34537     _Form of expected instruction(s):_ 'vqshl.s64 D0, D0, #0'
34538
34539   * uint32x4_t vqshlq_n_u32 (uint32x4_t, const int)
34540     _Form of expected instruction(s):_ 'vqshl.u32 Q0, Q0, #0'
34541
34542   * uint16x8_t vqshlq_n_u16 (uint16x8_t, const int)
34543     _Form of expected instruction(s):_ 'vqshl.u16 Q0, Q0, #0'
34544
34545   * uint8x16_t vqshlq_n_u8 (uint8x16_t, const int)
34546     _Form of expected instruction(s):_ 'vqshl.u8 Q0, Q0, #0'
34547
34548   * int32x4_t vqshlq_n_s32 (int32x4_t, const int)
34549     _Form of expected instruction(s):_ 'vqshl.s32 Q0, Q0, #0'
34550
34551   * int16x8_t vqshlq_n_s16 (int16x8_t, const int)
34552     _Form of expected instruction(s):_ 'vqshl.s16 Q0, Q0, #0'
34553
34554   * int8x16_t vqshlq_n_s8 (int8x16_t, const int)
34555     _Form of expected instruction(s):_ 'vqshl.s8 Q0, Q0, #0'
34556
34557   * uint64x2_t vqshlq_n_u64 (uint64x2_t, const int)
34558     _Form of expected instruction(s):_ 'vqshl.u64 Q0, Q0, #0'
34559
34560   * int64x2_t vqshlq_n_s64 (int64x2_t, const int)
34561     _Form of expected instruction(s):_ 'vqshl.s64 Q0, Q0, #0'
34562
34563   * uint64x1_t vqshlu_n_s64 (int64x1_t, const int)
34564     _Form of expected instruction(s):_ 'vqshlu.s64 D0, D0, #0'
34565
34566   * uint32x2_t vqshlu_n_s32 (int32x2_t, const int)
34567     _Form of expected instruction(s):_ 'vqshlu.s32 D0, D0, #0'
34568
34569   * uint16x4_t vqshlu_n_s16 (int16x4_t, const int)
34570     _Form of expected instruction(s):_ 'vqshlu.s16 D0, D0, #0'
34571
34572   * uint8x8_t vqshlu_n_s8 (int8x8_t, const int)
34573     _Form of expected instruction(s):_ 'vqshlu.s8 D0, D0, #0'
34574
34575   * uint64x2_t vqshluq_n_s64 (int64x2_t, const int)
34576     _Form of expected instruction(s):_ 'vqshlu.s64 Q0, Q0, #0'
34577
34578   * uint32x4_t vqshluq_n_s32 (int32x4_t, const int)
34579     _Form of expected instruction(s):_ 'vqshlu.s32 Q0, Q0, #0'
34580
34581   * uint16x8_t vqshluq_n_s16 (int16x8_t, const int)
34582     _Form of expected instruction(s):_ 'vqshlu.s16 Q0, Q0, #0'
34583
34584   * uint8x16_t vqshluq_n_s8 (int8x16_t, const int)
34585     _Form of expected instruction(s):_ 'vqshlu.s8 Q0, Q0, #0'
34586
34587   * uint64x2_t vshll_n_u32 (uint32x2_t, const int)
34588     _Form of expected instruction(s):_ 'vshll.u32 Q0, D0, #0'
34589
34590   * uint32x4_t vshll_n_u16 (uint16x4_t, const int)
34591     _Form of expected instruction(s):_ 'vshll.u16 Q0, D0, #0'
34592
34593   * uint16x8_t vshll_n_u8 (uint8x8_t, const int)
34594     _Form of expected instruction(s):_ 'vshll.u8 Q0, D0, #0'
34595
34596   * int64x2_t vshll_n_s32 (int32x2_t, const int)
34597     _Form of expected instruction(s):_ 'vshll.s32 Q0, D0, #0'
34598
34599   * int32x4_t vshll_n_s16 (int16x4_t, const int)
34600     _Form of expected instruction(s):_ 'vshll.s16 Q0, D0, #0'
34601
34602   * int16x8_t vshll_n_s8 (int8x8_t, const int)
34603     _Form of expected instruction(s):_ 'vshll.s8 Q0, D0, #0'
34604
346056.57.6.34 Vector shift right by constant
34606........................................
34607
34608   * uint32x2_t vshr_n_u32 (uint32x2_t, const int)
34609     _Form of expected instruction(s):_ 'vshr.u32 D0, D0, #0'
34610
34611   * uint16x4_t vshr_n_u16 (uint16x4_t, const int)
34612     _Form of expected instruction(s):_ 'vshr.u16 D0, D0, #0'
34613
34614   * uint8x8_t vshr_n_u8 (uint8x8_t, const int)
34615     _Form of expected instruction(s):_ 'vshr.u8 D0, D0, #0'
34616
34617   * int32x2_t vshr_n_s32 (int32x2_t, const int)
34618     _Form of expected instruction(s):_ 'vshr.s32 D0, D0, #0'
34619
34620   * int16x4_t vshr_n_s16 (int16x4_t, const int)
34621     _Form of expected instruction(s):_ 'vshr.s16 D0, D0, #0'
34622
34623   * int8x8_t vshr_n_s8 (int8x8_t, const int)
34624     _Form of expected instruction(s):_ 'vshr.s8 D0, D0, #0'
34625
34626   * uint64x1_t vshr_n_u64 (uint64x1_t, const int)
34627     _Form of expected instruction(s):_ 'vshr.u64 D0, D0, #0'
34628
34629   * int64x1_t vshr_n_s64 (int64x1_t, const int)
34630     _Form of expected instruction(s):_ 'vshr.s64 D0, D0, #0'
34631
34632   * uint32x4_t vshrq_n_u32 (uint32x4_t, const int)
34633     _Form of expected instruction(s):_ 'vshr.u32 Q0, Q0, #0'
34634
34635   * uint16x8_t vshrq_n_u16 (uint16x8_t, const int)
34636     _Form of expected instruction(s):_ 'vshr.u16 Q0, Q0, #0'
34637
34638   * uint8x16_t vshrq_n_u8 (uint8x16_t, const int)
34639     _Form of expected instruction(s):_ 'vshr.u8 Q0, Q0, #0'
34640
34641   * int32x4_t vshrq_n_s32 (int32x4_t, const int)
34642     _Form of expected instruction(s):_ 'vshr.s32 Q0, Q0, #0'
34643
34644   * int16x8_t vshrq_n_s16 (int16x8_t, const int)
34645     _Form of expected instruction(s):_ 'vshr.s16 Q0, Q0, #0'
34646
34647   * int8x16_t vshrq_n_s8 (int8x16_t, const int)
34648     _Form of expected instruction(s):_ 'vshr.s8 Q0, Q0, #0'
34649
34650   * uint64x2_t vshrq_n_u64 (uint64x2_t, const int)
34651     _Form of expected instruction(s):_ 'vshr.u64 Q0, Q0, #0'
34652
34653   * int64x2_t vshrq_n_s64 (int64x2_t, const int)
34654     _Form of expected instruction(s):_ 'vshr.s64 Q0, Q0, #0'
34655
34656   * uint32x2_t vrshr_n_u32 (uint32x2_t, const int)
34657     _Form of expected instruction(s):_ 'vrshr.u32 D0, D0, #0'
34658
34659   * uint16x4_t vrshr_n_u16 (uint16x4_t, const int)
34660     _Form of expected instruction(s):_ 'vrshr.u16 D0, D0, #0'
34661
34662   * uint8x8_t vrshr_n_u8 (uint8x8_t, const int)
34663     _Form of expected instruction(s):_ 'vrshr.u8 D0, D0, #0'
34664
34665   * int32x2_t vrshr_n_s32 (int32x2_t, const int)
34666     _Form of expected instruction(s):_ 'vrshr.s32 D0, D0, #0'
34667
34668   * int16x4_t vrshr_n_s16 (int16x4_t, const int)
34669     _Form of expected instruction(s):_ 'vrshr.s16 D0, D0, #0'
34670
34671   * int8x8_t vrshr_n_s8 (int8x8_t, const int)
34672     _Form of expected instruction(s):_ 'vrshr.s8 D0, D0, #0'
34673
34674   * uint64x1_t vrshr_n_u64 (uint64x1_t, const int)
34675     _Form of expected instruction(s):_ 'vrshr.u64 D0, D0, #0'
34676
34677   * int64x1_t vrshr_n_s64 (int64x1_t, const int)
34678     _Form of expected instruction(s):_ 'vrshr.s64 D0, D0, #0'
34679
34680   * uint32x4_t vrshrq_n_u32 (uint32x4_t, const int)
34681     _Form of expected instruction(s):_ 'vrshr.u32 Q0, Q0, #0'
34682
34683   * uint16x8_t vrshrq_n_u16 (uint16x8_t, const int)
34684     _Form of expected instruction(s):_ 'vrshr.u16 Q0, Q0, #0'
34685
34686   * uint8x16_t vrshrq_n_u8 (uint8x16_t, const int)
34687     _Form of expected instruction(s):_ 'vrshr.u8 Q0, Q0, #0'
34688
34689   * int32x4_t vrshrq_n_s32 (int32x4_t, const int)
34690     _Form of expected instruction(s):_ 'vrshr.s32 Q0, Q0, #0'
34691
34692   * int16x8_t vrshrq_n_s16 (int16x8_t, const int)
34693     _Form of expected instruction(s):_ 'vrshr.s16 Q0, Q0, #0'
34694
34695   * int8x16_t vrshrq_n_s8 (int8x16_t, const int)
34696     _Form of expected instruction(s):_ 'vrshr.s8 Q0, Q0, #0'
34697
34698   * uint64x2_t vrshrq_n_u64 (uint64x2_t, const int)
34699     _Form of expected instruction(s):_ 'vrshr.u64 Q0, Q0, #0'
34700
34701   * int64x2_t vrshrq_n_s64 (int64x2_t, const int)
34702     _Form of expected instruction(s):_ 'vrshr.s64 Q0, Q0, #0'
34703
34704   * uint32x2_t vshrn_n_u64 (uint64x2_t, const int)
34705     _Form of expected instruction(s):_ 'vshrn.i64 D0, Q0, #0'
34706
34707   * uint16x4_t vshrn_n_u32 (uint32x4_t, const int)
34708     _Form of expected instruction(s):_ 'vshrn.i32 D0, Q0, #0'
34709
34710   * uint8x8_t vshrn_n_u16 (uint16x8_t, const int)
34711     _Form of expected instruction(s):_ 'vshrn.i16 D0, Q0, #0'
34712
34713   * int32x2_t vshrn_n_s64 (int64x2_t, const int)
34714     _Form of expected instruction(s):_ 'vshrn.i64 D0, Q0, #0'
34715
34716   * int16x4_t vshrn_n_s32 (int32x4_t, const int)
34717     _Form of expected instruction(s):_ 'vshrn.i32 D0, Q0, #0'
34718
34719   * int8x8_t vshrn_n_s16 (int16x8_t, const int)
34720     _Form of expected instruction(s):_ 'vshrn.i16 D0, Q0, #0'
34721
34722   * uint32x2_t vrshrn_n_u64 (uint64x2_t, const int)
34723     _Form of expected instruction(s):_ 'vrshrn.i64 D0, Q0, #0'
34724
34725   * uint16x4_t vrshrn_n_u32 (uint32x4_t, const int)
34726     _Form of expected instruction(s):_ 'vrshrn.i32 D0, Q0, #0'
34727
34728   * uint8x8_t vrshrn_n_u16 (uint16x8_t, const int)
34729     _Form of expected instruction(s):_ 'vrshrn.i16 D0, Q0, #0'
34730
34731   * int32x2_t vrshrn_n_s64 (int64x2_t, const int)
34732     _Form of expected instruction(s):_ 'vrshrn.i64 D0, Q0, #0'
34733
34734   * int16x4_t vrshrn_n_s32 (int32x4_t, const int)
34735     _Form of expected instruction(s):_ 'vrshrn.i32 D0, Q0, #0'
34736
34737   * int8x8_t vrshrn_n_s16 (int16x8_t, const int)
34738     _Form of expected instruction(s):_ 'vrshrn.i16 D0, Q0, #0'
34739
34740   * uint32x2_t vqshrn_n_u64 (uint64x2_t, const int)
34741     _Form of expected instruction(s):_ 'vqshrn.u64 D0, Q0, #0'
34742
34743   * uint16x4_t vqshrn_n_u32 (uint32x4_t, const int)
34744     _Form of expected instruction(s):_ 'vqshrn.u32 D0, Q0, #0'
34745
34746   * uint8x8_t vqshrn_n_u16 (uint16x8_t, const int)
34747     _Form of expected instruction(s):_ 'vqshrn.u16 D0, Q0, #0'
34748
34749   * int32x2_t vqshrn_n_s64 (int64x2_t, const int)
34750     _Form of expected instruction(s):_ 'vqshrn.s64 D0, Q0, #0'
34751
34752   * int16x4_t vqshrn_n_s32 (int32x4_t, const int)
34753     _Form of expected instruction(s):_ 'vqshrn.s32 D0, Q0, #0'
34754
34755   * int8x8_t vqshrn_n_s16 (int16x8_t, const int)
34756     _Form of expected instruction(s):_ 'vqshrn.s16 D0, Q0, #0'
34757
34758   * uint32x2_t vqrshrn_n_u64 (uint64x2_t, const int)
34759     _Form of expected instruction(s):_ 'vqrshrn.u64 D0, Q0, #0'
34760
34761   * uint16x4_t vqrshrn_n_u32 (uint32x4_t, const int)
34762     _Form of expected instruction(s):_ 'vqrshrn.u32 D0, Q0, #0'
34763
34764   * uint8x8_t vqrshrn_n_u16 (uint16x8_t, const int)
34765     _Form of expected instruction(s):_ 'vqrshrn.u16 D0, Q0, #0'
34766
34767   * int32x2_t vqrshrn_n_s64 (int64x2_t, const int)
34768     _Form of expected instruction(s):_ 'vqrshrn.s64 D0, Q0, #0'
34769
34770   * int16x4_t vqrshrn_n_s32 (int32x4_t, const int)
34771     _Form of expected instruction(s):_ 'vqrshrn.s32 D0, Q0, #0'
34772
34773   * int8x8_t vqrshrn_n_s16 (int16x8_t, const int)
34774     _Form of expected instruction(s):_ 'vqrshrn.s16 D0, Q0, #0'
34775
34776   * uint32x2_t vqshrun_n_s64 (int64x2_t, const int)
34777     _Form of expected instruction(s):_ 'vqshrun.s64 D0, Q0, #0'
34778
34779   * uint16x4_t vqshrun_n_s32 (int32x4_t, const int)
34780     _Form of expected instruction(s):_ 'vqshrun.s32 D0, Q0, #0'
34781
34782   * uint8x8_t vqshrun_n_s16 (int16x8_t, const int)
34783     _Form of expected instruction(s):_ 'vqshrun.s16 D0, Q0, #0'
34784
34785   * uint32x2_t vqrshrun_n_s64 (int64x2_t, const int)
34786     _Form of expected instruction(s):_ 'vqrshrun.s64 D0, Q0, #0'
34787
34788   * uint16x4_t vqrshrun_n_s32 (int32x4_t, const int)
34789     _Form of expected instruction(s):_ 'vqrshrun.s32 D0, Q0, #0'
34790
34791   * uint8x8_t vqrshrun_n_s16 (int16x8_t, const int)
34792     _Form of expected instruction(s):_ 'vqrshrun.s16 D0, Q0, #0'
34793
347946.57.6.35 Vector shift right by constant and accumulate
34795.......................................................
34796
34797   * uint32x2_t vsra_n_u32 (uint32x2_t, uint32x2_t, const int)
34798     _Form of expected instruction(s):_ 'vsra.u32 D0, D0, #0'
34799
34800   * uint16x4_t vsra_n_u16 (uint16x4_t, uint16x4_t, const int)
34801     _Form of expected instruction(s):_ 'vsra.u16 D0, D0, #0'
34802
34803   * uint8x8_t vsra_n_u8 (uint8x8_t, uint8x8_t, const int)
34804     _Form of expected instruction(s):_ 'vsra.u8 D0, D0, #0'
34805
34806   * int32x2_t vsra_n_s32 (int32x2_t, int32x2_t, const int)
34807     _Form of expected instruction(s):_ 'vsra.s32 D0, D0, #0'
34808
34809   * int16x4_t vsra_n_s16 (int16x4_t, int16x4_t, const int)
34810     _Form of expected instruction(s):_ 'vsra.s16 D0, D0, #0'
34811
34812   * int8x8_t vsra_n_s8 (int8x8_t, int8x8_t, const int)
34813     _Form of expected instruction(s):_ 'vsra.s8 D0, D0, #0'
34814
34815   * uint64x1_t vsra_n_u64 (uint64x1_t, uint64x1_t, const int)
34816     _Form of expected instruction(s):_ 'vsra.u64 D0, D0, #0'
34817
34818   * int64x1_t vsra_n_s64 (int64x1_t, int64x1_t, const int)
34819     _Form of expected instruction(s):_ 'vsra.s64 D0, D0, #0'
34820
34821   * uint32x4_t vsraq_n_u32 (uint32x4_t, uint32x4_t, const int)
34822     _Form of expected instruction(s):_ 'vsra.u32 Q0, Q0, #0'
34823
34824   * uint16x8_t vsraq_n_u16 (uint16x8_t, uint16x8_t, const int)
34825     _Form of expected instruction(s):_ 'vsra.u16 Q0, Q0, #0'
34826
34827   * uint8x16_t vsraq_n_u8 (uint8x16_t, uint8x16_t, const int)
34828     _Form of expected instruction(s):_ 'vsra.u8 Q0, Q0, #0'
34829
34830   * int32x4_t vsraq_n_s32 (int32x4_t, int32x4_t, const int)
34831     _Form of expected instruction(s):_ 'vsra.s32 Q0, Q0, #0'
34832
34833   * int16x8_t vsraq_n_s16 (int16x8_t, int16x8_t, const int)
34834     _Form of expected instruction(s):_ 'vsra.s16 Q0, Q0, #0'
34835
34836   * int8x16_t vsraq_n_s8 (int8x16_t, int8x16_t, const int)
34837     _Form of expected instruction(s):_ 'vsra.s8 Q0, Q0, #0'
34838
34839   * uint64x2_t vsraq_n_u64 (uint64x2_t, uint64x2_t, const int)
34840     _Form of expected instruction(s):_ 'vsra.u64 Q0, Q0, #0'
34841
34842   * int64x2_t vsraq_n_s64 (int64x2_t, int64x2_t, const int)
34843     _Form of expected instruction(s):_ 'vsra.s64 Q0, Q0, #0'
34844
34845   * uint32x2_t vrsra_n_u32 (uint32x2_t, uint32x2_t, const int)
34846     _Form of expected instruction(s):_ 'vrsra.u32 D0, D0, #0'
34847
34848   * uint16x4_t vrsra_n_u16 (uint16x4_t, uint16x4_t, const int)
34849     _Form of expected instruction(s):_ 'vrsra.u16 D0, D0, #0'
34850
34851   * uint8x8_t vrsra_n_u8 (uint8x8_t, uint8x8_t, const int)
34852     _Form of expected instruction(s):_ 'vrsra.u8 D0, D0, #0'
34853
34854   * int32x2_t vrsra_n_s32 (int32x2_t, int32x2_t, const int)
34855     _Form of expected instruction(s):_ 'vrsra.s32 D0, D0, #0'
34856
34857   * int16x4_t vrsra_n_s16 (int16x4_t, int16x4_t, const int)
34858     _Form of expected instruction(s):_ 'vrsra.s16 D0, D0, #0'
34859
34860   * int8x8_t vrsra_n_s8 (int8x8_t, int8x8_t, const int)
34861     _Form of expected instruction(s):_ 'vrsra.s8 D0, D0, #0'
34862
34863   * uint64x1_t vrsra_n_u64 (uint64x1_t, uint64x1_t, const int)
34864     _Form of expected instruction(s):_ 'vrsra.u64 D0, D0, #0'
34865
34866   * int64x1_t vrsra_n_s64 (int64x1_t, int64x1_t, const int)
34867     _Form of expected instruction(s):_ 'vrsra.s64 D0, D0, #0'
34868
34869   * uint32x4_t vrsraq_n_u32 (uint32x4_t, uint32x4_t, const int)
34870     _Form of expected instruction(s):_ 'vrsra.u32 Q0, Q0, #0'
34871
34872   * uint16x8_t vrsraq_n_u16 (uint16x8_t, uint16x8_t, const int)
34873     _Form of expected instruction(s):_ 'vrsra.u16 Q0, Q0, #0'
34874
34875   * uint8x16_t vrsraq_n_u8 (uint8x16_t, uint8x16_t, const int)
34876     _Form of expected instruction(s):_ 'vrsra.u8 Q0, Q0, #0'
34877
34878   * int32x4_t vrsraq_n_s32 (int32x4_t, int32x4_t, const int)
34879     _Form of expected instruction(s):_ 'vrsra.s32 Q0, Q0, #0'
34880
34881   * int16x8_t vrsraq_n_s16 (int16x8_t, int16x8_t, const int)
34882     _Form of expected instruction(s):_ 'vrsra.s16 Q0, Q0, #0'
34883
34884   * int8x16_t vrsraq_n_s8 (int8x16_t, int8x16_t, const int)
34885     _Form of expected instruction(s):_ 'vrsra.s8 Q0, Q0, #0'
34886
34887   * uint64x2_t vrsraq_n_u64 (uint64x2_t, uint64x2_t, const int)
34888     _Form of expected instruction(s):_ 'vrsra.u64 Q0, Q0, #0'
34889
34890   * int64x2_t vrsraq_n_s64 (int64x2_t, int64x2_t, const int)
34891     _Form of expected instruction(s):_ 'vrsra.s64 Q0, Q0, #0'
34892
348936.57.6.36 Vector shift right and insert
34894.......................................
34895
34896   * poly64x1_t vsri_n_p64 (poly64x1_t, poly64x1_t, const int)
34897     _Form of expected instruction(s):_ 'vsri.64 D0, D0, #0'
34898
34899   * uint32x2_t vsri_n_u32 (uint32x2_t, uint32x2_t, const int)
34900     _Form of expected instruction(s):_ 'vsri.32 D0, D0, #0'
34901
34902   * uint16x4_t vsri_n_u16 (uint16x4_t, uint16x4_t, const int)
34903     _Form of expected instruction(s):_ 'vsri.16 D0, D0, #0'
34904
34905   * uint8x8_t vsri_n_u8 (uint8x8_t, uint8x8_t, const int)
34906     _Form of expected instruction(s):_ 'vsri.8 D0, D0, #0'
34907
34908   * int32x2_t vsri_n_s32 (int32x2_t, int32x2_t, const int)
34909     _Form of expected instruction(s):_ 'vsri.32 D0, D0, #0'
34910
34911   * int16x4_t vsri_n_s16 (int16x4_t, int16x4_t, const int)
34912     _Form of expected instruction(s):_ 'vsri.16 D0, D0, #0'
34913
34914   * int8x8_t vsri_n_s8 (int8x8_t, int8x8_t, const int)
34915     _Form of expected instruction(s):_ 'vsri.8 D0, D0, #0'
34916
34917   * uint64x1_t vsri_n_u64 (uint64x1_t, uint64x1_t, const int)
34918     _Form of expected instruction(s):_ 'vsri.64 D0, D0, #0'
34919
34920   * int64x1_t vsri_n_s64 (int64x1_t, int64x1_t, const int)
34921     _Form of expected instruction(s):_ 'vsri.64 D0, D0, #0'
34922
34923   * poly16x4_t vsri_n_p16 (poly16x4_t, poly16x4_t, const int)
34924     _Form of expected instruction(s):_ 'vsri.16 D0, D0, #0'
34925
34926   * poly8x8_t vsri_n_p8 (poly8x8_t, poly8x8_t, const int)
34927     _Form of expected instruction(s):_ 'vsri.8 D0, D0, #0'
34928
34929   * poly64x2_t vsriq_n_p64 (poly64x2_t, poly64x2_t, const int)
34930     _Form of expected instruction(s):_ 'vsri.64 Q0, Q0, #0'
34931
34932   * uint32x4_t vsriq_n_u32 (uint32x4_t, uint32x4_t, const int)
34933     _Form of expected instruction(s):_ 'vsri.32 Q0, Q0, #0'
34934
34935   * uint16x8_t vsriq_n_u16 (uint16x8_t, uint16x8_t, const int)
34936     _Form of expected instruction(s):_ 'vsri.16 Q0, Q0, #0'
34937
34938   * uint8x16_t vsriq_n_u8 (uint8x16_t, uint8x16_t, const int)
34939     _Form of expected instruction(s):_ 'vsri.8 Q0, Q0, #0'
34940
34941   * int32x4_t vsriq_n_s32 (int32x4_t, int32x4_t, const int)
34942     _Form of expected instruction(s):_ 'vsri.32 Q0, Q0, #0'
34943
34944   * int16x8_t vsriq_n_s16 (int16x8_t, int16x8_t, const int)
34945     _Form of expected instruction(s):_ 'vsri.16 Q0, Q0, #0'
34946
34947   * int8x16_t vsriq_n_s8 (int8x16_t, int8x16_t, const int)
34948     _Form of expected instruction(s):_ 'vsri.8 Q0, Q0, #0'
34949
34950   * uint64x2_t vsriq_n_u64 (uint64x2_t, uint64x2_t, const int)
34951     _Form of expected instruction(s):_ 'vsri.64 Q0, Q0, #0'
34952
34953   * int64x2_t vsriq_n_s64 (int64x2_t, int64x2_t, const int)
34954     _Form of expected instruction(s):_ 'vsri.64 Q0, Q0, #0'
34955
34956   * poly16x8_t vsriq_n_p16 (poly16x8_t, poly16x8_t, const int)
34957     _Form of expected instruction(s):_ 'vsri.16 Q0, Q0, #0'
34958
34959   * poly8x16_t vsriq_n_p8 (poly8x16_t, poly8x16_t, const int)
34960     _Form of expected instruction(s):_ 'vsri.8 Q0, Q0, #0'
34961
349626.57.6.37 Vector shift left and insert
34963......................................
34964
34965   * poly64x1_t vsli_n_p64 (poly64x1_t, poly64x1_t, const int)
34966     _Form of expected instruction(s):_ 'vsli.64 D0, D0, #0'
34967
34968   * uint32x2_t vsli_n_u32 (uint32x2_t, uint32x2_t, const int)
34969     _Form of expected instruction(s):_ 'vsli.32 D0, D0, #0'
34970
34971   * uint16x4_t vsli_n_u16 (uint16x4_t, uint16x4_t, const int)
34972     _Form of expected instruction(s):_ 'vsli.16 D0, D0, #0'
34973
34974   * uint8x8_t vsli_n_u8 (uint8x8_t, uint8x8_t, const int)
34975     _Form of expected instruction(s):_ 'vsli.8 D0, D0, #0'
34976
34977   * int32x2_t vsli_n_s32 (int32x2_t, int32x2_t, const int)
34978     _Form of expected instruction(s):_ 'vsli.32 D0, D0, #0'
34979
34980   * int16x4_t vsli_n_s16 (int16x4_t, int16x4_t, const int)
34981     _Form of expected instruction(s):_ 'vsli.16 D0, D0, #0'
34982
34983   * int8x8_t vsli_n_s8 (int8x8_t, int8x8_t, const int)
34984     _Form of expected instruction(s):_ 'vsli.8 D0, D0, #0'
34985
34986   * uint64x1_t vsli_n_u64 (uint64x1_t, uint64x1_t, const int)
34987     _Form of expected instruction(s):_ 'vsli.64 D0, D0, #0'
34988
34989   * int64x1_t vsli_n_s64 (int64x1_t, int64x1_t, const int)
34990     _Form of expected instruction(s):_ 'vsli.64 D0, D0, #0'
34991
34992   * poly16x4_t vsli_n_p16 (poly16x4_t, poly16x4_t, const int)
34993     _Form of expected instruction(s):_ 'vsli.16 D0, D0, #0'
34994
34995   * poly8x8_t vsli_n_p8 (poly8x8_t, poly8x8_t, const int)
34996     _Form of expected instruction(s):_ 'vsli.8 D0, D0, #0'
34997
34998   * poly64x2_t vsliq_n_p64 (poly64x2_t, poly64x2_t, const int)
34999     _Form of expected instruction(s):_ 'vsli.64 Q0, Q0, #0'
35000
35001   * uint32x4_t vsliq_n_u32 (uint32x4_t, uint32x4_t, const int)
35002     _Form of expected instruction(s):_ 'vsli.32 Q0, Q0, #0'
35003
35004   * uint16x8_t vsliq_n_u16 (uint16x8_t, uint16x8_t, const int)
35005     _Form of expected instruction(s):_ 'vsli.16 Q0, Q0, #0'
35006
35007   * uint8x16_t vsliq_n_u8 (uint8x16_t, uint8x16_t, const int)
35008     _Form of expected instruction(s):_ 'vsli.8 Q0, Q0, #0'
35009
35010   * int32x4_t vsliq_n_s32 (int32x4_t, int32x4_t, const int)
35011     _Form of expected instruction(s):_ 'vsli.32 Q0, Q0, #0'
35012
35013   * int16x8_t vsliq_n_s16 (int16x8_t, int16x8_t, const int)
35014     _Form of expected instruction(s):_ 'vsli.16 Q0, Q0, #0'
35015
35016   * int8x16_t vsliq_n_s8 (int8x16_t, int8x16_t, const int)
35017     _Form of expected instruction(s):_ 'vsli.8 Q0, Q0, #0'
35018
35019   * uint64x2_t vsliq_n_u64 (uint64x2_t, uint64x2_t, const int)
35020     _Form of expected instruction(s):_ 'vsli.64 Q0, Q0, #0'
35021
35022   * int64x2_t vsliq_n_s64 (int64x2_t, int64x2_t, const int)
35023     _Form of expected instruction(s):_ 'vsli.64 Q0, Q0, #0'
35024
35025   * poly16x8_t vsliq_n_p16 (poly16x8_t, poly16x8_t, const int)
35026     _Form of expected instruction(s):_ 'vsli.16 Q0, Q0, #0'
35027
35028   * poly8x16_t vsliq_n_p8 (poly8x16_t, poly8x16_t, const int)
35029     _Form of expected instruction(s):_ 'vsli.8 Q0, Q0, #0'
35030
350316.57.6.38 Absolute value
35032........................
35033
35034   * float32x2_t vabs_f32 (float32x2_t)
35035     _Form of expected instruction(s):_ 'vabs.f32 D0, D0'
35036
35037   * int32x2_t vabs_s32 (int32x2_t)
35038     _Form of expected instruction(s):_ 'vabs.s32 D0, D0'
35039
35040   * int16x4_t vabs_s16 (int16x4_t)
35041     _Form of expected instruction(s):_ 'vabs.s16 D0, D0'
35042
35043   * int8x8_t vabs_s8 (int8x8_t)
35044     _Form of expected instruction(s):_ 'vabs.s8 D0, D0'
35045
35046   * float32x4_t vabsq_f32 (float32x4_t)
35047     _Form of expected instruction(s):_ 'vabs.f32 Q0, Q0'
35048
35049   * int32x4_t vabsq_s32 (int32x4_t)
35050     _Form of expected instruction(s):_ 'vabs.s32 Q0, Q0'
35051
35052   * int16x8_t vabsq_s16 (int16x8_t)
35053     _Form of expected instruction(s):_ 'vabs.s16 Q0, Q0'
35054
35055   * int8x16_t vabsq_s8 (int8x16_t)
35056     _Form of expected instruction(s):_ 'vabs.s8 Q0, Q0'
35057
35058   * int32x2_t vqabs_s32 (int32x2_t)
35059     _Form of expected instruction(s):_ 'vqabs.s32 D0, D0'
35060
35061   * int16x4_t vqabs_s16 (int16x4_t)
35062     _Form of expected instruction(s):_ 'vqabs.s16 D0, D0'
35063
35064   * int8x8_t vqabs_s8 (int8x8_t)
35065     _Form of expected instruction(s):_ 'vqabs.s8 D0, D0'
35066
35067   * int32x4_t vqabsq_s32 (int32x4_t)
35068     _Form of expected instruction(s):_ 'vqabs.s32 Q0, Q0'
35069
35070   * int16x8_t vqabsq_s16 (int16x8_t)
35071     _Form of expected instruction(s):_ 'vqabs.s16 Q0, Q0'
35072
35073   * int8x16_t vqabsq_s8 (int8x16_t)
35074     _Form of expected instruction(s):_ 'vqabs.s8 Q0, Q0'
35075
350766.57.6.39 Negation
35077..................
35078
35079   * float32x2_t vneg_f32 (float32x2_t)
35080     _Form of expected instruction(s):_ 'vneg.f32 D0, D0'
35081
35082   * int32x2_t vneg_s32 (int32x2_t)
35083     _Form of expected instruction(s):_ 'vneg.s32 D0, D0'
35084
35085   * int16x4_t vneg_s16 (int16x4_t)
35086     _Form of expected instruction(s):_ 'vneg.s16 D0, D0'
35087
35088   * int8x8_t vneg_s8 (int8x8_t)
35089     _Form of expected instruction(s):_ 'vneg.s8 D0, D0'
35090
35091   * float32x4_t vnegq_f32 (float32x4_t)
35092     _Form of expected instruction(s):_ 'vneg.f32 Q0, Q0'
35093
35094   * int32x4_t vnegq_s32 (int32x4_t)
35095     _Form of expected instruction(s):_ 'vneg.s32 Q0, Q0'
35096
35097   * int16x8_t vnegq_s16 (int16x8_t)
35098     _Form of expected instruction(s):_ 'vneg.s16 Q0, Q0'
35099
35100   * int8x16_t vnegq_s8 (int8x16_t)
35101     _Form of expected instruction(s):_ 'vneg.s8 Q0, Q0'
35102
35103   * int32x2_t vqneg_s32 (int32x2_t)
35104     _Form of expected instruction(s):_ 'vqneg.s32 D0, D0'
35105
35106   * int16x4_t vqneg_s16 (int16x4_t)
35107     _Form of expected instruction(s):_ 'vqneg.s16 D0, D0'
35108
35109   * int8x8_t vqneg_s8 (int8x8_t)
35110     _Form of expected instruction(s):_ 'vqneg.s8 D0, D0'
35111
35112   * int32x4_t vqnegq_s32 (int32x4_t)
35113     _Form of expected instruction(s):_ 'vqneg.s32 Q0, Q0'
35114
35115   * int16x8_t vqnegq_s16 (int16x8_t)
35116     _Form of expected instruction(s):_ 'vqneg.s16 Q0, Q0'
35117
35118   * int8x16_t vqnegq_s8 (int8x16_t)
35119     _Form of expected instruction(s):_ 'vqneg.s8 Q0, Q0'
35120
351216.57.6.40 Bitwise not
35122.....................
35123
35124   * uint32x2_t vmvn_u32 (uint32x2_t)
35125     _Form of expected instruction(s):_ 'vmvn D0, D0'
35126
35127   * uint16x4_t vmvn_u16 (uint16x4_t)
35128     _Form of expected instruction(s):_ 'vmvn D0, D0'
35129
35130   * uint8x8_t vmvn_u8 (uint8x8_t)
35131     _Form of expected instruction(s):_ 'vmvn D0, D0'
35132
35133   * int32x2_t vmvn_s32 (int32x2_t)
35134     _Form of expected instruction(s):_ 'vmvn D0, D0'
35135
35136   * int16x4_t vmvn_s16 (int16x4_t)
35137     _Form of expected instruction(s):_ 'vmvn D0, D0'
35138
35139   * int8x8_t vmvn_s8 (int8x8_t)
35140     _Form of expected instruction(s):_ 'vmvn D0, D0'
35141
35142   * poly8x8_t vmvn_p8 (poly8x8_t)
35143     _Form of expected instruction(s):_ 'vmvn D0, D0'
35144
35145   * uint32x4_t vmvnq_u32 (uint32x4_t)
35146     _Form of expected instruction(s):_ 'vmvn Q0, Q0'
35147
35148   * uint16x8_t vmvnq_u16 (uint16x8_t)
35149     _Form of expected instruction(s):_ 'vmvn Q0, Q0'
35150
35151   * uint8x16_t vmvnq_u8 (uint8x16_t)
35152     _Form of expected instruction(s):_ 'vmvn Q0, Q0'
35153
35154   * int32x4_t vmvnq_s32 (int32x4_t)
35155     _Form of expected instruction(s):_ 'vmvn Q0, Q0'
35156
35157   * int16x8_t vmvnq_s16 (int16x8_t)
35158     _Form of expected instruction(s):_ 'vmvn Q0, Q0'
35159
35160   * int8x16_t vmvnq_s8 (int8x16_t)
35161     _Form of expected instruction(s):_ 'vmvn Q0, Q0'
35162
35163   * poly8x16_t vmvnq_p8 (poly8x16_t)
35164     _Form of expected instruction(s):_ 'vmvn Q0, Q0'
35165
351666.57.6.41 Count leading sign bits
35167.................................
35168
35169   * int32x2_t vcls_s32 (int32x2_t)
35170     _Form of expected instruction(s):_ 'vcls.s32 D0, D0'
35171
35172   * int16x4_t vcls_s16 (int16x4_t)
35173     _Form of expected instruction(s):_ 'vcls.s16 D0, D0'
35174
35175   * int8x8_t vcls_s8 (int8x8_t)
35176     _Form of expected instruction(s):_ 'vcls.s8 D0, D0'
35177
35178   * int32x4_t vclsq_s32 (int32x4_t)
35179     _Form of expected instruction(s):_ 'vcls.s32 Q0, Q0'
35180
35181   * int16x8_t vclsq_s16 (int16x8_t)
35182     _Form of expected instruction(s):_ 'vcls.s16 Q0, Q0'
35183
35184   * int8x16_t vclsq_s8 (int8x16_t)
35185     _Form of expected instruction(s):_ 'vcls.s8 Q0, Q0'
35186
351876.57.6.42 Count leading zeros
35188.............................
35189
35190   * uint32x2_t vclz_u32 (uint32x2_t)
35191     _Form of expected instruction(s):_ 'vclz.i32 D0, D0'
35192
35193   * uint16x4_t vclz_u16 (uint16x4_t)
35194     _Form of expected instruction(s):_ 'vclz.i16 D0, D0'
35195
35196   * uint8x8_t vclz_u8 (uint8x8_t)
35197     _Form of expected instruction(s):_ 'vclz.i8 D0, D0'
35198
35199   * int32x2_t vclz_s32 (int32x2_t)
35200     _Form of expected instruction(s):_ 'vclz.i32 D0, D0'
35201
35202   * int16x4_t vclz_s16 (int16x4_t)
35203     _Form of expected instruction(s):_ 'vclz.i16 D0, D0'
35204
35205   * int8x8_t vclz_s8 (int8x8_t)
35206     _Form of expected instruction(s):_ 'vclz.i8 D0, D0'
35207
35208   * uint32x4_t vclzq_u32 (uint32x4_t)
35209     _Form of expected instruction(s):_ 'vclz.i32 Q0, Q0'
35210
35211   * uint16x8_t vclzq_u16 (uint16x8_t)
35212     _Form of expected instruction(s):_ 'vclz.i16 Q0, Q0'
35213
35214   * uint8x16_t vclzq_u8 (uint8x16_t)
35215     _Form of expected instruction(s):_ 'vclz.i8 Q0, Q0'
35216
35217   * int32x4_t vclzq_s32 (int32x4_t)
35218     _Form of expected instruction(s):_ 'vclz.i32 Q0, Q0'
35219
35220   * int16x8_t vclzq_s16 (int16x8_t)
35221     _Form of expected instruction(s):_ 'vclz.i16 Q0, Q0'
35222
35223   * int8x16_t vclzq_s8 (int8x16_t)
35224     _Form of expected instruction(s):_ 'vclz.i8 Q0, Q0'
35225
352266.57.6.43 Count number of set bits
35227..................................
35228
35229   * uint8x8_t vcnt_u8 (uint8x8_t)
35230     _Form of expected instruction(s):_ 'vcnt.8 D0, D0'
35231
35232   * int8x8_t vcnt_s8 (int8x8_t)
35233     _Form of expected instruction(s):_ 'vcnt.8 D0, D0'
35234
35235   * poly8x8_t vcnt_p8 (poly8x8_t)
35236     _Form of expected instruction(s):_ 'vcnt.8 D0, D0'
35237
35238   * uint8x16_t vcntq_u8 (uint8x16_t)
35239     _Form of expected instruction(s):_ 'vcnt.8 Q0, Q0'
35240
35241   * int8x16_t vcntq_s8 (int8x16_t)
35242     _Form of expected instruction(s):_ 'vcnt.8 Q0, Q0'
35243
35244   * poly8x16_t vcntq_p8 (poly8x16_t)
35245     _Form of expected instruction(s):_ 'vcnt.8 Q0, Q0'
35246
352476.57.6.44 Reciprocal estimate
35248.............................
35249
35250   * float32x2_t vrecpe_f32 (float32x2_t)
35251     _Form of expected instruction(s):_ 'vrecpe.f32 D0, D0'
35252
35253   * uint32x2_t vrecpe_u32 (uint32x2_t)
35254     _Form of expected instruction(s):_ 'vrecpe.u32 D0, D0'
35255
35256   * float32x4_t vrecpeq_f32 (float32x4_t)
35257     _Form of expected instruction(s):_ 'vrecpe.f32 Q0, Q0'
35258
35259   * uint32x4_t vrecpeq_u32 (uint32x4_t)
35260     _Form of expected instruction(s):_ 'vrecpe.u32 Q0, Q0'
35261
352626.57.6.45 Reciprocal square-root estimate
35263.........................................
35264
35265   * float32x2_t vrsqrte_f32 (float32x2_t)
35266     _Form of expected instruction(s):_ 'vrsqrte.f32 D0, D0'
35267
35268   * uint32x2_t vrsqrte_u32 (uint32x2_t)
35269     _Form of expected instruction(s):_ 'vrsqrte.u32 D0, D0'
35270
35271   * float32x4_t vrsqrteq_f32 (float32x4_t)
35272     _Form of expected instruction(s):_ 'vrsqrte.f32 Q0, Q0'
35273
35274   * uint32x4_t vrsqrteq_u32 (uint32x4_t)
35275     _Form of expected instruction(s):_ 'vrsqrte.u32 Q0, Q0'
35276
352776.57.6.46 Get lanes from a vector
35278.................................
35279
35280   * uint32_t vget_lane_u32 (uint32x2_t, const int)
35281     _Form of expected instruction(s):_ 'vmov.32 R0, D0[0]'
35282
35283   * uint16_t vget_lane_u16 (uint16x4_t, const int)
35284     _Form of expected instruction(s):_ 'vmov.u16 R0, D0[0]'
35285
35286   * uint8_t vget_lane_u8 (uint8x8_t, const int)
35287     _Form of expected instruction(s):_ 'vmov.u8 R0, D0[0]'
35288
35289   * int32_t vget_lane_s32 (int32x2_t, const int)
35290     _Form of expected instruction(s):_ 'vmov.32 R0, D0[0]'
35291
35292   * int16_t vget_lane_s16 (int16x4_t, const int)
35293     _Form of expected instruction(s):_ 'vmov.s16 R0, D0[0]'
35294
35295   * int8_t vget_lane_s8 (int8x8_t, const int)
35296     _Form of expected instruction(s):_ 'vmov.s8 R0, D0[0]'
35297
35298   * float32_t vget_lane_f32 (float32x2_t, const int)
35299     _Form of expected instruction(s):_ 'vmov.32 R0, D0[0]'
35300
35301   * poly16_t vget_lane_p16 (poly16x4_t, const int)
35302     _Form of expected instruction(s):_ 'vmov.u16 R0, D0[0]'
35303
35304   * poly8_t vget_lane_p8 (poly8x8_t, const int)
35305     _Form of expected instruction(s):_ 'vmov.u8 R0, D0[0]'
35306
35307   * uint64_t vget_lane_u64 (uint64x1_t, const int)
35308
35309   * int64_t vget_lane_s64 (int64x1_t, const int)
35310
35311   * uint32_t vgetq_lane_u32 (uint32x4_t, const int)
35312     _Form of expected instruction(s):_ 'vmov.32 R0, D0[0]'
35313
35314   * uint16_t vgetq_lane_u16 (uint16x8_t, const int)
35315     _Form of expected instruction(s):_ 'vmov.u16 R0, D0[0]'
35316
35317   * uint8_t vgetq_lane_u8 (uint8x16_t, const int)
35318     _Form of expected instruction(s):_ 'vmov.u8 R0, D0[0]'
35319
35320   * int32_t vgetq_lane_s32 (int32x4_t, const int)
35321     _Form of expected instruction(s):_ 'vmov.32 R0, D0[0]'
35322
35323   * int16_t vgetq_lane_s16 (int16x8_t, const int)
35324     _Form of expected instruction(s):_ 'vmov.s16 R0, D0[0]'
35325
35326   * int8_t vgetq_lane_s8 (int8x16_t, const int)
35327     _Form of expected instruction(s):_ 'vmov.s8 R0, D0[0]'
35328
35329   * float32_t vgetq_lane_f32 (float32x4_t, const int)
35330     _Form of expected instruction(s):_ 'vmov.32 R0, D0[0]'
35331
35332   * poly16_t vgetq_lane_p16 (poly16x8_t, const int)
35333     _Form of expected instruction(s):_ 'vmov.u16 R0, D0[0]'
35334
35335   * poly8_t vgetq_lane_p8 (poly8x16_t, const int)
35336     _Form of expected instruction(s):_ 'vmov.u8 R0, D0[0]'
35337
35338   * uint64_t vgetq_lane_u64 (uint64x2_t, const int)
35339     _Form of expected instruction(s):_ 'vmov R0, R0, D0' _or_ 'fmrrd
35340     R0, R0, D0'
35341
35342   * int64_t vgetq_lane_s64 (int64x2_t, const int)
35343     _Form of expected instruction(s):_ 'vmov R0, R0, D0' _or_ 'fmrrd
35344     R0, R0, D0'
35345
353466.57.6.47 Set lanes in a vector
35347...............................
35348
35349   * uint32x2_t vset_lane_u32 (uint32_t, uint32x2_t, const int)
35350     _Form of expected instruction(s):_ 'vmov.32 D0[0], R0'
35351
35352   * uint16x4_t vset_lane_u16 (uint16_t, uint16x4_t, const int)
35353     _Form of expected instruction(s):_ 'vmov.16 D0[0], R0'
35354
35355   * uint8x8_t vset_lane_u8 (uint8_t, uint8x8_t, const int)
35356     _Form of expected instruction(s):_ 'vmov.8 D0[0], R0'
35357
35358   * int32x2_t vset_lane_s32 (int32_t, int32x2_t, const int)
35359     _Form of expected instruction(s):_ 'vmov.32 D0[0], R0'
35360
35361   * int16x4_t vset_lane_s16 (int16_t, int16x4_t, const int)
35362     _Form of expected instruction(s):_ 'vmov.16 D0[0], R0'
35363
35364   * int8x8_t vset_lane_s8 (int8_t, int8x8_t, const int)
35365     _Form of expected instruction(s):_ 'vmov.8 D0[0], R0'
35366
35367   * float32x2_t vset_lane_f32 (float32_t, float32x2_t, const int)
35368     _Form of expected instruction(s):_ 'vmov.32 D0[0], R0'
35369
35370   * poly16x4_t vset_lane_p16 (poly16_t, poly16x4_t, const int)
35371     _Form of expected instruction(s):_ 'vmov.16 D0[0], R0'
35372
35373   * poly8x8_t vset_lane_p8 (poly8_t, poly8x8_t, const int)
35374     _Form of expected instruction(s):_ 'vmov.8 D0[0], R0'
35375
35376   * uint64x1_t vset_lane_u64 (uint64_t, uint64x1_t, const int)
35377
35378   * int64x1_t vset_lane_s64 (int64_t, int64x1_t, const int)
35379
35380   * uint32x4_t vsetq_lane_u32 (uint32_t, uint32x4_t, const int)
35381     _Form of expected instruction(s):_ 'vmov.32 D0[0], R0'
35382
35383   * uint16x8_t vsetq_lane_u16 (uint16_t, uint16x8_t, const int)
35384     _Form of expected instruction(s):_ 'vmov.16 D0[0], R0'
35385
35386   * uint8x16_t vsetq_lane_u8 (uint8_t, uint8x16_t, const int)
35387     _Form of expected instruction(s):_ 'vmov.8 D0[0], R0'
35388
35389   * int32x4_t vsetq_lane_s32 (int32_t, int32x4_t, const int)
35390     _Form of expected instruction(s):_ 'vmov.32 D0[0], R0'
35391
35392   * int16x8_t vsetq_lane_s16 (int16_t, int16x8_t, const int)
35393     _Form of expected instruction(s):_ 'vmov.16 D0[0], R0'
35394
35395   * int8x16_t vsetq_lane_s8 (int8_t, int8x16_t, const int)
35396     _Form of expected instruction(s):_ 'vmov.8 D0[0], R0'
35397
35398   * float32x4_t vsetq_lane_f32 (float32_t, float32x4_t, const int)
35399     _Form of expected instruction(s):_ 'vmov.32 D0[0], R0'
35400
35401   * poly16x8_t vsetq_lane_p16 (poly16_t, poly16x8_t, const int)
35402     _Form of expected instruction(s):_ 'vmov.16 D0[0], R0'
35403
35404   * poly8x16_t vsetq_lane_p8 (poly8_t, poly8x16_t, const int)
35405     _Form of expected instruction(s):_ 'vmov.8 D0[0], R0'
35406
35407   * uint64x2_t vsetq_lane_u64 (uint64_t, uint64x2_t, const int)
35408     _Form of expected instruction(s):_ 'vmov D0, R0, R0'
35409
35410   * int64x2_t vsetq_lane_s64 (int64_t, int64x2_t, const int)
35411     _Form of expected instruction(s):_ 'vmov D0, R0, R0'
35412
354136.57.6.48 Create vector from literal bit pattern
35414................................................
35415
35416   * poly64x1_t vcreate_p64 (uint64_t)
35417
35418   * uint32x2_t vcreate_u32 (uint64_t)
35419
35420   * uint16x4_t vcreate_u16 (uint64_t)
35421
35422   * uint8x8_t vcreate_u8 (uint64_t)
35423
35424   * int32x2_t vcreate_s32 (uint64_t)
35425
35426   * int16x4_t vcreate_s16 (uint64_t)
35427
35428   * int8x8_t vcreate_s8 (uint64_t)
35429
35430   * uint64x1_t vcreate_u64 (uint64_t)
35431
35432   * int64x1_t vcreate_s64 (uint64_t)
35433
35434   * float32x2_t vcreate_f32 (uint64_t)
35435
35436   * poly16x4_t vcreate_p16 (uint64_t)
35437
35438   * poly8x8_t vcreate_p8 (uint64_t)
35439
354406.57.6.49 Set all lanes to the same value
35441.........................................
35442
35443   * uint32x2_t vdup_n_u32 (uint32_t)
35444     _Form of expected instruction(s):_ 'vdup.32 D0, R0'
35445
35446   * uint16x4_t vdup_n_u16 (uint16_t)
35447     _Form of expected instruction(s):_ 'vdup.16 D0, R0'
35448
35449   * uint8x8_t vdup_n_u8 (uint8_t)
35450     _Form of expected instruction(s):_ 'vdup.8 D0, R0'
35451
35452   * int32x2_t vdup_n_s32 (int32_t)
35453     _Form of expected instruction(s):_ 'vdup.32 D0, R0'
35454
35455   * int16x4_t vdup_n_s16 (int16_t)
35456     _Form of expected instruction(s):_ 'vdup.16 D0, R0'
35457
35458   * int8x8_t vdup_n_s8 (int8_t)
35459     _Form of expected instruction(s):_ 'vdup.8 D0, R0'
35460
35461   * float32x2_t vdup_n_f32 (float32_t)
35462     _Form of expected instruction(s):_ 'vdup.32 D0, R0'
35463
35464   * poly16x4_t vdup_n_p16 (poly16_t)
35465     _Form of expected instruction(s):_ 'vdup.16 D0, R0'
35466
35467   * poly8x8_t vdup_n_p8 (poly8_t)
35468     _Form of expected instruction(s):_ 'vdup.8 D0, R0'
35469
35470   * poly64x1_t vdup_n_p64 (poly64_t)
35471
35472   * uint64x1_t vdup_n_u64 (uint64_t)
35473
35474   * int64x1_t vdup_n_s64 (int64_t)
35475
35476   * poly64x2_t vdupq_n_p64 (poly64_t)
35477
35478   * uint32x4_t vdupq_n_u32 (uint32_t)
35479     _Form of expected instruction(s):_ 'vdup.32 Q0, R0'
35480
35481   * uint16x8_t vdupq_n_u16 (uint16_t)
35482     _Form of expected instruction(s):_ 'vdup.16 Q0, R0'
35483
35484   * uint8x16_t vdupq_n_u8 (uint8_t)
35485     _Form of expected instruction(s):_ 'vdup.8 Q0, R0'
35486
35487   * int32x4_t vdupq_n_s32 (int32_t)
35488     _Form of expected instruction(s):_ 'vdup.32 Q0, R0'
35489
35490   * int16x8_t vdupq_n_s16 (int16_t)
35491     _Form of expected instruction(s):_ 'vdup.16 Q0, R0'
35492
35493   * int8x16_t vdupq_n_s8 (int8_t)
35494     _Form of expected instruction(s):_ 'vdup.8 Q0, R0'
35495
35496   * float32x4_t vdupq_n_f32 (float32_t)
35497     _Form of expected instruction(s):_ 'vdup.32 Q0, R0'
35498
35499   * poly16x8_t vdupq_n_p16 (poly16_t)
35500     _Form of expected instruction(s):_ 'vdup.16 Q0, R0'
35501
35502   * poly8x16_t vdupq_n_p8 (poly8_t)
35503     _Form of expected instruction(s):_ 'vdup.8 Q0, R0'
35504
35505   * uint64x2_t vdupq_n_u64 (uint64_t)
35506
35507   * int64x2_t vdupq_n_s64 (int64_t)
35508
35509   * uint32x2_t vmov_n_u32 (uint32_t)
35510     _Form of expected instruction(s):_ 'vdup.32 D0, R0'
35511
35512   * uint16x4_t vmov_n_u16 (uint16_t)
35513     _Form of expected instruction(s):_ 'vdup.16 D0, R0'
35514
35515   * uint8x8_t vmov_n_u8 (uint8_t)
35516     _Form of expected instruction(s):_ 'vdup.8 D0, R0'
35517
35518   * int32x2_t vmov_n_s32 (int32_t)
35519     _Form of expected instruction(s):_ 'vdup.32 D0, R0'
35520
35521   * int16x4_t vmov_n_s16 (int16_t)
35522     _Form of expected instruction(s):_ 'vdup.16 D0, R0'
35523
35524   * int8x8_t vmov_n_s8 (int8_t)
35525     _Form of expected instruction(s):_ 'vdup.8 D0, R0'
35526
35527   * float32x2_t vmov_n_f32 (float32_t)
35528     _Form of expected instruction(s):_ 'vdup.32 D0, R0'
35529
35530   * poly16x4_t vmov_n_p16 (poly16_t)
35531     _Form of expected instruction(s):_ 'vdup.16 D0, R0'
35532
35533   * poly8x8_t vmov_n_p8 (poly8_t)
35534     _Form of expected instruction(s):_ 'vdup.8 D0, R0'
35535
35536   * uint64x1_t vmov_n_u64 (uint64_t)
35537
35538   * int64x1_t vmov_n_s64 (int64_t)
35539
35540   * uint32x4_t vmovq_n_u32 (uint32_t)
35541     _Form of expected instruction(s):_ 'vdup.32 Q0, R0'
35542
35543   * uint16x8_t vmovq_n_u16 (uint16_t)
35544     _Form of expected instruction(s):_ 'vdup.16 Q0, R0'
35545
35546   * uint8x16_t vmovq_n_u8 (uint8_t)
35547     _Form of expected instruction(s):_ 'vdup.8 Q0, R0'
35548
35549   * int32x4_t vmovq_n_s32 (int32_t)
35550     _Form of expected instruction(s):_ 'vdup.32 Q0, R0'
35551
35552   * int16x8_t vmovq_n_s16 (int16_t)
35553     _Form of expected instruction(s):_ 'vdup.16 Q0, R0'
35554
35555   * int8x16_t vmovq_n_s8 (int8_t)
35556     _Form of expected instruction(s):_ 'vdup.8 Q0, R0'
35557
35558   * float32x4_t vmovq_n_f32 (float32_t)
35559     _Form of expected instruction(s):_ 'vdup.32 Q0, R0'
35560
35561   * poly16x8_t vmovq_n_p16 (poly16_t)
35562     _Form of expected instruction(s):_ 'vdup.16 Q0, R0'
35563
35564   * poly8x16_t vmovq_n_p8 (poly8_t)
35565     _Form of expected instruction(s):_ 'vdup.8 Q0, R0'
35566
35567   * uint64x2_t vmovq_n_u64 (uint64_t)
35568
35569   * int64x2_t vmovq_n_s64 (int64_t)
35570
35571   * uint32x2_t vdup_lane_u32 (uint32x2_t, const int)
35572     _Form of expected instruction(s):_ 'vdup.32 D0, D0[0]'
35573
35574   * uint16x4_t vdup_lane_u16 (uint16x4_t, const int)
35575     _Form of expected instruction(s):_ 'vdup.16 D0, D0[0]'
35576
35577   * uint8x8_t vdup_lane_u8 (uint8x8_t, const int)
35578     _Form of expected instruction(s):_ 'vdup.8 D0, D0[0]'
35579
35580   * int32x2_t vdup_lane_s32 (int32x2_t, const int)
35581     _Form of expected instruction(s):_ 'vdup.32 D0, D0[0]'
35582
35583   * int16x4_t vdup_lane_s16 (int16x4_t, const int)
35584     _Form of expected instruction(s):_ 'vdup.16 D0, D0[0]'
35585
35586   * int8x8_t vdup_lane_s8 (int8x8_t, const int)
35587     _Form of expected instruction(s):_ 'vdup.8 D0, D0[0]'
35588
35589   * float32x2_t vdup_lane_f32 (float32x2_t, const int)
35590     _Form of expected instruction(s):_ 'vdup.32 D0, D0[0]'
35591
35592   * poly16x4_t vdup_lane_p16 (poly16x4_t, const int)
35593     _Form of expected instruction(s):_ 'vdup.16 D0, D0[0]'
35594
35595   * poly8x8_t vdup_lane_p8 (poly8x8_t, const int)
35596     _Form of expected instruction(s):_ 'vdup.8 D0, D0[0]'
35597
35598   * poly64x1_t vdup_lane_p64 (poly64x1_t, const int)
35599
35600   * uint64x1_t vdup_lane_u64 (uint64x1_t, const int)
35601
35602   * int64x1_t vdup_lane_s64 (int64x1_t, const int)
35603
35604   * uint32x4_t vdupq_lane_u32 (uint32x2_t, const int)
35605     _Form of expected instruction(s):_ 'vdup.32 Q0, D0[0]'
35606
35607   * uint16x8_t vdupq_lane_u16 (uint16x4_t, const int)
35608     _Form of expected instruction(s):_ 'vdup.16 Q0, D0[0]'
35609
35610   * uint8x16_t vdupq_lane_u8 (uint8x8_t, const int)
35611     _Form of expected instruction(s):_ 'vdup.8 Q0, D0[0]'
35612
35613   * int32x4_t vdupq_lane_s32 (int32x2_t, const int)
35614     _Form of expected instruction(s):_ 'vdup.32 Q0, D0[0]'
35615
35616   * int16x8_t vdupq_lane_s16 (int16x4_t, const int)
35617     _Form of expected instruction(s):_ 'vdup.16 Q0, D0[0]'
35618
35619   * int8x16_t vdupq_lane_s8 (int8x8_t, const int)
35620     _Form of expected instruction(s):_ 'vdup.8 Q0, D0[0]'
35621
35622   * float32x4_t vdupq_lane_f32 (float32x2_t, const int)
35623     _Form of expected instruction(s):_ 'vdup.32 Q0, D0[0]'
35624
35625   * poly16x8_t vdupq_lane_p16 (poly16x4_t, const int)
35626     _Form of expected instruction(s):_ 'vdup.16 Q0, D0[0]'
35627
35628   * poly8x16_t vdupq_lane_p8 (poly8x8_t, const int)
35629     _Form of expected instruction(s):_ 'vdup.8 Q0, D0[0]'
35630
35631   * poly64x2_t vdupq_lane_p64 (poly64x1_t, const int)
35632
35633   * uint64x2_t vdupq_lane_u64 (uint64x1_t, const int)
35634
35635   * int64x2_t vdupq_lane_s64 (int64x1_t, const int)
35636
356376.57.6.50 Combining vectors
35638...........................
35639
35640   * poly64x2_t vcombine_p64 (poly64x1_t, poly64x1_t)
35641
35642   * uint32x4_t vcombine_u32 (uint32x2_t, uint32x2_t)
35643
35644   * uint16x8_t vcombine_u16 (uint16x4_t, uint16x4_t)
35645
35646   * uint8x16_t vcombine_u8 (uint8x8_t, uint8x8_t)
35647
35648   * int32x4_t vcombine_s32 (int32x2_t, int32x2_t)
35649
35650   * int16x8_t vcombine_s16 (int16x4_t, int16x4_t)
35651
35652   * int8x16_t vcombine_s8 (int8x8_t, int8x8_t)
35653
35654   * uint64x2_t vcombine_u64 (uint64x1_t, uint64x1_t)
35655
35656   * int64x2_t vcombine_s64 (int64x1_t, int64x1_t)
35657
35658   * float32x4_t vcombine_f32 (float32x2_t, float32x2_t)
35659
35660   * poly16x8_t vcombine_p16 (poly16x4_t, poly16x4_t)
35661
35662   * poly8x16_t vcombine_p8 (poly8x8_t, poly8x8_t)
35663
356646.57.6.51 Splitting vectors
35665...........................
35666
35667   * poly64x1_t vget_high_p64 (poly64x2_t)
35668
35669   * uint32x2_t vget_high_u32 (uint32x4_t)
35670
35671   * uint16x4_t vget_high_u16 (uint16x8_t)
35672
35673   * uint8x8_t vget_high_u8 (uint8x16_t)
35674
35675   * int32x2_t vget_high_s32 (int32x4_t)
35676
35677   * int16x4_t vget_high_s16 (int16x8_t)
35678
35679   * int8x8_t vget_high_s8 (int8x16_t)
35680
35681   * uint64x1_t vget_high_u64 (uint64x2_t)
35682
35683   * int64x1_t vget_high_s64 (int64x2_t)
35684
35685   * float32x2_t vget_high_f32 (float32x4_t)
35686
35687   * poly16x4_t vget_high_p16 (poly16x8_t)
35688
35689   * poly8x8_t vget_high_p8 (poly8x16_t)
35690
35691   * uint32x2_t vget_low_u32 (uint32x4_t)
35692     _Form of expected instruction(s):_ 'vmov D0, D0'
35693
35694   * uint16x4_t vget_low_u16 (uint16x8_t)
35695     _Form of expected instruction(s):_ 'vmov D0, D0'
35696
35697   * uint8x8_t vget_low_u8 (uint8x16_t)
35698     _Form of expected instruction(s):_ 'vmov D0, D0'
35699
35700   * int32x2_t vget_low_s32 (int32x4_t)
35701     _Form of expected instruction(s):_ 'vmov D0, D0'
35702
35703   * int16x4_t vget_low_s16 (int16x8_t)
35704     _Form of expected instruction(s):_ 'vmov D0, D0'
35705
35706   * int8x8_t vget_low_s8 (int8x16_t)
35707     _Form of expected instruction(s):_ 'vmov D0, D0'
35708
35709   * float32x2_t vget_low_f32 (float32x4_t)
35710     _Form of expected instruction(s):_ 'vmov D0, D0'
35711
35712   * poly16x4_t vget_low_p16 (poly16x8_t)
35713     _Form of expected instruction(s):_ 'vmov D0, D0'
35714
35715   * poly8x8_t vget_low_p8 (poly8x16_t)
35716     _Form of expected instruction(s):_ 'vmov D0, D0'
35717
35718   * poly64x1_t vget_low_p64 (poly64x2_t)
35719
35720   * uint64x1_t vget_low_u64 (uint64x2_t)
35721
35722   * int64x1_t vget_low_s64 (int64x2_t)
35723
357246.57.6.52 Conversions
35725.....................
35726
35727   * float32x2_t vcvt_f32_u32 (uint32x2_t)
35728     _Form of expected instruction(s):_ 'vcvt.f32.u32 D0, D0'
35729
35730   * float32x2_t vcvt_f32_s32 (int32x2_t)
35731     _Form of expected instruction(s):_ 'vcvt.f32.s32 D0, D0'
35732
35733   * uint32x2_t vcvt_u32_f32 (float32x2_t)
35734     _Form of expected instruction(s):_ 'vcvt.u32.f32 D0, D0'
35735
35736   * int32x2_t vcvt_s32_f32 (float32x2_t)
35737     _Form of expected instruction(s):_ 'vcvt.s32.f32 D0, D0'
35738
35739   * float32x4_t vcvtq_f32_u32 (uint32x4_t)
35740     _Form of expected instruction(s):_ 'vcvt.f32.u32 Q0, Q0'
35741
35742   * float32x4_t vcvtq_f32_s32 (int32x4_t)
35743     _Form of expected instruction(s):_ 'vcvt.f32.s32 Q0, Q0'
35744
35745   * uint32x4_t vcvtq_u32_f32 (float32x4_t)
35746     _Form of expected instruction(s):_ 'vcvt.u32.f32 Q0, Q0'
35747
35748   * int32x4_t vcvtq_s32_f32 (float32x4_t)
35749     _Form of expected instruction(s):_ 'vcvt.s32.f32 Q0, Q0'
35750
35751   * float16x4_t vcvt_f16_f32 (float32x4_t)
35752     _Form of expected instruction(s):_ 'vcvt.f16.f32 D0, Q0'
35753
35754   * float32x4_t vcvt_f32_f16 (float16x4_t)
35755     _Form of expected instruction(s):_ 'vcvt.f32.f16 Q0, D0'
35756
35757   * float32x2_t vcvt_n_f32_u32 (uint32x2_t, const int)
35758     _Form of expected instruction(s):_ 'vcvt.f32.u32 D0, D0, #0'
35759
35760   * float32x2_t vcvt_n_f32_s32 (int32x2_t, const int)
35761     _Form of expected instruction(s):_ 'vcvt.f32.s32 D0, D0, #0'
35762
35763   * uint32x2_t vcvt_n_u32_f32 (float32x2_t, const int)
35764     _Form of expected instruction(s):_ 'vcvt.u32.f32 D0, D0, #0'
35765
35766   * int32x2_t vcvt_n_s32_f32 (float32x2_t, const int)
35767     _Form of expected instruction(s):_ 'vcvt.s32.f32 D0, D0, #0'
35768
35769   * float32x4_t vcvtq_n_f32_u32 (uint32x4_t, const int)
35770     _Form of expected instruction(s):_ 'vcvt.f32.u32 Q0, Q0, #0'
35771
35772   * float32x4_t vcvtq_n_f32_s32 (int32x4_t, const int)
35773     _Form of expected instruction(s):_ 'vcvt.f32.s32 Q0, Q0, #0'
35774
35775   * uint32x4_t vcvtq_n_u32_f32 (float32x4_t, const int)
35776     _Form of expected instruction(s):_ 'vcvt.u32.f32 Q0, Q0, #0'
35777
35778   * int32x4_t vcvtq_n_s32_f32 (float32x4_t, const int)
35779     _Form of expected instruction(s):_ 'vcvt.s32.f32 Q0, Q0, #0'
35780
357816.57.6.53 Move, single_opcode narrowing
35782.......................................
35783
35784   * uint32x2_t vmovn_u64 (uint64x2_t)
35785     _Form of expected instruction(s):_ 'vmovn.i64 D0, Q0'
35786
35787   * uint16x4_t vmovn_u32 (uint32x4_t)
35788     _Form of expected instruction(s):_ 'vmovn.i32 D0, Q0'
35789
35790   * uint8x8_t vmovn_u16 (uint16x8_t)
35791     _Form of expected instruction(s):_ 'vmovn.i16 D0, Q0'
35792
35793   * int32x2_t vmovn_s64 (int64x2_t)
35794     _Form of expected instruction(s):_ 'vmovn.i64 D0, Q0'
35795
35796   * int16x4_t vmovn_s32 (int32x4_t)
35797     _Form of expected instruction(s):_ 'vmovn.i32 D0, Q0'
35798
35799   * int8x8_t vmovn_s16 (int16x8_t)
35800     _Form of expected instruction(s):_ 'vmovn.i16 D0, Q0'
35801
35802   * uint32x2_t vqmovn_u64 (uint64x2_t)
35803     _Form of expected instruction(s):_ 'vqmovn.u64 D0, Q0'
35804
35805   * uint16x4_t vqmovn_u32 (uint32x4_t)
35806     _Form of expected instruction(s):_ 'vqmovn.u32 D0, Q0'
35807
35808   * uint8x8_t vqmovn_u16 (uint16x8_t)
35809     _Form of expected instruction(s):_ 'vqmovn.u16 D0, Q0'
35810
35811   * int32x2_t vqmovn_s64 (int64x2_t)
35812     _Form of expected instruction(s):_ 'vqmovn.s64 D0, Q0'
35813
35814   * int16x4_t vqmovn_s32 (int32x4_t)
35815     _Form of expected instruction(s):_ 'vqmovn.s32 D0, Q0'
35816
35817   * int8x8_t vqmovn_s16 (int16x8_t)
35818     _Form of expected instruction(s):_ 'vqmovn.s16 D0, Q0'
35819
35820   * uint32x2_t vqmovun_s64 (int64x2_t)
35821     _Form of expected instruction(s):_ 'vqmovun.s64 D0, Q0'
35822
35823   * uint16x4_t vqmovun_s32 (int32x4_t)
35824     _Form of expected instruction(s):_ 'vqmovun.s32 D0, Q0'
35825
35826   * uint8x8_t vqmovun_s16 (int16x8_t)
35827     _Form of expected instruction(s):_ 'vqmovun.s16 D0, Q0'
35828
358296.57.6.54 Move, single_opcode long
35830..................................
35831
35832   * uint64x2_t vmovl_u32 (uint32x2_t)
35833     _Form of expected instruction(s):_ 'vmovl.u32 Q0, D0'
35834
35835   * uint32x4_t vmovl_u16 (uint16x4_t)
35836     _Form of expected instruction(s):_ 'vmovl.u16 Q0, D0'
35837
35838   * uint16x8_t vmovl_u8 (uint8x8_t)
35839     _Form of expected instruction(s):_ 'vmovl.u8 Q0, D0'
35840
35841   * int64x2_t vmovl_s32 (int32x2_t)
35842     _Form of expected instruction(s):_ 'vmovl.s32 Q0, D0'
35843
35844   * int32x4_t vmovl_s16 (int16x4_t)
35845     _Form of expected instruction(s):_ 'vmovl.s16 Q0, D0'
35846
35847   * int16x8_t vmovl_s8 (int8x8_t)
35848     _Form of expected instruction(s):_ 'vmovl.s8 Q0, D0'
35849
358506.57.6.55 Table lookup
35851......................
35852
35853   * poly8x8_t vtbl1_p8 (poly8x8_t, uint8x8_t)
35854     _Form of expected instruction(s):_ 'vtbl.8 D0, {D0}, D0'
35855
35856   * int8x8_t vtbl1_s8 (int8x8_t, int8x8_t)
35857     _Form of expected instruction(s):_ 'vtbl.8 D0, {D0}, D0'
35858
35859   * uint8x8_t vtbl1_u8 (uint8x8_t, uint8x8_t)
35860     _Form of expected instruction(s):_ 'vtbl.8 D0, {D0}, D0'
35861
35862   * poly8x8_t vtbl2_p8 (poly8x8x2_t, uint8x8_t)
35863     _Form of expected instruction(s):_ 'vtbl.8 D0, {D0, D1}, D0'
35864
35865   * int8x8_t vtbl2_s8 (int8x8x2_t, int8x8_t)
35866     _Form of expected instruction(s):_ 'vtbl.8 D0, {D0, D1}, D0'
35867
35868   * uint8x8_t vtbl2_u8 (uint8x8x2_t, uint8x8_t)
35869     _Form of expected instruction(s):_ 'vtbl.8 D0, {D0, D1}, D0'
35870
35871   * poly8x8_t vtbl3_p8 (poly8x8x3_t, uint8x8_t)
35872     _Form of expected instruction(s):_ 'vtbl.8 D0, {D0, D1, D2}, D0'
35873
35874   * int8x8_t vtbl3_s8 (int8x8x3_t, int8x8_t)
35875     _Form of expected instruction(s):_ 'vtbl.8 D0, {D0, D1, D2}, D0'
35876
35877   * uint8x8_t vtbl3_u8 (uint8x8x3_t, uint8x8_t)
35878     _Form of expected instruction(s):_ 'vtbl.8 D0, {D0, D1, D2}, D0'
35879
35880   * poly8x8_t vtbl4_p8 (poly8x8x4_t, uint8x8_t)
35881     _Form of expected instruction(s):_ 'vtbl.8 D0, {D0, D1, D2, D3},
35882     D0'
35883
35884   * int8x8_t vtbl4_s8 (int8x8x4_t, int8x8_t)
35885     _Form of expected instruction(s):_ 'vtbl.8 D0, {D0, D1, D2, D3},
35886     D0'
35887
35888   * uint8x8_t vtbl4_u8 (uint8x8x4_t, uint8x8_t)
35889     _Form of expected instruction(s):_ 'vtbl.8 D0, {D0, D1, D2, D3},
35890     D0'
35891
358926.57.6.56 Extended table lookup
35893...............................
35894
35895   * poly8x8_t vtbx1_p8 (poly8x8_t, poly8x8_t, uint8x8_t)
35896     _Form of expected instruction(s):_ 'vtbx.8 D0, {D0}, D0'
35897
35898   * int8x8_t vtbx1_s8 (int8x8_t, int8x8_t, int8x8_t)
35899     _Form of expected instruction(s):_ 'vtbx.8 D0, {D0}, D0'
35900
35901   * uint8x8_t vtbx1_u8 (uint8x8_t, uint8x8_t, uint8x8_t)
35902     _Form of expected instruction(s):_ 'vtbx.8 D0, {D0}, D0'
35903
35904   * poly8x8_t vtbx2_p8 (poly8x8_t, poly8x8x2_t, uint8x8_t)
35905     _Form of expected instruction(s):_ 'vtbx.8 D0, {D0, D1}, D0'
35906
35907   * int8x8_t vtbx2_s8 (int8x8_t, int8x8x2_t, int8x8_t)
35908     _Form of expected instruction(s):_ 'vtbx.8 D0, {D0, D1}, D0'
35909
35910   * uint8x8_t vtbx2_u8 (uint8x8_t, uint8x8x2_t, uint8x8_t)
35911     _Form of expected instruction(s):_ 'vtbx.8 D0, {D0, D1}, D0'
35912
35913   * poly8x8_t vtbx3_p8 (poly8x8_t, poly8x8x3_t, uint8x8_t)
35914     _Form of expected instruction(s):_ 'vtbx.8 D0, {D0, D1, D2}, D0'
35915
35916   * int8x8_t vtbx3_s8 (int8x8_t, int8x8x3_t, int8x8_t)
35917     _Form of expected instruction(s):_ 'vtbx.8 D0, {D0, D1, D2}, D0'
35918
35919   * uint8x8_t vtbx3_u8 (uint8x8_t, uint8x8x3_t, uint8x8_t)
35920     _Form of expected instruction(s):_ 'vtbx.8 D0, {D0, D1, D2}, D0'
35921
35922   * poly8x8_t vtbx4_p8 (poly8x8_t, poly8x8x4_t, uint8x8_t)
35923     _Form of expected instruction(s):_ 'vtbx.8 D0, {D0, D1, D2, D3},
35924     D0'
35925
35926   * int8x8_t vtbx4_s8 (int8x8_t, int8x8x4_t, int8x8_t)
35927     _Form of expected instruction(s):_ 'vtbx.8 D0, {D0, D1, D2, D3},
35928     D0'
35929
35930   * uint8x8_t vtbx4_u8 (uint8x8_t, uint8x8x4_t, uint8x8_t)
35931     _Form of expected instruction(s):_ 'vtbx.8 D0, {D0, D1, D2, D3},
35932     D0'
35933
359346.57.6.57 Multiply, lane
35935........................
35936
35937   * float32x2_t vmul_lane_f32 (float32x2_t, float32x2_t, const int)
35938     _Form of expected instruction(s):_ 'vmul.f32 D0, D0, D0[0]'
35939
35940   * uint32x2_t vmul_lane_u32 (uint32x2_t, uint32x2_t, const int)
35941     _Form of expected instruction(s):_ 'vmul.i32 D0, D0, D0[0]'
35942
35943   * uint16x4_t vmul_lane_u16 (uint16x4_t, uint16x4_t, const int)
35944     _Form of expected instruction(s):_ 'vmul.i16 D0, D0, D0[0]'
35945
35946   * int32x2_t vmul_lane_s32 (int32x2_t, int32x2_t, const int)
35947     _Form of expected instruction(s):_ 'vmul.i32 D0, D0, D0[0]'
35948
35949   * int16x4_t vmul_lane_s16 (int16x4_t, int16x4_t, const int)
35950     _Form of expected instruction(s):_ 'vmul.i16 D0, D0, D0[0]'
35951
35952   * float32x4_t vmulq_lane_f32 (float32x4_t, float32x2_t, const int)
35953     _Form of expected instruction(s):_ 'vmul.f32 Q0, Q0, D0[0]'
35954
35955   * uint32x4_t vmulq_lane_u32 (uint32x4_t, uint32x2_t, const int)
35956     _Form of expected instruction(s):_ 'vmul.i32 Q0, Q0, D0[0]'
35957
35958   * uint16x8_t vmulq_lane_u16 (uint16x8_t, uint16x4_t, const int)
35959     _Form of expected instruction(s):_ 'vmul.i16 Q0, Q0, D0[0]'
35960
35961   * int32x4_t vmulq_lane_s32 (int32x4_t, int32x2_t, const int)
35962     _Form of expected instruction(s):_ 'vmul.i32 Q0, Q0, D0[0]'
35963
35964   * int16x8_t vmulq_lane_s16 (int16x8_t, int16x4_t, const int)
35965     _Form of expected instruction(s):_ 'vmul.i16 Q0, Q0, D0[0]'
35966
359676.57.6.58 Long multiply, lane
35968.............................
35969
35970   * uint64x2_t vmull_lane_u32 (uint32x2_t, uint32x2_t, const int)
35971     _Form of expected instruction(s):_ 'vmull.u32 Q0, D0, D0[0]'
35972
35973   * uint32x4_t vmull_lane_u16 (uint16x4_t, uint16x4_t, const int)
35974     _Form of expected instruction(s):_ 'vmull.u16 Q0, D0, D0[0]'
35975
35976   * int64x2_t vmull_lane_s32 (int32x2_t, int32x2_t, const int)
35977     _Form of expected instruction(s):_ 'vmull.s32 Q0, D0, D0[0]'
35978
35979   * int32x4_t vmull_lane_s16 (int16x4_t, int16x4_t, const int)
35980     _Form of expected instruction(s):_ 'vmull.s16 Q0, D0, D0[0]'
35981
359826.57.6.59 Saturating doubling long multiply, lane
35983.................................................
35984
35985   * int64x2_t vqdmull_lane_s32 (int32x2_t, int32x2_t, const int)
35986     _Form of expected instruction(s):_ 'vqdmull.s32 Q0, D0, D0[0]'
35987
35988   * int32x4_t vqdmull_lane_s16 (int16x4_t, int16x4_t, const int)
35989     _Form of expected instruction(s):_ 'vqdmull.s16 Q0, D0, D0[0]'
35990
359916.57.6.60 Saturating doubling multiply high, lane
35992.................................................
35993
35994   * int32x4_t vqdmulhq_lane_s32 (int32x4_t, int32x2_t, const int)
35995     _Form of expected instruction(s):_ 'vqdmulh.s32 Q0, Q0, D0[0]'
35996
35997   * int16x8_t vqdmulhq_lane_s16 (int16x8_t, int16x4_t, const int)
35998     _Form of expected instruction(s):_ 'vqdmulh.s16 Q0, Q0, D0[0]'
35999
36000   * int32x2_t vqdmulh_lane_s32 (int32x2_t, int32x2_t, const int)
36001     _Form of expected instruction(s):_ 'vqdmulh.s32 D0, D0, D0[0]'
36002
36003   * int16x4_t vqdmulh_lane_s16 (int16x4_t, int16x4_t, const int)
36004     _Form of expected instruction(s):_ 'vqdmulh.s16 D0, D0, D0[0]'
36005
36006   * int32x4_t vqrdmulhq_lane_s32 (int32x4_t, int32x2_t, const int)
36007     _Form of expected instruction(s):_ 'vqrdmulh.s32 Q0, Q0, D0[0]'
36008
36009   * int16x8_t vqrdmulhq_lane_s16 (int16x8_t, int16x4_t, const int)
36010     _Form of expected instruction(s):_ 'vqrdmulh.s16 Q0, Q0, D0[0]'
36011
36012   * int32x2_t vqrdmulh_lane_s32 (int32x2_t, int32x2_t, const int)
36013     _Form of expected instruction(s):_ 'vqrdmulh.s32 D0, D0, D0[0]'
36014
36015   * int16x4_t vqrdmulh_lane_s16 (int16x4_t, int16x4_t, const int)
36016     _Form of expected instruction(s):_ 'vqrdmulh.s16 D0, D0, D0[0]'
36017
360186.57.6.61 Multiply-accumulate, lane
36019...................................
36020
36021   * float32x2_t vmla_lane_f32 (float32x2_t, float32x2_t, float32x2_t,
36022     const int)
36023     _Form of expected instruction(s):_ 'vmla.f32 D0, D0, D0[0]'
36024
36025   * uint32x2_t vmla_lane_u32 (uint32x2_t, uint32x2_t, uint32x2_t, const
36026     int)
36027     _Form of expected instruction(s):_ 'vmla.i32 D0, D0, D0[0]'
36028
36029   * uint16x4_t vmla_lane_u16 (uint16x4_t, uint16x4_t, uint16x4_t, const
36030     int)
36031     _Form of expected instruction(s):_ 'vmla.i16 D0, D0, D0[0]'
36032
36033   * int32x2_t vmla_lane_s32 (int32x2_t, int32x2_t, int32x2_t, const
36034     int)
36035     _Form of expected instruction(s):_ 'vmla.i32 D0, D0, D0[0]'
36036
36037   * int16x4_t vmla_lane_s16 (int16x4_t, int16x4_t, int16x4_t, const
36038     int)
36039     _Form of expected instruction(s):_ 'vmla.i16 D0, D0, D0[0]'
36040
36041   * float32x4_t vmlaq_lane_f32 (float32x4_t, float32x4_t, float32x2_t,
36042     const int)
36043     _Form of expected instruction(s):_ 'vmla.f32 Q0, Q0, D0[0]'
36044
36045   * uint32x4_t vmlaq_lane_u32 (uint32x4_t, uint32x4_t, uint32x2_t,
36046     const int)
36047     _Form of expected instruction(s):_ 'vmla.i32 Q0, Q0, D0[0]'
36048
36049   * uint16x8_t vmlaq_lane_u16 (uint16x8_t, uint16x8_t, uint16x4_t,
36050     const int)
36051     _Form of expected instruction(s):_ 'vmla.i16 Q0, Q0, D0[0]'
36052
36053   * int32x4_t vmlaq_lane_s32 (int32x4_t, int32x4_t, int32x2_t, const
36054     int)
36055     _Form of expected instruction(s):_ 'vmla.i32 Q0, Q0, D0[0]'
36056
36057   * int16x8_t vmlaq_lane_s16 (int16x8_t, int16x8_t, int16x4_t, const
36058     int)
36059     _Form of expected instruction(s):_ 'vmla.i16 Q0, Q0, D0[0]'
36060
36061   * uint64x2_t vmlal_lane_u32 (uint64x2_t, uint32x2_t, uint32x2_t,
36062     const int)
36063     _Form of expected instruction(s):_ 'vmlal.u32 Q0, D0, D0[0]'
36064
36065   * uint32x4_t vmlal_lane_u16 (uint32x4_t, uint16x4_t, uint16x4_t,
36066     const int)
36067     _Form of expected instruction(s):_ 'vmlal.u16 Q0, D0, D0[0]'
36068
36069   * int64x2_t vmlal_lane_s32 (int64x2_t, int32x2_t, int32x2_t, const
36070     int)
36071     _Form of expected instruction(s):_ 'vmlal.s32 Q0, D0, D0[0]'
36072
36073   * int32x4_t vmlal_lane_s16 (int32x4_t, int16x4_t, int16x4_t, const
36074     int)
36075     _Form of expected instruction(s):_ 'vmlal.s16 Q0, D0, D0[0]'
36076
36077   * int64x2_t vqdmlal_lane_s32 (int64x2_t, int32x2_t, int32x2_t, const
36078     int)
36079     _Form of expected instruction(s):_ 'vqdmlal.s32 Q0, D0, D0[0]'
36080
36081   * int32x4_t vqdmlal_lane_s16 (int32x4_t, int16x4_t, int16x4_t, const
36082     int)
36083     _Form of expected instruction(s):_ 'vqdmlal.s16 Q0, D0, D0[0]'
36084
360856.57.6.62 Multiply-subtract, lane
36086.................................
36087
36088   * float32x2_t vmls_lane_f32 (float32x2_t, float32x2_t, float32x2_t,
36089     const int)
36090     _Form of expected instruction(s):_ 'vmls.f32 D0, D0, D0[0]'
36091
36092   * uint32x2_t vmls_lane_u32 (uint32x2_t, uint32x2_t, uint32x2_t, const
36093     int)
36094     _Form of expected instruction(s):_ 'vmls.i32 D0, D0, D0[0]'
36095
36096   * uint16x4_t vmls_lane_u16 (uint16x4_t, uint16x4_t, uint16x4_t, const
36097     int)
36098     _Form of expected instruction(s):_ 'vmls.i16 D0, D0, D0[0]'
36099
36100   * int32x2_t vmls_lane_s32 (int32x2_t, int32x2_t, int32x2_t, const
36101     int)
36102     _Form of expected instruction(s):_ 'vmls.i32 D0, D0, D0[0]'
36103
36104   * int16x4_t vmls_lane_s16 (int16x4_t, int16x4_t, int16x4_t, const
36105     int)
36106     _Form of expected instruction(s):_ 'vmls.i16 D0, D0, D0[0]'
36107
36108   * float32x4_t vmlsq_lane_f32 (float32x4_t, float32x4_t, float32x2_t,
36109     const int)
36110     _Form of expected instruction(s):_ 'vmls.f32 Q0, Q0, D0[0]'
36111
36112   * uint32x4_t vmlsq_lane_u32 (uint32x4_t, uint32x4_t, uint32x2_t,
36113     const int)
36114     _Form of expected instruction(s):_ 'vmls.i32 Q0, Q0, D0[0]'
36115
36116   * uint16x8_t vmlsq_lane_u16 (uint16x8_t, uint16x8_t, uint16x4_t,
36117     const int)
36118     _Form of expected instruction(s):_ 'vmls.i16 Q0, Q0, D0[0]'
36119
36120   * int32x4_t vmlsq_lane_s32 (int32x4_t, int32x4_t, int32x2_t, const
36121     int)
36122     _Form of expected instruction(s):_ 'vmls.i32 Q0, Q0, D0[0]'
36123
36124   * int16x8_t vmlsq_lane_s16 (int16x8_t, int16x8_t, int16x4_t, const
36125     int)
36126     _Form of expected instruction(s):_ 'vmls.i16 Q0, Q0, D0[0]'
36127
36128   * uint64x2_t vmlsl_lane_u32 (uint64x2_t, uint32x2_t, uint32x2_t,
36129     const int)
36130     _Form of expected instruction(s):_ 'vmlsl.u32 Q0, D0, D0[0]'
36131
36132   * uint32x4_t vmlsl_lane_u16 (uint32x4_t, uint16x4_t, uint16x4_t,
36133     const int)
36134     _Form of expected instruction(s):_ 'vmlsl.u16 Q0, D0, D0[0]'
36135
36136   * int64x2_t vmlsl_lane_s32 (int64x2_t, int32x2_t, int32x2_t, const
36137     int)
36138     _Form of expected instruction(s):_ 'vmlsl.s32 Q0, D0, D0[0]'
36139
36140   * int32x4_t vmlsl_lane_s16 (int32x4_t, int16x4_t, int16x4_t, const
36141     int)
36142     _Form of expected instruction(s):_ 'vmlsl.s16 Q0, D0, D0[0]'
36143
36144   * int64x2_t vqdmlsl_lane_s32 (int64x2_t, int32x2_t, int32x2_t, const
36145     int)
36146     _Form of expected instruction(s):_ 'vqdmlsl.s32 Q0, D0, D0[0]'
36147
36148   * int32x4_t vqdmlsl_lane_s16 (int32x4_t, int16x4_t, int16x4_t, const
36149     int)
36150     _Form of expected instruction(s):_ 'vqdmlsl.s16 Q0, D0, D0[0]'
36151
361526.57.6.63 Vector multiply by scalar
36153...................................
36154
36155   * float32x2_t vmul_n_f32 (float32x2_t, float32_t)
36156     _Form of expected instruction(s):_ 'vmul.f32 D0, D0, D0[0]'
36157
36158   * uint32x2_t vmul_n_u32 (uint32x2_t, uint32_t)
36159     _Form of expected instruction(s):_ 'vmul.i32 D0, D0, D0[0]'
36160
36161   * uint16x4_t vmul_n_u16 (uint16x4_t, uint16_t)
36162     _Form of expected instruction(s):_ 'vmul.i16 D0, D0, D0[0]'
36163
36164   * int32x2_t vmul_n_s32 (int32x2_t, int32_t)
36165     _Form of expected instruction(s):_ 'vmul.i32 D0, D0, D0[0]'
36166
36167   * int16x4_t vmul_n_s16 (int16x4_t, int16_t)
36168     _Form of expected instruction(s):_ 'vmul.i16 D0, D0, D0[0]'
36169
36170   * float32x4_t vmulq_n_f32 (float32x4_t, float32_t)
36171     _Form of expected instruction(s):_ 'vmul.f32 Q0, Q0, D0[0]'
36172
36173   * uint32x4_t vmulq_n_u32 (uint32x4_t, uint32_t)
36174     _Form of expected instruction(s):_ 'vmul.i32 Q0, Q0, D0[0]'
36175
36176   * uint16x8_t vmulq_n_u16 (uint16x8_t, uint16_t)
36177     _Form of expected instruction(s):_ 'vmul.i16 Q0, Q0, D0[0]'
36178
36179   * int32x4_t vmulq_n_s32 (int32x4_t, int32_t)
36180     _Form of expected instruction(s):_ 'vmul.i32 Q0, Q0, D0[0]'
36181
36182   * int16x8_t vmulq_n_s16 (int16x8_t, int16_t)
36183     _Form of expected instruction(s):_ 'vmul.i16 Q0, Q0, D0[0]'
36184
361856.57.6.64 Vector long multiply by scalar
36186........................................
36187
36188   * uint64x2_t vmull_n_u32 (uint32x2_t, uint32_t)
36189     _Form of expected instruction(s):_ 'vmull.u32 Q0, D0, D0[0]'
36190
36191   * uint32x4_t vmull_n_u16 (uint16x4_t, uint16_t)
36192     _Form of expected instruction(s):_ 'vmull.u16 Q0, D0, D0[0]'
36193
36194   * int64x2_t vmull_n_s32 (int32x2_t, int32_t)
36195     _Form of expected instruction(s):_ 'vmull.s32 Q0, D0, D0[0]'
36196
36197   * int32x4_t vmull_n_s16 (int16x4_t, int16_t)
36198     _Form of expected instruction(s):_ 'vmull.s16 Q0, D0, D0[0]'
36199
362006.57.6.65 Vector saturating doubling long multiply by scalar
36201............................................................
36202
36203   * int64x2_t vqdmull_n_s32 (int32x2_t, int32_t)
36204     _Form of expected instruction(s):_ 'vqdmull.s32 Q0, D0, D0[0]'
36205
36206   * int32x4_t vqdmull_n_s16 (int16x4_t, int16_t)
36207     _Form of expected instruction(s):_ 'vqdmull.s16 Q0, D0, D0[0]'
36208
362096.57.6.66 Vector saturating doubling multiply high by scalar
36210............................................................
36211
36212   * int32x4_t vqdmulhq_n_s32 (int32x4_t, int32_t)
36213     _Form of expected instruction(s):_ 'vqdmulh.s32 Q0, Q0, D0[0]'
36214
36215   * int16x8_t vqdmulhq_n_s16 (int16x8_t, int16_t)
36216     _Form of expected instruction(s):_ 'vqdmulh.s16 Q0, Q0, D0[0]'
36217
36218   * int32x2_t vqdmulh_n_s32 (int32x2_t, int32_t)
36219     _Form of expected instruction(s):_ 'vqdmulh.s32 D0, D0, D0[0]'
36220
36221   * int16x4_t vqdmulh_n_s16 (int16x4_t, int16_t)
36222     _Form of expected instruction(s):_ 'vqdmulh.s16 D0, D0, D0[0]'
36223
36224   * int32x4_t vqrdmulhq_n_s32 (int32x4_t, int32_t)
36225     _Form of expected instruction(s):_ 'vqrdmulh.s32 Q0, Q0, D0[0]'
36226
36227   * int16x8_t vqrdmulhq_n_s16 (int16x8_t, int16_t)
36228     _Form of expected instruction(s):_ 'vqrdmulh.s16 Q0, Q0, D0[0]'
36229
36230   * int32x2_t vqrdmulh_n_s32 (int32x2_t, int32_t)
36231     _Form of expected instruction(s):_ 'vqrdmulh.s32 D0, D0, D0[0]'
36232
36233   * int16x4_t vqrdmulh_n_s16 (int16x4_t, int16_t)
36234     _Form of expected instruction(s):_ 'vqrdmulh.s16 D0, D0, D0[0]'
36235
362366.57.6.67 Vector multiply-accumulate by scalar
36237..............................................
36238
36239   * float32x2_t vmla_n_f32 (float32x2_t, float32x2_t, float32_t)
36240     _Form of expected instruction(s):_ 'vmla.f32 D0, D0, D0[0]'
36241
36242   * uint32x2_t vmla_n_u32 (uint32x2_t, uint32x2_t, uint32_t)
36243     _Form of expected instruction(s):_ 'vmla.i32 D0, D0, D0[0]'
36244
36245   * uint16x4_t vmla_n_u16 (uint16x4_t, uint16x4_t, uint16_t)
36246     _Form of expected instruction(s):_ 'vmla.i16 D0, D0, D0[0]'
36247
36248   * int32x2_t vmla_n_s32 (int32x2_t, int32x2_t, int32_t)
36249     _Form of expected instruction(s):_ 'vmla.i32 D0, D0, D0[0]'
36250
36251   * int16x4_t vmla_n_s16 (int16x4_t, int16x4_t, int16_t)
36252     _Form of expected instruction(s):_ 'vmla.i16 D0, D0, D0[0]'
36253
36254   * float32x4_t vmlaq_n_f32 (float32x4_t, float32x4_t, float32_t)
36255     _Form of expected instruction(s):_ 'vmla.f32 Q0, Q0, D0[0]'
36256
36257   * uint32x4_t vmlaq_n_u32 (uint32x4_t, uint32x4_t, uint32_t)
36258     _Form of expected instruction(s):_ 'vmla.i32 Q0, Q0, D0[0]'
36259
36260   * uint16x8_t vmlaq_n_u16 (uint16x8_t, uint16x8_t, uint16_t)
36261     _Form of expected instruction(s):_ 'vmla.i16 Q0, Q0, D0[0]'
36262
36263   * int32x4_t vmlaq_n_s32 (int32x4_t, int32x4_t, int32_t)
36264     _Form of expected instruction(s):_ 'vmla.i32 Q0, Q0, D0[0]'
36265
36266   * int16x8_t vmlaq_n_s16 (int16x8_t, int16x8_t, int16_t)
36267     _Form of expected instruction(s):_ 'vmla.i16 Q0, Q0, D0[0]'
36268
36269   * uint64x2_t vmlal_n_u32 (uint64x2_t, uint32x2_t, uint32_t)
36270     _Form of expected instruction(s):_ 'vmlal.u32 Q0, D0, D0[0]'
36271
36272   * uint32x4_t vmlal_n_u16 (uint32x4_t, uint16x4_t, uint16_t)
36273     _Form of expected instruction(s):_ 'vmlal.u16 Q0, D0, D0[0]'
36274
36275   * int64x2_t vmlal_n_s32 (int64x2_t, int32x2_t, int32_t)
36276     _Form of expected instruction(s):_ 'vmlal.s32 Q0, D0, D0[0]'
36277
36278   * int32x4_t vmlal_n_s16 (int32x4_t, int16x4_t, int16_t)
36279     _Form of expected instruction(s):_ 'vmlal.s16 Q0, D0, D0[0]'
36280
36281   * int64x2_t vqdmlal_n_s32 (int64x2_t, int32x2_t, int32_t)
36282     _Form of expected instruction(s):_ 'vqdmlal.s32 Q0, D0, D0[0]'
36283
36284   * int32x4_t vqdmlal_n_s16 (int32x4_t, int16x4_t, int16_t)
36285     _Form of expected instruction(s):_ 'vqdmlal.s16 Q0, D0, D0[0]'
36286
362876.57.6.68 Vector multiply-subtract by scalar
36288............................................
36289
36290   * float32x2_t vmls_n_f32 (float32x2_t, float32x2_t, float32_t)
36291     _Form of expected instruction(s):_ 'vmls.f32 D0, D0, D0[0]'
36292
36293   * uint32x2_t vmls_n_u32 (uint32x2_t, uint32x2_t, uint32_t)
36294     _Form of expected instruction(s):_ 'vmls.i32 D0, D0, D0[0]'
36295
36296   * uint16x4_t vmls_n_u16 (uint16x4_t, uint16x4_t, uint16_t)
36297     _Form of expected instruction(s):_ 'vmls.i16 D0, D0, D0[0]'
36298
36299   * int32x2_t vmls_n_s32 (int32x2_t, int32x2_t, int32_t)
36300     _Form of expected instruction(s):_ 'vmls.i32 D0, D0, D0[0]'
36301
36302   * int16x4_t vmls_n_s16 (int16x4_t, int16x4_t, int16_t)
36303     _Form of expected instruction(s):_ 'vmls.i16 D0, D0, D0[0]'
36304
36305   * float32x4_t vmlsq_n_f32 (float32x4_t, float32x4_t, float32_t)
36306     _Form of expected instruction(s):_ 'vmls.f32 Q0, Q0, D0[0]'
36307
36308   * uint32x4_t vmlsq_n_u32 (uint32x4_t, uint32x4_t, uint32_t)
36309     _Form of expected instruction(s):_ 'vmls.i32 Q0, Q0, D0[0]'
36310
36311   * uint16x8_t vmlsq_n_u16 (uint16x8_t, uint16x8_t, uint16_t)
36312     _Form of expected instruction(s):_ 'vmls.i16 Q0, Q0, D0[0]'
36313
36314   * int32x4_t vmlsq_n_s32 (int32x4_t, int32x4_t, int32_t)
36315     _Form of expected instruction(s):_ 'vmls.i32 Q0, Q0, D0[0]'
36316
36317   * int16x8_t vmlsq_n_s16 (int16x8_t, int16x8_t, int16_t)
36318     _Form of expected instruction(s):_ 'vmls.i16 Q0, Q0, D0[0]'
36319
36320   * uint64x2_t vmlsl_n_u32 (uint64x2_t, uint32x2_t, uint32_t)
36321     _Form of expected instruction(s):_ 'vmlsl.u32 Q0, D0, D0[0]'
36322
36323   * uint32x4_t vmlsl_n_u16 (uint32x4_t, uint16x4_t, uint16_t)
36324     _Form of expected instruction(s):_ 'vmlsl.u16 Q0, D0, D0[0]'
36325
36326   * int64x2_t vmlsl_n_s32 (int64x2_t, int32x2_t, int32_t)
36327     _Form of expected instruction(s):_ 'vmlsl.s32 Q0, D0, D0[0]'
36328
36329   * int32x4_t vmlsl_n_s16 (int32x4_t, int16x4_t, int16_t)
36330     _Form of expected instruction(s):_ 'vmlsl.s16 Q0, D0, D0[0]'
36331
36332   * int64x2_t vqdmlsl_n_s32 (int64x2_t, int32x2_t, int32_t)
36333     _Form of expected instruction(s):_ 'vqdmlsl.s32 Q0, D0, D0[0]'
36334
36335   * int32x4_t vqdmlsl_n_s16 (int32x4_t, int16x4_t, int16_t)
36336     _Form of expected instruction(s):_ 'vqdmlsl.s16 Q0, D0, D0[0]'
36337
363386.57.6.69 Vector extract
36339........................
36340
36341   * poly64x1_t vext_p64 (poly64x1_t, poly64x1_t, const int)
36342     _Form of expected instruction(s):_ 'vext.64 D0, D0, D0, #0'
36343
36344   * uint32x2_t vext_u32 (uint32x2_t, uint32x2_t, const int)
36345     _Form of expected instruction(s):_ 'vext.32 D0, D0, D0, #0'
36346
36347   * uint16x4_t vext_u16 (uint16x4_t, uint16x4_t, const int)
36348     _Form of expected instruction(s):_ 'vext.16 D0, D0, D0, #0'
36349
36350   * uint8x8_t vext_u8 (uint8x8_t, uint8x8_t, const int)
36351     _Form of expected instruction(s):_ 'vext.8 D0, D0, D0, #0'
36352
36353   * int32x2_t vext_s32 (int32x2_t, int32x2_t, const int)
36354     _Form of expected instruction(s):_ 'vext.32 D0, D0, D0, #0'
36355
36356   * int16x4_t vext_s16 (int16x4_t, int16x4_t, const int)
36357     _Form of expected instruction(s):_ 'vext.16 D0, D0, D0, #0'
36358
36359   * int8x8_t vext_s8 (int8x8_t, int8x8_t, const int)
36360     _Form of expected instruction(s):_ 'vext.8 D0, D0, D0, #0'
36361
36362   * uint64x1_t vext_u64 (uint64x1_t, uint64x1_t, const int)
36363     _Form of expected instruction(s):_ 'vext.64 D0, D0, D0, #0'
36364
36365   * int64x1_t vext_s64 (int64x1_t, int64x1_t, const int)
36366     _Form of expected instruction(s):_ 'vext.64 D0, D0, D0, #0'
36367
36368   * float32x2_t vext_f32 (float32x2_t, float32x2_t, const int)
36369     _Form of expected instruction(s):_ 'vext.32 D0, D0, D0, #0'
36370
36371   * poly16x4_t vext_p16 (poly16x4_t, poly16x4_t, const int)
36372     _Form of expected instruction(s):_ 'vext.16 D0, D0, D0, #0'
36373
36374   * poly8x8_t vext_p8 (poly8x8_t, poly8x8_t, const int)
36375     _Form of expected instruction(s):_ 'vext.8 D0, D0, D0, #0'
36376
36377   * poly64x2_t vextq_p64 (poly64x2_t, poly64x2_t, const int)
36378     _Form of expected instruction(s):_ 'vext.64 Q0, Q0, Q0, #0'
36379
36380   * uint32x4_t vextq_u32 (uint32x4_t, uint32x4_t, const int)
36381     _Form of expected instruction(s):_ 'vext.32 Q0, Q0, Q0, #0'
36382
36383   * uint16x8_t vextq_u16 (uint16x8_t, uint16x8_t, const int)
36384     _Form of expected instruction(s):_ 'vext.16 Q0, Q0, Q0, #0'
36385
36386   * uint8x16_t vextq_u8 (uint8x16_t, uint8x16_t, const int)
36387     _Form of expected instruction(s):_ 'vext.8 Q0, Q0, Q0, #0'
36388
36389   * int32x4_t vextq_s32 (int32x4_t, int32x4_t, const int)
36390     _Form of expected instruction(s):_ 'vext.32 Q0, Q0, Q0, #0'
36391
36392   * int16x8_t vextq_s16 (int16x8_t, int16x8_t, const int)
36393     _Form of expected instruction(s):_ 'vext.16 Q0, Q0, Q0, #0'
36394
36395   * int8x16_t vextq_s8 (int8x16_t, int8x16_t, const int)
36396     _Form of expected instruction(s):_ 'vext.8 Q0, Q0, Q0, #0'
36397
36398   * uint64x2_t vextq_u64 (uint64x2_t, uint64x2_t, const int)
36399     _Form of expected instruction(s):_ 'vext.64 Q0, Q0, Q0, #0'
36400
36401   * int64x2_t vextq_s64 (int64x2_t, int64x2_t, const int)
36402     _Form of expected instruction(s):_ 'vext.64 Q0, Q0, Q0, #0'
36403
36404   * float32x4_t vextq_f32 (float32x4_t, float32x4_t, const int)
36405     _Form of expected instruction(s):_ 'vext.32 Q0, Q0, Q0, #0'
36406
36407   * poly16x8_t vextq_p16 (poly16x8_t, poly16x8_t, const int)
36408     _Form of expected instruction(s):_ 'vext.16 Q0, Q0, Q0, #0'
36409
36410   * poly8x16_t vextq_p8 (poly8x16_t, poly8x16_t, const int)
36411     _Form of expected instruction(s):_ 'vext.8 Q0, Q0, Q0, #0'
36412
364136.57.6.70 Reverse elements
36414..........................
36415
36416   * uint32x2_t vrev64_u32 (uint32x2_t)
36417     _Form of expected instruction(s):_ 'vrev64.32 D0, D0'
36418
36419   * uint16x4_t vrev64_u16 (uint16x4_t)
36420     _Form of expected instruction(s):_ 'vrev64.16 D0, D0'
36421
36422   * uint8x8_t vrev64_u8 (uint8x8_t)
36423     _Form of expected instruction(s):_ 'vrev64.8 D0, D0'
36424
36425   * int32x2_t vrev64_s32 (int32x2_t)
36426     _Form of expected instruction(s):_ 'vrev64.32 D0, D0'
36427
36428   * int16x4_t vrev64_s16 (int16x4_t)
36429     _Form of expected instruction(s):_ 'vrev64.16 D0, D0'
36430
36431   * int8x8_t vrev64_s8 (int8x8_t)
36432     _Form of expected instruction(s):_ 'vrev64.8 D0, D0'
36433
36434   * float32x2_t vrev64_f32 (float32x2_t)
36435     _Form of expected instruction(s):_ 'vrev64.32 D0, D0'
36436
36437   * poly16x4_t vrev64_p16 (poly16x4_t)
36438     _Form of expected instruction(s):_ 'vrev64.16 D0, D0'
36439
36440   * poly8x8_t vrev64_p8 (poly8x8_t)
36441     _Form of expected instruction(s):_ 'vrev64.8 D0, D0'
36442
36443   * uint32x4_t vrev64q_u32 (uint32x4_t)
36444     _Form of expected instruction(s):_ 'vrev64.32 Q0, Q0'
36445
36446   * uint16x8_t vrev64q_u16 (uint16x8_t)
36447     _Form of expected instruction(s):_ 'vrev64.16 Q0, Q0'
36448
36449   * uint8x16_t vrev64q_u8 (uint8x16_t)
36450     _Form of expected instruction(s):_ 'vrev64.8 Q0, Q0'
36451
36452   * int32x4_t vrev64q_s32 (int32x4_t)
36453     _Form of expected instruction(s):_ 'vrev64.32 Q0, Q0'
36454
36455   * int16x8_t vrev64q_s16 (int16x8_t)
36456     _Form of expected instruction(s):_ 'vrev64.16 Q0, Q0'
36457
36458   * int8x16_t vrev64q_s8 (int8x16_t)
36459     _Form of expected instruction(s):_ 'vrev64.8 Q0, Q0'
36460
36461   * float32x4_t vrev64q_f32 (float32x4_t)
36462     _Form of expected instruction(s):_ 'vrev64.32 Q0, Q0'
36463
36464   * poly16x8_t vrev64q_p16 (poly16x8_t)
36465     _Form of expected instruction(s):_ 'vrev64.16 Q0, Q0'
36466
36467   * poly8x16_t vrev64q_p8 (poly8x16_t)
36468     _Form of expected instruction(s):_ 'vrev64.8 Q0, Q0'
36469
36470   * uint16x4_t vrev32_u16 (uint16x4_t)
36471     _Form of expected instruction(s):_ 'vrev32.16 D0, D0'
36472
36473   * int16x4_t vrev32_s16 (int16x4_t)
36474     _Form of expected instruction(s):_ 'vrev32.16 D0, D0'
36475
36476   * uint8x8_t vrev32_u8 (uint8x8_t)
36477     _Form of expected instruction(s):_ 'vrev32.8 D0, D0'
36478
36479   * int8x8_t vrev32_s8 (int8x8_t)
36480     _Form of expected instruction(s):_ 'vrev32.8 D0, D0'
36481
36482   * poly16x4_t vrev32_p16 (poly16x4_t)
36483     _Form of expected instruction(s):_ 'vrev32.16 D0, D0'
36484
36485   * poly8x8_t vrev32_p8 (poly8x8_t)
36486     _Form of expected instruction(s):_ 'vrev32.8 D0, D0'
36487
36488   * uint16x8_t vrev32q_u16 (uint16x8_t)
36489     _Form of expected instruction(s):_ 'vrev32.16 Q0, Q0'
36490
36491   * int16x8_t vrev32q_s16 (int16x8_t)
36492     _Form of expected instruction(s):_ 'vrev32.16 Q0, Q0'
36493
36494   * uint8x16_t vrev32q_u8 (uint8x16_t)
36495     _Form of expected instruction(s):_ 'vrev32.8 Q0, Q0'
36496
36497   * int8x16_t vrev32q_s8 (int8x16_t)
36498     _Form of expected instruction(s):_ 'vrev32.8 Q0, Q0'
36499
36500   * poly16x8_t vrev32q_p16 (poly16x8_t)
36501     _Form of expected instruction(s):_ 'vrev32.16 Q0, Q0'
36502
36503   * poly8x16_t vrev32q_p8 (poly8x16_t)
36504     _Form of expected instruction(s):_ 'vrev32.8 Q0, Q0'
36505
36506   * uint8x8_t vrev16_u8 (uint8x8_t)
36507     _Form of expected instruction(s):_ 'vrev16.8 D0, D0'
36508
36509   * int8x8_t vrev16_s8 (int8x8_t)
36510     _Form of expected instruction(s):_ 'vrev16.8 D0, D0'
36511
36512   * poly8x8_t vrev16_p8 (poly8x8_t)
36513     _Form of expected instruction(s):_ 'vrev16.8 D0, D0'
36514
36515   * uint8x16_t vrev16q_u8 (uint8x16_t)
36516     _Form of expected instruction(s):_ 'vrev16.8 Q0, Q0'
36517
36518   * int8x16_t vrev16q_s8 (int8x16_t)
36519     _Form of expected instruction(s):_ 'vrev16.8 Q0, Q0'
36520
36521   * poly8x16_t vrev16q_p8 (poly8x16_t)
36522     _Form of expected instruction(s):_ 'vrev16.8 Q0, Q0'
36523
365246.57.6.71 Bit selection
36525.......................
36526
36527   * poly64x1_t vbsl_p64 (uint64x1_t, poly64x1_t, poly64x1_t)
36528     _Form of expected instruction(s):_ 'vbsl D0, D0, D0' _or_ 'vbit D0,
36529     D0, D0' _or_ 'vbif D0, D0, D0'
36530
36531   * uint32x2_t vbsl_u32 (uint32x2_t, uint32x2_t, uint32x2_t)
36532     _Form of expected instruction(s):_ 'vbsl D0, D0, D0' _or_ 'vbit D0,
36533     D0, D0' _or_ 'vbif D0, D0, D0'
36534
36535   * uint16x4_t vbsl_u16 (uint16x4_t, uint16x4_t, uint16x4_t)
36536     _Form of expected instruction(s):_ 'vbsl D0, D0, D0' _or_ 'vbit D0,
36537     D0, D0' _or_ 'vbif D0, D0, D0'
36538
36539   * uint8x8_t vbsl_u8 (uint8x8_t, uint8x8_t, uint8x8_t)
36540     _Form of expected instruction(s):_ 'vbsl D0, D0, D0' _or_ 'vbit D0,
36541     D0, D0' _or_ 'vbif D0, D0, D0'
36542
36543   * int32x2_t vbsl_s32 (uint32x2_t, int32x2_t, int32x2_t)
36544     _Form of expected instruction(s):_ 'vbsl D0, D0, D0' _or_ 'vbit D0,
36545     D0, D0' _or_ 'vbif D0, D0, D0'
36546
36547   * int16x4_t vbsl_s16 (uint16x4_t, int16x4_t, int16x4_t)
36548     _Form of expected instruction(s):_ 'vbsl D0, D0, D0' _or_ 'vbit D0,
36549     D0, D0' _or_ 'vbif D0, D0, D0'
36550
36551   * int8x8_t vbsl_s8 (uint8x8_t, int8x8_t, int8x8_t)
36552     _Form of expected instruction(s):_ 'vbsl D0, D0, D0' _or_ 'vbit D0,
36553     D0, D0' _or_ 'vbif D0, D0, D0'
36554
36555   * uint64x1_t vbsl_u64 (uint64x1_t, uint64x1_t, uint64x1_t)
36556     _Form of expected instruction(s):_ 'vbsl D0, D0, D0' _or_ 'vbit D0,
36557     D0, D0' _or_ 'vbif D0, D0, D0'
36558
36559   * int64x1_t vbsl_s64 (uint64x1_t, int64x1_t, int64x1_t)
36560     _Form of expected instruction(s):_ 'vbsl D0, D0, D0' _or_ 'vbit D0,
36561     D0, D0' _or_ 'vbif D0, D0, D0'
36562
36563   * float32x2_t vbsl_f32 (uint32x2_t, float32x2_t, float32x2_t)
36564     _Form of expected instruction(s):_ 'vbsl D0, D0, D0' _or_ 'vbit D0,
36565     D0, D0' _or_ 'vbif D0, D0, D0'
36566
36567   * poly16x4_t vbsl_p16 (uint16x4_t, poly16x4_t, poly16x4_t)
36568     _Form of expected instruction(s):_ 'vbsl D0, D0, D0' _or_ 'vbit D0,
36569     D0, D0' _or_ 'vbif D0, D0, D0'
36570
36571   * poly8x8_t vbsl_p8 (uint8x8_t, poly8x8_t, poly8x8_t)
36572     _Form of expected instruction(s):_ 'vbsl D0, D0, D0' _or_ 'vbit D0,
36573     D0, D0' _or_ 'vbif D0, D0, D0'
36574
36575   * poly64x2_t vbslq_p64 (uint64x2_t, poly64x2_t, poly64x2_t)
36576     _Form of expected instruction(s):_ 'vbsl Q0, Q0, Q0' _or_ 'vbit Q0,
36577     Q0, Q0' _or_ 'vbif Q0, Q0, Q0'
36578
36579   * uint32x4_t vbslq_u32 (uint32x4_t, uint32x4_t, uint32x4_t)
36580     _Form of expected instruction(s):_ 'vbsl Q0, Q0, Q0' _or_ 'vbit Q0,
36581     Q0, Q0' _or_ 'vbif Q0, Q0, Q0'
36582
36583   * uint16x8_t vbslq_u16 (uint16x8_t, uint16x8_t, uint16x8_t)
36584     _Form of expected instruction(s):_ 'vbsl Q0, Q0, Q0' _or_ 'vbit Q0,
36585     Q0, Q0' _or_ 'vbif Q0, Q0, Q0'
36586
36587   * uint8x16_t vbslq_u8 (uint8x16_t, uint8x16_t, uint8x16_t)
36588     _Form of expected instruction(s):_ 'vbsl Q0, Q0, Q0' _or_ 'vbit Q0,
36589     Q0, Q0' _or_ 'vbif Q0, Q0, Q0'
36590
36591   * int32x4_t vbslq_s32 (uint32x4_t, int32x4_t, int32x4_t)
36592     _Form of expected instruction(s):_ 'vbsl Q0, Q0, Q0' _or_ 'vbit Q0,
36593     Q0, Q0' _or_ 'vbif Q0, Q0, Q0'
36594
36595   * int16x8_t vbslq_s16 (uint16x8_t, int16x8_t, int16x8_t)
36596     _Form of expected instruction(s):_ 'vbsl Q0, Q0, Q0' _or_ 'vbit Q0,
36597     Q0, Q0' _or_ 'vbif Q0, Q0, Q0'
36598
36599   * int8x16_t vbslq_s8 (uint8x16_t, int8x16_t, int8x16_t)
36600     _Form of expected instruction(s):_ 'vbsl Q0, Q0, Q0' _or_ 'vbit Q0,
36601     Q0, Q0' _or_ 'vbif Q0, Q0, Q0'
36602
36603   * uint64x2_t vbslq_u64 (uint64x2_t, uint64x2_t, uint64x2_t)
36604     _Form of expected instruction(s):_ 'vbsl Q0, Q0, Q0' _or_ 'vbit Q0,
36605     Q0, Q0' _or_ 'vbif Q0, Q0, Q0'
36606
36607   * int64x2_t vbslq_s64 (uint64x2_t, int64x2_t, int64x2_t)
36608     _Form of expected instruction(s):_ 'vbsl Q0, Q0, Q0' _or_ 'vbit Q0,
36609     Q0, Q0' _or_ 'vbif Q0, Q0, Q0'
36610
36611   * float32x4_t vbslq_f32 (uint32x4_t, float32x4_t, float32x4_t)
36612     _Form of expected instruction(s):_ 'vbsl Q0, Q0, Q0' _or_ 'vbit Q0,
36613     Q0, Q0' _or_ 'vbif Q0, Q0, Q0'
36614
36615   * poly16x8_t vbslq_p16 (uint16x8_t, poly16x8_t, poly16x8_t)
36616     _Form of expected instruction(s):_ 'vbsl Q0, Q0, Q0' _or_ 'vbit Q0,
36617     Q0, Q0' _or_ 'vbif Q0, Q0, Q0'
36618
36619   * poly8x16_t vbslq_p8 (uint8x16_t, poly8x16_t, poly8x16_t)
36620     _Form of expected instruction(s):_ 'vbsl Q0, Q0, Q0' _or_ 'vbit Q0,
36621     Q0, Q0' _or_ 'vbif Q0, Q0, Q0'
36622
366236.57.6.72 Transpose elements
36624............................
36625
36626   * uint16x4x2_t vtrn_u16 (uint16x4_t, uint16x4_t)
36627     _Form of expected instruction(s):_ 'vtrn.16 D0, D1'
36628
36629   * uint8x8x2_t vtrn_u8 (uint8x8_t, uint8x8_t)
36630     _Form of expected instruction(s):_ 'vtrn.8 D0, D1'
36631
36632   * int16x4x2_t vtrn_s16 (int16x4_t, int16x4_t)
36633     _Form of expected instruction(s):_ 'vtrn.16 D0, D1'
36634
36635   * int8x8x2_t vtrn_s8 (int8x8_t, int8x8_t)
36636     _Form of expected instruction(s):_ 'vtrn.8 D0, D1'
36637
36638   * poly16x4x2_t vtrn_p16 (poly16x4_t, poly16x4_t)
36639     _Form of expected instruction(s):_ 'vtrn.16 D0, D1'
36640
36641   * poly8x8x2_t vtrn_p8 (poly8x8_t, poly8x8_t)
36642     _Form of expected instruction(s):_ 'vtrn.8 D0, D1'
36643
36644   * float32x2x2_t vtrn_f32 (float32x2_t, float32x2_t)
36645     _Form of expected instruction(s):_ 'vuzp.32 D0, D1'
36646
36647   * uint32x2x2_t vtrn_u32 (uint32x2_t, uint32x2_t)
36648     _Form of expected instruction(s):_ 'vuzp.32 D0, D1'
36649
36650   * int32x2x2_t vtrn_s32 (int32x2_t, int32x2_t)
36651     _Form of expected instruction(s):_ 'vuzp.32 D0, D1'
36652
36653   * uint32x4x2_t vtrnq_u32 (uint32x4_t, uint32x4_t)
36654     _Form of expected instruction(s):_ 'vtrn.32 Q0, Q1'
36655
36656   * uint16x8x2_t vtrnq_u16 (uint16x8_t, uint16x8_t)
36657     _Form of expected instruction(s):_ 'vtrn.16 Q0, Q1'
36658
36659   * uint8x16x2_t vtrnq_u8 (uint8x16_t, uint8x16_t)
36660     _Form of expected instruction(s):_ 'vtrn.8 Q0, Q1'
36661
36662   * int32x4x2_t vtrnq_s32 (int32x4_t, int32x4_t)
36663     _Form of expected instruction(s):_ 'vtrn.32 Q0, Q1'
36664
36665   * int16x8x2_t vtrnq_s16 (int16x8_t, int16x8_t)
36666     _Form of expected instruction(s):_ 'vtrn.16 Q0, Q1'
36667
36668   * int8x16x2_t vtrnq_s8 (int8x16_t, int8x16_t)
36669     _Form of expected instruction(s):_ 'vtrn.8 Q0, Q1'
36670
36671   * float32x4x2_t vtrnq_f32 (float32x4_t, float32x4_t)
36672     _Form of expected instruction(s):_ 'vtrn.32 Q0, Q1'
36673
36674   * poly16x8x2_t vtrnq_p16 (poly16x8_t, poly16x8_t)
36675     _Form of expected instruction(s):_ 'vtrn.16 Q0, Q1'
36676
36677   * poly8x16x2_t vtrnq_p8 (poly8x16_t, poly8x16_t)
36678     _Form of expected instruction(s):_ 'vtrn.8 Q0, Q1'
36679
366806.57.6.73 Zip elements
36681......................
36682
36683   * uint16x4x2_t vzip_u16 (uint16x4_t, uint16x4_t)
36684     _Form of expected instruction(s):_ 'vzip.16 D0, D1'
36685
36686   * uint8x8x2_t vzip_u8 (uint8x8_t, uint8x8_t)
36687     _Form of expected instruction(s):_ 'vzip.8 D0, D1'
36688
36689   * int16x4x2_t vzip_s16 (int16x4_t, int16x4_t)
36690     _Form of expected instruction(s):_ 'vzip.16 D0, D1'
36691
36692   * int8x8x2_t vzip_s8 (int8x8_t, int8x8_t)
36693     _Form of expected instruction(s):_ 'vzip.8 D0, D1'
36694
36695   * poly16x4x2_t vzip_p16 (poly16x4_t, poly16x4_t)
36696     _Form of expected instruction(s):_ 'vzip.16 D0, D1'
36697
36698   * poly8x8x2_t vzip_p8 (poly8x8_t, poly8x8_t)
36699     _Form of expected instruction(s):_ 'vzip.8 D0, D1'
36700
36701   * float32x2x2_t vzip_f32 (float32x2_t, float32x2_t)
36702     _Form of expected instruction(s):_ 'vuzp.32 D0, D1'
36703
36704   * uint32x2x2_t vzip_u32 (uint32x2_t, uint32x2_t)
36705     _Form of expected instruction(s):_ 'vuzp.32 D0, D1'
36706
36707   * int32x2x2_t vzip_s32 (int32x2_t, int32x2_t)
36708     _Form of expected instruction(s):_ 'vuzp.32 D0, D1'
36709
36710   * uint32x4x2_t vzipq_u32 (uint32x4_t, uint32x4_t)
36711     _Form of expected instruction(s):_ 'vzip.32 Q0, Q1'
36712
36713   * uint16x8x2_t vzipq_u16 (uint16x8_t, uint16x8_t)
36714     _Form of expected instruction(s):_ 'vzip.16 Q0, Q1'
36715
36716   * uint8x16x2_t vzipq_u8 (uint8x16_t, uint8x16_t)
36717     _Form of expected instruction(s):_ 'vzip.8 Q0, Q1'
36718
36719   * int32x4x2_t vzipq_s32 (int32x4_t, int32x4_t)
36720     _Form of expected instruction(s):_ 'vzip.32 Q0, Q1'
36721
36722   * int16x8x2_t vzipq_s16 (int16x8_t, int16x8_t)
36723     _Form of expected instruction(s):_ 'vzip.16 Q0, Q1'
36724
36725   * int8x16x2_t vzipq_s8 (int8x16_t, int8x16_t)
36726     _Form of expected instruction(s):_ 'vzip.8 Q0, Q1'
36727
36728   * float32x4x2_t vzipq_f32 (float32x4_t, float32x4_t)
36729     _Form of expected instruction(s):_ 'vzip.32 Q0, Q1'
36730
36731   * poly16x8x2_t vzipq_p16 (poly16x8_t, poly16x8_t)
36732     _Form of expected instruction(s):_ 'vzip.16 Q0, Q1'
36733
36734   * poly8x16x2_t vzipq_p8 (poly8x16_t, poly8x16_t)
36735     _Form of expected instruction(s):_ 'vzip.8 Q0, Q1'
36736
367376.57.6.74 Unzip elements
36738........................
36739
36740   * uint32x2x2_t vuzp_u32 (uint32x2_t, uint32x2_t)
36741     _Form of expected instruction(s):_ 'vuzp.32 D0, D1'
36742
36743   * uint16x4x2_t vuzp_u16 (uint16x4_t, uint16x4_t)
36744     _Form of expected instruction(s):_ 'vuzp.16 D0, D1'
36745
36746   * uint8x8x2_t vuzp_u8 (uint8x8_t, uint8x8_t)
36747     _Form of expected instruction(s):_ 'vuzp.8 D0, D1'
36748
36749   * int32x2x2_t vuzp_s32 (int32x2_t, int32x2_t)
36750     _Form of expected instruction(s):_ 'vuzp.32 D0, D1'
36751
36752   * int16x4x2_t vuzp_s16 (int16x4_t, int16x4_t)
36753     _Form of expected instruction(s):_ 'vuzp.16 D0, D1'
36754
36755   * int8x8x2_t vuzp_s8 (int8x8_t, int8x8_t)
36756     _Form of expected instruction(s):_ 'vuzp.8 D0, D1'
36757
36758   * float32x2x2_t vuzp_f32 (float32x2_t, float32x2_t)
36759     _Form of expected instruction(s):_ 'vuzp.32 D0, D1'
36760
36761   * poly16x4x2_t vuzp_p16 (poly16x4_t, poly16x4_t)
36762     _Form of expected instruction(s):_ 'vuzp.16 D0, D1'
36763
36764   * poly8x8x2_t vuzp_p8 (poly8x8_t, poly8x8_t)
36765     _Form of expected instruction(s):_ 'vuzp.8 D0, D1'
36766
36767   * uint32x4x2_t vuzpq_u32 (uint32x4_t, uint32x4_t)
36768     _Form of expected instruction(s):_ 'vuzp.32 Q0, Q1'
36769
36770   * uint16x8x2_t vuzpq_u16 (uint16x8_t, uint16x8_t)
36771     _Form of expected instruction(s):_ 'vuzp.16 Q0, Q1'
36772
36773   * uint8x16x2_t vuzpq_u8 (uint8x16_t, uint8x16_t)
36774     _Form of expected instruction(s):_ 'vuzp.8 Q0, Q1'
36775
36776   * int32x4x2_t vuzpq_s32 (int32x4_t, int32x4_t)
36777     _Form of expected instruction(s):_ 'vuzp.32 Q0, Q1'
36778
36779   * int16x8x2_t vuzpq_s16 (int16x8_t, int16x8_t)
36780     _Form of expected instruction(s):_ 'vuzp.16 Q0, Q1'
36781
36782   * int8x16x2_t vuzpq_s8 (int8x16_t, int8x16_t)
36783     _Form of expected instruction(s):_ 'vuzp.8 Q0, Q1'
36784
36785   * float32x4x2_t vuzpq_f32 (float32x4_t, float32x4_t)
36786     _Form of expected instruction(s):_ 'vuzp.32 Q0, Q1'
36787
36788   * poly16x8x2_t vuzpq_p16 (poly16x8_t, poly16x8_t)
36789     _Form of expected instruction(s):_ 'vuzp.16 Q0, Q1'
36790
36791   * poly8x16x2_t vuzpq_p8 (poly8x16_t, poly8x16_t)
36792     _Form of expected instruction(s):_ 'vuzp.8 Q0, Q1'
36793
367946.57.6.75 Element/structure loads, VLD1 variants
36795................................................
36796
36797   * poly64x1_t vld1_p64 (const poly64_t *)
36798     _Form of expected instruction(s):_ 'vld1.64 {D0}, [R0]'
36799
36800   * uint32x2_t vld1_u32 (const uint32_t *)
36801     _Form of expected instruction(s):_ 'vld1.32 {D0}, [R0]'
36802
36803   * uint16x4_t vld1_u16 (const uint16_t *)
36804     _Form of expected instruction(s):_ 'vld1.16 {D0}, [R0]'
36805
36806   * uint8x8_t vld1_u8 (const uint8_t *)
36807     _Form of expected instruction(s):_ 'vld1.8 {D0}, [R0]'
36808
36809   * int32x2_t vld1_s32 (const int32_t *)
36810     _Form of expected instruction(s):_ 'vld1.32 {D0}, [R0]'
36811
36812   * int16x4_t vld1_s16 (const int16_t *)
36813     _Form of expected instruction(s):_ 'vld1.16 {D0}, [R0]'
36814
36815   * int8x8_t vld1_s8 (const int8_t *)
36816     _Form of expected instruction(s):_ 'vld1.8 {D0}, [R0]'
36817
36818   * uint64x1_t vld1_u64 (const uint64_t *)
36819     _Form of expected instruction(s):_ 'vld1.64 {D0}, [R0]'
36820
36821   * int64x1_t vld1_s64 (const int64_t *)
36822     _Form of expected instruction(s):_ 'vld1.64 {D0}, [R0]'
36823
36824   * float32x2_t vld1_f32 (const float32_t *)
36825     _Form of expected instruction(s):_ 'vld1.32 {D0}, [R0]'
36826
36827   * poly16x4_t vld1_p16 (const poly16_t *)
36828     _Form of expected instruction(s):_ 'vld1.16 {D0}, [R0]'
36829
36830   * poly8x8_t vld1_p8 (const poly8_t *)
36831     _Form of expected instruction(s):_ 'vld1.8 {D0}, [R0]'
36832
36833   * poly64x2_t vld1q_p64 (const poly64_t *)
36834     _Form of expected instruction(s):_ 'vld1.64 {D0, D1}, [R0]'
36835
36836   * uint32x4_t vld1q_u32 (const uint32_t *)
36837     _Form of expected instruction(s):_ 'vld1.32 {D0, D1}, [R0]'
36838
36839   * uint16x8_t vld1q_u16 (const uint16_t *)
36840     _Form of expected instruction(s):_ 'vld1.16 {D0, D1}, [R0]'
36841
36842   * uint8x16_t vld1q_u8 (const uint8_t *)
36843     _Form of expected instruction(s):_ 'vld1.8 {D0, D1}, [R0]'
36844
36845   * int32x4_t vld1q_s32 (const int32_t *)
36846     _Form of expected instruction(s):_ 'vld1.32 {D0, D1}, [R0]'
36847
36848   * int16x8_t vld1q_s16 (const int16_t *)
36849     _Form of expected instruction(s):_ 'vld1.16 {D0, D1}, [R0]'
36850
36851   * int8x16_t vld1q_s8 (const int8_t *)
36852     _Form of expected instruction(s):_ 'vld1.8 {D0, D1}, [R0]'
36853
36854   * uint64x2_t vld1q_u64 (const uint64_t *)
36855     _Form of expected instruction(s):_ 'vld1.64 {D0, D1}, [R0]'
36856
36857   * int64x2_t vld1q_s64 (const int64_t *)
36858     _Form of expected instruction(s):_ 'vld1.64 {D0, D1}, [R0]'
36859
36860   * float32x4_t vld1q_f32 (const float32_t *)
36861     _Form of expected instruction(s):_ 'vld1.32 {D0, D1}, [R0]'
36862
36863   * poly16x8_t vld1q_p16 (const poly16_t *)
36864     _Form of expected instruction(s):_ 'vld1.16 {D0, D1}, [R0]'
36865
36866   * poly8x16_t vld1q_p8 (const poly8_t *)
36867     _Form of expected instruction(s):_ 'vld1.8 {D0, D1}, [R0]'
36868
36869   * uint32x2_t vld1_lane_u32 (const uint32_t *, uint32x2_t, const int)
36870     _Form of expected instruction(s):_ 'vld1.32 {D0[0]}, [R0]'
36871
36872   * uint16x4_t vld1_lane_u16 (const uint16_t *, uint16x4_t, const int)
36873     _Form of expected instruction(s):_ 'vld1.16 {D0[0]}, [R0]'
36874
36875   * uint8x8_t vld1_lane_u8 (const uint8_t *, uint8x8_t, const int)
36876     _Form of expected instruction(s):_ 'vld1.8 {D0[0]}, [R0]'
36877
36878   * int32x2_t vld1_lane_s32 (const int32_t *, int32x2_t, const int)
36879     _Form of expected instruction(s):_ 'vld1.32 {D0[0]}, [R0]'
36880
36881   * int16x4_t vld1_lane_s16 (const int16_t *, int16x4_t, const int)
36882     _Form of expected instruction(s):_ 'vld1.16 {D0[0]}, [R0]'
36883
36884   * int8x8_t vld1_lane_s8 (const int8_t *, int8x8_t, const int)
36885     _Form of expected instruction(s):_ 'vld1.8 {D0[0]}, [R0]'
36886
36887   * float32x2_t vld1_lane_f32 (const float32_t *, float32x2_t, const
36888     int)
36889     _Form of expected instruction(s):_ 'vld1.32 {D0[0]}, [R0]'
36890
36891   * poly16x4_t vld1_lane_p16 (const poly16_t *, poly16x4_t, const int)
36892     _Form of expected instruction(s):_ 'vld1.16 {D0[0]}, [R0]'
36893
36894   * poly8x8_t vld1_lane_p8 (const poly8_t *, poly8x8_t, const int)
36895     _Form of expected instruction(s):_ 'vld1.8 {D0[0]}, [R0]'
36896
36897   * poly64x1_t vld1_lane_p64 (const poly64_t *, poly64x1_t, const int)
36898     _Form of expected instruction(s):_ 'vld1.64 {D0}, [R0]'
36899
36900   * uint64x1_t vld1_lane_u64 (const uint64_t *, uint64x1_t, const int)
36901     _Form of expected instruction(s):_ 'vld1.64 {D0}, [R0]'
36902
36903   * int64x1_t vld1_lane_s64 (const int64_t *, int64x1_t, const int)
36904     _Form of expected instruction(s):_ 'vld1.64 {D0}, [R0]'
36905
36906   * uint32x4_t vld1q_lane_u32 (const uint32_t *, uint32x4_t, const int)
36907
36908     _Form of expected instruction(s):_ 'vld1.32 {D0[0]}, [R0]'
36909
36910   * uint16x8_t vld1q_lane_u16 (const uint16_t *, uint16x8_t, const int)
36911
36912     _Form of expected instruction(s):_ 'vld1.16 {D0[0]}, [R0]'
36913
36914   * uint8x16_t vld1q_lane_u8 (const uint8_t *, uint8x16_t, const int)
36915     _Form of expected instruction(s):_ 'vld1.8 {D0[0]}, [R0]'
36916
36917   * int32x4_t vld1q_lane_s32 (const int32_t *, int32x4_t, const int)
36918     _Form of expected instruction(s):_ 'vld1.32 {D0[0]}, [R0]'
36919
36920   * int16x8_t vld1q_lane_s16 (const int16_t *, int16x8_t, const int)
36921     _Form of expected instruction(s):_ 'vld1.16 {D0[0]}, [R0]'
36922
36923   * int8x16_t vld1q_lane_s8 (const int8_t *, int8x16_t, const int)
36924     _Form of expected instruction(s):_ 'vld1.8 {D0[0]}, [R0]'
36925
36926   * float32x4_t vld1q_lane_f32 (const float32_t *, float32x4_t, const
36927     int)
36928     _Form of expected instruction(s):_ 'vld1.32 {D0[0]}, [R0]'
36929
36930   * poly16x8_t vld1q_lane_p16 (const poly16_t *, poly16x8_t, const int)
36931
36932     _Form of expected instruction(s):_ 'vld1.16 {D0[0]}, [R0]'
36933
36934   * poly8x16_t vld1q_lane_p8 (const poly8_t *, poly8x16_t, const int)
36935     _Form of expected instruction(s):_ 'vld1.8 {D0[0]}, [R0]'
36936
36937   * poly64x2_t vld1q_lane_p64 (const poly64_t *, poly64x2_t, const int)
36938
36939     _Form of expected instruction(s):_ 'vld1.64 {D0}, [R0]'
36940
36941   * uint64x2_t vld1q_lane_u64 (const uint64_t *, uint64x2_t, const int)
36942
36943     _Form of expected instruction(s):_ 'vld1.64 {D0}, [R0]'
36944
36945   * int64x2_t vld1q_lane_s64 (const int64_t *, int64x2_t, const int)
36946     _Form of expected instruction(s):_ 'vld1.64 {D0}, [R0]'
36947
36948   * uint32x2_t vld1_dup_u32 (const uint32_t *)
36949     _Form of expected instruction(s):_ 'vld1.32 {D0[]}, [R0]'
36950
36951   * uint16x4_t vld1_dup_u16 (const uint16_t *)
36952     _Form of expected instruction(s):_ 'vld1.16 {D0[]}, [R0]'
36953
36954   * uint8x8_t vld1_dup_u8 (const uint8_t *)
36955     _Form of expected instruction(s):_ 'vld1.8 {D0[]}, [R0]'
36956
36957   * int32x2_t vld1_dup_s32 (const int32_t *)
36958     _Form of expected instruction(s):_ 'vld1.32 {D0[]}, [R0]'
36959
36960   * int16x4_t vld1_dup_s16 (const int16_t *)
36961     _Form of expected instruction(s):_ 'vld1.16 {D0[]}, [R0]'
36962
36963   * int8x8_t vld1_dup_s8 (const int8_t *)
36964     _Form of expected instruction(s):_ 'vld1.8 {D0[]}, [R0]'
36965
36966   * float32x2_t vld1_dup_f32 (const float32_t *)
36967     _Form of expected instruction(s):_ 'vld1.32 {D0[]}, [R0]'
36968
36969   * poly16x4_t vld1_dup_p16 (const poly16_t *)
36970     _Form of expected instruction(s):_ 'vld1.16 {D0[]}, [R0]'
36971
36972   * poly8x8_t vld1_dup_p8 (const poly8_t *)
36973     _Form of expected instruction(s):_ 'vld1.8 {D0[]}, [R0]'
36974
36975   * poly64x1_t vld1_dup_p64 (const poly64_t *)
36976     _Form of expected instruction(s):_ 'vld1.64 {D0}, [R0]'
36977
36978   * uint64x1_t vld1_dup_u64 (const uint64_t *)
36979     _Form of expected instruction(s):_ 'vld1.64 {D0}, [R0]'
36980
36981   * int64x1_t vld1_dup_s64 (const int64_t *)
36982     _Form of expected instruction(s):_ 'vld1.64 {D0}, [R0]'
36983
36984   * uint32x4_t vld1q_dup_u32 (const uint32_t *)
36985     _Form of expected instruction(s):_ 'vld1.32 {D0[], D1[]}, [R0]'
36986
36987   * uint16x8_t vld1q_dup_u16 (const uint16_t *)
36988     _Form of expected instruction(s):_ 'vld1.16 {D0[], D1[]}, [R0]'
36989
36990   * uint8x16_t vld1q_dup_u8 (const uint8_t *)
36991     _Form of expected instruction(s):_ 'vld1.8 {D0[], D1[]}, [R0]'
36992
36993   * int32x4_t vld1q_dup_s32 (const int32_t *)
36994     _Form of expected instruction(s):_ 'vld1.32 {D0[], D1[]}, [R0]'
36995
36996   * int16x8_t vld1q_dup_s16 (const int16_t *)
36997     _Form of expected instruction(s):_ 'vld1.16 {D0[], D1[]}, [R0]'
36998
36999   * int8x16_t vld1q_dup_s8 (const int8_t *)
37000     _Form of expected instruction(s):_ 'vld1.8 {D0[], D1[]}, [R0]'
37001
37002   * float32x4_t vld1q_dup_f32 (const float32_t *)
37003     _Form of expected instruction(s):_ 'vld1.32 {D0[], D1[]}, [R0]'
37004
37005   * poly16x8_t vld1q_dup_p16 (const poly16_t *)
37006     _Form of expected instruction(s):_ 'vld1.16 {D0[], D1[]}, [R0]'
37007
37008   * poly8x16_t vld1q_dup_p8 (const poly8_t *)
37009     _Form of expected instruction(s):_ 'vld1.8 {D0[], D1[]}, [R0]'
37010
37011   * poly64x2_t vld1q_dup_p64 (const poly64_t *)
37012     _Form of expected instruction(s):_ 'vld1.64 {D0}, [R0]'
37013
37014   * uint64x2_t vld1q_dup_u64 (const uint64_t *)
37015     _Form of expected instruction(s):_ 'vld1.64 {D0}, [R0]'
37016
37017   * int64x2_t vld1q_dup_s64 (const int64_t *)
37018     _Form of expected instruction(s):_ 'vld1.64 {D0}, [R0]'
37019
370206.57.6.76 Element/structure stores, VST1 variants
37021.................................................
37022
37023   * void vst1_p64 (poly64_t *, poly64x1_t)
37024     _Form of expected instruction(s):_ 'vst1.64 {D0}, [R0]'
37025
37026   * void vst1_u32 (uint32_t *, uint32x2_t)
37027     _Form of expected instruction(s):_ 'vst1.32 {D0}, [R0]'
37028
37029   * void vst1_u16 (uint16_t *, uint16x4_t)
37030     _Form of expected instruction(s):_ 'vst1.16 {D0}, [R0]'
37031
37032   * void vst1_u8 (uint8_t *, uint8x8_t)
37033     _Form of expected instruction(s):_ 'vst1.8 {D0}, [R0]'
37034
37035   * void vst1_s32 (int32_t *, int32x2_t)
37036     _Form of expected instruction(s):_ 'vst1.32 {D0}, [R0]'
37037
37038   * void vst1_s16 (int16_t *, int16x4_t)
37039     _Form of expected instruction(s):_ 'vst1.16 {D0}, [R0]'
37040
37041   * void vst1_s8 (int8_t *, int8x8_t)
37042     _Form of expected instruction(s):_ 'vst1.8 {D0}, [R0]'
37043
37044   * void vst1_u64 (uint64_t *, uint64x1_t)
37045     _Form of expected instruction(s):_ 'vst1.64 {D0}, [R0]'
37046
37047   * void vst1_s64 (int64_t *, int64x1_t)
37048     _Form of expected instruction(s):_ 'vst1.64 {D0}, [R0]'
37049
37050   * void vst1_f32 (float32_t *, float32x2_t)
37051     _Form of expected instruction(s):_ 'vst1.32 {D0}, [R0]'
37052
37053   * void vst1_p16 (poly16_t *, poly16x4_t)
37054     _Form of expected instruction(s):_ 'vst1.16 {D0}, [R0]'
37055
37056   * void vst1_p8 (poly8_t *, poly8x8_t)
37057     _Form of expected instruction(s):_ 'vst1.8 {D0}, [R0]'
37058
37059   * void vst1q_p64 (poly64_t *, poly64x2_t)
37060     _Form of expected instruction(s):_ 'vst1.64 {D0, D1}, [R0]'
37061
37062   * void vst1q_u32 (uint32_t *, uint32x4_t)
37063     _Form of expected instruction(s):_ 'vst1.32 {D0, D1}, [R0]'
37064
37065   * void vst1q_u16 (uint16_t *, uint16x8_t)
37066     _Form of expected instruction(s):_ 'vst1.16 {D0, D1}, [R0]'
37067
37068   * void vst1q_u8 (uint8_t *, uint8x16_t)
37069     _Form of expected instruction(s):_ 'vst1.8 {D0, D1}, [R0]'
37070
37071   * void vst1q_s32 (int32_t *, int32x4_t)
37072     _Form of expected instruction(s):_ 'vst1.32 {D0, D1}, [R0]'
37073
37074   * void vst1q_s16 (int16_t *, int16x8_t)
37075     _Form of expected instruction(s):_ 'vst1.16 {D0, D1}, [R0]'
37076
37077   * void vst1q_s8 (int8_t *, int8x16_t)
37078     _Form of expected instruction(s):_ 'vst1.8 {D0, D1}, [R0]'
37079
37080   * void vst1q_u64 (uint64_t *, uint64x2_t)
37081     _Form of expected instruction(s):_ 'vst1.64 {D0, D1}, [R0]'
37082
37083   * void vst1q_s64 (int64_t *, int64x2_t)
37084     _Form of expected instruction(s):_ 'vst1.64 {D0, D1}, [R0]'
37085
37086   * void vst1q_f32 (float32_t *, float32x4_t)
37087     _Form of expected instruction(s):_ 'vst1.32 {D0, D1}, [R0]'
37088
37089   * void vst1q_p16 (poly16_t *, poly16x8_t)
37090     _Form of expected instruction(s):_ 'vst1.16 {D0, D1}, [R0]'
37091
37092   * void vst1q_p8 (poly8_t *, poly8x16_t)
37093     _Form of expected instruction(s):_ 'vst1.8 {D0, D1}, [R0]'
37094
37095   * void vst1_lane_u32 (uint32_t *, uint32x2_t, const int)
37096     _Form of expected instruction(s):_ 'vst1.32 {D0[0]}, [R0]'
37097
37098   * void vst1_lane_u16 (uint16_t *, uint16x4_t, const int)
37099     _Form of expected instruction(s):_ 'vst1.16 {D0[0]}, [R0]'
37100
37101   * void vst1_lane_u8 (uint8_t *, uint8x8_t, const int)
37102     _Form of expected instruction(s):_ 'vst1.8 {D0[0]}, [R0]'
37103
37104   * void vst1_lane_s32 (int32_t *, int32x2_t, const int)
37105     _Form of expected instruction(s):_ 'vst1.32 {D0[0]}, [R0]'
37106
37107   * void vst1_lane_s16 (int16_t *, int16x4_t, const int)
37108     _Form of expected instruction(s):_ 'vst1.16 {D0[0]}, [R0]'
37109
37110   * void vst1_lane_s8 (int8_t *, int8x8_t, const int)
37111     _Form of expected instruction(s):_ 'vst1.8 {D0[0]}, [R0]'
37112
37113   * void vst1_lane_f32 (float32_t *, float32x2_t, const int)
37114     _Form of expected instruction(s):_ 'vst1.32 {D0[0]}, [R0]'
37115
37116   * void vst1_lane_p16 (poly16_t *, poly16x4_t, const int)
37117     _Form of expected instruction(s):_ 'vst1.16 {D0[0]}, [R0]'
37118
37119   * void vst1_lane_p8 (poly8_t *, poly8x8_t, const int)
37120     _Form of expected instruction(s):_ 'vst1.8 {D0[0]}, [R0]'
37121
37122   * void vst1_lane_p64 (poly64_t *, poly64x1_t, const int)
37123     _Form of expected instruction(s):_ 'vst1.64 {D0}, [R0]'
37124
37125   * void vst1_lane_s64 (int64_t *, int64x1_t, const int)
37126     _Form of expected instruction(s):_ 'vst1.64 {D0}, [R0]'
37127
37128   * void vst1_lane_u64 (uint64_t *, uint64x1_t, const int)
37129     _Form of expected instruction(s):_ 'vst1.64 {D0}, [R0]'
37130
37131   * void vst1q_lane_u32 (uint32_t *, uint32x4_t, const int)
37132     _Form of expected instruction(s):_ 'vst1.32 {D0[0]}, [R0]'
37133
37134   * void vst1q_lane_u16 (uint16_t *, uint16x8_t, const int)
37135     _Form of expected instruction(s):_ 'vst1.16 {D0[0]}, [R0]'
37136
37137   * void vst1q_lane_u8 (uint8_t *, uint8x16_t, const int)
37138     _Form of expected instruction(s):_ 'vst1.8 {D0[0]}, [R0]'
37139
37140   * void vst1q_lane_s32 (int32_t *, int32x4_t, const int)
37141     _Form of expected instruction(s):_ 'vst1.32 {D0[0]}, [R0]'
37142
37143   * void vst1q_lane_s16 (int16_t *, int16x8_t, const int)
37144     _Form of expected instruction(s):_ 'vst1.16 {D0[0]}, [R0]'
37145
37146   * void vst1q_lane_s8 (int8_t *, int8x16_t, const int)
37147     _Form of expected instruction(s):_ 'vst1.8 {D0[0]}, [R0]'
37148
37149   * void vst1q_lane_f32 (float32_t *, float32x4_t, const int)
37150     _Form of expected instruction(s):_ 'vst1.32 {D0[0]}, [R0]'
37151
37152   * void vst1q_lane_p16 (poly16_t *, poly16x8_t, const int)
37153     _Form of expected instruction(s):_ 'vst1.16 {D0[0]}, [R0]'
37154
37155   * void vst1q_lane_p8 (poly8_t *, poly8x16_t, const int)
37156     _Form of expected instruction(s):_ 'vst1.8 {D0[0]}, [R0]'
37157
37158   * void vst1q_lane_p64 (poly64_t *, poly64x2_t, const int)
37159     _Form of expected instruction(s):_ 'vst1.64 {D0}, [R0]'
37160
37161   * void vst1q_lane_s64 (int64_t *, int64x2_t, const int)
37162     _Form of expected instruction(s):_ 'vst1.64 {D0}, [R0]'
37163
37164   * void vst1q_lane_u64 (uint64_t *, uint64x2_t, const int)
37165     _Form of expected instruction(s):_ 'vst1.64 {D0}, [R0]'
37166
371676.57.6.77 Element/structure loads, VLD2 variants
37168................................................
37169
37170   * uint32x2x2_t vld2_u32 (const uint32_t *)
37171     _Form of expected instruction(s):_ 'vld2.32 {D0, D1}, [R0]'
37172
37173   * uint16x4x2_t vld2_u16 (const uint16_t *)
37174     _Form of expected instruction(s):_ 'vld2.16 {D0, D1}, [R0]'
37175
37176   * uint8x8x2_t vld2_u8 (const uint8_t *)
37177     _Form of expected instruction(s):_ 'vld2.8 {D0, D1}, [R0]'
37178
37179   * int32x2x2_t vld2_s32 (const int32_t *)
37180     _Form of expected instruction(s):_ 'vld2.32 {D0, D1}, [R0]'
37181
37182   * int16x4x2_t vld2_s16 (const int16_t *)
37183     _Form of expected instruction(s):_ 'vld2.16 {D0, D1}, [R0]'
37184
37185   * int8x8x2_t vld2_s8 (const int8_t *)
37186     _Form of expected instruction(s):_ 'vld2.8 {D0, D1}, [R0]'
37187
37188   * float32x2x2_t vld2_f32 (const float32_t *)
37189     _Form of expected instruction(s):_ 'vld2.32 {D0, D1}, [R0]'
37190
37191   * poly16x4x2_t vld2_p16 (const poly16_t *)
37192     _Form of expected instruction(s):_ 'vld2.16 {D0, D1}, [R0]'
37193
37194   * poly8x8x2_t vld2_p8 (const poly8_t *)
37195     _Form of expected instruction(s):_ 'vld2.8 {D0, D1}, [R0]'
37196
37197   * poly64x1x2_t vld2_p64 (const poly64_t *)
37198     _Form of expected instruction(s):_ 'vld1.64 {D0, D1}, [R0]'
37199
37200   * uint64x1x2_t vld2_u64 (const uint64_t *)
37201     _Form of expected instruction(s):_ 'vld1.64 {D0, D1}, [R0]'
37202
37203   * int64x1x2_t vld2_s64 (const int64_t *)
37204     _Form of expected instruction(s):_ 'vld1.64 {D0, D1}, [R0]'
37205
37206   * uint32x4x2_t vld2q_u32 (const uint32_t *)
37207     _Form of expected instruction(s):_ 'vld2.32 {D0, D1}, [R0]'
37208
37209   * uint16x8x2_t vld2q_u16 (const uint16_t *)
37210     _Form of expected instruction(s):_ 'vld2.16 {D0, D1}, [R0]'
37211
37212   * uint8x16x2_t vld2q_u8 (const uint8_t *)
37213     _Form of expected instruction(s):_ 'vld2.8 {D0, D1}, [R0]'
37214
37215   * int32x4x2_t vld2q_s32 (const int32_t *)
37216     _Form of expected instruction(s):_ 'vld2.32 {D0, D1}, [R0]'
37217
37218   * int16x8x2_t vld2q_s16 (const int16_t *)
37219     _Form of expected instruction(s):_ 'vld2.16 {D0, D1}, [R0]'
37220
37221   * int8x16x2_t vld2q_s8 (const int8_t *)
37222     _Form of expected instruction(s):_ 'vld2.8 {D0, D1}, [R0]'
37223
37224   * float32x4x2_t vld2q_f32 (const float32_t *)
37225     _Form of expected instruction(s):_ 'vld2.32 {D0, D1}, [R0]'
37226
37227   * poly16x8x2_t vld2q_p16 (const poly16_t *)
37228     _Form of expected instruction(s):_ 'vld2.16 {D0, D1}, [R0]'
37229
37230   * poly8x16x2_t vld2q_p8 (const poly8_t *)
37231     _Form of expected instruction(s):_ 'vld2.8 {D0, D1}, [R0]'
37232
37233   * uint32x2x2_t vld2_lane_u32 (const uint32_t *, uint32x2x2_t, const
37234     int)
37235     _Form of expected instruction(s):_ 'vld2.32 {D0[0], D1[0]}, [R0]'
37236
37237   * uint16x4x2_t vld2_lane_u16 (const uint16_t *, uint16x4x2_t, const
37238     int)
37239     _Form of expected instruction(s):_ 'vld2.16 {D0[0], D1[0]}, [R0]'
37240
37241   * uint8x8x2_t vld2_lane_u8 (const uint8_t *, uint8x8x2_t, const int)
37242     _Form of expected instruction(s):_ 'vld2.8 {D0[0], D1[0]}, [R0]'
37243
37244   * int32x2x2_t vld2_lane_s32 (const int32_t *, int32x2x2_t, const int)
37245
37246     _Form of expected instruction(s):_ 'vld2.32 {D0[0], D1[0]}, [R0]'
37247
37248   * int16x4x2_t vld2_lane_s16 (const int16_t *, int16x4x2_t, const int)
37249
37250     _Form of expected instruction(s):_ 'vld2.16 {D0[0], D1[0]}, [R0]'
37251
37252   * int8x8x2_t vld2_lane_s8 (const int8_t *, int8x8x2_t, const int)
37253     _Form of expected instruction(s):_ 'vld2.8 {D0[0], D1[0]}, [R0]'
37254
37255   * float32x2x2_t vld2_lane_f32 (const float32_t *, float32x2x2_t,
37256     const int)
37257     _Form of expected instruction(s):_ 'vld2.32 {D0[0], D1[0]}, [R0]'
37258
37259   * poly16x4x2_t vld2_lane_p16 (const poly16_t *, poly16x4x2_t, const
37260     int)
37261     _Form of expected instruction(s):_ 'vld2.16 {D0[0], D1[0]}, [R0]'
37262
37263   * poly8x8x2_t vld2_lane_p8 (const poly8_t *, poly8x8x2_t, const int)
37264     _Form of expected instruction(s):_ 'vld2.8 {D0[0], D1[0]}, [R0]'
37265
37266   * int32x4x2_t vld2q_lane_s32 (const int32_t *, int32x4x2_t, const
37267     int)
37268     _Form of expected instruction(s):_ 'vld2.32 {D0[0], D1[0]}, [R0]'
37269
37270   * int16x8x2_t vld2q_lane_s16 (const int16_t *, int16x8x2_t, const
37271     int)
37272     _Form of expected instruction(s):_ 'vld2.16 {D0[0], D1[0]}, [R0]'
37273
37274   * uint32x4x2_t vld2q_lane_u32 (const uint32_t *, uint32x4x2_t, const
37275     int)
37276     _Form of expected instruction(s):_ 'vld2.32 {D0[0], D1[0]}, [R0]'
37277
37278   * uint16x8x2_t vld2q_lane_u16 (const uint16_t *, uint16x8x2_t, const
37279     int)
37280     _Form of expected instruction(s):_ 'vld2.16 {D0[0], D1[0]}, [R0]'
37281
37282   * float32x4x2_t vld2q_lane_f32 (const float32_t *, float32x4x2_t,
37283     const int)
37284     _Form of expected instruction(s):_ 'vld2.32 {D0[0], D1[0]}, [R0]'
37285
37286   * poly16x8x2_t vld2q_lane_p16 (const poly16_t *, poly16x8x2_t, const
37287     int)
37288     _Form of expected instruction(s):_ 'vld2.16 {D0[0], D1[0]}, [R0]'
37289
37290   * uint32x2x2_t vld2_dup_u32 (const uint32_t *)
37291     _Form of expected instruction(s):_ 'vld2.32 {D0[], D1[]}, [R0]'
37292
37293   * uint16x4x2_t vld2_dup_u16 (const uint16_t *)
37294     _Form of expected instruction(s):_ 'vld2.16 {D0[], D1[]}, [R0]'
37295
37296   * uint8x8x2_t vld2_dup_u8 (const uint8_t *)
37297     _Form of expected instruction(s):_ 'vld2.8 {D0[], D1[]}, [R0]'
37298
37299   * int32x2x2_t vld2_dup_s32 (const int32_t *)
37300     _Form of expected instruction(s):_ 'vld2.32 {D0[], D1[]}, [R0]'
37301
37302   * int16x4x2_t vld2_dup_s16 (const int16_t *)
37303     _Form of expected instruction(s):_ 'vld2.16 {D0[], D1[]}, [R0]'
37304
37305   * int8x8x2_t vld2_dup_s8 (const int8_t *)
37306     _Form of expected instruction(s):_ 'vld2.8 {D0[], D1[]}, [R0]'
37307
37308   * float32x2x2_t vld2_dup_f32 (const float32_t *)
37309     _Form of expected instruction(s):_ 'vld2.32 {D0[], D1[]}, [R0]'
37310
37311   * poly16x4x2_t vld2_dup_p16 (const poly16_t *)
37312     _Form of expected instruction(s):_ 'vld2.16 {D0[], D1[]}, [R0]'
37313
37314   * poly8x8x2_t vld2_dup_p8 (const poly8_t *)
37315     _Form of expected instruction(s):_ 'vld2.8 {D0[], D1[]}, [R0]'
37316
37317   * poly64x1x2_t vld2_dup_p64 (const poly64_t *)
37318     _Form of expected instruction(s):_ 'vld1.64 {D0, D1}, [R0]'
37319
37320   * uint64x1x2_t vld2_dup_u64 (const uint64_t *)
37321     _Form of expected instruction(s):_ 'vld1.64 {D0, D1}, [R0]'
37322
37323   * int64x1x2_t vld2_dup_s64 (const int64_t *)
37324     _Form of expected instruction(s):_ 'vld1.64 {D0, D1}, [R0]'
37325
373266.57.6.78 Element/structure stores, VST2 variants
37327.................................................
37328
37329   * void vst2_u32 (uint32_t *, uint32x2x2_t)
37330     _Form of expected instruction(s):_ 'vst2.32 {D0, D1}, [R0]'
37331
37332   * void vst2_u16 (uint16_t *, uint16x4x2_t)
37333     _Form of expected instruction(s):_ 'vst2.16 {D0, D1}, [R0]'
37334
37335   * void vst2_u8 (uint8_t *, uint8x8x2_t)
37336     _Form of expected instruction(s):_ 'vst2.8 {D0, D1}, [R0]'
37337
37338   * void vst2_s32 (int32_t *, int32x2x2_t)
37339     _Form of expected instruction(s):_ 'vst2.32 {D0, D1}, [R0]'
37340
37341   * void vst2_s16 (int16_t *, int16x4x2_t)
37342     _Form of expected instruction(s):_ 'vst2.16 {D0, D1}, [R0]'
37343
37344   * void vst2_s8 (int8_t *, int8x8x2_t)
37345     _Form of expected instruction(s):_ 'vst2.8 {D0, D1}, [R0]'
37346
37347   * void vst2_f32 (float32_t *, float32x2x2_t)
37348     _Form of expected instruction(s):_ 'vst2.32 {D0, D1}, [R0]'
37349
37350   * void vst2_p16 (poly16_t *, poly16x4x2_t)
37351     _Form of expected instruction(s):_ 'vst2.16 {D0, D1}, [R0]'
37352
37353   * void vst2_p8 (poly8_t *, poly8x8x2_t)
37354     _Form of expected instruction(s):_ 'vst2.8 {D0, D1}, [R0]'
37355
37356   * void vst2_p64 (poly64_t *, poly64x1x2_t)
37357     _Form of expected instruction(s):_ 'vst1.64 {D0, D1}, [R0]'
37358
37359   * void vst2_u64 (uint64_t *, uint64x1x2_t)
37360     _Form of expected instruction(s):_ 'vst1.64 {D0, D1}, [R0]'
37361
37362   * void vst2_s64 (int64_t *, int64x1x2_t)
37363     _Form of expected instruction(s):_ 'vst1.64 {D0, D1}, [R0]'
37364
37365   * void vst2q_u32 (uint32_t *, uint32x4x2_t)
37366     _Form of expected instruction(s):_ 'vst2.32 {D0, D1}, [R0]'
37367
37368   * void vst2q_u16 (uint16_t *, uint16x8x2_t)
37369     _Form of expected instruction(s):_ 'vst2.16 {D0, D1}, [R0]'
37370
37371   * void vst2q_u8 (uint8_t *, uint8x16x2_t)
37372     _Form of expected instruction(s):_ 'vst2.8 {D0, D1}, [R0]'
37373
37374   * void vst2q_s32 (int32_t *, int32x4x2_t)
37375     _Form of expected instruction(s):_ 'vst2.32 {D0, D1}, [R0]'
37376
37377   * void vst2q_s16 (int16_t *, int16x8x2_t)
37378     _Form of expected instruction(s):_ 'vst2.16 {D0, D1}, [R0]'
37379
37380   * void vst2q_s8 (int8_t *, int8x16x2_t)
37381     _Form of expected instruction(s):_ 'vst2.8 {D0, D1}, [R0]'
37382
37383   * void vst2q_f32 (float32_t *, float32x4x2_t)
37384     _Form of expected instruction(s):_ 'vst2.32 {D0, D1}, [R0]'
37385
37386   * void vst2q_p16 (poly16_t *, poly16x8x2_t)
37387     _Form of expected instruction(s):_ 'vst2.16 {D0, D1}, [R0]'
37388
37389   * void vst2q_p8 (poly8_t *, poly8x16x2_t)
37390     _Form of expected instruction(s):_ 'vst2.8 {D0, D1}, [R0]'
37391
37392   * void vst2_lane_u32 (uint32_t *, uint32x2x2_t, const int)
37393     _Form of expected instruction(s):_ 'vst2.32 {D0[0], D1[0]}, [R0]'
37394
37395   * void vst2_lane_u16 (uint16_t *, uint16x4x2_t, const int)
37396     _Form of expected instruction(s):_ 'vst2.16 {D0[0], D1[0]}, [R0]'
37397
37398   * void vst2_lane_u8 (uint8_t *, uint8x8x2_t, const int)
37399     _Form of expected instruction(s):_ 'vst2.8 {D0[0], D1[0]}, [R0]'
37400
37401   * void vst2_lane_s32 (int32_t *, int32x2x2_t, const int)
37402     _Form of expected instruction(s):_ 'vst2.32 {D0[0], D1[0]}, [R0]'
37403
37404   * void vst2_lane_s16 (int16_t *, int16x4x2_t, const int)
37405     _Form of expected instruction(s):_ 'vst2.16 {D0[0], D1[0]}, [R0]'
37406
37407   * void vst2_lane_s8 (int8_t *, int8x8x2_t, const int)
37408     _Form of expected instruction(s):_ 'vst2.8 {D0[0], D1[0]}, [R0]'
37409
37410   * void vst2_lane_f32 (float32_t *, float32x2x2_t, const int)
37411     _Form of expected instruction(s):_ 'vst2.32 {D0[0], D1[0]}, [R0]'
37412
37413   * void vst2_lane_p16 (poly16_t *, poly16x4x2_t, const int)
37414     _Form of expected instruction(s):_ 'vst2.16 {D0[0], D1[0]}, [R0]'
37415
37416   * void vst2_lane_p8 (poly8_t *, poly8x8x2_t, const int)
37417     _Form of expected instruction(s):_ 'vst2.8 {D0[0], D1[0]}, [R0]'
37418
37419   * void vst2q_lane_s32 (int32_t *, int32x4x2_t, const int)
37420     _Form of expected instruction(s):_ 'vst2.32 {D0[0], D1[0]}, [R0]'
37421
37422   * void vst2q_lane_s16 (int16_t *, int16x8x2_t, const int)
37423     _Form of expected instruction(s):_ 'vst2.16 {D0[0], D1[0]}, [R0]'
37424
37425   * void vst2q_lane_u32 (uint32_t *, uint32x4x2_t, const int)
37426     _Form of expected instruction(s):_ 'vst2.32 {D0[0], D1[0]}, [R0]'
37427
37428   * void vst2q_lane_u16 (uint16_t *, uint16x8x2_t, const int)
37429     _Form of expected instruction(s):_ 'vst2.16 {D0[0], D1[0]}, [R0]'
37430
37431   * void vst2q_lane_f32 (float32_t *, float32x4x2_t, const int)
37432     _Form of expected instruction(s):_ 'vst2.32 {D0[0], D1[0]}, [R0]'
37433
37434   * void vst2q_lane_p16 (poly16_t *, poly16x8x2_t, const int)
37435     _Form of expected instruction(s):_ 'vst2.16 {D0[0], D1[0]}, [R0]'
37436
374376.57.6.79 Element/structure loads, VLD3 variants
37438................................................
37439
37440   * uint32x2x3_t vld3_u32 (const uint32_t *)
37441     _Form of expected instruction(s):_ 'vld3.32 {D0, D1, D2}, [R0]'
37442
37443   * uint16x4x3_t vld3_u16 (const uint16_t *)
37444     _Form of expected instruction(s):_ 'vld3.16 {D0, D1, D2}, [R0]'
37445
37446   * uint8x8x3_t vld3_u8 (const uint8_t *)
37447     _Form of expected instruction(s):_ 'vld3.8 {D0, D1, D2}, [R0]'
37448
37449   * int32x2x3_t vld3_s32 (const int32_t *)
37450     _Form of expected instruction(s):_ 'vld3.32 {D0, D1, D2}, [R0]'
37451
37452   * int16x4x3_t vld3_s16 (const int16_t *)
37453     _Form of expected instruction(s):_ 'vld3.16 {D0, D1, D2}, [R0]'
37454
37455   * int8x8x3_t vld3_s8 (const int8_t *)
37456     _Form of expected instruction(s):_ 'vld3.8 {D0, D1, D2}, [R0]'
37457
37458   * float32x2x3_t vld3_f32 (const float32_t *)
37459     _Form of expected instruction(s):_ 'vld3.32 {D0, D1, D2}, [R0]'
37460
37461   * poly16x4x3_t vld3_p16 (const poly16_t *)
37462     _Form of expected instruction(s):_ 'vld3.16 {D0, D1, D2}, [R0]'
37463
37464   * poly8x8x3_t vld3_p8 (const poly8_t *)
37465     _Form of expected instruction(s):_ 'vld3.8 {D0, D1, D2}, [R0]'
37466
37467   * poly64x1x3_t vld3_p64 (const poly64_t *)
37468     _Form of expected instruction(s):_ 'vld1.64 {D0, D1, D2}, [R0]'
37469
37470   * uint64x1x3_t vld3_u64 (const uint64_t *)
37471     _Form of expected instruction(s):_ 'vld1.64 {D0, D1, D2}, [R0]'
37472
37473   * int64x1x3_t vld3_s64 (const int64_t *)
37474     _Form of expected instruction(s):_ 'vld1.64 {D0, D1, D2}, [R0]'
37475
37476   * uint32x4x3_t vld3q_u32 (const uint32_t *)
37477     _Form of expected instruction(s):_ 'vld3.32 {D0, D1, D2}, [R0]'
37478
37479   * uint16x8x3_t vld3q_u16 (const uint16_t *)
37480     _Form of expected instruction(s):_ 'vld3.16 {D0, D1, D2}, [R0]'
37481
37482   * uint8x16x3_t vld3q_u8 (const uint8_t *)
37483     _Form of expected instruction(s):_ 'vld3.8 {D0, D1, D2}, [R0]'
37484
37485   * int32x4x3_t vld3q_s32 (const int32_t *)
37486     _Form of expected instruction(s):_ 'vld3.32 {D0, D1, D2}, [R0]'
37487
37488   * int16x8x3_t vld3q_s16 (const int16_t *)
37489     _Form of expected instruction(s):_ 'vld3.16 {D0, D1, D2}, [R0]'
37490
37491   * int8x16x3_t vld3q_s8 (const int8_t *)
37492     _Form of expected instruction(s):_ 'vld3.8 {D0, D1, D2}, [R0]'
37493
37494   * float32x4x3_t vld3q_f32 (const float32_t *)
37495     _Form of expected instruction(s):_ 'vld3.32 {D0, D1, D2}, [R0]'
37496
37497   * poly16x8x3_t vld3q_p16 (const poly16_t *)
37498     _Form of expected instruction(s):_ 'vld3.16 {D0, D1, D2}, [R0]'
37499
37500   * poly8x16x3_t vld3q_p8 (const poly8_t *)
37501     _Form of expected instruction(s):_ 'vld3.8 {D0, D1, D2}, [R0]'
37502
37503   * uint32x2x3_t vld3_lane_u32 (const uint32_t *, uint32x2x3_t, const
37504     int)
37505     _Form of expected instruction(s):_ 'vld3.32 {D0[0], D1[0], D2[0]},
37506     [R0]'
37507
37508   * uint16x4x3_t vld3_lane_u16 (const uint16_t *, uint16x4x3_t, const
37509     int)
37510     _Form of expected instruction(s):_ 'vld3.16 {D0[0], D1[0], D2[0]},
37511     [R0]'
37512
37513   * uint8x8x3_t vld3_lane_u8 (const uint8_t *, uint8x8x3_t, const int)
37514     _Form of expected instruction(s):_ 'vld3.8 {D0[0], D1[0], D2[0]},
37515     [R0]'
37516
37517   * int32x2x3_t vld3_lane_s32 (const int32_t *, int32x2x3_t, const int)
37518
37519     _Form of expected instruction(s):_ 'vld3.32 {D0[0], D1[0], D2[0]},
37520     [R0]'
37521
37522   * int16x4x3_t vld3_lane_s16 (const int16_t *, int16x4x3_t, const int)
37523
37524     _Form of expected instruction(s):_ 'vld3.16 {D0[0], D1[0], D2[0]},
37525     [R0]'
37526
37527   * int8x8x3_t vld3_lane_s8 (const int8_t *, int8x8x3_t, const int)
37528     _Form of expected instruction(s):_ 'vld3.8 {D0[0], D1[0], D2[0]},
37529     [R0]'
37530
37531   * float32x2x3_t vld3_lane_f32 (const float32_t *, float32x2x3_t,
37532     const int)
37533     _Form of expected instruction(s):_ 'vld3.32 {D0[0], D1[0], D2[0]},
37534     [R0]'
37535
37536   * poly16x4x3_t vld3_lane_p16 (const poly16_t *, poly16x4x3_t, const
37537     int)
37538     _Form of expected instruction(s):_ 'vld3.16 {D0[0], D1[0], D2[0]},
37539     [R0]'
37540
37541   * poly8x8x3_t vld3_lane_p8 (const poly8_t *, poly8x8x3_t, const int)
37542     _Form of expected instruction(s):_ 'vld3.8 {D0[0], D1[0], D2[0]},
37543     [R0]'
37544
37545   * int32x4x3_t vld3q_lane_s32 (const int32_t *, int32x4x3_t, const
37546     int)
37547     _Form of expected instruction(s):_ 'vld3.32 {D0[0], D1[0], D2[0]},
37548     [R0]'
37549
37550   * int16x8x3_t vld3q_lane_s16 (const int16_t *, int16x8x3_t, const
37551     int)
37552     _Form of expected instruction(s):_ 'vld3.16 {D0[0], D1[0], D2[0]},
37553     [R0]'
37554
37555   * uint32x4x3_t vld3q_lane_u32 (const uint32_t *, uint32x4x3_t, const
37556     int)
37557     _Form of expected instruction(s):_ 'vld3.32 {D0[0], D1[0], D2[0]},
37558     [R0]'
37559
37560   * uint16x8x3_t vld3q_lane_u16 (const uint16_t *, uint16x8x3_t, const
37561     int)
37562     _Form of expected instruction(s):_ 'vld3.16 {D0[0], D1[0], D2[0]},
37563     [R0]'
37564
37565   * float32x4x3_t vld3q_lane_f32 (const float32_t *, float32x4x3_t,
37566     const int)
37567     _Form of expected instruction(s):_ 'vld3.32 {D0[0], D1[0], D2[0]},
37568     [R0]'
37569
37570   * poly16x8x3_t vld3q_lane_p16 (const poly16_t *, poly16x8x3_t, const
37571     int)
37572     _Form of expected instruction(s):_ 'vld3.16 {D0[0], D1[0], D2[0]},
37573     [R0]'
37574
37575   * uint32x2x3_t vld3_dup_u32 (const uint32_t *)
37576     _Form of expected instruction(s):_ 'vld3.32 {D0[], D1[], D2[]},
37577     [R0]'
37578
37579   * uint16x4x3_t vld3_dup_u16 (const uint16_t *)
37580     _Form of expected instruction(s):_ 'vld3.16 {D0[], D1[], D2[]},
37581     [R0]'
37582
37583   * uint8x8x3_t vld3_dup_u8 (const uint8_t *)
37584     _Form of expected instruction(s):_ 'vld3.8 {D0[], D1[], D2[]},
37585     [R0]'
37586
37587   * int32x2x3_t vld3_dup_s32 (const int32_t *)
37588     _Form of expected instruction(s):_ 'vld3.32 {D0[], D1[], D2[]},
37589     [R0]'
37590
37591   * int16x4x3_t vld3_dup_s16 (const int16_t *)
37592     _Form of expected instruction(s):_ 'vld3.16 {D0[], D1[], D2[]},
37593     [R0]'
37594
37595   * int8x8x3_t vld3_dup_s8 (const int8_t *)
37596     _Form of expected instruction(s):_ 'vld3.8 {D0[], D1[], D2[]},
37597     [R0]'
37598
37599   * float32x2x3_t vld3_dup_f32 (const float32_t *)
37600     _Form of expected instruction(s):_ 'vld3.32 {D0[], D1[], D2[]},
37601     [R0]'
37602
37603   * poly16x4x3_t vld3_dup_p16 (const poly16_t *)
37604     _Form of expected instruction(s):_ 'vld3.16 {D0[], D1[], D2[]},
37605     [R0]'
37606
37607   * poly8x8x3_t vld3_dup_p8 (const poly8_t *)
37608     _Form of expected instruction(s):_ 'vld3.8 {D0[], D1[], D2[]},
37609     [R0]'
37610
37611   * poly64x1x3_t vld3_dup_p64 (const poly64_t *)
37612     _Form of expected instruction(s):_ 'vld1.64 {D0, D1, D2}, [R0]'
37613
37614   * uint64x1x3_t vld3_dup_u64 (const uint64_t *)
37615     _Form of expected instruction(s):_ 'vld1.64 {D0, D1, D2}, [R0]'
37616
37617   * int64x1x3_t vld3_dup_s64 (const int64_t *)
37618     _Form of expected instruction(s):_ 'vld1.64 {D0, D1, D2}, [R0]'
37619
376206.57.6.80 Element/structure stores, VST3 variants
37621.................................................
37622
37623   * void vst3_u32 (uint32_t *, uint32x2x3_t)
37624     _Form of expected instruction(s):_ 'vst3.32 {D0, D1, D2, D3}, [R0]'
37625
37626   * void vst3_u16 (uint16_t *, uint16x4x3_t)
37627     _Form of expected instruction(s):_ 'vst3.16 {D0, D1, D2, D3}, [R0]'
37628
37629   * void vst3_u8 (uint8_t *, uint8x8x3_t)
37630     _Form of expected instruction(s):_ 'vst3.8 {D0, D1, D2, D3}, [R0]'
37631
37632   * void vst3_s32 (int32_t *, int32x2x3_t)
37633     _Form of expected instruction(s):_ 'vst3.32 {D0, D1, D2, D3}, [R0]'
37634
37635   * void vst3_s16 (int16_t *, int16x4x3_t)
37636     _Form of expected instruction(s):_ 'vst3.16 {D0, D1, D2, D3}, [R0]'
37637
37638   * void vst3_s8 (int8_t *, int8x8x3_t)
37639     _Form of expected instruction(s):_ 'vst3.8 {D0, D1, D2, D3}, [R0]'
37640
37641   * void vst3_f32 (float32_t *, float32x2x3_t)
37642     _Form of expected instruction(s):_ 'vst3.32 {D0, D1, D2, D3}, [R0]'
37643
37644   * void vst3_p16 (poly16_t *, poly16x4x3_t)
37645     _Form of expected instruction(s):_ 'vst3.16 {D0, D1, D2, D3}, [R0]'
37646
37647   * void vst3_p8 (poly8_t *, poly8x8x3_t)
37648     _Form of expected instruction(s):_ 'vst3.8 {D0, D1, D2, D3}, [R0]'
37649
37650   * void vst3_p64 (poly64_t *, poly64x1x3_t)
37651     _Form of expected instruction(s):_ 'vst1.64 {D0, D1, D2, D3}, [R0]'
37652
37653   * void vst3_u64 (uint64_t *, uint64x1x3_t)
37654     _Form of expected instruction(s):_ 'vst1.64 {D0, D1, D2, D3}, [R0]'
37655
37656   * void vst3_s64 (int64_t *, int64x1x3_t)
37657     _Form of expected instruction(s):_ 'vst1.64 {D0, D1, D2, D3}, [R0]'
37658
37659   * void vst3q_u32 (uint32_t *, uint32x4x3_t)
37660     _Form of expected instruction(s):_ 'vst3.32 {D0, D1, D2}, [R0]'
37661
37662   * void vst3q_u16 (uint16_t *, uint16x8x3_t)
37663     _Form of expected instruction(s):_ 'vst3.16 {D0, D1, D2}, [R0]'
37664
37665   * void vst3q_u8 (uint8_t *, uint8x16x3_t)
37666     _Form of expected instruction(s):_ 'vst3.8 {D0, D1, D2}, [R0]'
37667
37668   * void vst3q_s32 (int32_t *, int32x4x3_t)
37669     _Form of expected instruction(s):_ 'vst3.32 {D0, D1, D2}, [R0]'
37670
37671   * void vst3q_s16 (int16_t *, int16x8x3_t)
37672     _Form of expected instruction(s):_ 'vst3.16 {D0, D1, D2}, [R0]'
37673
37674   * void vst3q_s8 (int8_t *, int8x16x3_t)
37675     _Form of expected instruction(s):_ 'vst3.8 {D0, D1, D2}, [R0]'
37676
37677   * void vst3q_f32 (float32_t *, float32x4x3_t)
37678     _Form of expected instruction(s):_ 'vst3.32 {D0, D1, D2}, [R0]'
37679
37680   * void vst3q_p16 (poly16_t *, poly16x8x3_t)
37681     _Form of expected instruction(s):_ 'vst3.16 {D0, D1, D2}, [R0]'
37682
37683   * void vst3q_p8 (poly8_t *, poly8x16x3_t)
37684     _Form of expected instruction(s):_ 'vst3.8 {D0, D1, D2}, [R0]'
37685
37686   * void vst3_lane_u32 (uint32_t *, uint32x2x3_t, const int)
37687     _Form of expected instruction(s):_ 'vst3.32 {D0[0], D1[0], D2[0]},
37688     [R0]'
37689
37690   * void vst3_lane_u16 (uint16_t *, uint16x4x3_t, const int)
37691     _Form of expected instruction(s):_ 'vst3.16 {D0[0], D1[0], D2[0]},
37692     [R0]'
37693
37694   * void vst3_lane_u8 (uint8_t *, uint8x8x3_t, const int)
37695     _Form of expected instruction(s):_ 'vst3.8 {D0[0], D1[0], D2[0]},
37696     [R0]'
37697
37698   * void vst3_lane_s32 (int32_t *, int32x2x3_t, const int)
37699     _Form of expected instruction(s):_ 'vst3.32 {D0[0], D1[0], D2[0]},
37700     [R0]'
37701
37702   * void vst3_lane_s16 (int16_t *, int16x4x3_t, const int)
37703     _Form of expected instruction(s):_ 'vst3.16 {D0[0], D1[0], D2[0]},
37704     [R0]'
37705
37706   * void vst3_lane_s8 (int8_t *, int8x8x3_t, const int)
37707     _Form of expected instruction(s):_ 'vst3.8 {D0[0], D1[0], D2[0]},
37708     [R0]'
37709
37710   * void vst3_lane_f32 (float32_t *, float32x2x3_t, const int)
37711     _Form of expected instruction(s):_ 'vst3.32 {D0[0], D1[0], D2[0]},
37712     [R0]'
37713
37714   * void vst3_lane_p16 (poly16_t *, poly16x4x3_t, const int)
37715     _Form of expected instruction(s):_ 'vst3.16 {D0[0], D1[0], D2[0]},
37716     [R0]'
37717
37718   * void vst3_lane_p8 (poly8_t *, poly8x8x3_t, const int)
37719     _Form of expected instruction(s):_ 'vst3.8 {D0[0], D1[0], D2[0]},
37720     [R0]'
37721
37722   * void vst3q_lane_s32 (int32_t *, int32x4x3_t, const int)
37723     _Form of expected instruction(s):_ 'vst3.32 {D0[0], D1[0], D2[0]},
37724     [R0]'
37725
37726   * void vst3q_lane_s16 (int16_t *, int16x8x3_t, const int)
37727     _Form of expected instruction(s):_ 'vst3.16 {D0[0], D1[0], D2[0]},
37728     [R0]'
37729
37730   * void vst3q_lane_u32 (uint32_t *, uint32x4x3_t, const int)
37731     _Form of expected instruction(s):_ 'vst3.32 {D0[0], D1[0], D2[0]},
37732     [R0]'
37733
37734   * void vst3q_lane_u16 (uint16_t *, uint16x8x3_t, const int)
37735     _Form of expected instruction(s):_ 'vst3.16 {D0[0], D1[0], D2[0]},
37736     [R0]'
37737
37738   * void vst3q_lane_f32 (float32_t *, float32x4x3_t, const int)
37739     _Form of expected instruction(s):_ 'vst3.32 {D0[0], D1[0], D2[0]},
37740     [R0]'
37741
37742   * void vst3q_lane_p16 (poly16_t *, poly16x8x3_t, const int)
37743     _Form of expected instruction(s):_ 'vst3.16 {D0[0], D1[0], D2[0]},
37744     [R0]'
37745
377466.57.6.81 Element/structure loads, VLD4 variants
37747................................................
37748
37749   * uint32x2x4_t vld4_u32 (const uint32_t *)
37750     _Form of expected instruction(s):_ 'vld4.32 {D0, D1, D2, D3}, [R0]'
37751
37752   * uint16x4x4_t vld4_u16 (const uint16_t *)
37753     _Form of expected instruction(s):_ 'vld4.16 {D0, D1, D2, D3}, [R0]'
37754
37755   * uint8x8x4_t vld4_u8 (const uint8_t *)
37756     _Form of expected instruction(s):_ 'vld4.8 {D0, D1, D2, D3}, [R0]'
37757
37758   * int32x2x4_t vld4_s32 (const int32_t *)
37759     _Form of expected instruction(s):_ 'vld4.32 {D0, D1, D2, D3}, [R0]'
37760
37761   * int16x4x4_t vld4_s16 (const int16_t *)
37762     _Form of expected instruction(s):_ 'vld4.16 {D0, D1, D2, D3}, [R0]'
37763
37764   * int8x8x4_t vld4_s8 (const int8_t *)
37765     _Form of expected instruction(s):_ 'vld4.8 {D0, D1, D2, D3}, [R0]'
37766
37767   * float32x2x4_t vld4_f32 (const float32_t *)
37768     _Form of expected instruction(s):_ 'vld4.32 {D0, D1, D2, D3}, [R0]'
37769
37770   * poly16x4x4_t vld4_p16 (const poly16_t *)
37771     _Form of expected instruction(s):_ 'vld4.16 {D0, D1, D2, D3}, [R0]'
37772
37773   * poly8x8x4_t vld4_p8 (const poly8_t *)
37774     _Form of expected instruction(s):_ 'vld4.8 {D0, D1, D2, D3}, [R0]'
37775
37776   * poly64x1x4_t vld4_p64 (const poly64_t *)
37777     _Form of expected instruction(s):_ 'vld1.64 {D0, D1, D2, D3}, [R0]'
37778
37779   * uint64x1x4_t vld4_u64 (const uint64_t *)
37780     _Form of expected instruction(s):_ 'vld1.64 {D0, D1, D2, D3}, [R0]'
37781
37782   * int64x1x4_t vld4_s64 (const int64_t *)
37783     _Form of expected instruction(s):_ 'vld1.64 {D0, D1, D2, D3}, [R0]'
37784
37785   * uint32x4x4_t vld4q_u32 (const uint32_t *)
37786     _Form of expected instruction(s):_ 'vld4.32 {D0, D1, D2, D3}, [R0]'
37787
37788   * uint16x8x4_t vld4q_u16 (const uint16_t *)
37789     _Form of expected instruction(s):_ 'vld4.16 {D0, D1, D2, D3}, [R0]'
37790
37791   * uint8x16x4_t vld4q_u8 (const uint8_t *)
37792     _Form of expected instruction(s):_ 'vld4.8 {D0, D1, D2, D3}, [R0]'
37793
37794   * int32x4x4_t vld4q_s32 (const int32_t *)
37795     _Form of expected instruction(s):_ 'vld4.32 {D0, D1, D2, D3}, [R0]'
37796
37797   * int16x8x4_t vld4q_s16 (const int16_t *)
37798     _Form of expected instruction(s):_ 'vld4.16 {D0, D1, D2, D3}, [R0]'
37799
37800   * int8x16x4_t vld4q_s8 (const int8_t *)
37801     _Form of expected instruction(s):_ 'vld4.8 {D0, D1, D2, D3}, [R0]'
37802
37803   * float32x4x4_t vld4q_f32 (const float32_t *)
37804     _Form of expected instruction(s):_ 'vld4.32 {D0, D1, D2, D3}, [R0]'
37805
37806   * poly16x8x4_t vld4q_p16 (const poly16_t *)
37807     _Form of expected instruction(s):_ 'vld4.16 {D0, D1, D2, D3}, [R0]'
37808
37809   * poly8x16x4_t vld4q_p8 (const poly8_t *)
37810     _Form of expected instruction(s):_ 'vld4.8 {D0, D1, D2, D3}, [R0]'
37811
37812   * uint32x2x4_t vld4_lane_u32 (const uint32_t *, uint32x2x4_t, const
37813     int)
37814     _Form of expected instruction(s):_ 'vld4.32 {D0[0], D1[0], D2[0],
37815     D3[0]}, [R0]'
37816
37817   * uint16x4x4_t vld4_lane_u16 (const uint16_t *, uint16x4x4_t, const
37818     int)
37819     _Form of expected instruction(s):_ 'vld4.16 {D0[0], D1[0], D2[0],
37820     D3[0]}, [R0]'
37821
37822   * uint8x8x4_t vld4_lane_u8 (const uint8_t *, uint8x8x4_t, const int)
37823     _Form of expected instruction(s):_ 'vld4.8 {D0[0], D1[0], D2[0],
37824     D3[0]}, [R0]'
37825
37826   * int32x2x4_t vld4_lane_s32 (const int32_t *, int32x2x4_t, const int)
37827
37828     _Form of expected instruction(s):_ 'vld4.32 {D0[0], D1[0], D2[0],
37829     D3[0]}, [R0]'
37830
37831   * int16x4x4_t vld4_lane_s16 (const int16_t *, int16x4x4_t, const int)
37832
37833     _Form of expected instruction(s):_ 'vld4.16 {D0[0], D1[0], D2[0],
37834     D3[0]}, [R0]'
37835
37836   * int8x8x4_t vld4_lane_s8 (const int8_t *, int8x8x4_t, const int)
37837     _Form of expected instruction(s):_ 'vld4.8 {D0[0], D1[0], D2[0],
37838     D3[0]}, [R0]'
37839
37840   * float32x2x4_t vld4_lane_f32 (const float32_t *, float32x2x4_t,
37841     const int)
37842     _Form of expected instruction(s):_ 'vld4.32 {D0[0], D1[0], D2[0],
37843     D3[0]}, [R0]'
37844
37845   * poly16x4x4_t vld4_lane_p16 (const poly16_t *, poly16x4x4_t, const
37846     int)
37847     _Form of expected instruction(s):_ 'vld4.16 {D0[0], D1[0], D2[0],
37848     D3[0]}, [R0]'
37849
37850   * poly8x8x4_t vld4_lane_p8 (const poly8_t *, poly8x8x4_t, const int)
37851     _Form of expected instruction(s):_ 'vld4.8 {D0[0], D1[0], D2[0],
37852     D3[0]}, [R0]'
37853
37854   * int32x4x4_t vld4q_lane_s32 (const int32_t *, int32x4x4_t, const
37855     int)
37856     _Form of expected instruction(s):_ 'vld4.32 {D0[0], D1[0], D2[0],
37857     D3[0]}, [R0]'
37858
37859   * int16x8x4_t vld4q_lane_s16 (const int16_t *, int16x8x4_t, const
37860     int)
37861     _Form of expected instruction(s):_ 'vld4.16 {D0[0], D1[0], D2[0],
37862     D3[0]}, [R0]'
37863
37864   * uint32x4x4_t vld4q_lane_u32 (const uint32_t *, uint32x4x4_t, const
37865     int)
37866     _Form of expected instruction(s):_ 'vld4.32 {D0[0], D1[0], D2[0],
37867     D3[0]}, [R0]'
37868
37869   * uint16x8x4_t vld4q_lane_u16 (const uint16_t *, uint16x8x4_t, const
37870     int)
37871     _Form of expected instruction(s):_ 'vld4.16 {D0[0], D1[0], D2[0],
37872     D3[0]}, [R0]'
37873
37874   * float32x4x4_t vld4q_lane_f32 (const float32_t *, float32x4x4_t,
37875     const int)
37876     _Form of expected instruction(s):_ 'vld4.32 {D0[0], D1[0], D2[0],
37877     D3[0]}, [R0]'
37878
37879   * poly16x8x4_t vld4q_lane_p16 (const poly16_t *, poly16x8x4_t, const
37880     int)
37881     _Form of expected instruction(s):_ 'vld4.16 {D0[0], D1[0], D2[0],
37882     D3[0]}, [R0]'
37883
37884   * uint32x2x4_t vld4_dup_u32 (const uint32_t *)
37885     _Form of expected instruction(s):_ 'vld4.32 {D0[], D1[], D2[],
37886     D3[]}, [R0]'
37887
37888   * uint16x4x4_t vld4_dup_u16 (const uint16_t *)
37889     _Form of expected instruction(s):_ 'vld4.16 {D0[], D1[], D2[],
37890     D3[]}, [R0]'
37891
37892   * uint8x8x4_t vld4_dup_u8 (const uint8_t *)
37893     _Form of expected instruction(s):_ 'vld4.8 {D0[], D1[], D2[],
37894     D3[]}, [R0]'
37895
37896   * int32x2x4_t vld4_dup_s32 (const int32_t *)
37897     _Form of expected instruction(s):_ 'vld4.32 {D0[], D1[], D2[],
37898     D3[]}, [R0]'
37899
37900   * int16x4x4_t vld4_dup_s16 (const int16_t *)
37901     _Form of expected instruction(s):_ 'vld4.16 {D0[], D1[], D2[],
37902     D3[]}, [R0]'
37903
37904   * int8x8x4_t vld4_dup_s8 (const int8_t *)
37905     _Form of expected instruction(s):_ 'vld4.8 {D0[], D1[], D2[],
37906     D3[]}, [R0]'
37907
37908   * float32x2x4_t vld4_dup_f32 (const float32_t *)
37909     _Form of expected instruction(s):_ 'vld4.32 {D0[], D1[], D2[],
37910     D3[]}, [R0]'
37911
37912   * poly16x4x4_t vld4_dup_p16 (const poly16_t *)
37913     _Form of expected instruction(s):_ 'vld4.16 {D0[], D1[], D2[],
37914     D3[]}, [R0]'
37915
37916   * poly8x8x4_t vld4_dup_p8 (const poly8_t *)
37917     _Form of expected instruction(s):_ 'vld4.8 {D0[], D1[], D2[],
37918     D3[]}, [R0]'
37919
37920   * poly64x1x4_t vld4_dup_p64 (const poly64_t *)
37921     _Form of expected instruction(s):_ 'vld1.64 {D0, D1, D2, D3}, [R0]'
37922
37923   * uint64x1x4_t vld4_dup_u64 (const uint64_t *)
37924     _Form of expected instruction(s):_ 'vld1.64 {D0, D1, D2, D3}, [R0]'
37925
37926   * int64x1x4_t vld4_dup_s64 (const int64_t *)
37927     _Form of expected instruction(s):_ 'vld1.64 {D0, D1, D2, D3}, [R0]'
37928
379296.57.6.82 Element/structure stores, VST4 variants
37930.................................................
37931
37932   * void vst4_u32 (uint32_t *, uint32x2x4_t)
37933     _Form of expected instruction(s):_ 'vst4.32 {D0, D1, D2, D3}, [R0]'
37934
37935   * void vst4_u16 (uint16_t *, uint16x4x4_t)
37936     _Form of expected instruction(s):_ 'vst4.16 {D0, D1, D2, D3}, [R0]'
37937
37938   * void vst4_u8 (uint8_t *, uint8x8x4_t)
37939     _Form of expected instruction(s):_ 'vst4.8 {D0, D1, D2, D3}, [R0]'
37940
37941   * void vst4_s32 (int32_t *, int32x2x4_t)
37942     _Form of expected instruction(s):_ 'vst4.32 {D0, D1, D2, D3}, [R0]'
37943
37944   * void vst4_s16 (int16_t *, int16x4x4_t)
37945     _Form of expected instruction(s):_ 'vst4.16 {D0, D1, D2, D3}, [R0]'
37946
37947   * void vst4_s8 (int8_t *, int8x8x4_t)
37948     _Form of expected instruction(s):_ 'vst4.8 {D0, D1, D2, D3}, [R0]'
37949
37950   * void vst4_f32 (float32_t *, float32x2x4_t)
37951     _Form of expected instruction(s):_ 'vst4.32 {D0, D1, D2, D3}, [R0]'
37952
37953   * void vst4_p16 (poly16_t *, poly16x4x4_t)
37954     _Form of expected instruction(s):_ 'vst4.16 {D0, D1, D2, D3}, [R0]'
37955
37956   * void vst4_p8 (poly8_t *, poly8x8x4_t)
37957     _Form of expected instruction(s):_ 'vst4.8 {D0, D1, D2, D3}, [R0]'
37958
37959   * void vst4_p64 (poly64_t *, poly64x1x4_t)
37960     _Form of expected instruction(s):_ 'vst1.64 {D0, D1, D2, D3}, [R0]'
37961
37962   * void vst4_u64 (uint64_t *, uint64x1x4_t)
37963     _Form of expected instruction(s):_ 'vst1.64 {D0, D1, D2, D3}, [R0]'
37964
37965   * void vst4_s64 (int64_t *, int64x1x4_t)
37966     _Form of expected instruction(s):_ 'vst1.64 {D0, D1, D2, D3}, [R0]'
37967
37968   * void vst4q_u32 (uint32_t *, uint32x4x4_t)
37969     _Form of expected instruction(s):_ 'vst4.32 {D0, D1, D2, D3}, [R0]'
37970
37971   * void vst4q_u16 (uint16_t *, uint16x8x4_t)
37972     _Form of expected instruction(s):_ 'vst4.16 {D0, D1, D2, D3}, [R0]'
37973
37974   * void vst4q_u8 (uint8_t *, uint8x16x4_t)
37975     _Form of expected instruction(s):_ 'vst4.8 {D0, D1, D2, D3}, [R0]'
37976
37977   * void vst4q_s32 (int32_t *, int32x4x4_t)
37978     _Form of expected instruction(s):_ 'vst4.32 {D0, D1, D2, D3}, [R0]'
37979
37980   * void vst4q_s16 (int16_t *, int16x8x4_t)
37981     _Form of expected instruction(s):_ 'vst4.16 {D0, D1, D2, D3}, [R0]'
37982
37983   * void vst4q_s8 (int8_t *, int8x16x4_t)
37984     _Form of expected instruction(s):_ 'vst4.8 {D0, D1, D2, D3}, [R0]'
37985
37986   * void vst4q_f32 (float32_t *, float32x4x4_t)
37987     _Form of expected instruction(s):_ 'vst4.32 {D0, D1, D2, D3}, [R0]'
37988
37989   * void vst4q_p16 (poly16_t *, poly16x8x4_t)
37990     _Form of expected instruction(s):_ 'vst4.16 {D0, D1, D2, D3}, [R0]'
37991
37992   * void vst4q_p8 (poly8_t *, poly8x16x4_t)
37993     _Form of expected instruction(s):_ 'vst4.8 {D0, D1, D2, D3}, [R0]'
37994
37995   * void vst4_lane_u32 (uint32_t *, uint32x2x4_t, const int)
37996     _Form of expected instruction(s):_ 'vst4.32 {D0[0], D1[0], D2[0],
37997     D3[0]}, [R0]'
37998
37999   * void vst4_lane_u16 (uint16_t *, uint16x4x4_t, const int)
38000     _Form of expected instruction(s):_ 'vst4.16 {D0[0], D1[0], D2[0],
38001     D3[0]}, [R0]'
38002
38003   * void vst4_lane_u8 (uint8_t *, uint8x8x4_t, const int)
38004     _Form of expected instruction(s):_ 'vst4.8 {D0[0], D1[0], D2[0],
38005     D3[0]}, [R0]'
38006
38007   * void vst4_lane_s32 (int32_t *, int32x2x4_t, const int)
38008     _Form of expected instruction(s):_ 'vst4.32 {D0[0], D1[0], D2[0],
38009     D3[0]}, [R0]'
38010
38011   * void vst4_lane_s16 (int16_t *, int16x4x4_t, const int)
38012     _Form of expected instruction(s):_ 'vst4.16 {D0[0], D1[0], D2[0],
38013     D3[0]}, [R0]'
38014
38015   * void vst4_lane_s8 (int8_t *, int8x8x4_t, const int)
38016     _Form of expected instruction(s):_ 'vst4.8 {D0[0], D1[0], D2[0],
38017     D3[0]}, [R0]'
38018
38019   * void vst4_lane_f32 (float32_t *, float32x2x4_t, const int)
38020     _Form of expected instruction(s):_ 'vst4.32 {D0[0], D1[0], D2[0],
38021     D3[0]}, [R0]'
38022
38023   * void vst4_lane_p16 (poly16_t *, poly16x4x4_t, const int)
38024     _Form of expected instruction(s):_ 'vst4.16 {D0[0], D1[0], D2[0],
38025     D3[0]}, [R0]'
38026
38027   * void vst4_lane_p8 (poly8_t *, poly8x8x4_t, const int)
38028     _Form of expected instruction(s):_ 'vst4.8 {D0[0], D1[0], D2[0],
38029     D3[0]}, [R0]'
38030
38031   * void vst4q_lane_s32 (int32_t *, int32x4x4_t, const int)
38032     _Form of expected instruction(s):_ 'vst4.32 {D0[0], D1[0], D2[0],
38033     D3[0]}, [R0]'
38034
38035   * void vst4q_lane_s16 (int16_t *, int16x8x4_t, const int)
38036     _Form of expected instruction(s):_ 'vst4.16 {D0[0], D1[0], D2[0],
38037     D3[0]}, [R0]'
38038
38039   * void vst4q_lane_u32 (uint32_t *, uint32x4x4_t, const int)
38040     _Form of expected instruction(s):_ 'vst4.32 {D0[0], D1[0], D2[0],
38041     D3[0]}, [R0]'
38042
38043   * void vst4q_lane_u16 (uint16_t *, uint16x8x4_t, const int)
38044     _Form of expected instruction(s):_ 'vst4.16 {D0[0], D1[0], D2[0],
38045     D3[0]}, [R0]'
38046
38047   * void vst4q_lane_f32 (float32_t *, float32x4x4_t, const int)
38048     _Form of expected instruction(s):_ 'vst4.32 {D0[0], D1[0], D2[0],
38049     D3[0]}, [R0]'
38050
38051   * void vst4q_lane_p16 (poly16_t *, poly16x8x4_t, const int)
38052     _Form of expected instruction(s):_ 'vst4.16 {D0[0], D1[0], D2[0],
38053     D3[0]}, [R0]'
38054
380556.57.6.83 Logical operations (AND)
38056..................................
38057
38058   * uint32x2_t vand_u32 (uint32x2_t, uint32x2_t)
38059     _Form of expected instruction(s):_ 'vand D0, D0, D0'
38060
38061   * uint16x4_t vand_u16 (uint16x4_t, uint16x4_t)
38062     _Form of expected instruction(s):_ 'vand D0, D0, D0'
38063
38064   * uint8x8_t vand_u8 (uint8x8_t, uint8x8_t)
38065     _Form of expected instruction(s):_ 'vand D0, D0, D0'
38066
38067   * int32x2_t vand_s32 (int32x2_t, int32x2_t)
38068     _Form of expected instruction(s):_ 'vand D0, D0, D0'
38069
38070   * int16x4_t vand_s16 (int16x4_t, int16x4_t)
38071     _Form of expected instruction(s):_ 'vand D0, D0, D0'
38072
38073   * int8x8_t vand_s8 (int8x8_t, int8x8_t)
38074     _Form of expected instruction(s):_ 'vand D0, D0, D0'
38075
38076   * uint64x1_t vand_u64 (uint64x1_t, uint64x1_t)
38077
38078   * int64x1_t vand_s64 (int64x1_t, int64x1_t)
38079
38080   * uint32x4_t vandq_u32 (uint32x4_t, uint32x4_t)
38081     _Form of expected instruction(s):_ 'vand Q0, Q0, Q0'
38082
38083   * uint16x8_t vandq_u16 (uint16x8_t, uint16x8_t)
38084     _Form of expected instruction(s):_ 'vand Q0, Q0, Q0'
38085
38086   * uint8x16_t vandq_u8 (uint8x16_t, uint8x16_t)
38087     _Form of expected instruction(s):_ 'vand Q0, Q0, Q0'
38088
38089   * int32x4_t vandq_s32 (int32x4_t, int32x4_t)
38090     _Form of expected instruction(s):_ 'vand Q0, Q0, Q0'
38091
38092   * int16x8_t vandq_s16 (int16x8_t, int16x8_t)
38093     _Form of expected instruction(s):_ 'vand Q0, Q0, Q0'
38094
38095   * int8x16_t vandq_s8 (int8x16_t, int8x16_t)
38096     _Form of expected instruction(s):_ 'vand Q0, Q0, Q0'
38097
38098   * uint64x2_t vandq_u64 (uint64x2_t, uint64x2_t)
38099     _Form of expected instruction(s):_ 'vand Q0, Q0, Q0'
38100
38101   * int64x2_t vandq_s64 (int64x2_t, int64x2_t)
38102     _Form of expected instruction(s):_ 'vand Q0, Q0, Q0'
38103
381046.57.6.84 Logical operations (OR)
38105.................................
38106
38107   * uint32x2_t vorr_u32 (uint32x2_t, uint32x2_t)
38108     _Form of expected instruction(s):_ 'vorr D0, D0, D0'
38109
38110   * uint16x4_t vorr_u16 (uint16x4_t, uint16x4_t)
38111     _Form of expected instruction(s):_ 'vorr D0, D0, D0'
38112
38113   * uint8x8_t vorr_u8 (uint8x8_t, uint8x8_t)
38114     _Form of expected instruction(s):_ 'vorr D0, D0, D0'
38115
38116   * int32x2_t vorr_s32 (int32x2_t, int32x2_t)
38117     _Form of expected instruction(s):_ 'vorr D0, D0, D0'
38118
38119   * int16x4_t vorr_s16 (int16x4_t, int16x4_t)
38120     _Form of expected instruction(s):_ 'vorr D0, D0, D0'
38121
38122   * int8x8_t vorr_s8 (int8x8_t, int8x8_t)
38123     _Form of expected instruction(s):_ 'vorr D0, D0, D0'
38124
38125   * uint64x1_t vorr_u64 (uint64x1_t, uint64x1_t)
38126
38127   * int64x1_t vorr_s64 (int64x1_t, int64x1_t)
38128
38129   * uint32x4_t vorrq_u32 (uint32x4_t, uint32x4_t)
38130     _Form of expected instruction(s):_ 'vorr Q0, Q0, Q0'
38131
38132   * uint16x8_t vorrq_u16 (uint16x8_t, uint16x8_t)
38133     _Form of expected instruction(s):_ 'vorr Q0, Q0, Q0'
38134
38135   * uint8x16_t vorrq_u8 (uint8x16_t, uint8x16_t)
38136     _Form of expected instruction(s):_ 'vorr Q0, Q0, Q0'
38137
38138   * int32x4_t vorrq_s32 (int32x4_t, int32x4_t)
38139     _Form of expected instruction(s):_ 'vorr Q0, Q0, Q0'
38140
38141   * int16x8_t vorrq_s16 (int16x8_t, int16x8_t)
38142     _Form of expected instruction(s):_ 'vorr Q0, Q0, Q0'
38143
38144   * int8x16_t vorrq_s8 (int8x16_t, int8x16_t)
38145     _Form of expected instruction(s):_ 'vorr Q0, Q0, Q0'
38146
38147   * uint64x2_t vorrq_u64 (uint64x2_t, uint64x2_t)
38148     _Form of expected instruction(s):_ 'vorr Q0, Q0, Q0'
38149
38150   * int64x2_t vorrq_s64 (int64x2_t, int64x2_t)
38151     _Form of expected instruction(s):_ 'vorr Q0, Q0, Q0'
38152
381536.57.6.85 Logical operations (exclusive OR)
38154...........................................
38155
38156   * uint32x2_t veor_u32 (uint32x2_t, uint32x2_t)
38157     _Form of expected instruction(s):_ 'veor D0, D0, D0'
38158
38159   * uint16x4_t veor_u16 (uint16x4_t, uint16x4_t)
38160     _Form of expected instruction(s):_ 'veor D0, D0, D0'
38161
38162   * uint8x8_t veor_u8 (uint8x8_t, uint8x8_t)
38163     _Form of expected instruction(s):_ 'veor D0, D0, D0'
38164
38165   * int32x2_t veor_s32 (int32x2_t, int32x2_t)
38166     _Form of expected instruction(s):_ 'veor D0, D0, D0'
38167
38168   * int16x4_t veor_s16 (int16x4_t, int16x4_t)
38169     _Form of expected instruction(s):_ 'veor D0, D0, D0'
38170
38171   * int8x8_t veor_s8 (int8x8_t, int8x8_t)
38172     _Form of expected instruction(s):_ 'veor D0, D0, D0'
38173
38174   * uint64x1_t veor_u64 (uint64x1_t, uint64x1_t)
38175
38176   * int64x1_t veor_s64 (int64x1_t, int64x1_t)
38177
38178   * uint32x4_t veorq_u32 (uint32x4_t, uint32x4_t)
38179     _Form of expected instruction(s):_ 'veor Q0, Q0, Q0'
38180
38181   * uint16x8_t veorq_u16 (uint16x8_t, uint16x8_t)
38182     _Form of expected instruction(s):_ 'veor Q0, Q0, Q0'
38183
38184   * uint8x16_t veorq_u8 (uint8x16_t, uint8x16_t)
38185     _Form of expected instruction(s):_ 'veor Q0, Q0, Q0'
38186
38187   * int32x4_t veorq_s32 (int32x4_t, int32x4_t)
38188     _Form of expected instruction(s):_ 'veor Q0, Q0, Q0'
38189
38190   * int16x8_t veorq_s16 (int16x8_t, int16x8_t)
38191     _Form of expected instruction(s):_ 'veor Q0, Q0, Q0'
38192
38193   * int8x16_t veorq_s8 (int8x16_t, int8x16_t)
38194     _Form of expected instruction(s):_ 'veor Q0, Q0, Q0'
38195
38196   * uint64x2_t veorq_u64 (uint64x2_t, uint64x2_t)
38197     _Form of expected instruction(s):_ 'veor Q0, Q0, Q0'
38198
38199   * int64x2_t veorq_s64 (int64x2_t, int64x2_t)
38200     _Form of expected instruction(s):_ 'veor Q0, Q0, Q0'
38201
382026.57.6.86 Logical operations (AND-NOT)
38203......................................
38204
38205   * uint32x2_t vbic_u32 (uint32x2_t, uint32x2_t)
38206     _Form of expected instruction(s):_ 'vbic D0, D0, D0'
38207
38208   * uint16x4_t vbic_u16 (uint16x4_t, uint16x4_t)
38209     _Form of expected instruction(s):_ 'vbic D0, D0, D0'
38210
38211   * uint8x8_t vbic_u8 (uint8x8_t, uint8x8_t)
38212     _Form of expected instruction(s):_ 'vbic D0, D0, D0'
38213
38214   * int32x2_t vbic_s32 (int32x2_t, int32x2_t)
38215     _Form of expected instruction(s):_ 'vbic D0, D0, D0'
38216
38217   * int16x4_t vbic_s16 (int16x4_t, int16x4_t)
38218     _Form of expected instruction(s):_ 'vbic D0, D0, D0'
38219
38220   * int8x8_t vbic_s8 (int8x8_t, int8x8_t)
38221     _Form of expected instruction(s):_ 'vbic D0, D0, D0'
38222
38223   * uint64x1_t vbic_u64 (uint64x1_t, uint64x1_t)
38224
38225   * int64x1_t vbic_s64 (int64x1_t, int64x1_t)
38226
38227   * uint32x4_t vbicq_u32 (uint32x4_t, uint32x4_t)
38228     _Form of expected instruction(s):_ 'vbic Q0, Q0, Q0'
38229
38230   * uint16x8_t vbicq_u16 (uint16x8_t, uint16x8_t)
38231     _Form of expected instruction(s):_ 'vbic Q0, Q0, Q0'
38232
38233   * uint8x16_t vbicq_u8 (uint8x16_t, uint8x16_t)
38234     _Form of expected instruction(s):_ 'vbic Q0, Q0, Q0'
38235
38236   * int32x4_t vbicq_s32 (int32x4_t, int32x4_t)
38237     _Form of expected instruction(s):_ 'vbic Q0, Q0, Q0'
38238
38239   * int16x8_t vbicq_s16 (int16x8_t, int16x8_t)
38240     _Form of expected instruction(s):_ 'vbic Q0, Q0, Q0'
38241
38242   * int8x16_t vbicq_s8 (int8x16_t, int8x16_t)
38243     _Form of expected instruction(s):_ 'vbic Q0, Q0, Q0'
38244
38245   * uint64x2_t vbicq_u64 (uint64x2_t, uint64x2_t)
38246     _Form of expected instruction(s):_ 'vbic Q0, Q0, Q0'
38247
38248   * int64x2_t vbicq_s64 (int64x2_t, int64x2_t)
38249     _Form of expected instruction(s):_ 'vbic Q0, Q0, Q0'
38250
382516.57.6.87 Logical operations (OR-NOT)
38252.....................................
38253
38254   * uint32x2_t vorn_u32 (uint32x2_t, uint32x2_t)
38255     _Form of expected instruction(s):_ 'vorn D0, D0, D0'
38256
38257   * uint16x4_t vorn_u16 (uint16x4_t, uint16x4_t)
38258     _Form of expected instruction(s):_ 'vorn D0, D0, D0'
38259
38260   * uint8x8_t vorn_u8 (uint8x8_t, uint8x8_t)
38261     _Form of expected instruction(s):_ 'vorn D0, D0, D0'
38262
38263   * int32x2_t vorn_s32 (int32x2_t, int32x2_t)
38264     _Form of expected instruction(s):_ 'vorn D0, D0, D0'
38265
38266   * int16x4_t vorn_s16 (int16x4_t, int16x4_t)
38267     _Form of expected instruction(s):_ 'vorn D0, D0, D0'
38268
38269   * int8x8_t vorn_s8 (int8x8_t, int8x8_t)
38270     _Form of expected instruction(s):_ 'vorn D0, D0, D0'
38271
38272   * uint64x1_t vorn_u64 (uint64x1_t, uint64x1_t)
38273
38274   * int64x1_t vorn_s64 (int64x1_t, int64x1_t)
38275
38276   * uint32x4_t vornq_u32 (uint32x4_t, uint32x4_t)
38277     _Form of expected instruction(s):_ 'vorn Q0, Q0, Q0'
38278
38279   * uint16x8_t vornq_u16 (uint16x8_t, uint16x8_t)
38280     _Form of expected instruction(s):_ 'vorn Q0, Q0, Q0'
38281
38282   * uint8x16_t vornq_u8 (uint8x16_t, uint8x16_t)
38283     _Form of expected instruction(s):_ 'vorn Q0, Q0, Q0'
38284
38285   * int32x4_t vornq_s32 (int32x4_t, int32x4_t)
38286     _Form of expected instruction(s):_ 'vorn Q0, Q0, Q0'
38287
38288   * int16x8_t vornq_s16 (int16x8_t, int16x8_t)
38289     _Form of expected instruction(s):_ 'vorn Q0, Q0, Q0'
38290
38291   * int8x16_t vornq_s8 (int8x16_t, int8x16_t)
38292     _Form of expected instruction(s):_ 'vorn Q0, Q0, Q0'
38293
38294   * uint64x2_t vornq_u64 (uint64x2_t, uint64x2_t)
38295     _Form of expected instruction(s):_ 'vorn Q0, Q0, Q0'
38296
38297   * int64x2_t vornq_s64 (int64x2_t, int64x2_t)
38298     _Form of expected instruction(s):_ 'vorn Q0, Q0, Q0'
38299
383006.57.6.88 Reinterpret casts
38301...........................
38302
38303   * poly8x8_t vreinterpret_p8_p16 (poly16x4_t)
38304
38305   * poly8x8_t vreinterpret_p8_f32 (float32x2_t)
38306
38307   * poly8x8_t vreinterpret_p8_p64 (poly64x1_t)
38308
38309   * poly8x8_t vreinterpret_p8_s64 (int64x1_t)
38310
38311   * poly8x8_t vreinterpret_p8_u64 (uint64x1_t)
38312
38313   * poly8x8_t vreinterpret_p8_s8 (int8x8_t)
38314
38315   * poly8x8_t vreinterpret_p8_s16 (int16x4_t)
38316
38317   * poly8x8_t vreinterpret_p8_s32 (int32x2_t)
38318
38319   * poly8x8_t vreinterpret_p8_u8 (uint8x8_t)
38320
38321   * poly8x8_t vreinterpret_p8_u16 (uint16x4_t)
38322
38323   * poly8x8_t vreinterpret_p8_u32 (uint32x2_t)
38324
38325   * poly16x4_t vreinterpret_p16_p8 (poly8x8_t)
38326
38327   * poly16x4_t vreinterpret_p16_f32 (float32x2_t)
38328
38329   * poly16x4_t vreinterpret_p16_p64 (poly64x1_t)
38330
38331   * poly16x4_t vreinterpret_p16_s64 (int64x1_t)
38332
38333   * poly16x4_t vreinterpret_p16_u64 (uint64x1_t)
38334
38335   * poly16x4_t vreinterpret_p16_s8 (int8x8_t)
38336
38337   * poly16x4_t vreinterpret_p16_s16 (int16x4_t)
38338
38339   * poly16x4_t vreinterpret_p16_s32 (int32x2_t)
38340
38341   * poly16x4_t vreinterpret_p16_u8 (uint8x8_t)
38342
38343   * poly16x4_t vreinterpret_p16_u16 (uint16x4_t)
38344
38345   * poly16x4_t vreinterpret_p16_u32 (uint32x2_t)
38346
38347   * float32x2_t vreinterpret_f32_p8 (poly8x8_t)
38348
38349   * float32x2_t vreinterpret_f32_p16 (poly16x4_t)
38350
38351   * float32x2_t vreinterpret_f32_p64 (poly64x1_t)
38352
38353   * float32x2_t vreinterpret_f32_s64 (int64x1_t)
38354
38355   * float32x2_t vreinterpret_f32_u64 (uint64x1_t)
38356
38357   * float32x2_t vreinterpret_f32_s8 (int8x8_t)
38358
38359   * float32x2_t vreinterpret_f32_s16 (int16x4_t)
38360
38361   * float32x2_t vreinterpret_f32_s32 (int32x2_t)
38362
38363   * float32x2_t vreinterpret_f32_u8 (uint8x8_t)
38364
38365   * float32x2_t vreinterpret_f32_u16 (uint16x4_t)
38366
38367   * float32x2_t vreinterpret_f32_u32 (uint32x2_t)
38368
38369   * poly64x1_t vreinterpret_p64_p8 (poly8x8_t)
38370
38371   * poly64x1_t vreinterpret_p64_p16 (poly16x4_t)
38372
38373   * poly64x1_t vreinterpret_p64_f32 (float32x2_t)
38374
38375   * poly64x1_t vreinterpret_p64_s64 (int64x1_t)
38376
38377   * poly64x1_t vreinterpret_p64_u64 (uint64x1_t)
38378
38379   * poly64x1_t vreinterpret_p64_s8 (int8x8_t)
38380
38381   * poly64x1_t vreinterpret_p64_s16 (int16x4_t)
38382
38383   * poly64x1_t vreinterpret_p64_s32 (int32x2_t)
38384
38385   * poly64x1_t vreinterpret_p64_u8 (uint8x8_t)
38386
38387   * poly64x1_t vreinterpret_p64_u16 (uint16x4_t)
38388
38389   * poly64x1_t vreinterpret_p64_u32 (uint32x2_t)
38390
38391   * int64x1_t vreinterpret_s64_p8 (poly8x8_t)
38392
38393   * int64x1_t vreinterpret_s64_p16 (poly16x4_t)
38394
38395   * int64x1_t vreinterpret_s64_f32 (float32x2_t)
38396
38397   * int64x1_t vreinterpret_s64_p64 (poly64x1_t)
38398
38399   * int64x1_t vreinterpret_s64_u64 (uint64x1_t)
38400
38401   * int64x1_t vreinterpret_s64_s8 (int8x8_t)
38402
38403   * int64x1_t vreinterpret_s64_s16 (int16x4_t)
38404
38405   * int64x1_t vreinterpret_s64_s32 (int32x2_t)
38406
38407   * int64x1_t vreinterpret_s64_u8 (uint8x8_t)
38408
38409   * int64x1_t vreinterpret_s64_u16 (uint16x4_t)
38410
38411   * int64x1_t vreinterpret_s64_u32 (uint32x2_t)
38412
38413   * uint64x1_t vreinterpret_u64_p8 (poly8x8_t)
38414
38415   * uint64x1_t vreinterpret_u64_p16 (poly16x4_t)
38416
38417   * uint64x1_t vreinterpret_u64_f32 (float32x2_t)
38418
38419   * uint64x1_t vreinterpret_u64_p64 (poly64x1_t)
38420
38421   * uint64x1_t vreinterpret_u64_s64 (int64x1_t)
38422
38423   * uint64x1_t vreinterpret_u64_s8 (int8x8_t)
38424
38425   * uint64x1_t vreinterpret_u64_s16 (int16x4_t)
38426
38427   * uint64x1_t vreinterpret_u64_s32 (int32x2_t)
38428
38429   * uint64x1_t vreinterpret_u64_u8 (uint8x8_t)
38430
38431   * uint64x1_t vreinterpret_u64_u16 (uint16x4_t)
38432
38433   * uint64x1_t vreinterpret_u64_u32 (uint32x2_t)
38434
38435   * int8x8_t vreinterpret_s8_p8 (poly8x8_t)
38436
38437   * int8x8_t vreinterpret_s8_p16 (poly16x4_t)
38438
38439   * int8x8_t vreinterpret_s8_f32 (float32x2_t)
38440
38441   * int8x8_t vreinterpret_s8_p64 (poly64x1_t)
38442
38443   * int8x8_t vreinterpret_s8_s64 (int64x1_t)
38444
38445   * int8x8_t vreinterpret_s8_u64 (uint64x1_t)
38446
38447   * int8x8_t vreinterpret_s8_s16 (int16x4_t)
38448
38449   * int8x8_t vreinterpret_s8_s32 (int32x2_t)
38450
38451   * int8x8_t vreinterpret_s8_u8 (uint8x8_t)
38452
38453   * int8x8_t vreinterpret_s8_u16 (uint16x4_t)
38454
38455   * int8x8_t vreinterpret_s8_u32 (uint32x2_t)
38456
38457   * int16x4_t vreinterpret_s16_p8 (poly8x8_t)
38458
38459   * int16x4_t vreinterpret_s16_p16 (poly16x4_t)
38460
38461   * int16x4_t vreinterpret_s16_f32 (float32x2_t)
38462
38463   * int16x4_t vreinterpret_s16_p64 (poly64x1_t)
38464
38465   * int16x4_t vreinterpret_s16_s64 (int64x1_t)
38466
38467   * int16x4_t vreinterpret_s16_u64 (uint64x1_t)
38468
38469   * int16x4_t vreinterpret_s16_s8 (int8x8_t)
38470
38471   * int16x4_t vreinterpret_s16_s32 (int32x2_t)
38472
38473   * int16x4_t vreinterpret_s16_u8 (uint8x8_t)
38474
38475   * int16x4_t vreinterpret_s16_u16 (uint16x4_t)
38476
38477   * int16x4_t vreinterpret_s16_u32 (uint32x2_t)
38478
38479   * int32x2_t vreinterpret_s32_p8 (poly8x8_t)
38480
38481   * int32x2_t vreinterpret_s32_p16 (poly16x4_t)
38482
38483   * int32x2_t vreinterpret_s32_f32 (float32x2_t)
38484
38485   * int32x2_t vreinterpret_s32_p64 (poly64x1_t)
38486
38487   * int32x2_t vreinterpret_s32_s64 (int64x1_t)
38488
38489   * int32x2_t vreinterpret_s32_u64 (uint64x1_t)
38490
38491   * int32x2_t vreinterpret_s32_s8 (int8x8_t)
38492
38493   * int32x2_t vreinterpret_s32_s16 (int16x4_t)
38494
38495   * int32x2_t vreinterpret_s32_u8 (uint8x8_t)
38496
38497   * int32x2_t vreinterpret_s32_u16 (uint16x4_t)
38498
38499   * int32x2_t vreinterpret_s32_u32 (uint32x2_t)
38500
38501   * uint8x8_t vreinterpret_u8_p8 (poly8x8_t)
38502
38503   * uint8x8_t vreinterpret_u8_p16 (poly16x4_t)
38504
38505   * uint8x8_t vreinterpret_u8_f32 (float32x2_t)
38506
38507   * uint8x8_t vreinterpret_u8_p64 (poly64x1_t)
38508
38509   * uint8x8_t vreinterpret_u8_s64 (int64x1_t)
38510
38511   * uint8x8_t vreinterpret_u8_u64 (uint64x1_t)
38512
38513   * uint8x8_t vreinterpret_u8_s8 (int8x8_t)
38514
38515   * uint8x8_t vreinterpret_u8_s16 (int16x4_t)
38516
38517   * uint8x8_t vreinterpret_u8_s32 (int32x2_t)
38518
38519   * uint8x8_t vreinterpret_u8_u16 (uint16x4_t)
38520
38521   * uint8x8_t vreinterpret_u8_u32 (uint32x2_t)
38522
38523   * uint16x4_t vreinterpret_u16_p8 (poly8x8_t)
38524
38525   * uint16x4_t vreinterpret_u16_p16 (poly16x4_t)
38526
38527   * uint16x4_t vreinterpret_u16_f32 (float32x2_t)
38528
38529   * uint16x4_t vreinterpret_u16_p64 (poly64x1_t)
38530
38531   * uint16x4_t vreinterpret_u16_s64 (int64x1_t)
38532
38533   * uint16x4_t vreinterpret_u16_u64 (uint64x1_t)
38534
38535   * uint16x4_t vreinterpret_u16_s8 (int8x8_t)
38536
38537   * uint16x4_t vreinterpret_u16_s16 (int16x4_t)
38538
38539   * uint16x4_t vreinterpret_u16_s32 (int32x2_t)
38540
38541   * uint16x4_t vreinterpret_u16_u8 (uint8x8_t)
38542
38543   * uint16x4_t vreinterpret_u16_u32 (uint32x2_t)
38544
38545   * uint32x2_t vreinterpret_u32_p8 (poly8x8_t)
38546
38547   * uint32x2_t vreinterpret_u32_p16 (poly16x4_t)
38548
38549   * uint32x2_t vreinterpret_u32_f32 (float32x2_t)
38550
38551   * uint32x2_t vreinterpret_u32_p64 (poly64x1_t)
38552
38553   * uint32x2_t vreinterpret_u32_s64 (int64x1_t)
38554
38555   * uint32x2_t vreinterpret_u32_u64 (uint64x1_t)
38556
38557   * uint32x2_t vreinterpret_u32_s8 (int8x8_t)
38558
38559   * uint32x2_t vreinterpret_u32_s16 (int16x4_t)
38560
38561   * uint32x2_t vreinterpret_u32_s32 (int32x2_t)
38562
38563   * uint32x2_t vreinterpret_u32_u8 (uint8x8_t)
38564
38565   * uint32x2_t vreinterpret_u32_u16 (uint16x4_t)
38566
38567   * poly8x16_t vreinterpretq_p8_p16 (poly16x8_t)
38568
38569   * poly8x16_t vreinterpretq_p8_f32 (float32x4_t)
38570
38571   * poly8x16_t vreinterpretq_p8_p64 (poly64x2_t)
38572
38573   * poly8x16_t vreinterpretq_p8_p128 (poly128_t)
38574
38575   * poly8x16_t vreinterpretq_p8_s64 (int64x2_t)
38576
38577   * poly8x16_t vreinterpretq_p8_u64 (uint64x2_t)
38578
38579   * poly8x16_t vreinterpretq_p8_s8 (int8x16_t)
38580
38581   * poly8x16_t vreinterpretq_p8_s16 (int16x8_t)
38582
38583   * poly8x16_t vreinterpretq_p8_s32 (int32x4_t)
38584
38585   * poly8x16_t vreinterpretq_p8_u8 (uint8x16_t)
38586
38587   * poly8x16_t vreinterpretq_p8_u16 (uint16x8_t)
38588
38589   * poly8x16_t vreinterpretq_p8_u32 (uint32x4_t)
38590
38591   * poly16x8_t vreinterpretq_p16_p8 (poly8x16_t)
38592
38593   * poly16x8_t vreinterpretq_p16_f32 (float32x4_t)
38594
38595   * poly16x8_t vreinterpretq_p16_p64 (poly64x2_t)
38596
38597   * poly16x8_t vreinterpretq_p16_p128 (poly128_t)
38598
38599   * poly16x8_t vreinterpretq_p16_s64 (int64x2_t)
38600
38601   * poly16x8_t vreinterpretq_p16_u64 (uint64x2_t)
38602
38603   * poly16x8_t vreinterpretq_p16_s8 (int8x16_t)
38604
38605   * poly16x8_t vreinterpretq_p16_s16 (int16x8_t)
38606
38607   * poly16x8_t vreinterpretq_p16_s32 (int32x4_t)
38608
38609   * poly16x8_t vreinterpretq_p16_u8 (uint8x16_t)
38610
38611   * poly16x8_t vreinterpretq_p16_u16 (uint16x8_t)
38612
38613   * poly16x8_t vreinterpretq_p16_u32 (uint32x4_t)
38614
38615   * float32x4_t vreinterpretq_f32_p8 (poly8x16_t)
38616
38617   * float32x4_t vreinterpretq_f32_p16 (poly16x8_t)
38618
38619   * float32x4_t vreinterpretq_f32_p64 (poly64x2_t)
38620
38621   * float32x4_t vreinterpretq_f32_p128 (poly128_t)
38622
38623   * float32x4_t vreinterpretq_f32_s64 (int64x2_t)
38624
38625   * float32x4_t vreinterpretq_f32_u64 (uint64x2_t)
38626
38627   * float32x4_t vreinterpretq_f32_s8 (int8x16_t)
38628
38629   * float32x4_t vreinterpretq_f32_s16 (int16x8_t)
38630
38631   * float32x4_t vreinterpretq_f32_s32 (int32x4_t)
38632
38633   * float32x4_t vreinterpretq_f32_u8 (uint8x16_t)
38634
38635   * float32x4_t vreinterpretq_f32_u16 (uint16x8_t)
38636
38637   * float32x4_t vreinterpretq_f32_u32 (uint32x4_t)
38638
38639   * poly64x2_t vreinterpretq_p64_p8 (poly8x16_t)
38640
38641   * poly64x2_t vreinterpretq_p64_p16 (poly16x8_t)
38642
38643   * poly64x2_t vreinterpretq_p64_f32 (float32x4_t)
38644
38645   * poly64x2_t vreinterpretq_p64_p128 (poly128_t)
38646
38647   * poly64x2_t vreinterpretq_p64_s64 (int64x2_t)
38648
38649   * poly64x2_t vreinterpretq_p64_u64 (uint64x2_t)
38650
38651   * poly64x2_t vreinterpretq_p64_s8 (int8x16_t)
38652
38653   * poly64x2_t vreinterpretq_p64_s16 (int16x8_t)
38654
38655   * poly64x2_t vreinterpretq_p64_s32 (int32x4_t)
38656
38657   * poly64x2_t vreinterpretq_p64_u8 (uint8x16_t)
38658
38659   * poly64x2_t vreinterpretq_p64_u16 (uint16x8_t)
38660
38661   * poly64x2_t vreinterpretq_p64_u32 (uint32x4_t)
38662
38663   * poly128_t vreinterpretq_p128_p8 (poly8x16_t)
38664
38665   * poly128_t vreinterpretq_p128_p16 (poly16x8_t)
38666
38667   * poly128_t vreinterpretq_p128_f32 (float32x4_t)
38668
38669   * poly128_t vreinterpretq_p128_p64 (poly64x2_t)
38670
38671   * poly128_t vreinterpretq_p128_s64 (int64x2_t)
38672
38673   * poly128_t vreinterpretq_p128_u64 (uint64x2_t)
38674
38675   * poly128_t vreinterpretq_p128_s8 (int8x16_t)
38676
38677   * poly128_t vreinterpretq_p128_s16 (int16x8_t)
38678
38679   * poly128_t vreinterpretq_p128_s32 (int32x4_t)
38680
38681   * poly128_t vreinterpretq_p128_u8 (uint8x16_t)
38682
38683   * poly128_t vreinterpretq_p128_u16 (uint16x8_t)
38684
38685   * poly128_t vreinterpretq_p128_u32 (uint32x4_t)
38686
38687   * int64x2_t vreinterpretq_s64_p8 (poly8x16_t)
38688
38689   * int64x2_t vreinterpretq_s64_p16 (poly16x8_t)
38690
38691   * int64x2_t vreinterpretq_s64_f32 (float32x4_t)
38692
38693   * int64x2_t vreinterpretq_s64_p64 (poly64x2_t)
38694
38695   * int64x2_t vreinterpretq_s64_p128 (poly128_t)
38696
38697   * int64x2_t vreinterpretq_s64_u64 (uint64x2_t)
38698
38699   * int64x2_t vreinterpretq_s64_s8 (int8x16_t)
38700
38701   * int64x2_t vreinterpretq_s64_s16 (int16x8_t)
38702
38703   * int64x2_t vreinterpretq_s64_s32 (int32x4_t)
38704
38705   * int64x2_t vreinterpretq_s64_u8 (uint8x16_t)
38706
38707   * int64x2_t vreinterpretq_s64_u16 (uint16x8_t)
38708
38709   * int64x2_t vreinterpretq_s64_u32 (uint32x4_t)
38710
38711   * uint64x2_t vreinterpretq_u64_p8 (poly8x16_t)
38712
38713   * uint64x2_t vreinterpretq_u64_p16 (poly16x8_t)
38714
38715   * uint64x2_t vreinterpretq_u64_f32 (float32x4_t)
38716
38717   * uint64x2_t vreinterpretq_u64_p64 (poly64x2_t)
38718
38719   * uint64x2_t vreinterpretq_u64_p128 (poly128_t)
38720
38721   * uint64x2_t vreinterpretq_u64_s64 (int64x2_t)
38722
38723   * uint64x2_t vreinterpretq_u64_s8 (int8x16_t)
38724
38725   * uint64x2_t vreinterpretq_u64_s16 (int16x8_t)
38726
38727   * uint64x2_t vreinterpretq_u64_s32 (int32x4_t)
38728
38729   * uint64x2_t vreinterpretq_u64_u8 (uint8x16_t)
38730
38731   * uint64x2_t vreinterpretq_u64_u16 (uint16x8_t)
38732
38733   * uint64x2_t vreinterpretq_u64_u32 (uint32x4_t)
38734
38735   * int8x16_t vreinterpretq_s8_p8 (poly8x16_t)
38736
38737   * int8x16_t vreinterpretq_s8_p16 (poly16x8_t)
38738
38739   * int8x16_t vreinterpretq_s8_f32 (float32x4_t)
38740
38741   * int8x16_t vreinterpretq_s8_p64 (poly64x2_t)
38742
38743   * int8x16_t vreinterpretq_s8_p128 (poly128_t)
38744
38745   * int8x16_t vreinterpretq_s8_s64 (int64x2_t)
38746
38747   * int8x16_t vreinterpretq_s8_u64 (uint64x2_t)
38748
38749   * int8x16_t vreinterpretq_s8_s16 (int16x8_t)
38750
38751   * int8x16_t vreinterpretq_s8_s32 (int32x4_t)
38752
38753   * int8x16_t vreinterpretq_s8_u8 (uint8x16_t)
38754
38755   * int8x16_t vreinterpretq_s8_u16 (uint16x8_t)
38756
38757   * int8x16_t vreinterpretq_s8_u32 (uint32x4_t)
38758
38759   * int16x8_t vreinterpretq_s16_p8 (poly8x16_t)
38760
38761   * int16x8_t vreinterpretq_s16_p16 (poly16x8_t)
38762
38763   * int16x8_t vreinterpretq_s16_f32 (float32x4_t)
38764
38765   * int16x8_t vreinterpretq_s16_p64 (poly64x2_t)
38766
38767   * int16x8_t vreinterpretq_s16_p128 (poly128_t)
38768
38769   * int16x8_t vreinterpretq_s16_s64 (int64x2_t)
38770
38771   * int16x8_t vreinterpretq_s16_u64 (uint64x2_t)
38772
38773   * int16x8_t vreinterpretq_s16_s8 (int8x16_t)
38774
38775   * int16x8_t vreinterpretq_s16_s32 (int32x4_t)
38776
38777   * int16x8_t vreinterpretq_s16_u8 (uint8x16_t)
38778
38779   * int16x8_t vreinterpretq_s16_u16 (uint16x8_t)
38780
38781   * int16x8_t vreinterpretq_s16_u32 (uint32x4_t)
38782
38783   * int32x4_t vreinterpretq_s32_p8 (poly8x16_t)
38784
38785   * int32x4_t vreinterpretq_s32_p16 (poly16x8_t)
38786
38787   * int32x4_t vreinterpretq_s32_f32 (float32x4_t)
38788
38789   * int32x4_t vreinterpretq_s32_p64 (poly64x2_t)
38790
38791   * int32x4_t vreinterpretq_s32_p128 (poly128_t)
38792
38793   * int32x4_t vreinterpretq_s32_s64 (int64x2_t)
38794
38795   * int32x4_t vreinterpretq_s32_u64 (uint64x2_t)
38796
38797   * int32x4_t vreinterpretq_s32_s8 (int8x16_t)
38798
38799   * int32x4_t vreinterpretq_s32_s16 (int16x8_t)
38800
38801   * int32x4_t vreinterpretq_s32_u8 (uint8x16_t)
38802
38803   * int32x4_t vreinterpretq_s32_u16 (uint16x8_t)
38804
38805   * int32x4_t vreinterpretq_s32_u32 (uint32x4_t)
38806
38807   * uint8x16_t vreinterpretq_u8_p8 (poly8x16_t)
38808
38809   * uint8x16_t vreinterpretq_u8_p16 (poly16x8_t)
38810
38811   * uint8x16_t vreinterpretq_u8_f32 (float32x4_t)
38812
38813   * uint8x16_t vreinterpretq_u8_p64 (poly64x2_t)
38814
38815   * uint8x16_t vreinterpretq_u8_p128 (poly128_t)
38816
38817   * uint8x16_t vreinterpretq_u8_s64 (int64x2_t)
38818
38819   * uint8x16_t vreinterpretq_u8_u64 (uint64x2_t)
38820
38821   * uint8x16_t vreinterpretq_u8_s8 (int8x16_t)
38822
38823   * uint8x16_t vreinterpretq_u8_s16 (int16x8_t)
38824
38825   * uint8x16_t vreinterpretq_u8_s32 (int32x4_t)
38826
38827   * uint8x16_t vreinterpretq_u8_u16 (uint16x8_t)
38828
38829   * uint8x16_t vreinterpretq_u8_u32 (uint32x4_t)
38830
38831   * uint16x8_t vreinterpretq_u16_p8 (poly8x16_t)
38832
38833   * uint16x8_t vreinterpretq_u16_p16 (poly16x8_t)
38834
38835   * uint16x8_t vreinterpretq_u16_f32 (float32x4_t)
38836
38837   * uint16x8_t vreinterpretq_u16_p64 (poly64x2_t)
38838
38839   * uint16x8_t vreinterpretq_u16_p128 (poly128_t)
38840
38841   * uint16x8_t vreinterpretq_u16_s64 (int64x2_t)
38842
38843   * uint16x8_t vreinterpretq_u16_u64 (uint64x2_t)
38844
38845   * uint16x8_t vreinterpretq_u16_s8 (int8x16_t)
38846
38847   * uint16x8_t vreinterpretq_u16_s16 (int16x8_t)
38848
38849   * uint16x8_t vreinterpretq_u16_s32 (int32x4_t)
38850
38851   * uint16x8_t vreinterpretq_u16_u8 (uint8x16_t)
38852
38853   * uint16x8_t vreinterpretq_u16_u32 (uint32x4_t)
38854
38855   * uint32x4_t vreinterpretq_u32_p8 (poly8x16_t)
38856
38857   * uint32x4_t vreinterpretq_u32_p16 (poly16x8_t)
38858
38859   * uint32x4_t vreinterpretq_u32_f32 (float32x4_t)
38860
38861   * uint32x4_t vreinterpretq_u32_p64 (poly64x2_t)
38862
38863   * uint32x4_t vreinterpretq_u32_p128 (poly128_t)
38864
38865   * uint32x4_t vreinterpretq_u32_s64 (int64x2_t)
38866
38867   * uint32x4_t vreinterpretq_u32_u64 (uint64x2_t)
38868
38869   * uint32x4_t vreinterpretq_u32_s8 (int8x16_t)
38870
38871   * uint32x4_t vreinterpretq_u32_s16 (int16x8_t)
38872
38873   * uint32x4_t vreinterpretq_u32_s32 (int32x4_t)
38874
38875   * uint32x4_t vreinterpretq_u32_u8 (uint8x16_t)
38876
38877   * uint32x4_t vreinterpretq_u32_u16 (uint16x8_t)
38878
38879   * poly128_t vldrq_p128(poly128_t const *)
38880
38881   * void vstrq_p128(poly128_t *, poly128_t)
38882
38883   * uint64x1_t vceq_p64 (poly64x1_t, poly64x1_t)
38884
38885   * uint64x1_t vtst_p64 (poly64x1_t, poly64x1_t)
38886
38887   * uint32_t vsha1h_u32 (uint32_t)
38888     _Form of expected instruction(s):_ 'sha1h.32 Q0, Q1'
38889
38890   * uint32x4_t vsha1cq_u32 (uint32x4_t, uint32_t, uint32x4_t)
38891     _Form of expected instruction(s):_ 'sha1c.32 Q0, Q1, Q2'
38892
38893   * uint32x4_t vsha1pq_u32 (uint32x4_t, uint32_t, uint32x4_t)
38894     _Form of expected instruction(s):_ 'sha1p.32 Q0, Q1, Q2'
38895
38896   * uint32x4_t vsha1mq_u32 (uint32x4_t, uint32_t, uint32x4_t)
38897     _Form of expected instruction(s):_ 'sha1m.32 Q0, Q1, Q2'
38898
38899   * uint32x4_t vsha1su0q_u32 (uint32x4_t, uint32x4_t, uint32x4_t)
38900     _Form of expected instruction(s):_ 'sha1su0.32 Q0, Q1, Q2'
38901
38902   * uint32x4_t vsha1su1q_u32 (uint32x4_t, uint32x4_t)
38903     _Form of expected instruction(s):_ 'sha1su1.32 Q0, Q1, Q2'
38904
38905   * uint32x4_t vsha256hq_u32 (uint32x4_t, uint32x4_t, uint32x4_t)
38906     _Form of expected instruction(s):_ 'sha256h.32 Q0, Q1, Q2'
38907
38908   * uint32x4_t vsha256h2q_u32 (uint32x4_t, uint32x4_t, uint32x4_t)
38909     _Form of expected instruction(s):_ 'sha256h2.32 Q0, Q1, Q2'
38910
38911   * uint32x4_t vsha256su0q_u32 (uint32x4_t, uint32x4_t)
38912     _Form of expected instruction(s):_ 'sha256su0.32 Q0, Q1'
38913
38914   * uint32x4_t vsha256su1q_u32 (uint32x4_t, uint32x4_t, uint32x4_t)
38915     _Form of expected instruction(s):_ 'sha256su1.32 Q0, Q1, Q2'
38916
38917   * poly128_t vmull_p64 (poly64_t a, poly64_t b)
38918     _Form of expected instruction(s):_ 'vmull.p64 Q0, D1, D2'
38919
38920   * poly128_t vmull_high_p64 (poly64x2_t a, poly64x2_t b)
38921     _Form of expected instruction(s):_ 'vmull.p64 Q0, D1, D2'
38922
38923
38924File: gcc.info,  Node: ARM ACLE Intrinsics,  Next: AVR Built-in Functions,  Prev: ARM NEON Intrinsics,  Up: Target Builtins
38925
389266.57.7 ARM ACLE Intrinsics
38927--------------------------
38928
389296.57.7.1 CRC32 intrinsics
38930.........................
38931
38932These intrinsics are available when the CRC32 architecture extension is
38933specified, e.g.  when the '-march=armv8-a+crc' switch is used, or when
38934the target processor specified with '-mcpu' supports it.
38935
38936   * uint32_t __crc32b (uint32_t, uint8_t)
38937     _Form of expected instruction(s):_ 'crc32b R0, R0, R0'
38938
38939   * uint32_t __crc32h (uint32_t, uint16_t)
38940     _Form of expected instruction(s):_ 'crc32h R0, R0, R0'
38941
38942   * uint32_t __crc32w (uint32_t, uint32_t)
38943     _Form of expected instruction(s):_ 'crc32w R0, R0, R0'
38944
38945   * uint32_t __crc32d (uint32_t, uint64_t)
38946     _Form of expected instruction(s):_ Two 'crc32w R0, R0, R0'
38947     instructions.
38948
38949   * uint32_t __crc32cb (uint32_t, uint8_t)
38950     _Form of expected instruction(s):_ 'crc32cb R0, R0, R0'
38951
38952   * uint32_t __crc32ch (uint32_t, uint16_t)
38953     _Form of expected instruction(s):_ 'crc32ch R0, R0, R0'
38954
38955   * uint32_t __crc32cw (uint32_t, uint32_t)
38956     _Form of expected instruction(s):_ 'crc32cw R0, R0, R0'
38957
38958   * uint32_t __crc32cd (uint32_t, uint64_t)
38959     _Form of expected instruction(s):_ Two 'crc32cw R0, R0, R0'
38960     instructions.
38961
38962
38963File: gcc.info,  Node: AVR Built-in Functions,  Next: Blackfin Built-in Functions,  Prev: ARM ACLE Intrinsics,  Up: Target Builtins
38964
389656.57.8 AVR Built-in Functions
38966-----------------------------
38967
38968For each built-in function for AVR, there is an equally named, uppercase
38969built-in macro defined.  That way users can easily query if or if not a
38970specific built-in is implemented or not.  For example, if
38971'__builtin_avr_nop' is available the macro '__BUILTIN_AVR_NOP' is
38972defined to '1' and undefined otherwise.
38973
38974 The following built-in functions map to the respective machine
38975instruction, i.e. 'nop', 'sei', 'cli', 'sleep', 'wdr', 'swap', 'fmul',
38976'fmuls' resp.  'fmulsu'.  The three 'fmul*' built-ins are implemented as
38977library call if no hardware multiplier is available.
38978
38979     void __builtin_avr_nop (void)
38980     void __builtin_avr_sei (void)
38981     void __builtin_avr_cli (void)
38982     void __builtin_avr_sleep (void)
38983     void __builtin_avr_wdr (void)
38984     unsigned char __builtin_avr_swap (unsigned char)
38985     unsigned int __builtin_avr_fmul (unsigned char, unsigned char)
38986     int __builtin_avr_fmuls (char, char)
38987     int __builtin_avr_fmulsu (char, unsigned char)
38988
38989 In order to delay execution for a specific number of cycles, GCC
38990implements
38991     void __builtin_avr_delay_cycles (unsigned long ticks)
38992
38993'ticks' is the number of ticks to delay execution.  Note that this
38994built-in does not take into account the effect of interrupts that might
38995increase delay time.  'ticks' must be a compile-time integer constant;
38996delays with a variable number of cycles are not supported.
38997
38998     char __builtin_avr_flash_segment (const __memx void*)
38999
39000This built-in takes a byte address to the 24-bit *note address space:
39001AVR Named Address Spaces. '__memx' and returns the number of the flash
39002segment (the 64 KiB chunk) where the address points to.  Counting starts
39003at '0'.  If the address does not point to flash memory, return '-1'.
39004
39005     unsigned char __builtin_avr_insert_bits (unsigned long map, unsigned char bits, unsigned char val)
39006
39007Insert bits from BITS into VAL and return the resulting value.  The
39008nibbles of MAP determine how the insertion is performed: Let X be the
39009N-th nibble of MAP
39010  1. If X is '0xf', then the N-th bit of VAL is returned unaltered.
39011
39012  2. If X is in the range 0...7, then the N-th result bit is set to the
39013     X-th bit of BITS
39014
39015  3. If X is in the range 8...'0xe', then the N-th result bit is
39016     undefined.
39017
39018One typical use case for this built-in is adjusting input and output
39019values to non-contiguous port layouts.  Some examples:
39020
39021     // same as val, bits is unused
39022     __builtin_avr_insert_bits (0xffffffff, bits, val)
39023
39024     // same as bits, val is unused
39025     __builtin_avr_insert_bits (0x76543210, bits, val)
39026
39027     // same as rotating bits by 4
39028     __builtin_avr_insert_bits (0x32107654, bits, 0)
39029
39030     // high nibble of result is the high nibble of val
39031     // low nibble of result is the low nibble of bits
39032     __builtin_avr_insert_bits (0xffff3210, bits, val)
39033
39034     // reverse the bit order of bits
39035     __builtin_avr_insert_bits (0x01234567, bits, 0)
39036
39037
39038File: gcc.info,  Node: Blackfin Built-in Functions,  Next: FR-V Built-in Functions,  Prev: AVR Built-in Functions,  Up: Target Builtins
39039
390406.57.9 Blackfin Built-in Functions
39041----------------------------------
39042
39043Currently, there are two Blackfin-specific built-in functions.  These
39044are used for generating 'CSYNC' and 'SSYNC' machine insns without using
39045inline assembly; by using these built-in functions the compiler can
39046automatically add workarounds for hardware errata involving these
39047instructions.  These functions are named as follows:
39048
39049     void __builtin_bfin_csync (void)
39050     void __builtin_bfin_ssync (void)
39051
39052
39053File: gcc.info,  Node: FR-V Built-in Functions,  Next: X86 Built-in Functions,  Prev: Blackfin Built-in Functions,  Up: Target Builtins
39054
390556.57.10 FR-V Built-in Functions
39056-------------------------------
39057
39058GCC provides many FR-V-specific built-in functions.  In general, these
39059functions are intended to be compatible with those described by 'FR-V
39060Family, Softune C/C++ Compiler Manual (V6), Fujitsu Semiconductor'.  The
39061two exceptions are '__MDUNPACKH' and '__MBTOHE', the GCC forms of which
39062pass 128-bit values by pointer rather than by value.
39063
39064 Most of the functions are named after specific FR-V instructions.  Such
39065functions are said to be "directly mapped" and are summarized here in
39066tabular form.
39067
39068* Menu:
39069
39070* Argument Types::
39071* Directly-mapped Integer Functions::
39072* Directly-mapped Media Functions::
39073* Raw read/write Functions::
39074* Other Built-in Functions::
39075
39076
39077File: gcc.info,  Node: Argument Types,  Next: Directly-mapped Integer Functions,  Up: FR-V Built-in Functions
39078
390796.57.10.1 Argument Types
39080........................
39081
39082The arguments to the built-in functions can be divided into three
39083groups: register numbers, compile-time constants and run-time values.
39084In order to make this classification clear at a glance, the arguments
39085and return values are given the following pseudo types:
39086
39087Pseudo type    Real C type            Constant?   Description
39088'uh'           'unsigned short'       No          an unsigned halfword
39089'uw1'          'unsigned int'         No          an unsigned word
39090'sw1'          'int'                  No          a signed word
39091'uw2'          'unsigned long long'   No          an unsigned doubleword
39092'sw2'          'long long'            No          a signed doubleword
39093'const'        'int'                  Yes         an integer constant
39094'acc'          'int'                  Yes         an ACC register number
39095'iacc'         'int'                  Yes         an IACC register number
39096
39097 These pseudo types are not defined by GCC, they are simply a notational
39098convenience used in this manual.
39099
39100 Arguments of type 'uh', 'uw1', 'sw1', 'uw2' and 'sw2' are evaluated at
39101run time.  They correspond to register operands in the underlying FR-V
39102instructions.
39103
39104 'const' arguments represent immediate operands in the underlying FR-V
39105instructions.  They must be compile-time constants.
39106
39107 'acc' arguments are evaluated at compile time and specify the number of
39108an accumulator register.  For example, an 'acc' argument of 2 selects
39109the ACC2 register.
39110
39111 'iacc' arguments are similar to 'acc' arguments but specify the number
39112of an IACC register.  See *note Other Built-in Functions:: for more
39113details.
39114
39115
39116File: gcc.info,  Node: Directly-mapped Integer Functions,  Next: Directly-mapped Media Functions,  Prev: Argument Types,  Up: FR-V Built-in Functions
39117
391186.57.10.2 Directly-mapped Integer Functions
39119...........................................
39120
39121The functions listed below map directly to FR-V I-type instructions.
39122
39123Function prototype               Example usage           Assembly output
39124'sw1 __ADDSS (sw1, sw1)'         'C = __ADDSS (A, B)'    'ADDSS A,B,C'
39125'sw1 __SCAN (sw1, sw1)'          'C = __SCAN (A, B)'     'SCAN A,B,C'
39126'sw1 __SCUTSS (sw1)'             'B = __SCUTSS (A)'      'SCUTSS A,B'
39127'sw1 __SLASS (sw1, sw1)'         'C = __SLASS (A, B)'    'SLASS A,B,C'
39128'void __SMASS (sw1, sw1)'        '__SMASS (A, B)'        'SMASS A,B'
39129'void __SMSSS (sw1, sw1)'        '__SMSSS (A, B)'        'SMSSS A,B'
39130'void __SMU (sw1, sw1)'          '__SMU (A, B)'          'SMU A,B'
39131'sw2 __SMUL (sw1, sw1)'          'C = __SMUL (A, B)'     'SMUL A,B,C'
39132'sw1 __SUBSS (sw1, sw1)'         'C = __SUBSS (A, B)'    'SUBSS A,B,C'
39133'uw2 __UMUL (uw1, uw1)'          'C = __UMUL (A, B)'     'UMUL A,B,C'
39134
39135
39136File: gcc.info,  Node: Directly-mapped Media Functions,  Next: Raw read/write Functions,  Prev: Directly-mapped Integer Functions,  Up: FR-V Built-in Functions
39137
391386.57.10.3 Directly-mapped Media Functions
39139.........................................
39140
39141The functions listed below map directly to FR-V M-type instructions.
39142
39143Function prototype               Example usage           Assembly output
39144'uw1 __MABSHS (sw1)'             'B = __MABSHS (A)'      'MABSHS A,B'
39145'void __MADDACCS (acc, acc)'     '__MADDACCS (B, A)'     'MADDACCS A,B'
39146'sw1 __MADDHSS (sw1, sw1)'       'C = __MADDHSS (A,      'MADDHSS A,B,C'
39147                                 B)'
39148'uw1 __MADDHUS (uw1, uw1)'       'C = __MADDHUS (A,      'MADDHUS A,B,C'
39149                                 B)'
39150'uw1 __MAND (uw1, uw1)'          'C = __MAND (A, B)'     'MAND A,B,C'
39151'void __MASACCS (acc, acc)'      '__MASACCS (B, A)'      'MASACCS A,B'
39152'uw1 __MAVEH (uw1, uw1)'         'C = __MAVEH (A, B)'    'MAVEH A,B,C'
39153'uw2 __MBTOH (uw1)'              'B = __MBTOH (A)'       'MBTOH A,B'
39154'void __MBTOHE (uw1 *, uw1)'     '__MBTOHE (&B, A)'      'MBTOHE A,B'
39155'void __MCLRACC (acc)'           '__MCLRACC (A)'         'MCLRACC A'
39156'void __MCLRACCA (void)'         '__MCLRACCA ()'         'MCLRACCA'
39157'uw1 __Mcop1 (uw1, uw1)'         'C = __Mcop1 (A, B)'    'Mcop1 A,B,C'
39158'uw1 __Mcop2 (uw1, uw1)'         'C = __Mcop2 (A, B)'    'Mcop2 A,B,C'
39159'uw1 __MCPLHI (uw2, const)'      'C = __MCPLHI (A, B)'   'MCPLHI A,#B,C'
39160'uw1 __MCPLI (uw2, const)'       'C = __MCPLI (A, B)'    'MCPLI A,#B,C'
39161'void __MCPXIS (acc, sw1,        '__MCPXIS (C, A, B)'    'MCPXIS A,B,C'
39162sw1)'
39163'void __MCPXIU (acc, uw1,        '__MCPXIU (C, A, B)'    'MCPXIU A,B,C'
39164uw1)'
39165'void __MCPXRS (acc, sw1,        '__MCPXRS (C, A, B)'    'MCPXRS A,B,C'
39166sw1)'
39167'void __MCPXRU (acc, uw1,        '__MCPXRU (C, A, B)'    'MCPXRU A,B,C'
39168uw1)'
39169'uw1 __MCUT (acc, uw1)'          'C = __MCUT (A, B)'     'MCUT A,B,C'
39170'uw1 __MCUTSS (acc, sw1)'        'C = __MCUTSS (A, B)'   'MCUTSS A,B,C'
39171'void __MDADDACCS (acc, acc)'    '__MDADDACCS (B, A)'    'MDADDACCS A,B'
39172'void __MDASACCS (acc, acc)'     '__MDASACCS (B, A)'     'MDASACCS A,B'
39173'uw2 __MDCUTSSI (acc, const)'    'C = __MDCUTSSI (A,     'MDCUTSSI
39174                                 B)'                     A,#B,C'
39175'uw2 __MDPACKH (uw2, uw2)'       'C = __MDPACKH (A,      'MDPACKH A,B,C'
39176                                 B)'
39177'uw2 __MDROTLI (uw2, const)'     'C = __MDROTLI (A,      'MDROTLI
39178                                 B)'                     A,#B,C'
39179'void __MDSUBACCS (acc, acc)'    '__MDSUBACCS (B, A)'    'MDSUBACCS A,B'
39180'void __MDUNPACKH (uw1 *,        '__MDUNPACKH (&B, A)'   'MDUNPACKH A,B'
39181uw2)'
39182'uw2 __MEXPDHD (uw1, const)'     'C = __MEXPDHD (A,      'MEXPDHD
39183                                 B)'                     A,#B,C'
39184'uw1 __MEXPDHW (uw1, const)'     'C = __MEXPDHW (A,      'MEXPDHW
39185                                 B)'                     A,#B,C'
39186'uw1 __MHDSETH (uw1, const)'     'C = __MHDSETH (A,      'MHDSETH
39187                                 B)'                     A,#B,C'
39188'sw1 __MHDSETS (const)'          'B = __MHDSETS (A)'     'MHDSETS #A,B'
39189'uw1 __MHSETHIH (uw1, const)'    'B = __MHSETHIH (B,     'MHSETHIH #A,B'
39190                                 A)'
39191'sw1 __MHSETHIS (sw1, const)'    'B = __MHSETHIS (B,     'MHSETHIS #A,B'
39192                                 A)'
39193'uw1 __MHSETLOH (uw1, const)'    'B = __MHSETLOH (B,     'MHSETLOH #A,B'
39194                                 A)'
39195'sw1 __MHSETLOS (sw1, const)'    'B = __MHSETLOS (B,     'MHSETLOS #A,B'
39196                                 A)'
39197'uw1 __MHTOB (uw2)'              'B = __MHTOB (A)'       'MHTOB A,B'
39198'void __MMACHS (acc, sw1,        '__MMACHS (C, A, B)'    'MMACHS A,B,C'
39199sw1)'
39200'void __MMACHU (acc, uw1,        '__MMACHU (C, A, B)'    'MMACHU A,B,C'
39201uw1)'
39202'void __MMRDHS (acc, sw1,        '__MMRDHS (C, A, B)'    'MMRDHS A,B,C'
39203sw1)'
39204'void __MMRDHU (acc, uw1,        '__MMRDHU (C, A, B)'    'MMRDHU A,B,C'
39205uw1)'
39206'void __MMULHS (acc, sw1,        '__MMULHS (C, A, B)'    'MMULHS A,B,C'
39207sw1)'
39208'void __MMULHU (acc, uw1,        '__MMULHU (C, A, B)'    'MMULHU A,B,C'
39209uw1)'
39210'void __MMULXHS (acc, sw1,       '__MMULXHS (C, A, B)'   'MMULXHS A,B,C'
39211sw1)'
39212'void __MMULXHU (acc, uw1,       '__MMULXHU (C, A, B)'   'MMULXHU A,B,C'
39213uw1)'
39214'uw1 __MNOT (uw1)'               'B = __MNOT (A)'        'MNOT A,B'
39215'uw1 __MOR (uw1, uw1)'           'C = __MOR (A, B)'      'MOR A,B,C'
39216'uw1 __MPACKH (uh, uh)'          'C = __MPACKH (A, B)'   'MPACKH A,B,C'
39217'sw2 __MQADDHSS (sw2, sw2)'      'C = __MQADDHSS (A,     'MQADDHSS
39218                                 B)'                     A,B,C'
39219'uw2 __MQADDHUS (uw2, uw2)'      'C = __MQADDHUS (A,     'MQADDHUS
39220                                 B)'                     A,B,C'
39221'void __MQCPXIS (acc, sw2,       '__MQCPXIS (C, A, B)'   'MQCPXIS A,B,C'
39222sw2)'
39223'void __MQCPXIU (acc, uw2,       '__MQCPXIU (C, A, B)'   'MQCPXIU A,B,C'
39224uw2)'
39225'void __MQCPXRS (acc, sw2,       '__MQCPXRS (C, A, B)'   'MQCPXRS A,B,C'
39226sw2)'
39227'void __MQCPXRU (acc, uw2,       '__MQCPXRU (C, A, B)'   'MQCPXRU A,B,C'
39228uw2)'
39229'sw2 __MQLCLRHS (sw2, sw2)'      'C = __MQLCLRHS (A,     'MQLCLRHS
39230                                 B)'                     A,B,C'
39231'sw2 __MQLMTHS (sw2, sw2)'       'C = __MQLMTHS (A,      'MQLMTHS A,B,C'
39232                                 B)'
39233'void __MQMACHS (acc, sw2,       '__MQMACHS (C, A, B)'   'MQMACHS A,B,C'
39234sw2)'
39235'void __MQMACHU (acc, uw2,       '__MQMACHU (C, A, B)'   'MQMACHU A,B,C'
39236uw2)'
39237'void __MQMACXHS (acc, sw2,      '__MQMACXHS (C, A,      'MQMACXHS
39238sw2)'                            B)'                     A,B,C'
39239'void __MQMULHS (acc, sw2,       '__MQMULHS (C, A, B)'   'MQMULHS A,B,C'
39240sw2)'
39241'void __MQMULHU (acc, uw2,       '__MQMULHU (C, A, B)'   'MQMULHU A,B,C'
39242uw2)'
39243'void __MQMULXHS (acc, sw2,      '__MQMULXHS (C, A,      'MQMULXHS
39244sw2)'                            B)'                     A,B,C'
39245'void __MQMULXHU (acc, uw2,      '__MQMULXHU (C, A,      'MQMULXHU
39246uw2)'                            B)'                     A,B,C'
39247'sw2 __MQSATHS (sw2, sw2)'       'C = __MQSATHS (A,      'MQSATHS A,B,C'
39248                                 B)'
39249'uw2 __MQSLLHI (uw2, int)'       'C = __MQSLLHI (A,      'MQSLLHI A,B,C'
39250                                 B)'
39251'sw2 __MQSRAHI (sw2, int)'       'C = __MQSRAHI (A,      'MQSRAHI A,B,C'
39252                                 B)'
39253'sw2 __MQSUBHSS (sw2, sw2)'      'C = __MQSUBHSS (A,     'MQSUBHSS
39254                                 B)'                     A,B,C'
39255'uw2 __MQSUBHUS (uw2, uw2)'      'C = __MQSUBHUS (A,     'MQSUBHUS
39256                                 B)'                     A,B,C'
39257'void __MQXMACHS (acc, sw2,      '__MQXMACHS (C, A,      'MQXMACHS
39258sw2)'                            B)'                     A,B,C'
39259'void __MQXMACXHS (acc, sw2,     '__MQXMACXHS (C, A,     'MQXMACXHS
39260sw2)'                            B)'                     A,B,C'
39261'uw1 __MRDACC (acc)'             'B = __MRDACC (A)'      'MRDACC A,B'
39262'uw1 __MRDACCG (acc)'            'B = __MRDACCG (A)'     'MRDACCG A,B'
39263'uw1 __MROTLI (uw1, const)'      'C = __MROTLI (A, B)'   'MROTLI A,#B,C'
39264'uw1 __MROTRI (uw1, const)'      'C = __MROTRI (A, B)'   'MROTRI A,#B,C'
39265'sw1 __MSATHS (sw1, sw1)'        'C = __MSATHS (A, B)'   'MSATHS A,B,C'
39266'uw1 __MSATHU (uw1, uw1)'        'C = __MSATHU (A, B)'   'MSATHU A,B,C'
39267'uw1 __MSLLHI (uw1, const)'      'C = __MSLLHI (A, B)'   'MSLLHI A,#B,C'
39268'sw1 __MSRAHI (sw1, const)'      'C = __MSRAHI (A, B)'   'MSRAHI A,#B,C'
39269'uw1 __MSRLHI (uw1, const)'      'C = __MSRLHI (A, B)'   'MSRLHI A,#B,C'
39270'void __MSUBACCS (acc, acc)'     '__MSUBACCS (B, A)'     'MSUBACCS A,B'
39271'sw1 __MSUBHSS (sw1, sw1)'       'C = __MSUBHSS (A,      'MSUBHSS A,B,C'
39272                                 B)'
39273'uw1 __MSUBHUS (uw1, uw1)'       'C = __MSUBHUS (A,      'MSUBHUS A,B,C'
39274                                 B)'
39275'void __MTRAP (void)'            '__MTRAP ()'            'MTRAP'
39276'uw2 __MUNPACKH (uw1)'           'B = __MUNPACKH (A)'    'MUNPACKH A,B'
39277'uw1 __MWCUT (uw2, uw1)'         'C = __MWCUT (A, B)'    'MWCUT A,B,C'
39278'void __MWTACC (acc, uw1)'       '__MWTACC (B, A)'       'MWTACC A,B'
39279'void __MWTACCG (acc, uw1)'      '__MWTACCG (B, A)'      'MWTACCG A,B'
39280'uw1 __MXOR (uw1, uw1)'          'C = __MXOR (A, B)'     'MXOR A,B,C'
39281
39282
39283File: gcc.info,  Node: Raw read/write Functions,  Next: Other Built-in Functions,  Prev: Directly-mapped Media Functions,  Up: FR-V Built-in Functions
39284
392856.57.10.4 Raw read/write Functions
39286..................................
39287
39288This sections describes built-in functions related to read and write
39289instructions to access memory.  These functions generate 'membar'
39290instructions to flush the I/O load and stores where appropriate, as
39291described in Fujitsu's manual described above.
39292
39293'unsigned char __builtin_read8 (void *DATA)'
39294'unsigned short __builtin_read16 (void *DATA)'
39295'unsigned long __builtin_read32 (void *DATA)'
39296'unsigned long long __builtin_read64 (void *DATA)'
39297
39298'void __builtin_write8 (void *DATA, unsigned char DATUM)'
39299'void __builtin_write16 (void *DATA, unsigned short DATUM)'
39300'void __builtin_write32 (void *DATA, unsigned long DATUM)'
39301'void __builtin_write64 (void *DATA, unsigned long long DATUM)'
39302
39303
39304File: gcc.info,  Node: Other Built-in Functions,  Prev: Raw read/write Functions,  Up: FR-V Built-in Functions
39305
393066.57.10.5 Other Built-in Functions
39307..................................
39308
39309This section describes built-in functions that are not named after a
39310specific FR-V instruction.
39311
39312'sw2 __IACCreadll (iacc REG)'
39313     Return the full 64-bit value of IACC0.  The REG argument is
39314     reserved for future expansion and must be 0.
39315
39316'sw1 __IACCreadl (iacc REG)'
39317     Return the value of IACC0H if REG is 0 and IACC0L if REG is 1.
39318     Other values of REG are rejected as invalid.
39319
39320'void __IACCsetll (iacc REG, sw2 X)'
39321     Set the full 64-bit value of IACC0 to X.  The REG argument is
39322     reserved for future expansion and must be 0.
39323
39324'void __IACCsetl (iacc REG, sw1 X)'
39325     Set IACC0H to X if REG is 0 and IACC0L to X if REG is 1.  Other
39326     values of REG are rejected as invalid.
39327
39328'void __data_prefetch0 (const void *X)'
39329     Use the 'dcpl' instruction to load the contents of address X into
39330     the data cache.
39331
39332'void __data_prefetch (const void *X)'
39333     Use the 'nldub' instruction to load the contents of address X into
39334     the data cache.  The instruction is issued in slot I1.
39335
39336
39337File: gcc.info,  Node: X86 Built-in Functions,  Next: X86 transactional memory intrinsics,  Prev: FR-V Built-in Functions,  Up: Target Builtins
39338
393396.57.11 X86 Built-in Functions
39340------------------------------
39341
39342These built-in functions are available for the i386 and x86-64 family of
39343computers, depending on the command-line switches used.
39344
39345 If you specify command-line switches such as '-msse', the compiler
39346could use the extended instruction sets even if the built-ins are not
39347used explicitly in the program.  For this reason, applications that
39348perform run-time CPU detection must compile separate files for each
39349supported architecture, using the appropriate flags.  In particular, the
39350file containing the CPU detection code should be compiled without these
39351options.
39352
39353 The following machine modes are available for use with MMX built-in
39354functions (*note Vector Extensions::): 'V2SI' for a vector of two 32-bit
39355integers, 'V4HI' for a vector of four 16-bit integers, and 'V8QI' for a
39356vector of eight 8-bit integers.  Some of the built-in functions operate
39357on MMX registers as a whole 64-bit entity, these use 'V1DI' as their
39358mode.
39359
39360 If 3DNow! extensions are enabled, 'V2SF' is used as a mode for a vector
39361of two 32-bit floating-point values.
39362
39363 If SSE extensions are enabled, 'V4SF' is used for a vector of four
3936432-bit floating-point values.  Some instructions use a vector of four
3936532-bit integers, these use 'V4SI'.  Finally, some instructions operate
39366on an entire vector register, interpreting it as a 128-bit integer,
39367these use mode 'TI'.
39368
39369 In 64-bit mode, the x86-64 family of processors uses additional
39370built-in functions for efficient use of 'TF' ('__float128') 128-bit
39371floating point and 'TC' 128-bit complex floating-point values.
39372
39373 The following floating-point built-in functions are available in 64-bit
39374mode.  All of them implement the function that is part of the name.
39375
39376     __float128 __builtin_fabsq (__float128)
39377     __float128 __builtin_copysignq (__float128, __float128)
39378
39379 The following built-in function is always available.
39380
39381'void __builtin_ia32_pause (void)'
39382     Generates the 'pause' machine instruction with a compiler memory
39383     barrier.
39384
39385 The following floating-point built-in functions are made available in
39386the 64-bit mode.
39387
39388'__float128 __builtin_infq (void)'
39389     Similar to '__builtin_inf', except the return type is '__float128'.
39390
39391'__float128 __builtin_huge_valq (void)'
39392     Similar to '__builtin_huge_val', except the return type is
39393     '__float128'.
39394
39395 The following built-in functions are always available and can be used
39396to check the target platform type.
39397
39398 -- Built-in Function: void __builtin_cpu_init (void)
39399     This function runs the CPU detection code to check the type of CPU
39400     and the features supported.  This built-in function needs to be
39401     invoked along with the built-in functions to check CPU type and
39402     features, '__builtin_cpu_is' and '__builtin_cpu_supports', only
39403     when used in a function that is executed before any constructors
39404     are called.  The CPU detection code is automatically executed in a
39405     very high priority constructor.
39406
39407     For example, this function has to be used in 'ifunc' resolvers that
39408     check for CPU type using the built-in functions '__builtin_cpu_is'
39409     and '__builtin_cpu_supports', or in constructors on targets that
39410     don't support constructor priority.
39411
39412          static void (*resolve_memcpy (void)) (void)
39413          {
39414            // ifunc resolvers fire before constructors, explicitly call the init
39415            // function.
39416            __builtin_cpu_init ();
39417            if (__builtin_cpu_supports ("ssse3"))
39418              return ssse3_memcpy; // super fast memcpy with ssse3 instructions.
39419            else
39420              return default_memcpy;
39421          }
39422
39423          void *memcpy (void *, const void *, size_t)
39424               __attribute__ ((ifunc ("resolve_memcpy")));
39425
39426 -- Built-in Function: int __builtin_cpu_is (const char *CPUNAME)
39427     This function returns a positive integer if the run-time CPU is of
39428     type CPUNAME and returns '0' otherwise.  The following CPU names
39429     can be detected:
39430
39431     'intel'
39432          Intel CPU.
39433
39434     'atom'
39435          Intel Atom CPU.
39436
39437     'core2'
39438          Intel Core 2 CPU.
39439
39440     'corei7'
39441          Intel Core i7 CPU.
39442
39443     'nehalem'
39444          Intel Core i7 Nehalem CPU.
39445
39446     'westmere'
39447          Intel Core i7 Westmere CPU.
39448
39449     'sandybridge'
39450          Intel Core i7 Sandy Bridge CPU.
39451
39452     'amd'
39453          AMD CPU.
39454
39455     'amdfam10h'
39456          AMD Family 10h CPU.
39457
39458     'barcelona'
39459          AMD Family 10h Barcelona CPU.
39460
39461     'shanghai'
39462          AMD Family 10h Shanghai CPU.
39463
39464     'istanbul'
39465          AMD Family 10h Istanbul CPU.
39466
39467     'btver1'
39468          AMD Family 14h CPU.
39469
39470     'amdfam15h'
39471          AMD Family 15h CPU.
39472
39473     'bdver1'
39474          AMD Family 15h Bulldozer version 1.
39475
39476     'bdver2'
39477          AMD Family 15h Bulldozer version 2.
39478
39479     'bdver3'
39480          AMD Family 15h Bulldozer version 3.
39481
39482     'bdver4'
39483          AMD Family 15h Bulldozer version 4.
39484
39485     'btver2'
39486          AMD Family 16h CPU.
39487
39488     Here is an example:
39489          if (__builtin_cpu_is ("corei7"))
39490            {
39491               do_corei7 (); // Core i7 specific implementation.
39492            }
39493          else
39494            {
39495               do_generic (); // Generic implementation.
39496            }
39497
39498 -- Built-in Function: int __builtin_cpu_supports (const char *FEATURE)
39499     This function returns a positive integer if the run-time CPU
39500     supports FEATURE and returns '0' otherwise.  The following features
39501     can be detected:
39502
39503     'cmov'
39504          CMOV instruction.
39505     'mmx'
39506          MMX instructions.
39507     'popcnt'
39508          POPCNT instruction.
39509     'sse'
39510          SSE instructions.
39511     'sse2'
39512          SSE2 instructions.
39513     'sse3'
39514          SSE3 instructions.
39515     'ssse3'
39516          SSSE3 instructions.
39517     'sse4.1'
39518          SSE4.1 instructions.
39519     'sse4.2'
39520          SSE4.2 instructions.
39521     'avx'
39522          AVX instructions.
39523     'avx2'
39524          AVX2 instructions.
39525
39526     Here is an example:
39527          if (__builtin_cpu_supports ("popcnt"))
39528            {
39529               asm("popcnt %1,%0" : "=r"(count) : "rm"(n) : "cc");
39530            }
39531          else
39532            {
39533               count = generic_countbits (n); //generic implementation.
39534            }
39535
39536 The following built-in functions are made available by '-mmmx'.  All of
39537them generate the machine instruction that is part of the name.
39538
39539     v8qi __builtin_ia32_paddb (v8qi, v8qi)
39540     v4hi __builtin_ia32_paddw (v4hi, v4hi)
39541     v2si __builtin_ia32_paddd (v2si, v2si)
39542     v8qi __builtin_ia32_psubb (v8qi, v8qi)
39543     v4hi __builtin_ia32_psubw (v4hi, v4hi)
39544     v2si __builtin_ia32_psubd (v2si, v2si)
39545     v8qi __builtin_ia32_paddsb (v8qi, v8qi)
39546     v4hi __builtin_ia32_paddsw (v4hi, v4hi)
39547     v8qi __builtin_ia32_psubsb (v8qi, v8qi)
39548     v4hi __builtin_ia32_psubsw (v4hi, v4hi)
39549     v8qi __builtin_ia32_paddusb (v8qi, v8qi)
39550     v4hi __builtin_ia32_paddusw (v4hi, v4hi)
39551     v8qi __builtin_ia32_psubusb (v8qi, v8qi)
39552     v4hi __builtin_ia32_psubusw (v4hi, v4hi)
39553     v4hi __builtin_ia32_pmullw (v4hi, v4hi)
39554     v4hi __builtin_ia32_pmulhw (v4hi, v4hi)
39555     di __builtin_ia32_pand (di, di)
39556     di __builtin_ia32_pandn (di,di)
39557     di __builtin_ia32_por (di, di)
39558     di __builtin_ia32_pxor (di, di)
39559     v8qi __builtin_ia32_pcmpeqb (v8qi, v8qi)
39560     v4hi __builtin_ia32_pcmpeqw (v4hi, v4hi)
39561     v2si __builtin_ia32_pcmpeqd (v2si, v2si)
39562     v8qi __builtin_ia32_pcmpgtb (v8qi, v8qi)
39563     v4hi __builtin_ia32_pcmpgtw (v4hi, v4hi)
39564     v2si __builtin_ia32_pcmpgtd (v2si, v2si)
39565     v8qi __builtin_ia32_punpckhbw (v8qi, v8qi)
39566     v4hi __builtin_ia32_punpckhwd (v4hi, v4hi)
39567     v2si __builtin_ia32_punpckhdq (v2si, v2si)
39568     v8qi __builtin_ia32_punpcklbw (v8qi, v8qi)
39569     v4hi __builtin_ia32_punpcklwd (v4hi, v4hi)
39570     v2si __builtin_ia32_punpckldq (v2si, v2si)
39571     v8qi __builtin_ia32_packsswb (v4hi, v4hi)
39572     v4hi __builtin_ia32_packssdw (v2si, v2si)
39573     v8qi __builtin_ia32_packuswb (v4hi, v4hi)
39574
39575     v4hi __builtin_ia32_psllw (v4hi, v4hi)
39576     v2si __builtin_ia32_pslld (v2si, v2si)
39577     v1di __builtin_ia32_psllq (v1di, v1di)
39578     v4hi __builtin_ia32_psrlw (v4hi, v4hi)
39579     v2si __builtin_ia32_psrld (v2si, v2si)
39580     v1di __builtin_ia32_psrlq (v1di, v1di)
39581     v4hi __builtin_ia32_psraw (v4hi, v4hi)
39582     v2si __builtin_ia32_psrad (v2si, v2si)
39583     v4hi __builtin_ia32_psllwi (v4hi, int)
39584     v2si __builtin_ia32_pslldi (v2si, int)
39585     v1di __builtin_ia32_psllqi (v1di, int)
39586     v4hi __builtin_ia32_psrlwi (v4hi, int)
39587     v2si __builtin_ia32_psrldi (v2si, int)
39588     v1di __builtin_ia32_psrlqi (v1di, int)
39589     v4hi __builtin_ia32_psrawi (v4hi, int)
39590     v2si __builtin_ia32_psradi (v2si, int)
39591
39592
39593 The following built-in functions are made available either with
39594'-msse', or with a combination of '-m3dnow' and '-march=athlon'.  All of
39595them generate the machine instruction that is part of the name.
39596
39597     v4hi __builtin_ia32_pmulhuw (v4hi, v4hi)
39598     v8qi __builtin_ia32_pavgb (v8qi, v8qi)
39599     v4hi __builtin_ia32_pavgw (v4hi, v4hi)
39600     v1di __builtin_ia32_psadbw (v8qi, v8qi)
39601     v8qi __builtin_ia32_pmaxub (v8qi, v8qi)
39602     v4hi __builtin_ia32_pmaxsw (v4hi, v4hi)
39603     v8qi __builtin_ia32_pminub (v8qi, v8qi)
39604     v4hi __builtin_ia32_pminsw (v4hi, v4hi)
39605     int __builtin_ia32_pmovmskb (v8qi)
39606     void __builtin_ia32_maskmovq (v8qi, v8qi, char *)
39607     void __builtin_ia32_movntq (di *, di)
39608     void __builtin_ia32_sfence (void)
39609
39610 The following built-in functions are available when '-msse' is used.
39611All of them generate the machine instruction that is part of the name.
39612
39613     int __builtin_ia32_comieq (v4sf, v4sf)
39614     int __builtin_ia32_comineq (v4sf, v4sf)
39615     int __builtin_ia32_comilt (v4sf, v4sf)
39616     int __builtin_ia32_comile (v4sf, v4sf)
39617     int __builtin_ia32_comigt (v4sf, v4sf)
39618     int __builtin_ia32_comige (v4sf, v4sf)
39619     int __builtin_ia32_ucomieq (v4sf, v4sf)
39620     int __builtin_ia32_ucomineq (v4sf, v4sf)
39621     int __builtin_ia32_ucomilt (v4sf, v4sf)
39622     int __builtin_ia32_ucomile (v4sf, v4sf)
39623     int __builtin_ia32_ucomigt (v4sf, v4sf)
39624     int __builtin_ia32_ucomige (v4sf, v4sf)
39625     v4sf __builtin_ia32_addps (v4sf, v4sf)
39626     v4sf __builtin_ia32_subps (v4sf, v4sf)
39627     v4sf __builtin_ia32_mulps (v4sf, v4sf)
39628     v4sf __builtin_ia32_divps (v4sf, v4sf)
39629     v4sf __builtin_ia32_addss (v4sf, v4sf)
39630     v4sf __builtin_ia32_subss (v4sf, v4sf)
39631     v4sf __builtin_ia32_mulss (v4sf, v4sf)
39632     v4sf __builtin_ia32_divss (v4sf, v4sf)
39633     v4sf __builtin_ia32_cmpeqps (v4sf, v4sf)
39634     v4sf __builtin_ia32_cmpltps (v4sf, v4sf)
39635     v4sf __builtin_ia32_cmpleps (v4sf, v4sf)
39636     v4sf __builtin_ia32_cmpgtps (v4sf, v4sf)
39637     v4sf __builtin_ia32_cmpgeps (v4sf, v4sf)
39638     v4sf __builtin_ia32_cmpunordps (v4sf, v4sf)
39639     v4sf __builtin_ia32_cmpneqps (v4sf, v4sf)
39640     v4sf __builtin_ia32_cmpnltps (v4sf, v4sf)
39641     v4sf __builtin_ia32_cmpnleps (v4sf, v4sf)
39642     v4sf __builtin_ia32_cmpngtps (v4sf, v4sf)
39643     v4sf __builtin_ia32_cmpngeps (v4sf, v4sf)
39644     v4sf __builtin_ia32_cmpordps (v4sf, v4sf)
39645     v4sf __builtin_ia32_cmpeqss (v4sf, v4sf)
39646     v4sf __builtin_ia32_cmpltss (v4sf, v4sf)
39647     v4sf __builtin_ia32_cmpless (v4sf, v4sf)
39648     v4sf __builtin_ia32_cmpunordss (v4sf, v4sf)
39649     v4sf __builtin_ia32_cmpneqss (v4sf, v4sf)
39650     v4sf __builtin_ia32_cmpnltss (v4sf, v4sf)
39651     v4sf __builtin_ia32_cmpnless (v4sf, v4sf)
39652     v4sf __builtin_ia32_cmpordss (v4sf, v4sf)
39653     v4sf __builtin_ia32_maxps (v4sf, v4sf)
39654     v4sf __builtin_ia32_maxss (v4sf, v4sf)
39655     v4sf __builtin_ia32_minps (v4sf, v4sf)
39656     v4sf __builtin_ia32_minss (v4sf, v4sf)
39657     v4sf __builtin_ia32_andps (v4sf, v4sf)
39658     v4sf __builtin_ia32_andnps (v4sf, v4sf)
39659     v4sf __builtin_ia32_orps (v4sf, v4sf)
39660     v4sf __builtin_ia32_xorps (v4sf, v4sf)
39661     v4sf __builtin_ia32_movss (v4sf, v4sf)
39662     v4sf __builtin_ia32_movhlps (v4sf, v4sf)
39663     v4sf __builtin_ia32_movlhps (v4sf, v4sf)
39664     v4sf __builtin_ia32_unpckhps (v4sf, v4sf)
39665     v4sf __builtin_ia32_unpcklps (v4sf, v4sf)
39666     v4sf __builtin_ia32_cvtpi2ps (v4sf, v2si)
39667     v4sf __builtin_ia32_cvtsi2ss (v4sf, int)
39668     v2si __builtin_ia32_cvtps2pi (v4sf)
39669     int __builtin_ia32_cvtss2si (v4sf)
39670     v2si __builtin_ia32_cvttps2pi (v4sf)
39671     int __builtin_ia32_cvttss2si (v4sf)
39672     v4sf __builtin_ia32_rcpps (v4sf)
39673     v4sf __builtin_ia32_rsqrtps (v4sf)
39674     v4sf __builtin_ia32_sqrtps (v4sf)
39675     v4sf __builtin_ia32_rcpss (v4sf)
39676     v4sf __builtin_ia32_rsqrtss (v4sf)
39677     v4sf __builtin_ia32_sqrtss (v4sf)
39678     v4sf __builtin_ia32_shufps (v4sf, v4sf, int)
39679     void __builtin_ia32_movntps (float *, v4sf)
39680     int __builtin_ia32_movmskps (v4sf)
39681
39682 The following built-in functions are available when '-msse' is used.
39683
39684'v4sf __builtin_ia32_loadups (float *)'
39685     Generates the 'movups' machine instruction as a load from memory.
39686'void __builtin_ia32_storeups (float *, v4sf)'
39687     Generates the 'movups' machine instruction as a store to memory.
39688'v4sf __builtin_ia32_loadss (float *)'
39689     Generates the 'movss' machine instruction as a load from memory.
39690'v4sf __builtin_ia32_loadhps (v4sf, const v2sf *)'
39691     Generates the 'movhps' machine instruction as a load from memory.
39692'v4sf __builtin_ia32_loadlps (v4sf, const v2sf *)'
39693     Generates the 'movlps' machine instruction as a load from memory
39694'void __builtin_ia32_storehps (v2sf *, v4sf)'
39695     Generates the 'movhps' machine instruction as a store to memory.
39696'void __builtin_ia32_storelps (v2sf *, v4sf)'
39697     Generates the 'movlps' machine instruction as a store to memory.
39698
39699 The following built-in functions are available when '-msse2' is used.
39700All of them generate the machine instruction that is part of the name.
39701
39702     int __builtin_ia32_comisdeq (v2df, v2df)
39703     int __builtin_ia32_comisdlt (v2df, v2df)
39704     int __builtin_ia32_comisdle (v2df, v2df)
39705     int __builtin_ia32_comisdgt (v2df, v2df)
39706     int __builtin_ia32_comisdge (v2df, v2df)
39707     int __builtin_ia32_comisdneq (v2df, v2df)
39708     int __builtin_ia32_ucomisdeq (v2df, v2df)
39709     int __builtin_ia32_ucomisdlt (v2df, v2df)
39710     int __builtin_ia32_ucomisdle (v2df, v2df)
39711     int __builtin_ia32_ucomisdgt (v2df, v2df)
39712     int __builtin_ia32_ucomisdge (v2df, v2df)
39713     int __builtin_ia32_ucomisdneq (v2df, v2df)
39714     v2df __builtin_ia32_cmpeqpd (v2df, v2df)
39715     v2df __builtin_ia32_cmpltpd (v2df, v2df)
39716     v2df __builtin_ia32_cmplepd (v2df, v2df)
39717     v2df __builtin_ia32_cmpgtpd (v2df, v2df)
39718     v2df __builtin_ia32_cmpgepd (v2df, v2df)
39719     v2df __builtin_ia32_cmpunordpd (v2df, v2df)
39720     v2df __builtin_ia32_cmpneqpd (v2df, v2df)
39721     v2df __builtin_ia32_cmpnltpd (v2df, v2df)
39722     v2df __builtin_ia32_cmpnlepd (v2df, v2df)
39723     v2df __builtin_ia32_cmpngtpd (v2df, v2df)
39724     v2df __builtin_ia32_cmpngepd (v2df, v2df)
39725     v2df __builtin_ia32_cmpordpd (v2df, v2df)
39726     v2df __builtin_ia32_cmpeqsd (v2df, v2df)
39727     v2df __builtin_ia32_cmpltsd (v2df, v2df)
39728     v2df __builtin_ia32_cmplesd (v2df, v2df)
39729     v2df __builtin_ia32_cmpunordsd (v2df, v2df)
39730     v2df __builtin_ia32_cmpneqsd (v2df, v2df)
39731     v2df __builtin_ia32_cmpnltsd (v2df, v2df)
39732     v2df __builtin_ia32_cmpnlesd (v2df, v2df)
39733     v2df __builtin_ia32_cmpordsd (v2df, v2df)
39734     v2di __builtin_ia32_paddq (v2di, v2di)
39735     v2di __builtin_ia32_psubq (v2di, v2di)
39736     v2df __builtin_ia32_addpd (v2df, v2df)
39737     v2df __builtin_ia32_subpd (v2df, v2df)
39738     v2df __builtin_ia32_mulpd (v2df, v2df)
39739     v2df __builtin_ia32_divpd (v2df, v2df)
39740     v2df __builtin_ia32_addsd (v2df, v2df)
39741     v2df __builtin_ia32_subsd (v2df, v2df)
39742     v2df __builtin_ia32_mulsd (v2df, v2df)
39743     v2df __builtin_ia32_divsd (v2df, v2df)
39744     v2df __builtin_ia32_minpd (v2df, v2df)
39745     v2df __builtin_ia32_maxpd (v2df, v2df)
39746     v2df __builtin_ia32_minsd (v2df, v2df)
39747     v2df __builtin_ia32_maxsd (v2df, v2df)
39748     v2df __builtin_ia32_andpd (v2df, v2df)
39749     v2df __builtin_ia32_andnpd (v2df, v2df)
39750     v2df __builtin_ia32_orpd (v2df, v2df)
39751     v2df __builtin_ia32_xorpd (v2df, v2df)
39752     v2df __builtin_ia32_movsd (v2df, v2df)
39753     v2df __builtin_ia32_unpckhpd (v2df, v2df)
39754     v2df __builtin_ia32_unpcklpd (v2df, v2df)
39755     v16qi __builtin_ia32_paddb128 (v16qi, v16qi)
39756     v8hi __builtin_ia32_paddw128 (v8hi, v8hi)
39757     v4si __builtin_ia32_paddd128 (v4si, v4si)
39758     v2di __builtin_ia32_paddq128 (v2di, v2di)
39759     v16qi __builtin_ia32_psubb128 (v16qi, v16qi)
39760     v8hi __builtin_ia32_psubw128 (v8hi, v8hi)
39761     v4si __builtin_ia32_psubd128 (v4si, v4si)
39762     v2di __builtin_ia32_psubq128 (v2di, v2di)
39763     v8hi __builtin_ia32_pmullw128 (v8hi, v8hi)
39764     v8hi __builtin_ia32_pmulhw128 (v8hi, v8hi)
39765     v2di __builtin_ia32_pand128 (v2di, v2di)
39766     v2di __builtin_ia32_pandn128 (v2di, v2di)
39767     v2di __builtin_ia32_por128 (v2di, v2di)
39768     v2di __builtin_ia32_pxor128 (v2di, v2di)
39769     v16qi __builtin_ia32_pavgb128 (v16qi, v16qi)
39770     v8hi __builtin_ia32_pavgw128 (v8hi, v8hi)
39771     v16qi __builtin_ia32_pcmpeqb128 (v16qi, v16qi)
39772     v8hi __builtin_ia32_pcmpeqw128 (v8hi, v8hi)
39773     v4si __builtin_ia32_pcmpeqd128 (v4si, v4si)
39774     v16qi __builtin_ia32_pcmpgtb128 (v16qi, v16qi)
39775     v8hi __builtin_ia32_pcmpgtw128 (v8hi, v8hi)
39776     v4si __builtin_ia32_pcmpgtd128 (v4si, v4si)
39777     v16qi __builtin_ia32_pmaxub128 (v16qi, v16qi)
39778     v8hi __builtin_ia32_pmaxsw128 (v8hi, v8hi)
39779     v16qi __builtin_ia32_pminub128 (v16qi, v16qi)
39780     v8hi __builtin_ia32_pminsw128 (v8hi, v8hi)
39781     v16qi __builtin_ia32_punpckhbw128 (v16qi, v16qi)
39782     v8hi __builtin_ia32_punpckhwd128 (v8hi, v8hi)
39783     v4si __builtin_ia32_punpckhdq128 (v4si, v4si)
39784     v2di __builtin_ia32_punpckhqdq128 (v2di, v2di)
39785     v16qi __builtin_ia32_punpcklbw128 (v16qi, v16qi)
39786     v8hi __builtin_ia32_punpcklwd128 (v8hi, v8hi)
39787     v4si __builtin_ia32_punpckldq128 (v4si, v4si)
39788     v2di __builtin_ia32_punpcklqdq128 (v2di, v2di)
39789     v16qi __builtin_ia32_packsswb128 (v8hi, v8hi)
39790     v8hi __builtin_ia32_packssdw128 (v4si, v4si)
39791     v16qi __builtin_ia32_packuswb128 (v8hi, v8hi)
39792     v8hi __builtin_ia32_pmulhuw128 (v8hi, v8hi)
39793     void __builtin_ia32_maskmovdqu (v16qi, v16qi)
39794     v2df __builtin_ia32_loadupd (double *)
39795     void __builtin_ia32_storeupd (double *, v2df)
39796     v2df __builtin_ia32_loadhpd (v2df, double const *)
39797     v2df __builtin_ia32_loadlpd (v2df, double const *)
39798     int __builtin_ia32_movmskpd (v2df)
39799     int __builtin_ia32_pmovmskb128 (v16qi)
39800     void __builtin_ia32_movnti (int *, int)
39801     void __builtin_ia32_movnti64 (long long int *, long long int)
39802     void __builtin_ia32_movntpd (double *, v2df)
39803     void __builtin_ia32_movntdq (v2df *, v2df)
39804     v4si __builtin_ia32_pshufd (v4si, int)
39805     v8hi __builtin_ia32_pshuflw (v8hi, int)
39806     v8hi __builtin_ia32_pshufhw (v8hi, int)
39807     v2di __builtin_ia32_psadbw128 (v16qi, v16qi)
39808     v2df __builtin_ia32_sqrtpd (v2df)
39809     v2df __builtin_ia32_sqrtsd (v2df)
39810     v2df __builtin_ia32_shufpd (v2df, v2df, int)
39811     v2df __builtin_ia32_cvtdq2pd (v4si)
39812     v4sf __builtin_ia32_cvtdq2ps (v4si)
39813     v4si __builtin_ia32_cvtpd2dq (v2df)
39814     v2si __builtin_ia32_cvtpd2pi (v2df)
39815     v4sf __builtin_ia32_cvtpd2ps (v2df)
39816     v4si __builtin_ia32_cvttpd2dq (v2df)
39817     v2si __builtin_ia32_cvttpd2pi (v2df)
39818     v2df __builtin_ia32_cvtpi2pd (v2si)
39819     int __builtin_ia32_cvtsd2si (v2df)
39820     int __builtin_ia32_cvttsd2si (v2df)
39821     long long __builtin_ia32_cvtsd2si64 (v2df)
39822     long long __builtin_ia32_cvttsd2si64 (v2df)
39823     v4si __builtin_ia32_cvtps2dq (v4sf)
39824     v2df __builtin_ia32_cvtps2pd (v4sf)
39825     v4si __builtin_ia32_cvttps2dq (v4sf)
39826     v2df __builtin_ia32_cvtsi2sd (v2df, int)
39827     v2df __builtin_ia32_cvtsi642sd (v2df, long long)
39828     v4sf __builtin_ia32_cvtsd2ss (v4sf, v2df)
39829     v2df __builtin_ia32_cvtss2sd (v2df, v4sf)
39830     void __builtin_ia32_clflush (const void *)
39831     void __builtin_ia32_lfence (void)
39832     void __builtin_ia32_mfence (void)
39833     v16qi __builtin_ia32_loaddqu (const char *)
39834     void __builtin_ia32_storedqu (char *, v16qi)
39835     v1di __builtin_ia32_pmuludq (v2si, v2si)
39836     v2di __builtin_ia32_pmuludq128 (v4si, v4si)
39837     v8hi __builtin_ia32_psllw128 (v8hi, v8hi)
39838     v4si __builtin_ia32_pslld128 (v4si, v4si)
39839     v2di __builtin_ia32_psllq128 (v2di, v2di)
39840     v8hi __builtin_ia32_psrlw128 (v8hi, v8hi)
39841     v4si __builtin_ia32_psrld128 (v4si, v4si)
39842     v2di __builtin_ia32_psrlq128 (v2di, v2di)
39843     v8hi __builtin_ia32_psraw128 (v8hi, v8hi)
39844     v4si __builtin_ia32_psrad128 (v4si, v4si)
39845     v2di __builtin_ia32_pslldqi128 (v2di, int)
39846     v8hi __builtin_ia32_psllwi128 (v8hi, int)
39847     v4si __builtin_ia32_pslldi128 (v4si, int)
39848     v2di __builtin_ia32_psllqi128 (v2di, int)
39849     v2di __builtin_ia32_psrldqi128 (v2di, int)
39850     v8hi __builtin_ia32_psrlwi128 (v8hi, int)
39851     v4si __builtin_ia32_psrldi128 (v4si, int)
39852     v2di __builtin_ia32_psrlqi128 (v2di, int)
39853     v8hi __builtin_ia32_psrawi128 (v8hi, int)
39854     v4si __builtin_ia32_psradi128 (v4si, int)
39855     v4si __builtin_ia32_pmaddwd128 (v8hi, v8hi)
39856     v2di __builtin_ia32_movq128 (v2di)
39857
39858 The following built-in functions are available when '-msse3' is used.
39859All of them generate the machine instruction that is part of the name.
39860
39861     v2df __builtin_ia32_addsubpd (v2df, v2df)
39862     v4sf __builtin_ia32_addsubps (v4sf, v4sf)
39863     v2df __builtin_ia32_haddpd (v2df, v2df)
39864     v4sf __builtin_ia32_haddps (v4sf, v4sf)
39865     v2df __builtin_ia32_hsubpd (v2df, v2df)
39866     v4sf __builtin_ia32_hsubps (v4sf, v4sf)
39867     v16qi __builtin_ia32_lddqu (char const *)
39868     void __builtin_ia32_monitor (void *, unsigned int, unsigned int)
39869     v4sf __builtin_ia32_movshdup (v4sf)
39870     v4sf __builtin_ia32_movsldup (v4sf)
39871     void __builtin_ia32_mwait (unsigned int, unsigned int)
39872
39873 The following built-in functions are available when '-mssse3' is used.
39874All of them generate the machine instruction that is part of the name.
39875
39876     v2si __builtin_ia32_phaddd (v2si, v2si)
39877     v4hi __builtin_ia32_phaddw (v4hi, v4hi)
39878     v4hi __builtin_ia32_phaddsw (v4hi, v4hi)
39879     v2si __builtin_ia32_phsubd (v2si, v2si)
39880     v4hi __builtin_ia32_phsubw (v4hi, v4hi)
39881     v4hi __builtin_ia32_phsubsw (v4hi, v4hi)
39882     v4hi __builtin_ia32_pmaddubsw (v8qi, v8qi)
39883     v4hi __builtin_ia32_pmulhrsw (v4hi, v4hi)
39884     v8qi __builtin_ia32_pshufb (v8qi, v8qi)
39885     v8qi __builtin_ia32_psignb (v8qi, v8qi)
39886     v2si __builtin_ia32_psignd (v2si, v2si)
39887     v4hi __builtin_ia32_psignw (v4hi, v4hi)
39888     v1di __builtin_ia32_palignr (v1di, v1di, int)
39889     v8qi __builtin_ia32_pabsb (v8qi)
39890     v2si __builtin_ia32_pabsd (v2si)
39891     v4hi __builtin_ia32_pabsw (v4hi)
39892
39893 The following built-in functions are available when '-mssse3' is used.
39894All of them generate the machine instruction that is part of the name.
39895
39896     v4si __builtin_ia32_phaddd128 (v4si, v4si)
39897     v8hi __builtin_ia32_phaddw128 (v8hi, v8hi)
39898     v8hi __builtin_ia32_phaddsw128 (v8hi, v8hi)
39899     v4si __builtin_ia32_phsubd128 (v4si, v4si)
39900     v8hi __builtin_ia32_phsubw128 (v8hi, v8hi)
39901     v8hi __builtin_ia32_phsubsw128 (v8hi, v8hi)
39902     v8hi __builtin_ia32_pmaddubsw128 (v16qi, v16qi)
39903     v8hi __builtin_ia32_pmulhrsw128 (v8hi, v8hi)
39904     v16qi __builtin_ia32_pshufb128 (v16qi, v16qi)
39905     v16qi __builtin_ia32_psignb128 (v16qi, v16qi)
39906     v4si __builtin_ia32_psignd128 (v4si, v4si)
39907     v8hi __builtin_ia32_psignw128 (v8hi, v8hi)
39908     v2di __builtin_ia32_palignr128 (v2di, v2di, int)
39909     v16qi __builtin_ia32_pabsb128 (v16qi)
39910     v4si __builtin_ia32_pabsd128 (v4si)
39911     v8hi __builtin_ia32_pabsw128 (v8hi)
39912
39913 The following built-in functions are available when '-msse4.1' is used.
39914All of them generate the machine instruction that is part of the name.
39915
39916     v2df __builtin_ia32_blendpd (v2df, v2df, const int)
39917     v4sf __builtin_ia32_blendps (v4sf, v4sf, const int)
39918     v2df __builtin_ia32_blendvpd (v2df, v2df, v2df)
39919     v4sf __builtin_ia32_blendvps (v4sf, v4sf, v4sf)
39920     v2df __builtin_ia32_dppd (v2df, v2df, const int)
39921     v4sf __builtin_ia32_dpps (v4sf, v4sf, const int)
39922     v4sf __builtin_ia32_insertps128 (v4sf, v4sf, const int)
39923     v2di __builtin_ia32_movntdqa (v2di *);
39924     v16qi __builtin_ia32_mpsadbw128 (v16qi, v16qi, const int)
39925     v8hi __builtin_ia32_packusdw128 (v4si, v4si)
39926     v16qi __builtin_ia32_pblendvb128 (v16qi, v16qi, v16qi)
39927     v8hi __builtin_ia32_pblendw128 (v8hi, v8hi, const int)
39928     v2di __builtin_ia32_pcmpeqq (v2di, v2di)
39929     v8hi __builtin_ia32_phminposuw128 (v8hi)
39930     v16qi __builtin_ia32_pmaxsb128 (v16qi, v16qi)
39931     v4si __builtin_ia32_pmaxsd128 (v4si, v4si)
39932     v4si __builtin_ia32_pmaxud128 (v4si, v4si)
39933     v8hi __builtin_ia32_pmaxuw128 (v8hi, v8hi)
39934     v16qi __builtin_ia32_pminsb128 (v16qi, v16qi)
39935     v4si __builtin_ia32_pminsd128 (v4si, v4si)
39936     v4si __builtin_ia32_pminud128 (v4si, v4si)
39937     v8hi __builtin_ia32_pminuw128 (v8hi, v8hi)
39938     v4si __builtin_ia32_pmovsxbd128 (v16qi)
39939     v2di __builtin_ia32_pmovsxbq128 (v16qi)
39940     v8hi __builtin_ia32_pmovsxbw128 (v16qi)
39941     v2di __builtin_ia32_pmovsxdq128 (v4si)
39942     v4si __builtin_ia32_pmovsxwd128 (v8hi)
39943     v2di __builtin_ia32_pmovsxwq128 (v8hi)
39944     v4si __builtin_ia32_pmovzxbd128 (v16qi)
39945     v2di __builtin_ia32_pmovzxbq128 (v16qi)
39946     v8hi __builtin_ia32_pmovzxbw128 (v16qi)
39947     v2di __builtin_ia32_pmovzxdq128 (v4si)
39948     v4si __builtin_ia32_pmovzxwd128 (v8hi)
39949     v2di __builtin_ia32_pmovzxwq128 (v8hi)
39950     v2di __builtin_ia32_pmuldq128 (v4si, v4si)
39951     v4si __builtin_ia32_pmulld128 (v4si, v4si)
39952     int __builtin_ia32_ptestc128 (v2di, v2di)
39953     int __builtin_ia32_ptestnzc128 (v2di, v2di)
39954     int __builtin_ia32_ptestz128 (v2di, v2di)
39955     v2df __builtin_ia32_roundpd (v2df, const int)
39956     v4sf __builtin_ia32_roundps (v4sf, const int)
39957     v2df __builtin_ia32_roundsd (v2df, v2df, const int)
39958     v4sf __builtin_ia32_roundss (v4sf, v4sf, const int)
39959
39960 The following built-in functions are available when '-msse4.1' is used.
39961
39962'v4sf __builtin_ia32_vec_set_v4sf (v4sf, float, const int)'
39963     Generates the 'insertps' machine instruction.
39964'int __builtin_ia32_vec_ext_v16qi (v16qi, const int)'
39965     Generates the 'pextrb' machine instruction.
39966'v16qi __builtin_ia32_vec_set_v16qi (v16qi, int, const int)'
39967     Generates the 'pinsrb' machine instruction.
39968'v4si __builtin_ia32_vec_set_v4si (v4si, int, const int)'
39969     Generates the 'pinsrd' machine instruction.
39970'v2di __builtin_ia32_vec_set_v2di (v2di, long long, const int)'
39971     Generates the 'pinsrq' machine instruction in 64bit mode.
39972
39973 The following built-in functions are changed to generate new SSE4.1
39974instructions when '-msse4.1' is used.
39975
39976'float __builtin_ia32_vec_ext_v4sf (v4sf, const int)'
39977     Generates the 'extractps' machine instruction.
39978'int __builtin_ia32_vec_ext_v4si (v4si, const int)'
39979     Generates the 'pextrd' machine instruction.
39980'long long __builtin_ia32_vec_ext_v2di (v2di, const int)'
39981     Generates the 'pextrq' machine instruction in 64bit mode.
39982
39983 The following built-in functions are available when '-msse4.2' is used.
39984All of them generate the machine instruction that is part of the name.
39985
39986     v16qi __builtin_ia32_pcmpestrm128 (v16qi, int, v16qi, int, const int)
39987     int __builtin_ia32_pcmpestri128 (v16qi, int, v16qi, int, const int)
39988     int __builtin_ia32_pcmpestria128 (v16qi, int, v16qi, int, const int)
39989     int __builtin_ia32_pcmpestric128 (v16qi, int, v16qi, int, const int)
39990     int __builtin_ia32_pcmpestrio128 (v16qi, int, v16qi, int, const int)
39991     int __builtin_ia32_pcmpestris128 (v16qi, int, v16qi, int, const int)
39992     int __builtin_ia32_pcmpestriz128 (v16qi, int, v16qi, int, const int)
39993     v16qi __builtin_ia32_pcmpistrm128 (v16qi, v16qi, const int)
39994     int __builtin_ia32_pcmpistri128 (v16qi, v16qi, const int)
39995     int __builtin_ia32_pcmpistria128 (v16qi, v16qi, const int)
39996     int __builtin_ia32_pcmpistric128 (v16qi, v16qi, const int)
39997     int __builtin_ia32_pcmpistrio128 (v16qi, v16qi, const int)
39998     int __builtin_ia32_pcmpistris128 (v16qi, v16qi, const int)
39999     int __builtin_ia32_pcmpistriz128 (v16qi, v16qi, const int)
40000     v2di __builtin_ia32_pcmpgtq (v2di, v2di)
40001
40002 The following built-in functions are available when '-msse4.2' is used.
40003
40004'unsigned int __builtin_ia32_crc32qi (unsigned int, unsigned char)'
40005     Generates the 'crc32b' machine instruction.
40006'unsigned int __builtin_ia32_crc32hi (unsigned int, unsigned short)'
40007     Generates the 'crc32w' machine instruction.
40008'unsigned int __builtin_ia32_crc32si (unsigned int, unsigned int)'
40009     Generates the 'crc32l' machine instruction.
40010'unsigned long long __builtin_ia32_crc32di (unsigned long long, unsigned long long)'
40011     Generates the 'crc32q' machine instruction.
40012
40013 The following built-in functions are changed to generate new SSE4.2
40014instructions when '-msse4.2' is used.
40015
40016'int __builtin_popcount (unsigned int)'
40017     Generates the 'popcntl' machine instruction.
40018'int __builtin_popcountl (unsigned long)'
40019     Generates the 'popcntl' or 'popcntq' machine instruction, depending
40020     on the size of 'unsigned long'.
40021'int __builtin_popcountll (unsigned long long)'
40022     Generates the 'popcntq' machine instruction.
40023
40024 The following built-in functions are available when '-mavx' is used.
40025All of them generate the machine instruction that is part of the name.
40026
40027     v4df __builtin_ia32_addpd256 (v4df,v4df)
40028     v8sf __builtin_ia32_addps256 (v8sf,v8sf)
40029     v4df __builtin_ia32_addsubpd256 (v4df,v4df)
40030     v8sf __builtin_ia32_addsubps256 (v8sf,v8sf)
40031     v4df __builtin_ia32_andnpd256 (v4df,v4df)
40032     v8sf __builtin_ia32_andnps256 (v8sf,v8sf)
40033     v4df __builtin_ia32_andpd256 (v4df,v4df)
40034     v8sf __builtin_ia32_andps256 (v8sf,v8sf)
40035     v4df __builtin_ia32_blendpd256 (v4df,v4df,int)
40036     v8sf __builtin_ia32_blendps256 (v8sf,v8sf,int)
40037     v4df __builtin_ia32_blendvpd256 (v4df,v4df,v4df)
40038     v8sf __builtin_ia32_blendvps256 (v8sf,v8sf,v8sf)
40039     v2df __builtin_ia32_cmppd (v2df,v2df,int)
40040     v4df __builtin_ia32_cmppd256 (v4df,v4df,int)
40041     v4sf __builtin_ia32_cmpps (v4sf,v4sf,int)
40042     v8sf __builtin_ia32_cmpps256 (v8sf,v8sf,int)
40043     v2df __builtin_ia32_cmpsd (v2df,v2df,int)
40044     v4sf __builtin_ia32_cmpss (v4sf,v4sf,int)
40045     v4df __builtin_ia32_cvtdq2pd256 (v4si)
40046     v8sf __builtin_ia32_cvtdq2ps256 (v8si)
40047     v4si __builtin_ia32_cvtpd2dq256 (v4df)
40048     v4sf __builtin_ia32_cvtpd2ps256 (v4df)
40049     v8si __builtin_ia32_cvtps2dq256 (v8sf)
40050     v4df __builtin_ia32_cvtps2pd256 (v4sf)
40051     v4si __builtin_ia32_cvttpd2dq256 (v4df)
40052     v8si __builtin_ia32_cvttps2dq256 (v8sf)
40053     v4df __builtin_ia32_divpd256 (v4df,v4df)
40054     v8sf __builtin_ia32_divps256 (v8sf,v8sf)
40055     v8sf __builtin_ia32_dpps256 (v8sf,v8sf,int)
40056     v4df __builtin_ia32_haddpd256 (v4df,v4df)
40057     v8sf __builtin_ia32_haddps256 (v8sf,v8sf)
40058     v4df __builtin_ia32_hsubpd256 (v4df,v4df)
40059     v8sf __builtin_ia32_hsubps256 (v8sf,v8sf)
40060     v32qi __builtin_ia32_lddqu256 (pcchar)
40061     v32qi __builtin_ia32_loaddqu256 (pcchar)
40062     v4df __builtin_ia32_loadupd256 (pcdouble)
40063     v8sf __builtin_ia32_loadups256 (pcfloat)
40064     v2df __builtin_ia32_maskloadpd (pcv2df,v2df)
40065     v4df __builtin_ia32_maskloadpd256 (pcv4df,v4df)
40066     v4sf __builtin_ia32_maskloadps (pcv4sf,v4sf)
40067     v8sf __builtin_ia32_maskloadps256 (pcv8sf,v8sf)
40068     void __builtin_ia32_maskstorepd (pv2df,v2df,v2df)
40069     void __builtin_ia32_maskstorepd256 (pv4df,v4df,v4df)
40070     void __builtin_ia32_maskstoreps (pv4sf,v4sf,v4sf)
40071     void __builtin_ia32_maskstoreps256 (pv8sf,v8sf,v8sf)
40072     v4df __builtin_ia32_maxpd256 (v4df,v4df)
40073     v8sf __builtin_ia32_maxps256 (v8sf,v8sf)
40074     v4df __builtin_ia32_minpd256 (v4df,v4df)
40075     v8sf __builtin_ia32_minps256 (v8sf,v8sf)
40076     v4df __builtin_ia32_movddup256 (v4df)
40077     int __builtin_ia32_movmskpd256 (v4df)
40078     int __builtin_ia32_movmskps256 (v8sf)
40079     v8sf __builtin_ia32_movshdup256 (v8sf)
40080     v8sf __builtin_ia32_movsldup256 (v8sf)
40081     v4df __builtin_ia32_mulpd256 (v4df,v4df)
40082     v8sf __builtin_ia32_mulps256 (v8sf,v8sf)
40083     v4df __builtin_ia32_orpd256 (v4df,v4df)
40084     v8sf __builtin_ia32_orps256 (v8sf,v8sf)
40085     v2df __builtin_ia32_pd_pd256 (v4df)
40086     v4df __builtin_ia32_pd256_pd (v2df)
40087     v4sf __builtin_ia32_ps_ps256 (v8sf)
40088     v8sf __builtin_ia32_ps256_ps (v4sf)
40089     int __builtin_ia32_ptestc256 (v4di,v4di,ptest)
40090     int __builtin_ia32_ptestnzc256 (v4di,v4di,ptest)
40091     int __builtin_ia32_ptestz256 (v4di,v4di,ptest)
40092     v8sf __builtin_ia32_rcpps256 (v8sf)
40093     v4df __builtin_ia32_roundpd256 (v4df,int)
40094     v8sf __builtin_ia32_roundps256 (v8sf,int)
40095     v8sf __builtin_ia32_rsqrtps_nr256 (v8sf)
40096     v8sf __builtin_ia32_rsqrtps256 (v8sf)
40097     v4df __builtin_ia32_shufpd256 (v4df,v4df,int)
40098     v8sf __builtin_ia32_shufps256 (v8sf,v8sf,int)
40099     v4si __builtin_ia32_si_si256 (v8si)
40100     v8si __builtin_ia32_si256_si (v4si)
40101     v4df __builtin_ia32_sqrtpd256 (v4df)
40102     v8sf __builtin_ia32_sqrtps_nr256 (v8sf)
40103     v8sf __builtin_ia32_sqrtps256 (v8sf)
40104     void __builtin_ia32_storedqu256 (pchar,v32qi)
40105     void __builtin_ia32_storeupd256 (pdouble,v4df)
40106     void __builtin_ia32_storeups256 (pfloat,v8sf)
40107     v4df __builtin_ia32_subpd256 (v4df,v4df)
40108     v8sf __builtin_ia32_subps256 (v8sf,v8sf)
40109     v4df __builtin_ia32_unpckhpd256 (v4df,v4df)
40110     v8sf __builtin_ia32_unpckhps256 (v8sf,v8sf)
40111     v4df __builtin_ia32_unpcklpd256 (v4df,v4df)
40112     v8sf __builtin_ia32_unpcklps256 (v8sf,v8sf)
40113     v4df __builtin_ia32_vbroadcastf128_pd256 (pcv2df)
40114     v8sf __builtin_ia32_vbroadcastf128_ps256 (pcv4sf)
40115     v4df __builtin_ia32_vbroadcastsd256 (pcdouble)
40116     v4sf __builtin_ia32_vbroadcastss (pcfloat)
40117     v8sf __builtin_ia32_vbroadcastss256 (pcfloat)
40118     v2df __builtin_ia32_vextractf128_pd256 (v4df,int)
40119     v4sf __builtin_ia32_vextractf128_ps256 (v8sf,int)
40120     v4si __builtin_ia32_vextractf128_si256 (v8si,int)
40121     v4df __builtin_ia32_vinsertf128_pd256 (v4df,v2df,int)
40122     v8sf __builtin_ia32_vinsertf128_ps256 (v8sf,v4sf,int)
40123     v8si __builtin_ia32_vinsertf128_si256 (v8si,v4si,int)
40124     v4df __builtin_ia32_vperm2f128_pd256 (v4df,v4df,int)
40125     v8sf __builtin_ia32_vperm2f128_ps256 (v8sf,v8sf,int)
40126     v8si __builtin_ia32_vperm2f128_si256 (v8si,v8si,int)
40127     v2df __builtin_ia32_vpermil2pd (v2df,v2df,v2di,int)
40128     v4df __builtin_ia32_vpermil2pd256 (v4df,v4df,v4di,int)
40129     v4sf __builtin_ia32_vpermil2ps (v4sf,v4sf,v4si,int)
40130     v8sf __builtin_ia32_vpermil2ps256 (v8sf,v8sf,v8si,int)
40131     v2df __builtin_ia32_vpermilpd (v2df,int)
40132     v4df __builtin_ia32_vpermilpd256 (v4df,int)
40133     v4sf __builtin_ia32_vpermilps (v4sf,int)
40134     v8sf __builtin_ia32_vpermilps256 (v8sf,int)
40135     v2df __builtin_ia32_vpermilvarpd (v2df,v2di)
40136     v4df __builtin_ia32_vpermilvarpd256 (v4df,v4di)
40137     v4sf __builtin_ia32_vpermilvarps (v4sf,v4si)
40138     v8sf __builtin_ia32_vpermilvarps256 (v8sf,v8si)
40139     int __builtin_ia32_vtestcpd (v2df,v2df,ptest)
40140     int __builtin_ia32_vtestcpd256 (v4df,v4df,ptest)
40141     int __builtin_ia32_vtestcps (v4sf,v4sf,ptest)
40142     int __builtin_ia32_vtestcps256 (v8sf,v8sf,ptest)
40143     int __builtin_ia32_vtestnzcpd (v2df,v2df,ptest)
40144     int __builtin_ia32_vtestnzcpd256 (v4df,v4df,ptest)
40145     int __builtin_ia32_vtestnzcps (v4sf,v4sf,ptest)
40146     int __builtin_ia32_vtestnzcps256 (v8sf,v8sf,ptest)
40147     int __builtin_ia32_vtestzpd (v2df,v2df,ptest)
40148     int __builtin_ia32_vtestzpd256 (v4df,v4df,ptest)
40149     int __builtin_ia32_vtestzps (v4sf,v4sf,ptest)
40150     int __builtin_ia32_vtestzps256 (v8sf,v8sf,ptest)
40151     void __builtin_ia32_vzeroall (void)
40152     void __builtin_ia32_vzeroupper (void)
40153     v4df __builtin_ia32_xorpd256 (v4df,v4df)
40154     v8sf __builtin_ia32_xorps256 (v8sf,v8sf)
40155
40156 The following built-in functions are available when '-mavx2' is used.
40157All of them generate the machine instruction that is part of the name.
40158
40159     v32qi __builtin_ia32_mpsadbw256 (v32qi,v32qi,int)
40160     v32qi __builtin_ia32_pabsb256 (v32qi)
40161     v16hi __builtin_ia32_pabsw256 (v16hi)
40162     v8si __builtin_ia32_pabsd256 (v8si)
40163     v16hi __builtin_ia32_packssdw256 (v8si,v8si)
40164     v32qi __builtin_ia32_packsswb256 (v16hi,v16hi)
40165     v16hi __builtin_ia32_packusdw256 (v8si,v8si)
40166     v32qi __builtin_ia32_packuswb256 (v16hi,v16hi)
40167     v32qi __builtin_ia32_paddb256 (v32qi,v32qi)
40168     v16hi __builtin_ia32_paddw256 (v16hi,v16hi)
40169     v8si __builtin_ia32_paddd256 (v8si,v8si)
40170     v4di __builtin_ia32_paddq256 (v4di,v4di)
40171     v32qi __builtin_ia32_paddsb256 (v32qi,v32qi)
40172     v16hi __builtin_ia32_paddsw256 (v16hi,v16hi)
40173     v32qi __builtin_ia32_paddusb256 (v32qi,v32qi)
40174     v16hi __builtin_ia32_paddusw256 (v16hi,v16hi)
40175     v4di __builtin_ia32_palignr256 (v4di,v4di,int)
40176     v4di __builtin_ia32_andsi256 (v4di,v4di)
40177     v4di __builtin_ia32_andnotsi256 (v4di,v4di)
40178     v32qi __builtin_ia32_pavgb256 (v32qi,v32qi)
40179     v16hi __builtin_ia32_pavgw256 (v16hi,v16hi)
40180     v32qi __builtin_ia32_pblendvb256 (v32qi,v32qi,v32qi)
40181     v16hi __builtin_ia32_pblendw256 (v16hi,v16hi,int)
40182     v32qi __builtin_ia32_pcmpeqb256 (v32qi,v32qi)
40183     v16hi __builtin_ia32_pcmpeqw256 (v16hi,v16hi)
40184     v8si __builtin_ia32_pcmpeqd256 (c8si,v8si)
40185     v4di __builtin_ia32_pcmpeqq256 (v4di,v4di)
40186     v32qi __builtin_ia32_pcmpgtb256 (v32qi,v32qi)
40187     v16hi __builtin_ia32_pcmpgtw256 (16hi,v16hi)
40188     v8si __builtin_ia32_pcmpgtd256 (v8si,v8si)
40189     v4di __builtin_ia32_pcmpgtq256 (v4di,v4di)
40190     v16hi __builtin_ia32_phaddw256 (v16hi,v16hi)
40191     v8si __builtin_ia32_phaddd256 (v8si,v8si)
40192     v16hi __builtin_ia32_phaddsw256 (v16hi,v16hi)
40193     v16hi __builtin_ia32_phsubw256 (v16hi,v16hi)
40194     v8si __builtin_ia32_phsubd256 (v8si,v8si)
40195     v16hi __builtin_ia32_phsubsw256 (v16hi,v16hi)
40196     v32qi __builtin_ia32_pmaddubsw256 (v32qi,v32qi)
40197     v16hi __builtin_ia32_pmaddwd256 (v16hi,v16hi)
40198     v32qi __builtin_ia32_pmaxsb256 (v32qi,v32qi)
40199     v16hi __builtin_ia32_pmaxsw256 (v16hi,v16hi)
40200     v8si __builtin_ia32_pmaxsd256 (v8si,v8si)
40201     v32qi __builtin_ia32_pmaxub256 (v32qi,v32qi)
40202     v16hi __builtin_ia32_pmaxuw256 (v16hi,v16hi)
40203     v8si __builtin_ia32_pmaxud256 (v8si,v8si)
40204     v32qi __builtin_ia32_pminsb256 (v32qi,v32qi)
40205     v16hi __builtin_ia32_pminsw256 (v16hi,v16hi)
40206     v8si __builtin_ia32_pminsd256 (v8si,v8si)
40207     v32qi __builtin_ia32_pminub256 (v32qi,v32qi)
40208     v16hi __builtin_ia32_pminuw256 (v16hi,v16hi)
40209     v8si __builtin_ia32_pminud256 (v8si,v8si)
40210     int __builtin_ia32_pmovmskb256 (v32qi)
40211     v16hi __builtin_ia32_pmovsxbw256 (v16qi)
40212     v8si __builtin_ia32_pmovsxbd256 (v16qi)
40213     v4di __builtin_ia32_pmovsxbq256 (v16qi)
40214     v8si __builtin_ia32_pmovsxwd256 (v8hi)
40215     v4di __builtin_ia32_pmovsxwq256 (v8hi)
40216     v4di __builtin_ia32_pmovsxdq256 (v4si)
40217     v16hi __builtin_ia32_pmovzxbw256 (v16qi)
40218     v8si __builtin_ia32_pmovzxbd256 (v16qi)
40219     v4di __builtin_ia32_pmovzxbq256 (v16qi)
40220     v8si __builtin_ia32_pmovzxwd256 (v8hi)
40221     v4di __builtin_ia32_pmovzxwq256 (v8hi)
40222     v4di __builtin_ia32_pmovzxdq256 (v4si)
40223     v4di __builtin_ia32_pmuldq256 (v8si,v8si)
40224     v16hi __builtin_ia32_pmulhrsw256 (v16hi, v16hi)
40225     v16hi __builtin_ia32_pmulhuw256 (v16hi,v16hi)
40226     v16hi __builtin_ia32_pmulhw256 (v16hi,v16hi)
40227     v16hi __builtin_ia32_pmullw256 (v16hi,v16hi)
40228     v8si __builtin_ia32_pmulld256 (v8si,v8si)
40229     v4di __builtin_ia32_pmuludq256 (v8si,v8si)
40230     v4di __builtin_ia32_por256 (v4di,v4di)
40231     v16hi __builtin_ia32_psadbw256 (v32qi,v32qi)
40232     v32qi __builtin_ia32_pshufb256 (v32qi,v32qi)
40233     v8si __builtin_ia32_pshufd256 (v8si,int)
40234     v16hi __builtin_ia32_pshufhw256 (v16hi,int)
40235     v16hi __builtin_ia32_pshuflw256 (v16hi,int)
40236     v32qi __builtin_ia32_psignb256 (v32qi,v32qi)
40237     v16hi __builtin_ia32_psignw256 (v16hi,v16hi)
40238     v8si __builtin_ia32_psignd256 (v8si,v8si)
40239     v4di __builtin_ia32_pslldqi256 (v4di,int)
40240     v16hi __builtin_ia32_psllwi256 (16hi,int)
40241     v16hi __builtin_ia32_psllw256(v16hi,v8hi)
40242     v8si __builtin_ia32_pslldi256 (v8si,int)
40243     v8si __builtin_ia32_pslld256(v8si,v4si)
40244     v4di __builtin_ia32_psllqi256 (v4di,int)
40245     v4di __builtin_ia32_psllq256(v4di,v2di)
40246     v16hi __builtin_ia32_psrawi256 (v16hi,int)
40247     v16hi __builtin_ia32_psraw256 (v16hi,v8hi)
40248     v8si __builtin_ia32_psradi256 (v8si,int)
40249     v8si __builtin_ia32_psrad256 (v8si,v4si)
40250     v4di __builtin_ia32_psrldqi256 (v4di, int)
40251     v16hi __builtin_ia32_psrlwi256 (v16hi,int)
40252     v16hi __builtin_ia32_psrlw256 (v16hi,v8hi)
40253     v8si __builtin_ia32_psrldi256 (v8si,int)
40254     v8si __builtin_ia32_psrld256 (v8si,v4si)
40255     v4di __builtin_ia32_psrlqi256 (v4di,int)
40256     v4di __builtin_ia32_psrlq256(v4di,v2di)
40257     v32qi __builtin_ia32_psubb256 (v32qi,v32qi)
40258     v32hi __builtin_ia32_psubw256 (v16hi,v16hi)
40259     v8si __builtin_ia32_psubd256 (v8si,v8si)
40260     v4di __builtin_ia32_psubq256 (v4di,v4di)
40261     v32qi __builtin_ia32_psubsb256 (v32qi,v32qi)
40262     v16hi __builtin_ia32_psubsw256 (v16hi,v16hi)
40263     v32qi __builtin_ia32_psubusb256 (v32qi,v32qi)
40264     v16hi __builtin_ia32_psubusw256 (v16hi,v16hi)
40265     v32qi __builtin_ia32_punpckhbw256 (v32qi,v32qi)
40266     v16hi __builtin_ia32_punpckhwd256 (v16hi,v16hi)
40267     v8si __builtin_ia32_punpckhdq256 (v8si,v8si)
40268     v4di __builtin_ia32_punpckhqdq256 (v4di,v4di)
40269     v32qi __builtin_ia32_punpcklbw256 (v32qi,v32qi)
40270     v16hi __builtin_ia32_punpcklwd256 (v16hi,v16hi)
40271     v8si __builtin_ia32_punpckldq256 (v8si,v8si)
40272     v4di __builtin_ia32_punpcklqdq256 (v4di,v4di)
40273     v4di __builtin_ia32_pxor256 (v4di,v4di)
40274     v4di __builtin_ia32_movntdqa256 (pv4di)
40275     v4sf __builtin_ia32_vbroadcastss_ps (v4sf)
40276     v8sf __builtin_ia32_vbroadcastss_ps256 (v4sf)
40277     v4df __builtin_ia32_vbroadcastsd_pd256 (v2df)
40278     v4di __builtin_ia32_vbroadcastsi256 (v2di)
40279     v4si __builtin_ia32_pblendd128 (v4si,v4si)
40280     v8si __builtin_ia32_pblendd256 (v8si,v8si)
40281     v32qi __builtin_ia32_pbroadcastb256 (v16qi)
40282     v16hi __builtin_ia32_pbroadcastw256 (v8hi)
40283     v8si __builtin_ia32_pbroadcastd256 (v4si)
40284     v4di __builtin_ia32_pbroadcastq256 (v2di)
40285     v16qi __builtin_ia32_pbroadcastb128 (v16qi)
40286     v8hi __builtin_ia32_pbroadcastw128 (v8hi)
40287     v4si __builtin_ia32_pbroadcastd128 (v4si)
40288     v2di __builtin_ia32_pbroadcastq128 (v2di)
40289     v8si __builtin_ia32_permvarsi256 (v8si,v8si)
40290     v4df __builtin_ia32_permdf256 (v4df,int)
40291     v8sf __builtin_ia32_permvarsf256 (v8sf,v8sf)
40292     v4di __builtin_ia32_permdi256 (v4di,int)
40293     v4di __builtin_ia32_permti256 (v4di,v4di,int)
40294     v4di __builtin_ia32_extract128i256 (v4di,int)
40295     v4di __builtin_ia32_insert128i256 (v4di,v2di,int)
40296     v8si __builtin_ia32_maskloadd256 (pcv8si,v8si)
40297     v4di __builtin_ia32_maskloadq256 (pcv4di,v4di)
40298     v4si __builtin_ia32_maskloadd (pcv4si,v4si)
40299     v2di __builtin_ia32_maskloadq (pcv2di,v2di)
40300     void __builtin_ia32_maskstored256 (pv8si,v8si,v8si)
40301     void __builtin_ia32_maskstoreq256 (pv4di,v4di,v4di)
40302     void __builtin_ia32_maskstored (pv4si,v4si,v4si)
40303     void __builtin_ia32_maskstoreq (pv2di,v2di,v2di)
40304     v8si __builtin_ia32_psllv8si (v8si,v8si)
40305     v4si __builtin_ia32_psllv4si (v4si,v4si)
40306     v4di __builtin_ia32_psllv4di (v4di,v4di)
40307     v2di __builtin_ia32_psllv2di (v2di,v2di)
40308     v8si __builtin_ia32_psrav8si (v8si,v8si)
40309     v4si __builtin_ia32_psrav4si (v4si,v4si)
40310     v8si __builtin_ia32_psrlv8si (v8si,v8si)
40311     v4si __builtin_ia32_psrlv4si (v4si,v4si)
40312     v4di __builtin_ia32_psrlv4di (v4di,v4di)
40313     v2di __builtin_ia32_psrlv2di (v2di,v2di)
40314     v2df __builtin_ia32_gathersiv2df (v2df, pcdouble,v4si,v2df,int)
40315     v4df __builtin_ia32_gathersiv4df (v4df, pcdouble,v4si,v4df,int)
40316     v2df __builtin_ia32_gatherdiv2df (v2df, pcdouble,v2di,v2df,int)
40317     v4df __builtin_ia32_gatherdiv4df (v4df, pcdouble,v4di,v4df,int)
40318     v4sf __builtin_ia32_gathersiv4sf (v4sf, pcfloat,v4si,v4sf,int)
40319     v8sf __builtin_ia32_gathersiv8sf (v8sf, pcfloat,v8si,v8sf,int)
40320     v4sf __builtin_ia32_gatherdiv4sf (v4sf, pcfloat,v2di,v4sf,int)
40321     v4sf __builtin_ia32_gatherdiv4sf256 (v4sf, pcfloat,v4di,v4sf,int)
40322     v2di __builtin_ia32_gathersiv2di (v2di, pcint64,v4si,v2di,int)
40323     v4di __builtin_ia32_gathersiv4di (v4di, pcint64,v4si,v4di,int)
40324     v2di __builtin_ia32_gatherdiv2di (v2di, pcint64,v2di,v2di,int)
40325     v4di __builtin_ia32_gatherdiv4di (v4di, pcint64,v4di,v4di,int)
40326     v4si __builtin_ia32_gathersiv4si (v4si, pcint,v4si,v4si,int)
40327     v8si __builtin_ia32_gathersiv8si (v8si, pcint,v8si,v8si,int)
40328     v4si __builtin_ia32_gatherdiv4si (v4si, pcint,v2di,v4si,int)
40329     v4si __builtin_ia32_gatherdiv4si256 (v4si, pcint,v4di,v4si,int)
40330
40331 The following built-in functions are available when '-maes' is used.
40332All of them generate the machine instruction that is part of the name.
40333
40334     v2di __builtin_ia32_aesenc128 (v2di, v2di)
40335     v2di __builtin_ia32_aesenclast128 (v2di, v2di)
40336     v2di __builtin_ia32_aesdec128 (v2di, v2di)
40337     v2di __builtin_ia32_aesdeclast128 (v2di, v2di)
40338     v2di __builtin_ia32_aeskeygenassist128 (v2di, const int)
40339     v2di __builtin_ia32_aesimc128 (v2di)
40340
40341 The following built-in function is available when '-mpclmul' is used.
40342
40343'v2di __builtin_ia32_pclmulqdq128 (v2di, v2di, const int)'
40344     Generates the 'pclmulqdq' machine instruction.
40345
40346 The following built-in function is available when '-mfsgsbase' is used.
40347All of them generate the machine instruction that is part of the name.
40348
40349     unsigned int __builtin_ia32_rdfsbase32 (void)
40350     unsigned long long __builtin_ia32_rdfsbase64 (void)
40351     unsigned int __builtin_ia32_rdgsbase32 (void)
40352     unsigned long long __builtin_ia32_rdgsbase64 (void)
40353     void _writefsbase_u32 (unsigned int)
40354     void _writefsbase_u64 (unsigned long long)
40355     void _writegsbase_u32 (unsigned int)
40356     void _writegsbase_u64 (unsigned long long)
40357
40358 The following built-in function is available when '-mrdrnd' is used.
40359All of them generate the machine instruction that is part of the name.
40360
40361     unsigned int __builtin_ia32_rdrand16_step (unsigned short *)
40362     unsigned int __builtin_ia32_rdrand32_step (unsigned int *)
40363     unsigned int __builtin_ia32_rdrand64_step (unsigned long long *)
40364
40365 The following built-in functions are available when '-msse4a' is used.
40366All of them generate the machine instruction that is part of the name.
40367
40368     void __builtin_ia32_movntsd (double *, v2df)
40369     void __builtin_ia32_movntss (float *, v4sf)
40370     v2di __builtin_ia32_extrq  (v2di, v16qi)
40371     v2di __builtin_ia32_extrqi (v2di, const unsigned int, const unsigned int)
40372     v2di __builtin_ia32_insertq (v2di, v2di)
40373     v2di __builtin_ia32_insertqi (v2di, v2di, const unsigned int, const unsigned int)
40374
40375 The following built-in functions are available when '-mxop' is used.
40376     v2df __builtin_ia32_vfrczpd (v2df)
40377     v4sf __builtin_ia32_vfrczps (v4sf)
40378     v2df __builtin_ia32_vfrczsd (v2df)
40379     v4sf __builtin_ia32_vfrczss (v4sf)
40380     v4df __builtin_ia32_vfrczpd256 (v4df)
40381     v8sf __builtin_ia32_vfrczps256 (v8sf)
40382     v2di __builtin_ia32_vpcmov (v2di, v2di, v2di)
40383     v2di __builtin_ia32_vpcmov_v2di (v2di, v2di, v2di)
40384     v4si __builtin_ia32_vpcmov_v4si (v4si, v4si, v4si)
40385     v8hi __builtin_ia32_vpcmov_v8hi (v8hi, v8hi, v8hi)
40386     v16qi __builtin_ia32_vpcmov_v16qi (v16qi, v16qi, v16qi)
40387     v2df __builtin_ia32_vpcmov_v2df (v2df, v2df, v2df)
40388     v4sf __builtin_ia32_vpcmov_v4sf (v4sf, v4sf, v4sf)
40389     v4di __builtin_ia32_vpcmov_v4di256 (v4di, v4di, v4di)
40390     v8si __builtin_ia32_vpcmov_v8si256 (v8si, v8si, v8si)
40391     v16hi __builtin_ia32_vpcmov_v16hi256 (v16hi, v16hi, v16hi)
40392     v32qi __builtin_ia32_vpcmov_v32qi256 (v32qi, v32qi, v32qi)
40393     v4df __builtin_ia32_vpcmov_v4df256 (v4df, v4df, v4df)
40394     v8sf __builtin_ia32_vpcmov_v8sf256 (v8sf, v8sf, v8sf)
40395     v16qi __builtin_ia32_vpcomeqb (v16qi, v16qi)
40396     v8hi __builtin_ia32_vpcomeqw (v8hi, v8hi)
40397     v4si __builtin_ia32_vpcomeqd (v4si, v4si)
40398     v2di __builtin_ia32_vpcomeqq (v2di, v2di)
40399     v16qi __builtin_ia32_vpcomequb (v16qi, v16qi)
40400     v4si __builtin_ia32_vpcomequd (v4si, v4si)
40401     v2di __builtin_ia32_vpcomequq (v2di, v2di)
40402     v8hi __builtin_ia32_vpcomequw (v8hi, v8hi)
40403     v8hi __builtin_ia32_vpcomeqw (v8hi, v8hi)
40404     v16qi __builtin_ia32_vpcomfalseb (v16qi, v16qi)
40405     v4si __builtin_ia32_vpcomfalsed (v4si, v4si)
40406     v2di __builtin_ia32_vpcomfalseq (v2di, v2di)
40407     v16qi __builtin_ia32_vpcomfalseub (v16qi, v16qi)
40408     v4si __builtin_ia32_vpcomfalseud (v4si, v4si)
40409     v2di __builtin_ia32_vpcomfalseuq (v2di, v2di)
40410     v8hi __builtin_ia32_vpcomfalseuw (v8hi, v8hi)
40411     v8hi __builtin_ia32_vpcomfalsew (v8hi, v8hi)
40412     v16qi __builtin_ia32_vpcomgeb (v16qi, v16qi)
40413     v4si __builtin_ia32_vpcomged (v4si, v4si)
40414     v2di __builtin_ia32_vpcomgeq (v2di, v2di)
40415     v16qi __builtin_ia32_vpcomgeub (v16qi, v16qi)
40416     v4si __builtin_ia32_vpcomgeud (v4si, v4si)
40417     v2di __builtin_ia32_vpcomgeuq (v2di, v2di)
40418     v8hi __builtin_ia32_vpcomgeuw (v8hi, v8hi)
40419     v8hi __builtin_ia32_vpcomgew (v8hi, v8hi)
40420     v16qi __builtin_ia32_vpcomgtb (v16qi, v16qi)
40421     v4si __builtin_ia32_vpcomgtd (v4si, v4si)
40422     v2di __builtin_ia32_vpcomgtq (v2di, v2di)
40423     v16qi __builtin_ia32_vpcomgtub (v16qi, v16qi)
40424     v4si __builtin_ia32_vpcomgtud (v4si, v4si)
40425     v2di __builtin_ia32_vpcomgtuq (v2di, v2di)
40426     v8hi __builtin_ia32_vpcomgtuw (v8hi, v8hi)
40427     v8hi __builtin_ia32_vpcomgtw (v8hi, v8hi)
40428     v16qi __builtin_ia32_vpcomleb (v16qi, v16qi)
40429     v4si __builtin_ia32_vpcomled (v4si, v4si)
40430     v2di __builtin_ia32_vpcomleq (v2di, v2di)
40431     v16qi __builtin_ia32_vpcomleub (v16qi, v16qi)
40432     v4si __builtin_ia32_vpcomleud (v4si, v4si)
40433     v2di __builtin_ia32_vpcomleuq (v2di, v2di)
40434     v8hi __builtin_ia32_vpcomleuw (v8hi, v8hi)
40435     v8hi __builtin_ia32_vpcomlew (v8hi, v8hi)
40436     v16qi __builtin_ia32_vpcomltb (v16qi, v16qi)
40437     v4si __builtin_ia32_vpcomltd (v4si, v4si)
40438     v2di __builtin_ia32_vpcomltq (v2di, v2di)
40439     v16qi __builtin_ia32_vpcomltub (v16qi, v16qi)
40440     v4si __builtin_ia32_vpcomltud (v4si, v4si)
40441     v2di __builtin_ia32_vpcomltuq (v2di, v2di)
40442     v8hi __builtin_ia32_vpcomltuw (v8hi, v8hi)
40443     v8hi __builtin_ia32_vpcomltw (v8hi, v8hi)
40444     v16qi __builtin_ia32_vpcomneb (v16qi, v16qi)
40445     v4si __builtin_ia32_vpcomned (v4si, v4si)
40446     v2di __builtin_ia32_vpcomneq (v2di, v2di)
40447     v16qi __builtin_ia32_vpcomneub (v16qi, v16qi)
40448     v4si __builtin_ia32_vpcomneud (v4si, v4si)
40449     v2di __builtin_ia32_vpcomneuq (v2di, v2di)
40450     v8hi __builtin_ia32_vpcomneuw (v8hi, v8hi)
40451     v8hi __builtin_ia32_vpcomnew (v8hi, v8hi)
40452     v16qi __builtin_ia32_vpcomtrueb (v16qi, v16qi)
40453     v4si __builtin_ia32_vpcomtrued (v4si, v4si)
40454     v2di __builtin_ia32_vpcomtrueq (v2di, v2di)
40455     v16qi __builtin_ia32_vpcomtrueub (v16qi, v16qi)
40456     v4si __builtin_ia32_vpcomtrueud (v4si, v4si)
40457     v2di __builtin_ia32_vpcomtrueuq (v2di, v2di)
40458     v8hi __builtin_ia32_vpcomtrueuw (v8hi, v8hi)
40459     v8hi __builtin_ia32_vpcomtruew (v8hi, v8hi)
40460     v4si __builtin_ia32_vphaddbd (v16qi)
40461     v2di __builtin_ia32_vphaddbq (v16qi)
40462     v8hi __builtin_ia32_vphaddbw (v16qi)
40463     v2di __builtin_ia32_vphadddq (v4si)
40464     v4si __builtin_ia32_vphaddubd (v16qi)
40465     v2di __builtin_ia32_vphaddubq (v16qi)
40466     v8hi __builtin_ia32_vphaddubw (v16qi)
40467     v2di __builtin_ia32_vphaddudq (v4si)
40468     v4si __builtin_ia32_vphadduwd (v8hi)
40469     v2di __builtin_ia32_vphadduwq (v8hi)
40470     v4si __builtin_ia32_vphaddwd (v8hi)
40471     v2di __builtin_ia32_vphaddwq (v8hi)
40472     v8hi __builtin_ia32_vphsubbw (v16qi)
40473     v2di __builtin_ia32_vphsubdq (v4si)
40474     v4si __builtin_ia32_vphsubwd (v8hi)
40475     v4si __builtin_ia32_vpmacsdd (v4si, v4si, v4si)
40476     v2di __builtin_ia32_vpmacsdqh (v4si, v4si, v2di)
40477     v2di __builtin_ia32_vpmacsdql (v4si, v4si, v2di)
40478     v4si __builtin_ia32_vpmacssdd (v4si, v4si, v4si)
40479     v2di __builtin_ia32_vpmacssdqh (v4si, v4si, v2di)
40480     v2di __builtin_ia32_vpmacssdql (v4si, v4si, v2di)
40481     v4si __builtin_ia32_vpmacsswd (v8hi, v8hi, v4si)
40482     v8hi __builtin_ia32_vpmacssww (v8hi, v8hi, v8hi)
40483     v4si __builtin_ia32_vpmacswd (v8hi, v8hi, v4si)
40484     v8hi __builtin_ia32_vpmacsww (v8hi, v8hi, v8hi)
40485     v4si __builtin_ia32_vpmadcsswd (v8hi, v8hi, v4si)
40486     v4si __builtin_ia32_vpmadcswd (v8hi, v8hi, v4si)
40487     v16qi __builtin_ia32_vpperm (v16qi, v16qi, v16qi)
40488     v16qi __builtin_ia32_vprotb (v16qi, v16qi)
40489     v4si __builtin_ia32_vprotd (v4si, v4si)
40490     v2di __builtin_ia32_vprotq (v2di, v2di)
40491     v8hi __builtin_ia32_vprotw (v8hi, v8hi)
40492     v16qi __builtin_ia32_vpshab (v16qi, v16qi)
40493     v4si __builtin_ia32_vpshad (v4si, v4si)
40494     v2di __builtin_ia32_vpshaq (v2di, v2di)
40495     v8hi __builtin_ia32_vpshaw (v8hi, v8hi)
40496     v16qi __builtin_ia32_vpshlb (v16qi, v16qi)
40497     v4si __builtin_ia32_vpshld (v4si, v4si)
40498     v2di __builtin_ia32_vpshlq (v2di, v2di)
40499     v8hi __builtin_ia32_vpshlw (v8hi, v8hi)
40500
40501 The following built-in functions are available when '-mfma4' is used.
40502All of them generate the machine instruction that is part of the name.
40503
40504     v2df __builtin_ia32_vfmaddpd (v2df, v2df, v2df)
40505     v4sf __builtin_ia32_vfmaddps (v4sf, v4sf, v4sf)
40506     v2df __builtin_ia32_vfmaddsd (v2df, v2df, v2df)
40507     v4sf __builtin_ia32_vfmaddss (v4sf, v4sf, v4sf)
40508     v2df __builtin_ia32_vfmsubpd (v2df, v2df, v2df)
40509     v4sf __builtin_ia32_vfmsubps (v4sf, v4sf, v4sf)
40510     v2df __builtin_ia32_vfmsubsd (v2df, v2df, v2df)
40511     v4sf __builtin_ia32_vfmsubss (v4sf, v4sf, v4sf)
40512     v2df __builtin_ia32_vfnmaddpd (v2df, v2df, v2df)
40513     v4sf __builtin_ia32_vfnmaddps (v4sf, v4sf, v4sf)
40514     v2df __builtin_ia32_vfnmaddsd (v2df, v2df, v2df)
40515     v4sf __builtin_ia32_vfnmaddss (v4sf, v4sf, v4sf)
40516     v2df __builtin_ia32_vfnmsubpd (v2df, v2df, v2df)
40517     v4sf __builtin_ia32_vfnmsubps (v4sf, v4sf, v4sf)
40518     v2df __builtin_ia32_vfnmsubsd (v2df, v2df, v2df)
40519     v4sf __builtin_ia32_vfnmsubss (v4sf, v4sf, v4sf)
40520     v2df __builtin_ia32_vfmaddsubpd  (v2df, v2df, v2df)
40521     v4sf __builtin_ia32_vfmaddsubps  (v4sf, v4sf, v4sf)
40522     v2df __builtin_ia32_vfmsubaddpd  (v2df, v2df, v2df)
40523     v4sf __builtin_ia32_vfmsubaddps  (v4sf, v4sf, v4sf)
40524     v4df __builtin_ia32_vfmaddpd256 (v4df, v4df, v4df)
40525     v8sf __builtin_ia32_vfmaddps256 (v8sf, v8sf, v8sf)
40526     v4df __builtin_ia32_vfmsubpd256 (v4df, v4df, v4df)
40527     v8sf __builtin_ia32_vfmsubps256 (v8sf, v8sf, v8sf)
40528     v4df __builtin_ia32_vfnmaddpd256 (v4df, v4df, v4df)
40529     v8sf __builtin_ia32_vfnmaddps256 (v8sf, v8sf, v8sf)
40530     v4df __builtin_ia32_vfnmsubpd256 (v4df, v4df, v4df)
40531     v8sf __builtin_ia32_vfnmsubps256 (v8sf, v8sf, v8sf)
40532     v4df __builtin_ia32_vfmaddsubpd256 (v4df, v4df, v4df)
40533     v8sf __builtin_ia32_vfmaddsubps256 (v8sf, v8sf, v8sf)
40534     v4df __builtin_ia32_vfmsubaddpd256 (v4df, v4df, v4df)
40535     v8sf __builtin_ia32_vfmsubaddps256 (v8sf, v8sf, v8sf)
40536
40537
40538 The following built-in functions are available when '-mlwp' is used.
40539
40540     void __builtin_ia32_llwpcb16 (void *);
40541     void __builtin_ia32_llwpcb32 (void *);
40542     void __builtin_ia32_llwpcb64 (void *);
40543     void * __builtin_ia32_llwpcb16 (void);
40544     void * __builtin_ia32_llwpcb32 (void);
40545     void * __builtin_ia32_llwpcb64 (void);
40546     void __builtin_ia32_lwpval16 (unsigned short, unsigned int, unsigned short)
40547     void __builtin_ia32_lwpval32 (unsigned int, unsigned int, unsigned int)
40548     void __builtin_ia32_lwpval64 (unsigned __int64, unsigned int, unsigned int)
40549     unsigned char __builtin_ia32_lwpins16 (unsigned short, unsigned int, unsigned short)
40550     unsigned char __builtin_ia32_lwpins32 (unsigned int, unsigned int, unsigned int)
40551     unsigned char __builtin_ia32_lwpins64 (unsigned __int64, unsigned int, unsigned int)
40552
40553 The following built-in functions are available when '-mbmi' is used.
40554All of them generate the machine instruction that is part of the name.
40555     unsigned int __builtin_ia32_bextr_u32(unsigned int, unsigned int);
40556     unsigned long long __builtin_ia32_bextr_u64 (unsigned long long, unsigned long long);
40557
40558 The following built-in functions are available when '-mbmi2' is used.
40559All of them generate the machine instruction that is part of the name.
40560     unsigned int _bzhi_u32 (unsigned int, unsigned int)
40561     unsigned int _pdep_u32 (unsigned int, unsigned int)
40562     unsigned int _pext_u32 (unsigned int, unsigned int)
40563     unsigned long long _bzhi_u64 (unsigned long long, unsigned long long)
40564     unsigned long long _pdep_u64 (unsigned long long, unsigned long long)
40565     unsigned long long _pext_u64 (unsigned long long, unsigned long long)
40566
40567 The following built-in functions are available when '-mlzcnt' is used.
40568All of them generate the machine instruction that is part of the name.
40569     unsigned short __builtin_ia32_lzcnt_16(unsigned short);
40570     unsigned int __builtin_ia32_lzcnt_u32(unsigned int);
40571     unsigned long long __builtin_ia32_lzcnt_u64 (unsigned long long);
40572
40573 The following built-in functions are available when '-mfxsr' is used.
40574All of them generate the machine instruction that is part of the name.
40575     void __builtin_ia32_fxsave (void *)
40576     void __builtin_ia32_fxrstor (void *)
40577     void __builtin_ia32_fxsave64 (void *)
40578     void __builtin_ia32_fxrstor64 (void *)
40579
40580 The following built-in functions are available when '-mxsave' is used.
40581All of them generate the machine instruction that is part of the name.
40582     void __builtin_ia32_xsave (void *, long long)
40583     void __builtin_ia32_xrstor (void *, long long)
40584     void __builtin_ia32_xsave64 (void *, long long)
40585     void __builtin_ia32_xrstor64 (void *, long long)
40586
40587 The following built-in functions are available when '-mxsaveopt' is
40588used.  All of them generate the machine instruction that is part of the
40589name.
40590     void __builtin_ia32_xsaveopt (void *, long long)
40591     void __builtin_ia32_xsaveopt64 (void *, long long)
40592
40593 The following built-in functions are available when '-mtbm' is used.
40594Both of them generate the immediate form of the bextr machine
40595instruction.
40596     unsigned int __builtin_ia32_bextri_u32 (unsigned int, const unsigned int);
40597     unsigned long long __builtin_ia32_bextri_u64 (unsigned long long, const unsigned long long);
40598
40599 The following built-in functions are available when '-m3dnow' is used.
40600All of them generate the machine instruction that is part of the name.
40601
40602     void __builtin_ia32_femms (void)
40603     v8qi __builtin_ia32_pavgusb (v8qi, v8qi)
40604     v2si __builtin_ia32_pf2id (v2sf)
40605     v2sf __builtin_ia32_pfacc (v2sf, v2sf)
40606     v2sf __builtin_ia32_pfadd (v2sf, v2sf)
40607     v2si __builtin_ia32_pfcmpeq (v2sf, v2sf)
40608     v2si __builtin_ia32_pfcmpge (v2sf, v2sf)
40609     v2si __builtin_ia32_pfcmpgt (v2sf, v2sf)
40610     v2sf __builtin_ia32_pfmax (v2sf, v2sf)
40611     v2sf __builtin_ia32_pfmin (v2sf, v2sf)
40612     v2sf __builtin_ia32_pfmul (v2sf, v2sf)
40613     v2sf __builtin_ia32_pfrcp (v2sf)
40614     v2sf __builtin_ia32_pfrcpit1 (v2sf, v2sf)
40615     v2sf __builtin_ia32_pfrcpit2 (v2sf, v2sf)
40616     v2sf __builtin_ia32_pfrsqrt (v2sf)
40617     v2sf __builtin_ia32_pfsub (v2sf, v2sf)
40618     v2sf __builtin_ia32_pfsubr (v2sf, v2sf)
40619     v2sf __builtin_ia32_pi2fd (v2si)
40620     v4hi __builtin_ia32_pmulhrw (v4hi, v4hi)
40621
40622 The following built-in functions are available when both '-m3dnow' and
40623'-march=athlon' are used.  All of them generate the machine instruction
40624that is part of the name.
40625
40626     v2si __builtin_ia32_pf2iw (v2sf)
40627     v2sf __builtin_ia32_pfnacc (v2sf, v2sf)
40628     v2sf __builtin_ia32_pfpnacc (v2sf, v2sf)
40629     v2sf __builtin_ia32_pi2fw (v2si)
40630     v2sf __builtin_ia32_pswapdsf (v2sf)
40631     v2si __builtin_ia32_pswapdsi (v2si)
40632
40633 The following built-in functions are available when '-mrtm' is used
40634They are used for restricted transactional memory.  These are the
40635internal low level functions.  Normally the functions in *note X86
40636transactional memory intrinsics:: should be used instead.
40637
40638     int __builtin_ia32_xbegin ()
40639     void __builtin_ia32_xend ()
40640     void __builtin_ia32_xabort (status)
40641     int __builtin_ia32_xtest ()
40642
40643
40644File: gcc.info,  Node: X86 transactional memory intrinsics,  Next: MIPS DSP Built-in Functions,  Prev: X86 Built-in Functions,  Up: Target Builtins
40645
406466.57.12 X86 transaction memory intrinsics
40647-----------------------------------------
40648
40649Hardware transactional memory intrinsics for i386.  These allow to use
40650memory transactions with RTM (Restricted Transactional Memory).  For
40651using HLE (Hardware Lock Elision) see *note x86 specific memory model
40652extensions for transactional memory:: instead.  This support is enabled
40653with the '-mrtm' option.
40654
40655 A memory transaction commits all changes to memory in an atomic way, as
40656visible to other threads.  If the transaction fails it is rolled back
40657and all side effects discarded.
40658
40659 Generally there is no guarantee that a memory transaction ever succeeds
40660and suitable fallback code always needs to be supplied.
40661
40662 -- RTM Function: unsigned _xbegin ()
40663     Start a RTM (Restricted Transactional Memory) transaction.  Returns
40664     _XBEGIN_STARTED when the transaction started successfully (note
40665     this is not 0, so the constant has to be explicitely tested).  When
40666     the transaction aborts all side effects are undone and an abort
40667     code is returned.  There is no guarantee any transaction ever
40668     succeeds, so there always needs to be a valid tested fallback path.
40669
40670     #include <immintrin.h>
40671
40672     if ((status = _xbegin ()) == _XBEGIN_STARTED) {
40673         ... transaction code...
40674         _xend ();
40675     } else {
40676         ... non transactional fallback path...
40677     }
40678
40679 Valid abort status bits (when the value is not '_XBEGIN_STARTED') are:
40680
40681'_XABORT_EXPLICIT'
40682     Transaction explicitely aborted with '_xabort'.  The parameter
40683     passed to '_xabort' is available with '_XABORT_CODE(status)'
40684'_XABORT_RETRY'
40685     Transaction retry is possible.
40686'_XABORT_CONFLICT'
40687     Transaction abort due to a memory conflict with another thread
40688'_XABORT_CAPACITY'
40689     Transaction abort due to the transaction using too much memory
40690'_XABORT_DEBUG'
40691     Transaction abort due to a debug trap
40692'_XABORT_NESTED'
40693     Transaction abort in a inner nested transaction
40694
40695 -- RTM Function: void _xend ()
40696     Commit the current transaction.  When no transaction is active this
40697     will fault.  All memory side effects of the transactions will
40698     become visible to other threads in an atomic matter.
40699
40700 -- RTM Function: int _xtest ()
40701     Return a value not zero when a transaction is currently active,
40702     otherwise 0.
40703
40704 -- RTM Function: void _xabort (status)
40705     Abort the current transaction.  When no transaction is active this
40706     is a no-op.  status must be a 8bit constant, that is included in
40707     the status code returned by '_xbegin'
40708
40709
40710File: gcc.info,  Node: MIPS DSP Built-in Functions,  Next: MIPS Paired-Single Support,  Prev: X86 transactional memory intrinsics,  Up: Target Builtins
40711
407126.57.13 MIPS DSP Built-in Functions
40713-----------------------------------
40714
40715The MIPS DSP Application-Specific Extension (ASE) includes new
40716instructions that are designed to improve the performance of DSP and
40717media applications.  It provides instructions that operate on packed
407188-bit/16-bit integer data, Q7, Q15 and Q31 fractional data.
40719
40720 GCC supports MIPS DSP operations using both the generic vector
40721extensions (*note Vector Extensions::) and a collection of MIPS-specific
40722built-in functions.  Both kinds of support are enabled by the '-mdsp'
40723command-line option.
40724
40725 Revision 2 of the ASE was introduced in the second half of 2006.  This
40726revision adds extra instructions to the original ASE, but is otherwise
40727backwards-compatible with it.  You can select revision 2 using the
40728command-line option '-mdspr2'; this option implies '-mdsp'.
40729
40730 The SCOUNT and POS bits of the DSP control register are global.  The
40731WRDSP, EXTPDP, EXTPDPV and MTHLIP instructions modify the SCOUNT and POS
40732bits.  During optimization, the compiler does not delete these
40733instructions and it does not delete calls to functions containing these
40734instructions.
40735
40736 At present, GCC only provides support for operations on 32-bit vectors.
40737The vector type associated with 8-bit integer data is usually called
40738'v4i8', the vector type associated with Q7 is usually called 'v4q7', the
40739vector type associated with 16-bit integer data is usually called
40740'v2i16', and the vector type associated with Q15 is usually called
40741'v2q15'.  They can be defined in C as follows:
40742
40743     typedef signed char v4i8 __attribute__ ((vector_size(4)));
40744     typedef signed char v4q7 __attribute__ ((vector_size(4)));
40745     typedef short v2i16 __attribute__ ((vector_size(4)));
40746     typedef short v2q15 __attribute__ ((vector_size(4)));
40747
40748 'v4i8', 'v4q7', 'v2i16' and 'v2q15' values are initialized in the same
40749way as aggregates.  For example:
40750
40751     v4i8 a = {1, 2, 3, 4};
40752     v4i8 b;
40753     b = (v4i8) {5, 6, 7, 8};
40754
40755     v2q15 c = {0x0fcb, 0x3a75};
40756     v2q15 d;
40757     d = (v2q15) {0.1234 * 0x1.0p15, 0.4567 * 0x1.0p15};
40758
40759 _Note:_ The CPU's endianness determines the order in which values are
40760packed.  On little-endian targets, the first value is the least
40761significant and the last value is the most significant.  The opposite
40762order applies to big-endian targets.  For example, the code above sets
40763the lowest byte of 'a' to '1' on little-endian targets and '4' on
40764big-endian targets.
40765
40766 _Note:_ Q7, Q15 and Q31 values must be initialized with their integer
40767representation.  As shown in this example, the integer representation of
40768a Q7 value can be obtained by multiplying the fractional value by
40769'0x1.0p7'.  The equivalent for Q15 values is to multiply by '0x1.0p15'.
40770The equivalent for Q31 values is to multiply by '0x1.0p31'.
40771
40772 The table below lists the 'v4i8' and 'v2q15' operations for which
40773hardware support exists.  'a' and 'b' are 'v4i8' values, and 'c' and 'd'
40774are 'v2q15' values.
40775
40776C code                               MIPS instruction
40777'a + b'                              'addu.qb'
40778'c + d'                              'addq.ph'
40779'a - b'                              'subu.qb'
40780'c - d'                              'subq.ph'
40781
40782 The table below lists the 'v2i16' operation for which hardware support
40783exists for the DSP ASE REV 2.  'e' and 'f' are 'v2i16' values.
40784
40785C code                               MIPS instruction
40786'e * f'                              'mul.ph'
40787
40788 It is easier to describe the DSP built-in functions if we first define
40789the following types:
40790
40791     typedef int q31;
40792     typedef int i32;
40793     typedef unsigned int ui32;
40794     typedef long long a64;
40795
40796 'q31' and 'i32' are actually the same as 'int', but we use 'q31' to
40797indicate a Q31 fractional value and 'i32' to indicate a 32-bit integer
40798value.  Similarly, 'a64' is the same as 'long long', but we use 'a64' to
40799indicate values that are placed in one of the four DSP accumulators
40800('$ac0', '$ac1', '$ac2' or '$ac3').
40801
40802 Also, some built-in functions prefer or require immediate numbers as
40803parameters, because the corresponding DSP instructions accept both
40804immediate numbers and register operands, or accept immediate numbers
40805only.  The immediate parameters are listed as follows.
40806
40807     imm0_3: 0 to 3.
40808     imm0_7: 0 to 7.
40809     imm0_15: 0 to 15.
40810     imm0_31: 0 to 31.
40811     imm0_63: 0 to 63.
40812     imm0_255: 0 to 255.
40813     imm_n32_31: -32 to 31.
40814     imm_n512_511: -512 to 511.
40815
40816 The following built-in functions map directly to a particular MIPS DSP
40817instruction.  Please refer to the architecture specification for details
40818on what each instruction does.
40819
40820     v2q15 __builtin_mips_addq_ph (v2q15, v2q15)
40821     v2q15 __builtin_mips_addq_s_ph (v2q15, v2q15)
40822     q31 __builtin_mips_addq_s_w (q31, q31)
40823     v4i8 __builtin_mips_addu_qb (v4i8, v4i8)
40824     v4i8 __builtin_mips_addu_s_qb (v4i8, v4i8)
40825     v2q15 __builtin_mips_subq_ph (v2q15, v2q15)
40826     v2q15 __builtin_mips_subq_s_ph (v2q15, v2q15)
40827     q31 __builtin_mips_subq_s_w (q31, q31)
40828     v4i8 __builtin_mips_subu_qb (v4i8, v4i8)
40829     v4i8 __builtin_mips_subu_s_qb (v4i8, v4i8)
40830     i32 __builtin_mips_addsc (i32, i32)
40831     i32 __builtin_mips_addwc (i32, i32)
40832     i32 __builtin_mips_modsub (i32, i32)
40833     i32 __builtin_mips_raddu_w_qb (v4i8)
40834     v2q15 __builtin_mips_absq_s_ph (v2q15)
40835     q31 __builtin_mips_absq_s_w (q31)
40836     v4i8 __builtin_mips_precrq_qb_ph (v2q15, v2q15)
40837     v2q15 __builtin_mips_precrq_ph_w (q31, q31)
40838     v2q15 __builtin_mips_precrq_rs_ph_w (q31, q31)
40839     v4i8 __builtin_mips_precrqu_s_qb_ph (v2q15, v2q15)
40840     q31 __builtin_mips_preceq_w_phl (v2q15)
40841     q31 __builtin_mips_preceq_w_phr (v2q15)
40842     v2q15 __builtin_mips_precequ_ph_qbl (v4i8)
40843     v2q15 __builtin_mips_precequ_ph_qbr (v4i8)
40844     v2q15 __builtin_mips_precequ_ph_qbla (v4i8)
40845     v2q15 __builtin_mips_precequ_ph_qbra (v4i8)
40846     v2q15 __builtin_mips_preceu_ph_qbl (v4i8)
40847     v2q15 __builtin_mips_preceu_ph_qbr (v4i8)
40848     v2q15 __builtin_mips_preceu_ph_qbla (v4i8)
40849     v2q15 __builtin_mips_preceu_ph_qbra (v4i8)
40850     v4i8 __builtin_mips_shll_qb (v4i8, imm0_7)
40851     v4i8 __builtin_mips_shll_qb (v4i8, i32)
40852     v2q15 __builtin_mips_shll_ph (v2q15, imm0_15)
40853     v2q15 __builtin_mips_shll_ph (v2q15, i32)
40854     v2q15 __builtin_mips_shll_s_ph (v2q15, imm0_15)
40855     v2q15 __builtin_mips_shll_s_ph (v2q15, i32)
40856     q31 __builtin_mips_shll_s_w (q31, imm0_31)
40857     q31 __builtin_mips_shll_s_w (q31, i32)
40858     v4i8 __builtin_mips_shrl_qb (v4i8, imm0_7)
40859     v4i8 __builtin_mips_shrl_qb (v4i8, i32)
40860     v2q15 __builtin_mips_shra_ph (v2q15, imm0_15)
40861     v2q15 __builtin_mips_shra_ph (v2q15, i32)
40862     v2q15 __builtin_mips_shra_r_ph (v2q15, imm0_15)
40863     v2q15 __builtin_mips_shra_r_ph (v2q15, i32)
40864     q31 __builtin_mips_shra_r_w (q31, imm0_31)
40865     q31 __builtin_mips_shra_r_w (q31, i32)
40866     v2q15 __builtin_mips_muleu_s_ph_qbl (v4i8, v2q15)
40867     v2q15 __builtin_mips_muleu_s_ph_qbr (v4i8, v2q15)
40868     v2q15 __builtin_mips_mulq_rs_ph (v2q15, v2q15)
40869     q31 __builtin_mips_muleq_s_w_phl (v2q15, v2q15)
40870     q31 __builtin_mips_muleq_s_w_phr (v2q15, v2q15)
40871     a64 __builtin_mips_dpau_h_qbl (a64, v4i8, v4i8)
40872     a64 __builtin_mips_dpau_h_qbr (a64, v4i8, v4i8)
40873     a64 __builtin_mips_dpsu_h_qbl (a64, v4i8, v4i8)
40874     a64 __builtin_mips_dpsu_h_qbr (a64, v4i8, v4i8)
40875     a64 __builtin_mips_dpaq_s_w_ph (a64, v2q15, v2q15)
40876     a64 __builtin_mips_dpaq_sa_l_w (a64, q31, q31)
40877     a64 __builtin_mips_dpsq_s_w_ph (a64, v2q15, v2q15)
40878     a64 __builtin_mips_dpsq_sa_l_w (a64, q31, q31)
40879     a64 __builtin_mips_mulsaq_s_w_ph (a64, v2q15, v2q15)
40880     a64 __builtin_mips_maq_s_w_phl (a64, v2q15, v2q15)
40881     a64 __builtin_mips_maq_s_w_phr (a64, v2q15, v2q15)
40882     a64 __builtin_mips_maq_sa_w_phl (a64, v2q15, v2q15)
40883     a64 __builtin_mips_maq_sa_w_phr (a64, v2q15, v2q15)
40884     i32 __builtin_mips_bitrev (i32)
40885     i32 __builtin_mips_insv (i32, i32)
40886     v4i8 __builtin_mips_repl_qb (imm0_255)
40887     v4i8 __builtin_mips_repl_qb (i32)
40888     v2q15 __builtin_mips_repl_ph (imm_n512_511)
40889     v2q15 __builtin_mips_repl_ph (i32)
40890     void __builtin_mips_cmpu_eq_qb (v4i8, v4i8)
40891     void __builtin_mips_cmpu_lt_qb (v4i8, v4i8)
40892     void __builtin_mips_cmpu_le_qb (v4i8, v4i8)
40893     i32 __builtin_mips_cmpgu_eq_qb (v4i8, v4i8)
40894     i32 __builtin_mips_cmpgu_lt_qb (v4i8, v4i8)
40895     i32 __builtin_mips_cmpgu_le_qb (v4i8, v4i8)
40896     void __builtin_mips_cmp_eq_ph (v2q15, v2q15)
40897     void __builtin_mips_cmp_lt_ph (v2q15, v2q15)
40898     void __builtin_mips_cmp_le_ph (v2q15, v2q15)
40899     v4i8 __builtin_mips_pick_qb (v4i8, v4i8)
40900     v2q15 __builtin_mips_pick_ph (v2q15, v2q15)
40901     v2q15 __builtin_mips_packrl_ph (v2q15, v2q15)
40902     i32 __builtin_mips_extr_w (a64, imm0_31)
40903     i32 __builtin_mips_extr_w (a64, i32)
40904     i32 __builtin_mips_extr_r_w (a64, imm0_31)
40905     i32 __builtin_mips_extr_s_h (a64, i32)
40906     i32 __builtin_mips_extr_rs_w (a64, imm0_31)
40907     i32 __builtin_mips_extr_rs_w (a64, i32)
40908     i32 __builtin_mips_extr_s_h (a64, imm0_31)
40909     i32 __builtin_mips_extr_r_w (a64, i32)
40910     i32 __builtin_mips_extp (a64, imm0_31)
40911     i32 __builtin_mips_extp (a64, i32)
40912     i32 __builtin_mips_extpdp (a64, imm0_31)
40913     i32 __builtin_mips_extpdp (a64, i32)
40914     a64 __builtin_mips_shilo (a64, imm_n32_31)
40915     a64 __builtin_mips_shilo (a64, i32)
40916     a64 __builtin_mips_mthlip (a64, i32)
40917     void __builtin_mips_wrdsp (i32, imm0_63)
40918     i32 __builtin_mips_rddsp (imm0_63)
40919     i32 __builtin_mips_lbux (void *, i32)
40920     i32 __builtin_mips_lhx (void *, i32)
40921     i32 __builtin_mips_lwx (void *, i32)
40922     a64 __builtin_mips_ldx (void *, i32) [MIPS64 only]
40923     i32 __builtin_mips_bposge32 (void)
40924     a64 __builtin_mips_madd (a64, i32, i32);
40925     a64 __builtin_mips_maddu (a64, ui32, ui32);
40926     a64 __builtin_mips_msub (a64, i32, i32);
40927     a64 __builtin_mips_msubu (a64, ui32, ui32);
40928     a64 __builtin_mips_mult (i32, i32);
40929     a64 __builtin_mips_multu (ui32, ui32);
40930
40931 The following built-in functions map directly to a particular MIPS DSP
40932REV 2 instruction.  Please refer to the architecture specification for
40933details on what each instruction does.
40934
40935     v4q7 __builtin_mips_absq_s_qb (v4q7);
40936     v2i16 __builtin_mips_addu_ph (v2i16, v2i16);
40937     v2i16 __builtin_mips_addu_s_ph (v2i16, v2i16);
40938     v4i8 __builtin_mips_adduh_qb (v4i8, v4i8);
40939     v4i8 __builtin_mips_adduh_r_qb (v4i8, v4i8);
40940     i32 __builtin_mips_append (i32, i32, imm0_31);
40941     i32 __builtin_mips_balign (i32, i32, imm0_3);
40942     i32 __builtin_mips_cmpgdu_eq_qb (v4i8, v4i8);
40943     i32 __builtin_mips_cmpgdu_lt_qb (v4i8, v4i8);
40944     i32 __builtin_mips_cmpgdu_le_qb (v4i8, v4i8);
40945     a64 __builtin_mips_dpa_w_ph (a64, v2i16, v2i16);
40946     a64 __builtin_mips_dps_w_ph (a64, v2i16, v2i16);
40947     v2i16 __builtin_mips_mul_ph (v2i16, v2i16);
40948     v2i16 __builtin_mips_mul_s_ph (v2i16, v2i16);
40949     q31 __builtin_mips_mulq_rs_w (q31, q31);
40950     v2q15 __builtin_mips_mulq_s_ph (v2q15, v2q15);
40951     q31 __builtin_mips_mulq_s_w (q31, q31);
40952     a64 __builtin_mips_mulsa_w_ph (a64, v2i16, v2i16);
40953     v4i8 __builtin_mips_precr_qb_ph (v2i16, v2i16);
40954     v2i16 __builtin_mips_precr_sra_ph_w (i32, i32, imm0_31);
40955     v2i16 __builtin_mips_precr_sra_r_ph_w (i32, i32, imm0_31);
40956     i32 __builtin_mips_prepend (i32, i32, imm0_31);
40957     v4i8 __builtin_mips_shra_qb (v4i8, imm0_7);
40958     v4i8 __builtin_mips_shra_r_qb (v4i8, imm0_7);
40959     v4i8 __builtin_mips_shra_qb (v4i8, i32);
40960     v4i8 __builtin_mips_shra_r_qb (v4i8, i32);
40961     v2i16 __builtin_mips_shrl_ph (v2i16, imm0_15);
40962     v2i16 __builtin_mips_shrl_ph (v2i16, i32);
40963     v2i16 __builtin_mips_subu_ph (v2i16, v2i16);
40964     v2i16 __builtin_mips_subu_s_ph (v2i16, v2i16);
40965     v4i8 __builtin_mips_subuh_qb (v4i8, v4i8);
40966     v4i8 __builtin_mips_subuh_r_qb (v4i8, v4i8);
40967     v2q15 __builtin_mips_addqh_ph (v2q15, v2q15);
40968     v2q15 __builtin_mips_addqh_r_ph (v2q15, v2q15);
40969     q31 __builtin_mips_addqh_w (q31, q31);
40970     q31 __builtin_mips_addqh_r_w (q31, q31);
40971     v2q15 __builtin_mips_subqh_ph (v2q15, v2q15);
40972     v2q15 __builtin_mips_subqh_r_ph (v2q15, v2q15);
40973     q31 __builtin_mips_subqh_w (q31, q31);
40974     q31 __builtin_mips_subqh_r_w (q31, q31);
40975     a64 __builtin_mips_dpax_w_ph (a64, v2i16, v2i16);
40976     a64 __builtin_mips_dpsx_w_ph (a64, v2i16, v2i16);
40977     a64 __builtin_mips_dpaqx_s_w_ph (a64, v2q15, v2q15);
40978     a64 __builtin_mips_dpaqx_sa_w_ph (a64, v2q15, v2q15);
40979     a64 __builtin_mips_dpsqx_s_w_ph (a64, v2q15, v2q15);
40980     a64 __builtin_mips_dpsqx_sa_w_ph (a64, v2q15, v2q15);
40981
40982
40983File: gcc.info,  Node: MIPS Paired-Single Support,  Next: MIPS Loongson Built-in Functions,  Prev: MIPS DSP Built-in Functions,  Up: Target Builtins
40984
409856.57.14 MIPS Paired-Single Support
40986----------------------------------
40987
40988The MIPS64 architecture includes a number of instructions that operate
40989on pairs of single-precision floating-point values.  Each pair is packed
40990into a 64-bit floating-point register, with one element being designated
40991the "upper half" and the other being designated the "lower half".
40992
40993 GCC supports paired-single operations using both the generic vector
40994extensions (*note Vector Extensions::) and a collection of MIPS-specific
40995built-in functions.  Both kinds of support are enabled by the
40996'-mpaired-single' command-line option.
40997
40998 The vector type associated with paired-single values is usually called
40999'v2sf'.  It can be defined in C as follows:
41000
41001     typedef float v2sf __attribute__ ((vector_size (8)));
41002
41003 'v2sf' values are initialized in the same way as aggregates.  For
41004example:
41005
41006     v2sf a = {1.5, 9.1};
41007     v2sf b;
41008     float e, f;
41009     b = (v2sf) {e, f};
41010
41011 _Note:_ The CPU's endianness determines which value is stored in the
41012upper half of a register and which value is stored in the lower half.
41013On little-endian targets, the first value is the lower one and the
41014second value is the upper one.  The opposite order applies to big-endian
41015targets.  For example, the code above sets the lower half of 'a' to
41016'1.5' on little-endian targets and '9.1' on big-endian targets.
41017
41018
41019File: gcc.info,  Node: MIPS Loongson Built-in Functions,  Next: Other MIPS Built-in Functions,  Prev: MIPS Paired-Single Support,  Up: Target Builtins
41020
410216.57.15 MIPS Loongson Built-in Functions
41022----------------------------------------
41023
41024GCC provides intrinsics to access the SIMD instructions provided by the
41025ST Microelectronics Loongson-2E and -2F processors.  These intrinsics,
41026available after inclusion of the 'loongson.h' header file, operate on
41027the following 64-bit vector types:
41028
41029   * 'uint8x8_t', a vector of eight unsigned 8-bit integers;
41030   * 'uint16x4_t', a vector of four unsigned 16-bit integers;
41031   * 'uint32x2_t', a vector of two unsigned 32-bit integers;
41032   * 'int8x8_t', a vector of eight signed 8-bit integers;
41033   * 'int16x4_t', a vector of four signed 16-bit integers;
41034   * 'int32x2_t', a vector of two signed 32-bit integers.
41035
41036 The intrinsics provided are listed below; each is named after the
41037machine instruction to which it corresponds, with suffixes added as
41038appropriate to distinguish intrinsics that expand to the same machine
41039instruction yet have different argument types.  Refer to the
41040architecture documentation for a description of the functionality of
41041each instruction.
41042
41043     int16x4_t packsswh (int32x2_t s, int32x2_t t);
41044     int8x8_t packsshb (int16x4_t s, int16x4_t t);
41045     uint8x8_t packushb (uint16x4_t s, uint16x4_t t);
41046     uint32x2_t paddw_u (uint32x2_t s, uint32x2_t t);
41047     uint16x4_t paddh_u (uint16x4_t s, uint16x4_t t);
41048     uint8x8_t paddb_u (uint8x8_t s, uint8x8_t t);
41049     int32x2_t paddw_s (int32x2_t s, int32x2_t t);
41050     int16x4_t paddh_s (int16x4_t s, int16x4_t t);
41051     int8x8_t paddb_s (int8x8_t s, int8x8_t t);
41052     uint64_t paddd_u (uint64_t s, uint64_t t);
41053     int64_t paddd_s (int64_t s, int64_t t);
41054     int16x4_t paddsh (int16x4_t s, int16x4_t t);
41055     int8x8_t paddsb (int8x8_t s, int8x8_t t);
41056     uint16x4_t paddush (uint16x4_t s, uint16x4_t t);
41057     uint8x8_t paddusb (uint8x8_t s, uint8x8_t t);
41058     uint64_t pandn_ud (uint64_t s, uint64_t t);
41059     uint32x2_t pandn_uw (uint32x2_t s, uint32x2_t t);
41060     uint16x4_t pandn_uh (uint16x4_t s, uint16x4_t t);
41061     uint8x8_t pandn_ub (uint8x8_t s, uint8x8_t t);
41062     int64_t pandn_sd (int64_t s, int64_t t);
41063     int32x2_t pandn_sw (int32x2_t s, int32x2_t t);
41064     int16x4_t pandn_sh (int16x4_t s, int16x4_t t);
41065     int8x8_t pandn_sb (int8x8_t s, int8x8_t t);
41066     uint16x4_t pavgh (uint16x4_t s, uint16x4_t t);
41067     uint8x8_t pavgb (uint8x8_t s, uint8x8_t t);
41068     uint32x2_t pcmpeqw_u (uint32x2_t s, uint32x2_t t);
41069     uint16x4_t pcmpeqh_u (uint16x4_t s, uint16x4_t t);
41070     uint8x8_t pcmpeqb_u (uint8x8_t s, uint8x8_t t);
41071     int32x2_t pcmpeqw_s (int32x2_t s, int32x2_t t);
41072     int16x4_t pcmpeqh_s (int16x4_t s, int16x4_t t);
41073     int8x8_t pcmpeqb_s (int8x8_t s, int8x8_t t);
41074     uint32x2_t pcmpgtw_u (uint32x2_t s, uint32x2_t t);
41075     uint16x4_t pcmpgth_u (uint16x4_t s, uint16x4_t t);
41076     uint8x8_t pcmpgtb_u (uint8x8_t s, uint8x8_t t);
41077     int32x2_t pcmpgtw_s (int32x2_t s, int32x2_t t);
41078     int16x4_t pcmpgth_s (int16x4_t s, int16x4_t t);
41079     int8x8_t pcmpgtb_s (int8x8_t s, int8x8_t t);
41080     uint16x4_t pextrh_u (uint16x4_t s, int field);
41081     int16x4_t pextrh_s (int16x4_t s, int field);
41082     uint16x4_t pinsrh_0_u (uint16x4_t s, uint16x4_t t);
41083     uint16x4_t pinsrh_1_u (uint16x4_t s, uint16x4_t t);
41084     uint16x4_t pinsrh_2_u (uint16x4_t s, uint16x4_t t);
41085     uint16x4_t pinsrh_3_u (uint16x4_t s, uint16x4_t t);
41086     int16x4_t pinsrh_0_s (int16x4_t s, int16x4_t t);
41087     int16x4_t pinsrh_1_s (int16x4_t s, int16x4_t t);
41088     int16x4_t pinsrh_2_s (int16x4_t s, int16x4_t t);
41089     int16x4_t pinsrh_3_s (int16x4_t s, int16x4_t t);
41090     int32x2_t pmaddhw (int16x4_t s, int16x4_t t);
41091     int16x4_t pmaxsh (int16x4_t s, int16x4_t t);
41092     uint8x8_t pmaxub (uint8x8_t s, uint8x8_t t);
41093     int16x4_t pminsh (int16x4_t s, int16x4_t t);
41094     uint8x8_t pminub (uint8x8_t s, uint8x8_t t);
41095     uint8x8_t pmovmskb_u (uint8x8_t s);
41096     int8x8_t pmovmskb_s (int8x8_t s);
41097     uint16x4_t pmulhuh (uint16x4_t s, uint16x4_t t);
41098     int16x4_t pmulhh (int16x4_t s, int16x4_t t);
41099     int16x4_t pmullh (int16x4_t s, int16x4_t t);
41100     int64_t pmuluw (uint32x2_t s, uint32x2_t t);
41101     uint8x8_t pasubub (uint8x8_t s, uint8x8_t t);
41102     uint16x4_t biadd (uint8x8_t s);
41103     uint16x4_t psadbh (uint8x8_t s, uint8x8_t t);
41104     uint16x4_t pshufh_u (uint16x4_t dest, uint16x4_t s, uint8_t order);
41105     int16x4_t pshufh_s (int16x4_t dest, int16x4_t s, uint8_t order);
41106     uint16x4_t psllh_u (uint16x4_t s, uint8_t amount);
41107     int16x4_t psllh_s (int16x4_t s, uint8_t amount);
41108     uint32x2_t psllw_u (uint32x2_t s, uint8_t amount);
41109     int32x2_t psllw_s (int32x2_t s, uint8_t amount);
41110     uint16x4_t psrlh_u (uint16x4_t s, uint8_t amount);
41111     int16x4_t psrlh_s (int16x4_t s, uint8_t amount);
41112     uint32x2_t psrlw_u (uint32x2_t s, uint8_t amount);
41113     int32x2_t psrlw_s (int32x2_t s, uint8_t amount);
41114     uint16x4_t psrah_u (uint16x4_t s, uint8_t amount);
41115     int16x4_t psrah_s (int16x4_t s, uint8_t amount);
41116     uint32x2_t psraw_u (uint32x2_t s, uint8_t amount);
41117     int32x2_t psraw_s (int32x2_t s, uint8_t amount);
41118     uint32x2_t psubw_u (uint32x2_t s, uint32x2_t t);
41119     uint16x4_t psubh_u (uint16x4_t s, uint16x4_t t);
41120     uint8x8_t psubb_u (uint8x8_t s, uint8x8_t t);
41121     int32x2_t psubw_s (int32x2_t s, int32x2_t t);
41122     int16x4_t psubh_s (int16x4_t s, int16x4_t t);
41123     int8x8_t psubb_s (int8x8_t s, int8x8_t t);
41124     uint64_t psubd_u (uint64_t s, uint64_t t);
41125     int64_t psubd_s (int64_t s, int64_t t);
41126     int16x4_t psubsh (int16x4_t s, int16x4_t t);
41127     int8x8_t psubsb (int8x8_t s, int8x8_t t);
41128     uint16x4_t psubush (uint16x4_t s, uint16x4_t t);
41129     uint8x8_t psubusb (uint8x8_t s, uint8x8_t t);
41130     uint32x2_t punpckhwd_u (uint32x2_t s, uint32x2_t t);
41131     uint16x4_t punpckhhw_u (uint16x4_t s, uint16x4_t t);
41132     uint8x8_t punpckhbh_u (uint8x8_t s, uint8x8_t t);
41133     int32x2_t punpckhwd_s (int32x2_t s, int32x2_t t);
41134     int16x4_t punpckhhw_s (int16x4_t s, int16x4_t t);
41135     int8x8_t punpckhbh_s (int8x8_t s, int8x8_t t);
41136     uint32x2_t punpcklwd_u (uint32x2_t s, uint32x2_t t);
41137     uint16x4_t punpcklhw_u (uint16x4_t s, uint16x4_t t);
41138     uint8x8_t punpcklbh_u (uint8x8_t s, uint8x8_t t);
41139     int32x2_t punpcklwd_s (int32x2_t s, int32x2_t t);
41140     int16x4_t punpcklhw_s (int16x4_t s, int16x4_t t);
41141     int8x8_t punpcklbh_s (int8x8_t s, int8x8_t t);
41142
41143* Menu:
41144
41145* Paired-Single Arithmetic::
41146* Paired-Single Built-in Functions::
41147* MIPS-3D Built-in Functions::
41148
41149
41150File: gcc.info,  Node: Paired-Single Arithmetic,  Next: Paired-Single Built-in Functions,  Up: MIPS Loongson Built-in Functions
41151
411526.57.15.1 Paired-Single Arithmetic
41153..................................
41154
41155The table below lists the 'v2sf' operations for which hardware support
41156exists.  'a', 'b' and 'c' are 'v2sf' values and 'x' is an integral
41157value.
41158
41159C code                               MIPS instruction
41160'a + b'                              'add.ps'
41161'a - b'                              'sub.ps'
41162'-a'                                 'neg.ps'
41163'a * b'                              'mul.ps'
41164'a * b + c'                          'madd.ps'
41165'a * b - c'                          'msub.ps'
41166'-(a * b + c)'                       'nmadd.ps'
41167'-(a * b - c)'                       'nmsub.ps'
41168'x ? a : b'                          'movn.ps'/'movz.ps'
41169
41170 Note that the multiply-accumulate instructions can be disabled using
41171the command-line option '-mno-fused-madd'.
41172
41173
41174File: gcc.info,  Node: Paired-Single Built-in Functions,  Next: MIPS-3D Built-in Functions,  Prev: Paired-Single Arithmetic,  Up: MIPS Loongson Built-in Functions
41175
411766.57.15.2 Paired-Single Built-in Functions
41177..........................................
41178
41179The following paired-single functions map directly to a particular MIPS
41180instruction.  Please refer to the architecture specification for details
41181on what each instruction does.
41182
41183'v2sf __builtin_mips_pll_ps (v2sf, v2sf)'
41184     Pair lower lower ('pll.ps').
41185
41186'v2sf __builtin_mips_pul_ps (v2sf, v2sf)'
41187     Pair upper lower ('pul.ps').
41188
41189'v2sf __builtin_mips_plu_ps (v2sf, v2sf)'
41190     Pair lower upper ('plu.ps').
41191
41192'v2sf __builtin_mips_puu_ps (v2sf, v2sf)'
41193     Pair upper upper ('puu.ps').
41194
41195'v2sf __builtin_mips_cvt_ps_s (float, float)'
41196     Convert pair to paired single ('cvt.ps.s').
41197
41198'float __builtin_mips_cvt_s_pl (v2sf)'
41199     Convert pair lower to single ('cvt.s.pl').
41200
41201'float __builtin_mips_cvt_s_pu (v2sf)'
41202     Convert pair upper to single ('cvt.s.pu').
41203
41204'v2sf __builtin_mips_abs_ps (v2sf)'
41205     Absolute value ('abs.ps').
41206
41207'v2sf __builtin_mips_alnv_ps (v2sf, v2sf, int)'
41208     Align variable ('alnv.ps').
41209
41210     _Note:_ The value of the third parameter must be 0 or 4 modulo 8,
41211     otherwise the result is unpredictable.  Please read the instruction
41212     description for details.
41213
41214 The following multi-instruction functions are also available.  In each
41215case, COND can be any of the 16 floating-point conditions: 'f', 'un',
41216'eq', 'ueq', 'olt', 'ult', 'ole', 'ule', 'sf', 'ngle', 'seq', 'ngl',
41217'lt', 'nge', 'le' or 'ngt'.
41218
41219'v2sf __builtin_mips_movt_c_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)'
41220'v2sf __builtin_mips_movf_c_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)'
41221     Conditional move based on floating-point comparison ('c.COND.ps',
41222     'movt.ps'/'movf.ps').
41223
41224     The 'movt' functions return the value X computed by:
41225
41226          c.COND.ps CC,A,B
41227          mov.ps X,C
41228          movt.ps X,D,CC
41229
41230     The 'movf' functions are similar but use 'movf.ps' instead of
41231     'movt.ps'.
41232
41233'int __builtin_mips_upper_c_COND_ps (v2sf A, v2sf B)'
41234'int __builtin_mips_lower_c_COND_ps (v2sf A, v2sf B)'
41235     Comparison of two paired-single values ('c.COND.ps',
41236     'bc1t'/'bc1f').
41237
41238     These functions compare A and B using 'c.COND.ps' and return either
41239     the upper or lower half of the result.  For example:
41240
41241          v2sf a, b;
41242          if (__builtin_mips_upper_c_eq_ps (a, b))
41243            upper_halves_are_equal ();
41244          else
41245            upper_halves_are_unequal ();
41246
41247          if (__builtin_mips_lower_c_eq_ps (a, b))
41248            lower_halves_are_equal ();
41249          else
41250            lower_halves_are_unequal ();
41251
41252
41253File: gcc.info,  Node: MIPS-3D Built-in Functions,  Prev: Paired-Single Built-in Functions,  Up: MIPS Loongson Built-in Functions
41254
412556.57.15.3 MIPS-3D Built-in Functions
41256....................................
41257
41258The MIPS-3D Application-Specific Extension (ASE) includes additional
41259paired-single instructions that are designed to improve the performance
41260of 3D graphics operations.  Support for these instructions is controlled
41261by the '-mips3d' command-line option.
41262
41263 The functions listed below map directly to a particular MIPS-3D
41264instruction.  Please refer to the architecture specification for more
41265details on what each instruction does.
41266
41267'v2sf __builtin_mips_addr_ps (v2sf, v2sf)'
41268     Reduction add ('addr.ps').
41269
41270'v2sf __builtin_mips_mulr_ps (v2sf, v2sf)'
41271     Reduction multiply ('mulr.ps').
41272
41273'v2sf __builtin_mips_cvt_pw_ps (v2sf)'
41274     Convert paired single to paired word ('cvt.pw.ps').
41275
41276'v2sf __builtin_mips_cvt_ps_pw (v2sf)'
41277     Convert paired word to paired single ('cvt.ps.pw').
41278
41279'float __builtin_mips_recip1_s (float)'
41280'double __builtin_mips_recip1_d (double)'
41281'v2sf __builtin_mips_recip1_ps (v2sf)'
41282     Reduced-precision reciprocal (sequence step 1) ('recip1.FMT').
41283
41284'float __builtin_mips_recip2_s (float, float)'
41285'double __builtin_mips_recip2_d (double, double)'
41286'v2sf __builtin_mips_recip2_ps (v2sf, v2sf)'
41287     Reduced-precision reciprocal (sequence step 2) ('recip2.FMT').
41288
41289'float __builtin_mips_rsqrt1_s (float)'
41290'double __builtin_mips_rsqrt1_d (double)'
41291'v2sf __builtin_mips_rsqrt1_ps (v2sf)'
41292     Reduced-precision reciprocal square root (sequence step 1)
41293     ('rsqrt1.FMT').
41294
41295'float __builtin_mips_rsqrt2_s (float, float)'
41296'double __builtin_mips_rsqrt2_d (double, double)'
41297'v2sf __builtin_mips_rsqrt2_ps (v2sf, v2sf)'
41298     Reduced-precision reciprocal square root (sequence step 2)
41299     ('rsqrt2.FMT').
41300
41301 The following multi-instruction functions are also available.  In each
41302case, COND can be any of the 16 floating-point conditions: 'f', 'un',
41303'eq', 'ueq', 'olt', 'ult', 'ole', 'ule', 'sf', 'ngle', 'seq', 'ngl',
41304'lt', 'nge', 'le' or 'ngt'.
41305
41306'int __builtin_mips_cabs_COND_s (float A, float B)'
41307'int __builtin_mips_cabs_COND_d (double A, double B)'
41308     Absolute comparison of two scalar values ('cabs.COND.FMT',
41309     'bc1t'/'bc1f').
41310
41311     These functions compare A and B using 'cabs.COND.s' or
41312     'cabs.COND.d' and return the result as a boolean value.  For
41313     example:
41314
41315          float a, b;
41316          if (__builtin_mips_cabs_eq_s (a, b))
41317            true ();
41318          else
41319            false ();
41320
41321'int __builtin_mips_upper_cabs_COND_ps (v2sf A, v2sf B)'
41322'int __builtin_mips_lower_cabs_COND_ps (v2sf A, v2sf B)'
41323     Absolute comparison of two paired-single values ('cabs.COND.ps',
41324     'bc1t'/'bc1f').
41325
41326     These functions compare A and B using 'cabs.COND.ps' and return
41327     either the upper or lower half of the result.  For example:
41328
41329          v2sf a, b;
41330          if (__builtin_mips_upper_cabs_eq_ps (a, b))
41331            upper_halves_are_equal ();
41332          else
41333            upper_halves_are_unequal ();
41334
41335          if (__builtin_mips_lower_cabs_eq_ps (a, b))
41336            lower_halves_are_equal ();
41337          else
41338            lower_halves_are_unequal ();
41339
41340'v2sf __builtin_mips_movt_cabs_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)'
41341'v2sf __builtin_mips_movf_cabs_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)'
41342     Conditional move based on absolute comparison ('cabs.COND.ps',
41343     'movt.ps'/'movf.ps').
41344
41345     The 'movt' functions return the value X computed by:
41346
41347          cabs.COND.ps CC,A,B
41348          mov.ps X,C
41349          movt.ps X,D,CC
41350
41351     The 'movf' functions are similar but use 'movf.ps' instead of
41352     'movt.ps'.
41353
41354'int __builtin_mips_any_c_COND_ps (v2sf A, v2sf B)'
41355'int __builtin_mips_all_c_COND_ps (v2sf A, v2sf B)'
41356'int __builtin_mips_any_cabs_COND_ps (v2sf A, v2sf B)'
41357'int __builtin_mips_all_cabs_COND_ps (v2sf A, v2sf B)'
41358     Comparison of two paired-single values ('c.COND.ps'/'cabs.COND.ps',
41359     'bc1any2t'/'bc1any2f').
41360
41361     These functions compare A and B using 'c.COND.ps' or
41362     'cabs.COND.ps'.  The 'any' forms return true if either result is
41363     true and the 'all' forms return true if both results are true.  For
41364     example:
41365
41366          v2sf a, b;
41367          if (__builtin_mips_any_c_eq_ps (a, b))
41368            one_is_true ();
41369          else
41370            both_are_false ();
41371
41372          if (__builtin_mips_all_c_eq_ps (a, b))
41373            both_are_true ();
41374          else
41375            one_is_false ();
41376
41377'int __builtin_mips_any_c_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)'
41378'int __builtin_mips_all_c_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)'
41379'int __builtin_mips_any_cabs_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)'
41380'int __builtin_mips_all_cabs_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)'
41381     Comparison of four paired-single values
41382     ('c.COND.ps'/'cabs.COND.ps', 'bc1any4t'/'bc1any4f').
41383
41384     These functions use 'c.COND.ps' or 'cabs.COND.ps' to compare A with
41385     B and to compare C with D.  The 'any' forms return true if any of
41386     the four results are true and the 'all' forms return true if all
41387     four results are true.  For example:
41388
41389          v2sf a, b, c, d;
41390          if (__builtin_mips_any_c_eq_4s (a, b, c, d))
41391            some_are_true ();
41392          else
41393            all_are_false ();
41394
41395          if (__builtin_mips_all_c_eq_4s (a, b, c, d))
41396            all_are_true ();
41397          else
41398            some_are_false ();
41399
41400
41401File: gcc.info,  Node: Other MIPS Built-in Functions,  Next: MSP430 Built-in Functions,  Prev: MIPS Loongson Built-in Functions,  Up: Target Builtins
41402
414036.57.16 Other MIPS Built-in Functions
41404-------------------------------------
41405
41406GCC provides other MIPS-specific built-in functions:
41407
41408'void __builtin_mips_cache (int OP, const volatile void *ADDR)'
41409     Insert a 'cache' instruction with operands OP and ADDR.  GCC
41410     defines the preprocessor macro '___GCC_HAVE_BUILTIN_MIPS_CACHE'
41411     when this function is available.
41412
41413'unsigned int __builtin_mips_get_fcsr (void)'
41414'void __builtin_mips_set_fcsr (unsigned int VALUE)'
41415     Get and set the contents of the floating-point control and status
41416     register (FPU control register 31).  These functions are only
41417     available in hard-float code but can be called in both MIPS16 and
41418     non-MIPS16 contexts.
41419
41420     '__builtin_mips_set_fcsr' can be used to change any bit of the
41421     register except the condition codes, which GCC assumes are
41422     preserved.
41423
41424
41425File: gcc.info,  Node: MSP430 Built-in Functions,  Next: NDS32 Built-in Functions,  Prev: Other MIPS Built-in Functions,  Up: Target Builtins
41426
414276.57.17 MSP430 Built-in Functions
41428---------------------------------
41429
41430GCC provides a couple of special builtin functions to aid in the writing
41431of interrupt handlers in C.
41432
41433'__bic_SR_register_on_exit (int MASK)'
41434     This clears the indicated bits in the saved copy of the status
41435     register currently residing on the stack.  This only works inside
41436     interrupt handlers and the changes to the status register will only
41437     take affect once the handler returns.
41438
41439'__bis_SR_register_on_exit (int MASK)'
41440     This sets the indicated bits in the saved copy of the status
41441     register currently residing on the stack.  This only works inside
41442     interrupt handlers and the changes to the status register will only
41443     take affect once the handler returns.
41444
41445
41446File: gcc.info,  Node: NDS32 Built-in Functions,  Next: picoChip Built-in Functions,  Prev: MSP430 Built-in Functions,  Up: Target Builtins
41447
414486.57.18 NDS32 Built-in Functions
41449--------------------------------
41450
41451These built-in functions are available for the NDS32 target:
41452
41453 -- Built-in Function: void __builtin_nds32_isync (int *ADDR)
41454     Insert an ISYNC instruction into the instruction stream where ADDR
41455     is an instruction address for serialization.
41456
41457 -- Built-in Function: void __builtin_nds32_isb (void)
41458     Insert an ISB instruction into the instruction stream.
41459
41460 -- Built-in Function: int __builtin_nds32_mfsr (int SR)
41461     Return the content of a system register which is mapped by SR.
41462
41463 -- Built-in Function: int __builtin_nds32_mfusr (int USR)
41464     Return the content of a user space register which is mapped by USR.
41465
41466 -- Built-in Function: void __builtin_nds32_mtsr (int VALUE, int SR)
41467     Move the VALUE to a system register which is mapped by SR.
41468
41469 -- Built-in Function: void __builtin_nds32_mtusr (int VALUE, int USR)
41470     Move the VALUE to a user space register which is mapped by USR.
41471
41472 -- Built-in Function: void __builtin_nds32_setgie_en (void)
41473     Enable global interrupt.
41474
41475 -- Built-in Function: void __builtin_nds32_setgie_dis (void)
41476     Disable global interrupt.
41477
41478
41479File: gcc.info,  Node: picoChip Built-in Functions,  Next: PowerPC Built-in Functions,  Prev: NDS32 Built-in Functions,  Up: Target Builtins
41480
414816.57.19 picoChip Built-in Functions
41482-----------------------------------
41483
41484GCC provides an interface to selected machine instructions from the
41485picoChip instruction set.
41486
41487'int __builtin_sbc (int VALUE)'
41488     Sign bit count.  Return the number of consecutive bits in VALUE
41489     that have the same value as the sign bit.  The result is the number
41490     of leading sign bits minus one, giving the number of redundant sign
41491     bits in VALUE.
41492
41493'int __builtin_byteswap (int VALUE)'
41494     Byte swap.  Return the result of swapping the upper and lower bytes
41495     of VALUE.
41496
41497'int __builtin_brev (int VALUE)'
41498     Bit reversal.  Return the result of reversing the bits in VALUE.
41499     Bit 15 is swapped with bit 0, bit 14 is swapped with bit 1, and so
41500     on.
41501
41502'int __builtin_adds (int X, int Y)'
41503     Saturating addition.  Return the result of adding X and Y, storing
41504     the value 32767 if the result overflows.
41505
41506'int __builtin_subs (int X, int Y)'
41507     Saturating subtraction.  Return the result of subtracting Y from X,
41508     storing the value -32768 if the result overflows.
41509
41510'void __builtin_halt (void)'
41511     Halt.  The processor stops execution.  This built-in is useful for
41512     implementing assertions.
41513
41514
41515File: gcc.info,  Node: PowerPC Built-in Functions,  Next: PowerPC AltiVec/VSX Built-in Functions,  Prev: picoChip Built-in Functions,  Up: Target Builtins
41516
415176.57.20 PowerPC Built-in Functions
41518----------------------------------
41519
41520These built-in functions are available for the PowerPC family of
41521processors:
41522     float __builtin_recipdivf (float, float);
41523     float __builtin_rsqrtf (float);
41524     double __builtin_recipdiv (double, double);
41525     double __builtin_rsqrt (double);
41526     uint64_t __builtin_ppc_get_timebase ();
41527     unsigned long __builtin_ppc_mftb ();
41528     double __builtin_unpack_longdouble (long double, int);
41529     long double __builtin_pack_longdouble (double, double);
41530
41531 The 'vec_rsqrt', '__builtin_rsqrt', and '__builtin_rsqrtf' functions
41532generate multiple instructions to implement the reciprocal sqrt
41533functionality using reciprocal sqrt estimate instructions.
41534
41535 The '__builtin_recipdiv', and '__builtin_recipdivf' functions generate
41536multiple instructions to implement division using the reciprocal
41537estimate instructions.
41538
41539 The '__builtin_ppc_get_timebase' and '__builtin_ppc_mftb' functions
41540generate instructions to read the Time Base Register.  The
41541'__builtin_ppc_get_timebase' function may generate multiple instructions
41542and always returns the 64 bits of the Time Base Register.  The
41543'__builtin_ppc_mftb' function always generates one instruction and
41544returns the Time Base Register value as an unsigned long, throwing away
41545the most significant word on 32-bit environments.
41546
41547 The following built-in functions are available for the PowerPC family
41548of processors, starting with ISA 2.06 or later ('-mcpu=power7' or
41549'-mpopcntd'):
41550     long __builtin_bpermd (long, long);
41551     int __builtin_divwe (int, int);
41552     int __builtin_divweo (int, int);
41553     unsigned int __builtin_divweu (unsigned int, unsigned int);
41554     unsigned int __builtin_divweuo (unsigned int, unsigned int);
41555     long __builtin_divde (long, long);
41556     long __builtin_divdeo (long, long);
41557     unsigned long __builtin_divdeu (unsigned long, unsigned long);
41558     unsigned long __builtin_divdeuo (unsigned long, unsigned long);
41559     unsigned int cdtbcd (unsigned int);
41560     unsigned int cbcdtd (unsigned int);
41561     unsigned int addg6s (unsigned int, unsigned int);
41562
41563 The '__builtin_divde', '__builtin_divdeo', '__builitin_divdeu',
41564'__builtin_divdeou' functions require a 64-bit environment support ISA
415652.06 or later.
41566
41567 The following built-in functions are available for the PowerPC family
41568of processors when hardware decimal floating point ('-mhard-dfp') is
41569available:
41570     _Decimal64 __builtin_dxex (_Decimal64);
41571     _Decimal128 __builtin_dxexq (_Decimal128);
41572     _Decimal64 __builtin_ddedpd (int, _Decimal64);
41573     _Decimal128 __builtin_ddedpdq (int, _Decimal128);
41574     _Decimal64 __builtin_denbcd (int, _Decimal64);
41575     _Decimal128 __builtin_denbcdq (int, _Decimal128);
41576     _Decimal64 __builtin_diex (_Decimal64, _Decimal64);
41577     _Decimal128 _builtin_diexq (_Decimal128, _Decimal128);
41578     _Decimal64 __builtin_dscli (_Decimal64, int);
41579     _Decimal128 __builitn_dscliq (_Decimal128, int);
41580     _Decimal64 __builtin_dscri (_Decimal64, int);
41581     _Decimal128 __builitn_dscriq (_Decimal128, int);
41582     unsigned long long __builtin_unpack_dec128 (_Decimal128, int);
41583     _Decimal128 __builtin_pack_dec128 (unsigned long long, unsigned long long);
41584
41585 The following built-in functions are available for the PowerPC family
41586of processors when the Vector Scalar (vsx) instruction set is available:
41587     unsigned long long __builtin_unpack_vector_int128 (vector __int128_t, int);
41588     vector __int128_t __builtin_pack_vector_int128 (unsigned long long,
41589                                                     unsigned long long);
41590
41591
41592File: 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
41593
415946.57.21 PowerPC AltiVec Built-in Functions
41595------------------------------------------
41596
41597GCC provides an interface for the PowerPC family of processors to access
41598the AltiVec operations described in Motorola's AltiVec Programming
41599Interface Manual.  The interface is made available by including
41600'<altivec.h>' and using '-maltivec' and '-mabi=altivec'.  The interface
41601supports the following vector types.
41602
41603     vector unsigned char
41604     vector signed char
41605     vector bool char
41606
41607     vector unsigned short
41608     vector signed short
41609     vector bool short
41610     vector pixel
41611
41612     vector unsigned int
41613     vector signed int
41614     vector bool int
41615     vector float
41616
41617 If '-mvsx' is used the following additional vector types are
41618implemented.
41619
41620     vector unsigned long
41621     vector signed long
41622     vector double
41623
41624 The long types are only implemented for 64-bit code generation, and the
41625long type is only used in the floating point/integer conversion
41626instructions.
41627
41628 GCC's implementation of the high-level language interface available
41629from C and C++ code differs from Motorola's documentation in several
41630ways.
41631
41632   * A vector constant is a list of constant expressions within curly
41633     braces.
41634
41635   * A vector initializer requires no cast if the vector constant is of
41636     the same type as the variable it is initializing.
41637
41638   * If 'signed' or 'unsigned' is omitted, the signedness of the vector
41639     type is the default signedness of the base type.  The default
41640     varies depending on the operating system, so a portable program
41641     should always specify the signedness.
41642
41643   * Compiling with '-maltivec' adds keywords '__vector', 'vector',
41644     '__pixel', 'pixel', '__bool' and 'bool'.  When compiling ISO C, the
41645     context-sensitive substitution of the keywords 'vector', 'pixel'
41646     and 'bool' is disabled.  To use them, you must include
41647     '<altivec.h>' instead.
41648
41649   * GCC allows using a 'typedef' name as the type specifier for a
41650     vector type.
41651
41652   * For C, overloaded functions are implemented with macros so the
41653     following does not work:
41654
41655            vec_add ((vector signed int){1, 2, 3, 4}, foo);
41656
41657     Since 'vec_add' is a macro, the vector constant in the example is
41658     treated as four separate arguments.  Wrap the entire argument in
41659     parentheses for this to work.
41660
41661 _Note:_ Only the '<altivec.h>' interface is supported.  Internally, GCC
41662uses built-in functions to achieve the functionality in the
41663aforementioned header file, but they are not supported and are subject
41664to change without notice.
41665
41666 The following interfaces are supported for the generic and specific
41667AltiVec operations and the AltiVec predicates.  In cases where there is
41668a direct mapping between generic and specific operations, only the
41669generic names are shown here, although the specific operations can also
41670be used.
41671
41672 Arguments that are documented as 'const int' require literal integral
41673values within the range required for that operation.
41674
41675     vector signed char vec_abs (vector signed char);
41676     vector signed short vec_abs (vector signed short);
41677     vector signed int vec_abs (vector signed int);
41678     vector float vec_abs (vector float);
41679
41680     vector signed char vec_abss (vector signed char);
41681     vector signed short vec_abss (vector signed short);
41682     vector signed int vec_abss (vector signed int);
41683
41684     vector signed char vec_add (vector bool char, vector signed char);
41685     vector signed char vec_add (vector signed char, vector bool char);
41686     vector signed char vec_add (vector signed char, vector signed char);
41687     vector unsigned char vec_add (vector bool char, vector unsigned char);
41688     vector unsigned char vec_add (vector unsigned char, vector bool char);
41689     vector unsigned char vec_add (vector unsigned char,
41690                                   vector unsigned char);
41691     vector signed short vec_add (vector bool short, vector signed short);
41692     vector signed short vec_add (vector signed short, vector bool short);
41693     vector signed short vec_add (vector signed short, vector signed short);
41694     vector unsigned short vec_add (vector bool short,
41695                                    vector unsigned short);
41696     vector unsigned short vec_add (vector unsigned short,
41697                                    vector bool short);
41698     vector unsigned short vec_add (vector unsigned short,
41699                                    vector unsigned short);
41700     vector signed int vec_add (vector bool int, vector signed int);
41701     vector signed int vec_add (vector signed int, vector bool int);
41702     vector signed int vec_add (vector signed int, vector signed int);
41703     vector unsigned int vec_add (vector bool int, vector unsigned int);
41704     vector unsigned int vec_add (vector unsigned int, vector bool int);
41705     vector unsigned int vec_add (vector unsigned int, vector unsigned int);
41706     vector float vec_add (vector float, vector float);
41707
41708     vector float vec_vaddfp (vector float, vector float);
41709
41710     vector signed int vec_vadduwm (vector bool int, vector signed int);
41711     vector signed int vec_vadduwm (vector signed int, vector bool int);
41712     vector signed int vec_vadduwm (vector signed int, vector signed int);
41713     vector unsigned int vec_vadduwm (vector bool int, vector unsigned int);
41714     vector unsigned int vec_vadduwm (vector unsigned int, vector bool int);
41715     vector unsigned int vec_vadduwm (vector unsigned int,
41716                                      vector unsigned int);
41717
41718     vector signed short vec_vadduhm (vector bool short,
41719                                      vector signed short);
41720     vector signed short vec_vadduhm (vector signed short,
41721                                      vector bool short);
41722     vector signed short vec_vadduhm (vector signed short,
41723                                      vector signed short);
41724     vector unsigned short vec_vadduhm (vector bool short,
41725                                        vector unsigned short);
41726     vector unsigned short vec_vadduhm (vector unsigned short,
41727                                        vector bool short);
41728     vector unsigned short vec_vadduhm (vector unsigned short,
41729                                        vector unsigned short);
41730
41731     vector signed char vec_vaddubm (vector bool char, vector signed char);
41732     vector signed char vec_vaddubm (vector signed char, vector bool char);
41733     vector signed char vec_vaddubm (vector signed char, vector signed char);
41734     vector unsigned char vec_vaddubm (vector bool char,
41735                                       vector unsigned char);
41736     vector unsigned char vec_vaddubm (vector unsigned char,
41737                                       vector bool char);
41738     vector unsigned char vec_vaddubm (vector unsigned char,
41739                                       vector unsigned char);
41740
41741     vector unsigned int vec_addc (vector unsigned int, vector unsigned int);
41742
41743     vector unsigned char vec_adds (vector bool char, vector unsigned char);
41744     vector unsigned char vec_adds (vector unsigned char, vector bool char);
41745     vector unsigned char vec_adds (vector unsigned char,
41746                                    vector unsigned char);
41747     vector signed char vec_adds (vector bool char, vector signed char);
41748     vector signed char vec_adds (vector signed char, vector bool char);
41749     vector signed char vec_adds (vector signed char, vector signed char);
41750     vector unsigned short vec_adds (vector bool short,
41751                                     vector unsigned short);
41752     vector unsigned short vec_adds (vector unsigned short,
41753                                     vector bool short);
41754     vector unsigned short vec_adds (vector unsigned short,
41755                                     vector unsigned short);
41756     vector signed short vec_adds (vector bool short, vector signed short);
41757     vector signed short vec_adds (vector signed short, vector bool short);
41758     vector signed short vec_adds (vector signed short, vector signed short);
41759     vector unsigned int vec_adds (vector bool int, vector unsigned int);
41760     vector unsigned int vec_adds (vector unsigned int, vector bool int);
41761     vector unsigned int vec_adds (vector unsigned int, vector unsigned int);
41762     vector signed int vec_adds (vector bool int, vector signed int);
41763     vector signed int vec_adds (vector signed int, vector bool int);
41764     vector signed int vec_adds (vector signed int, vector signed int);
41765
41766     vector signed int vec_vaddsws (vector bool int, vector signed int);
41767     vector signed int vec_vaddsws (vector signed int, vector bool int);
41768     vector signed int vec_vaddsws (vector signed int, vector signed int);
41769
41770     vector unsigned int vec_vadduws (vector bool int, vector unsigned int);
41771     vector unsigned int vec_vadduws (vector unsigned int, vector bool int);
41772     vector unsigned int vec_vadduws (vector unsigned int,
41773                                      vector unsigned int);
41774
41775     vector signed short vec_vaddshs (vector bool short,
41776                                      vector signed short);
41777     vector signed short vec_vaddshs (vector signed short,
41778                                      vector bool short);
41779     vector signed short vec_vaddshs (vector signed short,
41780                                      vector signed short);
41781
41782     vector unsigned short vec_vadduhs (vector bool short,
41783                                        vector unsigned short);
41784     vector unsigned short vec_vadduhs (vector unsigned short,
41785                                        vector bool short);
41786     vector unsigned short vec_vadduhs (vector unsigned short,
41787                                        vector unsigned short);
41788
41789     vector signed char vec_vaddsbs (vector bool char, vector signed char);
41790     vector signed char vec_vaddsbs (vector signed char, vector bool char);
41791     vector signed char vec_vaddsbs (vector signed char, vector signed char);
41792
41793     vector unsigned char vec_vaddubs (vector bool char,
41794                                       vector unsigned char);
41795     vector unsigned char vec_vaddubs (vector unsigned char,
41796                                       vector bool char);
41797     vector unsigned char vec_vaddubs (vector unsigned char,
41798                                       vector unsigned char);
41799
41800     vector float vec_and (vector float, vector float);
41801     vector float vec_and (vector float, vector bool int);
41802     vector float vec_and (vector bool int, vector float);
41803     vector bool int vec_and (vector bool int, vector bool int);
41804     vector signed int vec_and (vector bool int, vector signed int);
41805     vector signed int vec_and (vector signed int, vector bool int);
41806     vector signed int vec_and (vector signed int, vector signed int);
41807     vector unsigned int vec_and (vector bool int, vector unsigned int);
41808     vector unsigned int vec_and (vector unsigned int, vector bool int);
41809     vector unsigned int vec_and (vector unsigned int, vector unsigned int);
41810     vector bool short vec_and (vector bool short, vector bool short);
41811     vector signed short vec_and (vector bool short, vector signed short);
41812     vector signed short vec_and (vector signed short, vector bool short);
41813     vector signed short vec_and (vector signed short, vector signed short);
41814     vector unsigned short vec_and (vector bool short,
41815                                    vector unsigned short);
41816     vector unsigned short vec_and (vector unsigned short,
41817                                    vector bool short);
41818     vector unsigned short vec_and (vector unsigned short,
41819                                    vector unsigned short);
41820     vector signed char vec_and (vector bool char, vector signed char);
41821     vector bool char vec_and (vector bool char, vector bool char);
41822     vector signed char vec_and (vector signed char, vector bool char);
41823     vector signed char vec_and (vector signed char, vector signed char);
41824     vector unsigned char vec_and (vector bool char, vector unsigned char);
41825     vector unsigned char vec_and (vector unsigned char, vector bool char);
41826     vector unsigned char vec_and (vector unsigned char,
41827                                   vector unsigned char);
41828
41829     vector float vec_andc (vector float, vector float);
41830     vector float vec_andc (vector float, vector bool int);
41831     vector float vec_andc (vector bool int, vector float);
41832     vector bool int vec_andc (vector bool int, vector bool int);
41833     vector signed int vec_andc (vector bool int, vector signed int);
41834     vector signed int vec_andc (vector signed int, vector bool int);
41835     vector signed int vec_andc (vector signed int, vector signed int);
41836     vector unsigned int vec_andc (vector bool int, vector unsigned int);
41837     vector unsigned int vec_andc (vector unsigned int, vector bool int);
41838     vector unsigned int vec_andc (vector unsigned int, vector unsigned int);
41839     vector bool short vec_andc (vector bool short, vector bool short);
41840     vector signed short vec_andc (vector bool short, vector signed short);
41841     vector signed short vec_andc (vector signed short, vector bool short);
41842     vector signed short vec_andc (vector signed short, vector signed short);
41843     vector unsigned short vec_andc (vector bool short,
41844                                     vector unsigned short);
41845     vector unsigned short vec_andc (vector unsigned short,
41846                                     vector bool short);
41847     vector unsigned short vec_andc (vector unsigned short,
41848                                     vector unsigned short);
41849     vector signed char vec_andc (vector bool char, vector signed char);
41850     vector bool char vec_andc (vector bool char, vector bool char);
41851     vector signed char vec_andc (vector signed char, vector bool char);
41852     vector signed char vec_andc (vector signed char, vector signed char);
41853     vector unsigned char vec_andc (vector bool char, vector unsigned char);
41854     vector unsigned char vec_andc (vector unsigned char, vector bool char);
41855     vector unsigned char vec_andc (vector unsigned char,
41856                                    vector unsigned char);
41857
41858     vector unsigned char vec_avg (vector unsigned char,
41859                                   vector unsigned char);
41860     vector signed char vec_avg (vector signed char, vector signed char);
41861     vector unsigned short vec_avg (vector unsigned short,
41862                                    vector unsigned short);
41863     vector signed short vec_avg (vector signed short, vector signed short);
41864     vector unsigned int vec_avg (vector unsigned int, vector unsigned int);
41865     vector signed int vec_avg (vector signed int, vector signed int);
41866
41867     vector signed int vec_vavgsw (vector signed int, vector signed int);
41868
41869     vector unsigned int vec_vavguw (vector unsigned int,
41870                                     vector unsigned int);
41871
41872     vector signed short vec_vavgsh (vector signed short,
41873                                     vector signed short);
41874
41875     vector unsigned short vec_vavguh (vector unsigned short,
41876                                       vector unsigned short);
41877
41878     vector signed char vec_vavgsb (vector signed char, vector signed char);
41879
41880     vector unsigned char vec_vavgub (vector unsigned char,
41881                                      vector unsigned char);
41882
41883     vector float vec_copysign (vector float);
41884
41885     vector float vec_ceil (vector float);
41886
41887     vector signed int vec_cmpb (vector float, vector float);
41888
41889     vector bool char vec_cmpeq (vector signed char, vector signed char);
41890     vector bool char vec_cmpeq (vector unsigned char, vector unsigned char);
41891     vector bool short vec_cmpeq (vector signed short, vector signed short);
41892     vector bool short vec_cmpeq (vector unsigned short,
41893                                  vector unsigned short);
41894     vector bool int vec_cmpeq (vector signed int, vector signed int);
41895     vector bool int vec_cmpeq (vector unsigned int, vector unsigned int);
41896     vector bool int vec_cmpeq (vector float, vector float);
41897
41898     vector bool int vec_vcmpeqfp (vector float, vector float);
41899
41900     vector bool int vec_vcmpequw (vector signed int, vector signed int);
41901     vector bool int vec_vcmpequw (vector unsigned int, vector unsigned int);
41902
41903     vector bool short vec_vcmpequh (vector signed short,
41904                                     vector signed short);
41905     vector bool short vec_vcmpequh (vector unsigned short,
41906                                     vector unsigned short);
41907
41908     vector bool char vec_vcmpequb (vector signed char, vector signed char);
41909     vector bool char vec_vcmpequb (vector unsigned char,
41910                                    vector unsigned char);
41911
41912     vector bool int vec_cmpge (vector float, vector float);
41913
41914     vector bool char vec_cmpgt (vector unsigned char, vector unsigned char);
41915     vector bool char vec_cmpgt (vector signed char, vector signed char);
41916     vector bool short vec_cmpgt (vector unsigned short,
41917                                  vector unsigned short);
41918     vector bool short vec_cmpgt (vector signed short, vector signed short);
41919     vector bool int vec_cmpgt (vector unsigned int, vector unsigned int);
41920     vector bool int vec_cmpgt (vector signed int, vector signed int);
41921     vector bool int vec_cmpgt (vector float, vector float);
41922
41923     vector bool int vec_vcmpgtfp (vector float, vector float);
41924
41925     vector bool int vec_vcmpgtsw (vector signed int, vector signed int);
41926
41927     vector bool int vec_vcmpgtuw (vector unsigned int, vector unsigned int);
41928
41929     vector bool short vec_vcmpgtsh (vector signed short,
41930                                     vector signed short);
41931
41932     vector bool short vec_vcmpgtuh (vector unsigned short,
41933                                     vector unsigned short);
41934
41935     vector bool char vec_vcmpgtsb (vector signed char, vector signed char);
41936
41937     vector bool char vec_vcmpgtub (vector unsigned char,
41938                                    vector unsigned char);
41939
41940     vector bool int vec_cmple (vector float, vector float);
41941
41942     vector bool char vec_cmplt (vector unsigned char, vector unsigned char);
41943     vector bool char vec_cmplt (vector signed char, vector signed char);
41944     vector bool short vec_cmplt (vector unsigned short,
41945                                  vector unsigned short);
41946     vector bool short vec_cmplt (vector signed short, vector signed short);
41947     vector bool int vec_cmplt (vector unsigned int, vector unsigned int);
41948     vector bool int vec_cmplt (vector signed int, vector signed int);
41949     vector bool int vec_cmplt (vector float, vector float);
41950
41951     vector float vec_ctf (vector unsigned int, const int);
41952     vector float vec_ctf (vector signed int, const int);
41953
41954     vector float vec_vcfsx (vector signed int, const int);
41955
41956     vector float vec_vcfux (vector unsigned int, const int);
41957
41958     vector signed int vec_cts (vector float, const int);
41959
41960     vector unsigned int vec_ctu (vector float, const int);
41961
41962     void vec_dss (const int);
41963
41964     void vec_dssall (void);
41965
41966     void vec_dst (const vector unsigned char *, int, const int);
41967     void vec_dst (const vector signed char *, int, const int);
41968     void vec_dst (const vector bool char *, int, const int);
41969     void vec_dst (const vector unsigned short *, int, const int);
41970     void vec_dst (const vector signed short *, int, const int);
41971     void vec_dst (const vector bool short *, int, const int);
41972     void vec_dst (const vector pixel *, int, const int);
41973     void vec_dst (const vector unsigned int *, int, const int);
41974     void vec_dst (const vector signed int *, int, const int);
41975     void vec_dst (const vector bool int *, int, const int);
41976     void vec_dst (const vector float *, int, const int);
41977     void vec_dst (const unsigned char *, int, const int);
41978     void vec_dst (const signed char *, int, const int);
41979     void vec_dst (const unsigned short *, int, const int);
41980     void vec_dst (const short *, int, const int);
41981     void vec_dst (const unsigned int *, int, const int);
41982     void vec_dst (const int *, int, const int);
41983     void vec_dst (const unsigned long *, int, const int);
41984     void vec_dst (const long *, int, const int);
41985     void vec_dst (const float *, int, const int);
41986
41987     void vec_dstst (const vector unsigned char *, int, const int);
41988     void vec_dstst (const vector signed char *, int, const int);
41989     void vec_dstst (const vector bool char *, int, const int);
41990     void vec_dstst (const vector unsigned short *, int, const int);
41991     void vec_dstst (const vector signed short *, int, const int);
41992     void vec_dstst (const vector bool short *, int, const int);
41993     void vec_dstst (const vector pixel *, int, const int);
41994     void vec_dstst (const vector unsigned int *, int, const int);
41995     void vec_dstst (const vector signed int *, int, const int);
41996     void vec_dstst (const vector bool int *, int, const int);
41997     void vec_dstst (const vector float *, int, const int);
41998     void vec_dstst (const unsigned char *, int, const int);
41999     void vec_dstst (const signed char *, int, const int);
42000     void vec_dstst (const unsigned short *, int, const int);
42001     void vec_dstst (const short *, int, const int);
42002     void vec_dstst (const unsigned int *, int, const int);
42003     void vec_dstst (const int *, int, const int);
42004     void vec_dstst (const unsigned long *, int, const int);
42005     void vec_dstst (const long *, int, const int);
42006     void vec_dstst (const float *, int, const int);
42007
42008     void vec_dststt (const vector unsigned char *, int, const int);
42009     void vec_dststt (const vector signed char *, int, const int);
42010     void vec_dststt (const vector bool char *, int, const int);
42011     void vec_dststt (const vector unsigned short *, int, const int);
42012     void vec_dststt (const vector signed short *, int, const int);
42013     void vec_dststt (const vector bool short *, int, const int);
42014     void vec_dststt (const vector pixel *, int, const int);
42015     void vec_dststt (const vector unsigned int *, int, const int);
42016     void vec_dststt (const vector signed int *, int, const int);
42017     void vec_dststt (const vector bool int *, int, const int);
42018     void vec_dststt (const vector float *, int, const int);
42019     void vec_dststt (const unsigned char *, int, const int);
42020     void vec_dststt (const signed char *, int, const int);
42021     void vec_dststt (const unsigned short *, int, const int);
42022     void vec_dststt (const short *, int, const int);
42023     void vec_dststt (const unsigned int *, int, const int);
42024     void vec_dststt (const int *, int, const int);
42025     void vec_dststt (const unsigned long *, int, const int);
42026     void vec_dststt (const long *, int, const int);
42027     void vec_dststt (const float *, int, const int);
42028
42029     void vec_dstt (const vector unsigned char *, int, const int);
42030     void vec_dstt (const vector signed char *, int, const int);
42031     void vec_dstt (const vector bool char *, int, const int);
42032     void vec_dstt (const vector unsigned short *, int, const int);
42033     void vec_dstt (const vector signed short *, int, const int);
42034     void vec_dstt (const vector bool short *, int, const int);
42035     void vec_dstt (const vector pixel *, int, const int);
42036     void vec_dstt (const vector unsigned int *, int, const int);
42037     void vec_dstt (const vector signed int *, int, const int);
42038     void vec_dstt (const vector bool int *, int, const int);
42039     void vec_dstt (const vector float *, int, const int);
42040     void vec_dstt (const unsigned char *, int, const int);
42041     void vec_dstt (const signed char *, int, const int);
42042     void vec_dstt (const unsigned short *, int, const int);
42043     void vec_dstt (const short *, int, const int);
42044     void vec_dstt (const unsigned int *, int, const int);
42045     void vec_dstt (const int *, int, const int);
42046     void vec_dstt (const unsigned long *, int, const int);
42047     void vec_dstt (const long *, int, const int);
42048     void vec_dstt (const float *, int, const int);
42049
42050     vector float vec_expte (vector float);
42051
42052     vector float vec_floor (vector float);
42053
42054     vector float vec_ld (int, const vector float *);
42055     vector float vec_ld (int, const float *);
42056     vector bool int vec_ld (int, const vector bool int *);
42057     vector signed int vec_ld (int, const vector signed int *);
42058     vector signed int vec_ld (int, const int *);
42059     vector signed int vec_ld (int, const long *);
42060     vector unsigned int vec_ld (int, const vector unsigned int *);
42061     vector unsigned int vec_ld (int, const unsigned int *);
42062     vector unsigned int vec_ld (int, const unsigned long *);
42063     vector bool short vec_ld (int, const vector bool short *);
42064     vector pixel vec_ld (int, const vector pixel *);
42065     vector signed short vec_ld (int, const vector signed short *);
42066     vector signed short vec_ld (int, const short *);
42067     vector unsigned short vec_ld (int, const vector unsigned short *);
42068     vector unsigned short vec_ld (int, const unsigned short *);
42069     vector bool char vec_ld (int, const vector bool char *);
42070     vector signed char vec_ld (int, const vector signed char *);
42071     vector signed char vec_ld (int, const signed char *);
42072     vector unsigned char vec_ld (int, const vector unsigned char *);
42073     vector unsigned char vec_ld (int, const unsigned char *);
42074
42075     vector signed char vec_lde (int, const signed char *);
42076     vector unsigned char vec_lde (int, const unsigned char *);
42077     vector signed short vec_lde (int, const short *);
42078     vector unsigned short vec_lde (int, const unsigned short *);
42079     vector float vec_lde (int, const float *);
42080     vector signed int vec_lde (int, const int *);
42081     vector unsigned int vec_lde (int, const unsigned int *);
42082     vector signed int vec_lde (int, const long *);
42083     vector unsigned int vec_lde (int, const unsigned long *);
42084
42085     vector float vec_lvewx (int, float *);
42086     vector signed int vec_lvewx (int, int *);
42087     vector unsigned int vec_lvewx (int, unsigned int *);
42088     vector signed int vec_lvewx (int, long *);
42089     vector unsigned int vec_lvewx (int, unsigned long *);
42090
42091     vector signed short vec_lvehx (int, short *);
42092     vector unsigned short vec_lvehx (int, unsigned short *);
42093
42094     vector signed char vec_lvebx (int, char *);
42095     vector unsigned char vec_lvebx (int, unsigned char *);
42096
42097     vector float vec_ldl (int, const vector float *);
42098     vector float vec_ldl (int, const float *);
42099     vector bool int vec_ldl (int, const vector bool int *);
42100     vector signed int vec_ldl (int, const vector signed int *);
42101     vector signed int vec_ldl (int, const int *);
42102     vector signed int vec_ldl (int, const long *);
42103     vector unsigned int vec_ldl (int, const vector unsigned int *);
42104     vector unsigned int vec_ldl (int, const unsigned int *);
42105     vector unsigned int vec_ldl (int, const unsigned long *);
42106     vector bool short vec_ldl (int, const vector bool short *);
42107     vector pixel vec_ldl (int, const vector pixel *);
42108     vector signed short vec_ldl (int, const vector signed short *);
42109     vector signed short vec_ldl (int, const short *);
42110     vector unsigned short vec_ldl (int, const vector unsigned short *);
42111     vector unsigned short vec_ldl (int, const unsigned short *);
42112     vector bool char vec_ldl (int, const vector bool char *);
42113     vector signed char vec_ldl (int, const vector signed char *);
42114     vector signed char vec_ldl (int, const signed char *);
42115     vector unsigned char vec_ldl (int, const vector unsigned char *);
42116     vector unsigned char vec_ldl (int, const unsigned char *);
42117
42118     vector float vec_loge (vector float);
42119
42120     vector unsigned char vec_lvsl (int, const volatile unsigned char *);
42121     vector unsigned char vec_lvsl (int, const volatile signed char *);
42122     vector unsigned char vec_lvsl (int, const volatile unsigned short *);
42123     vector unsigned char vec_lvsl (int, const volatile short *);
42124     vector unsigned char vec_lvsl (int, const volatile unsigned int *);
42125     vector unsigned char vec_lvsl (int, const volatile int *);
42126     vector unsigned char vec_lvsl (int, const volatile unsigned long *);
42127     vector unsigned char vec_lvsl (int, const volatile long *);
42128     vector unsigned char vec_lvsl (int, const volatile float *);
42129
42130     vector unsigned char vec_lvsr (int, const volatile unsigned char *);
42131     vector unsigned char vec_lvsr (int, const volatile signed char *);
42132     vector unsigned char vec_lvsr (int, const volatile unsigned short *);
42133     vector unsigned char vec_lvsr (int, const volatile short *);
42134     vector unsigned char vec_lvsr (int, const volatile unsigned int *);
42135     vector unsigned char vec_lvsr (int, const volatile int *);
42136     vector unsigned char vec_lvsr (int, const volatile unsigned long *);
42137     vector unsigned char vec_lvsr (int, const volatile long *);
42138     vector unsigned char vec_lvsr (int, const volatile float *);
42139
42140     vector float vec_madd (vector float, vector float, vector float);
42141
42142     vector signed short vec_madds (vector signed short,
42143                                    vector signed short,
42144                                    vector signed short);
42145
42146     vector unsigned char vec_max (vector bool char, vector unsigned char);
42147     vector unsigned char vec_max (vector unsigned char, vector bool char);
42148     vector unsigned char vec_max (vector unsigned char,
42149                                   vector unsigned char);
42150     vector signed char vec_max (vector bool char, vector signed char);
42151     vector signed char vec_max (vector signed char, vector bool char);
42152     vector signed char vec_max (vector signed char, vector signed char);
42153     vector unsigned short vec_max (vector bool short,
42154                                    vector unsigned short);
42155     vector unsigned short vec_max (vector unsigned short,
42156                                    vector bool short);
42157     vector unsigned short vec_max (vector unsigned short,
42158                                    vector unsigned short);
42159     vector signed short vec_max (vector bool short, vector signed short);
42160     vector signed short vec_max (vector signed short, vector bool short);
42161     vector signed short vec_max (vector signed short, vector signed short);
42162     vector unsigned int vec_max (vector bool int, vector unsigned int);
42163     vector unsigned int vec_max (vector unsigned int, vector bool int);
42164     vector unsigned int vec_max (vector unsigned int, vector unsigned int);
42165     vector signed int vec_max (vector bool int, vector signed int);
42166     vector signed int vec_max (vector signed int, vector bool int);
42167     vector signed int vec_max (vector signed int, vector signed int);
42168     vector float vec_max (vector float, vector float);
42169
42170     vector float vec_vmaxfp (vector float, vector float);
42171
42172     vector signed int vec_vmaxsw (vector bool int, vector signed int);
42173     vector signed int vec_vmaxsw (vector signed int, vector bool int);
42174     vector signed int vec_vmaxsw (vector signed int, vector signed int);
42175
42176     vector unsigned int vec_vmaxuw (vector bool int, vector unsigned int);
42177     vector unsigned int vec_vmaxuw (vector unsigned int, vector bool int);
42178     vector unsigned int vec_vmaxuw (vector unsigned int,
42179                                     vector unsigned int);
42180
42181     vector signed short vec_vmaxsh (vector bool short, vector signed short);
42182     vector signed short vec_vmaxsh (vector signed short, vector bool short);
42183     vector signed short vec_vmaxsh (vector signed short,
42184                                     vector signed short);
42185
42186     vector unsigned short vec_vmaxuh (vector bool short,
42187                                       vector unsigned short);
42188     vector unsigned short vec_vmaxuh (vector unsigned short,
42189                                       vector bool short);
42190     vector unsigned short vec_vmaxuh (vector unsigned short,
42191                                       vector unsigned short);
42192
42193     vector signed char vec_vmaxsb (vector bool char, vector signed char);
42194     vector signed char vec_vmaxsb (vector signed char, vector bool char);
42195     vector signed char vec_vmaxsb (vector signed char, vector signed char);
42196
42197     vector unsigned char vec_vmaxub (vector bool char,
42198                                      vector unsigned char);
42199     vector unsigned char vec_vmaxub (vector unsigned char,
42200                                      vector bool char);
42201     vector unsigned char vec_vmaxub (vector unsigned char,
42202                                      vector unsigned char);
42203
42204     vector bool char vec_mergeh (vector bool char, vector bool char);
42205     vector signed char vec_mergeh (vector signed char, vector signed char);
42206     vector unsigned char vec_mergeh (vector unsigned char,
42207                                      vector unsigned char);
42208     vector bool short vec_mergeh (vector bool short, vector bool short);
42209     vector pixel vec_mergeh (vector pixel, vector pixel);
42210     vector signed short vec_mergeh (vector signed short,
42211                                     vector signed short);
42212     vector unsigned short vec_mergeh (vector unsigned short,
42213                                       vector unsigned short);
42214     vector float vec_mergeh (vector float, vector float);
42215     vector bool int vec_mergeh (vector bool int, vector bool int);
42216     vector signed int vec_mergeh (vector signed int, vector signed int);
42217     vector unsigned int vec_mergeh (vector unsigned int,
42218                                     vector unsigned int);
42219
42220     vector float vec_vmrghw (vector float, vector float);
42221     vector bool int vec_vmrghw (vector bool int, vector bool int);
42222     vector signed int vec_vmrghw (vector signed int, vector signed int);
42223     vector unsigned int vec_vmrghw (vector unsigned int,
42224                                     vector unsigned int);
42225
42226     vector bool short vec_vmrghh (vector bool short, vector bool short);
42227     vector signed short vec_vmrghh (vector signed short,
42228                                     vector signed short);
42229     vector unsigned short vec_vmrghh (vector unsigned short,
42230                                       vector unsigned short);
42231     vector pixel vec_vmrghh (vector pixel, vector pixel);
42232
42233     vector bool char vec_vmrghb (vector bool char, vector bool char);
42234     vector signed char vec_vmrghb (vector signed char, vector signed char);
42235     vector unsigned char vec_vmrghb (vector unsigned char,
42236                                      vector unsigned char);
42237
42238     vector bool char vec_mergel (vector bool char, vector bool char);
42239     vector signed char vec_mergel (vector signed char, vector signed char);
42240     vector unsigned char vec_mergel (vector unsigned char,
42241                                      vector unsigned char);
42242     vector bool short vec_mergel (vector bool short, vector bool short);
42243     vector pixel vec_mergel (vector pixel, vector pixel);
42244     vector signed short vec_mergel (vector signed short,
42245                                     vector signed short);
42246     vector unsigned short vec_mergel (vector unsigned short,
42247                                       vector unsigned short);
42248     vector float vec_mergel (vector float, vector float);
42249     vector bool int vec_mergel (vector bool int, vector bool int);
42250     vector signed int vec_mergel (vector signed int, vector signed int);
42251     vector unsigned int vec_mergel (vector unsigned int,
42252                                     vector unsigned int);
42253
42254     vector float vec_vmrglw (vector float, vector float);
42255     vector signed int vec_vmrglw (vector signed int, vector signed int);
42256     vector unsigned int vec_vmrglw (vector unsigned int,
42257                                     vector unsigned int);
42258     vector bool int vec_vmrglw (vector bool int, vector bool int);
42259
42260     vector bool short vec_vmrglh (vector bool short, vector bool short);
42261     vector signed short vec_vmrglh (vector signed short,
42262                                     vector signed short);
42263     vector unsigned short vec_vmrglh (vector unsigned short,
42264                                       vector unsigned short);
42265     vector pixel vec_vmrglh (vector pixel, vector pixel);
42266
42267     vector bool char vec_vmrglb (vector bool char, vector bool char);
42268     vector signed char vec_vmrglb (vector signed char, vector signed char);
42269     vector unsigned char vec_vmrglb (vector unsigned char,
42270                                      vector unsigned char);
42271
42272     vector unsigned short vec_mfvscr (void);
42273
42274     vector unsigned char vec_min (vector bool char, vector unsigned char);
42275     vector unsigned char vec_min (vector unsigned char, vector bool char);
42276     vector unsigned char vec_min (vector unsigned char,
42277                                   vector unsigned char);
42278     vector signed char vec_min (vector bool char, vector signed char);
42279     vector signed char vec_min (vector signed char, vector bool char);
42280     vector signed char vec_min (vector signed char, vector signed char);
42281     vector unsigned short vec_min (vector bool short,
42282                                    vector unsigned short);
42283     vector unsigned short vec_min (vector unsigned short,
42284                                    vector bool short);
42285     vector unsigned short vec_min (vector unsigned short,
42286                                    vector unsigned short);
42287     vector signed short vec_min (vector bool short, vector signed short);
42288     vector signed short vec_min (vector signed short, vector bool short);
42289     vector signed short vec_min (vector signed short, vector signed short);
42290     vector unsigned int vec_min (vector bool int, vector unsigned int);
42291     vector unsigned int vec_min (vector unsigned int, vector bool int);
42292     vector unsigned int vec_min (vector unsigned int, vector unsigned int);
42293     vector signed int vec_min (vector bool int, vector signed int);
42294     vector signed int vec_min (vector signed int, vector bool int);
42295     vector signed int vec_min (vector signed int, vector signed int);
42296     vector float vec_min (vector float, vector float);
42297
42298     vector float vec_vminfp (vector float, vector float);
42299
42300     vector signed int vec_vminsw (vector bool int, vector signed int);
42301     vector signed int vec_vminsw (vector signed int, vector bool int);
42302     vector signed int vec_vminsw (vector signed int, vector signed int);
42303
42304     vector unsigned int vec_vminuw (vector bool int, vector unsigned int);
42305     vector unsigned int vec_vminuw (vector unsigned int, vector bool int);
42306     vector unsigned int vec_vminuw (vector unsigned int,
42307                                     vector unsigned int);
42308
42309     vector signed short vec_vminsh (vector bool short, vector signed short);
42310     vector signed short vec_vminsh (vector signed short, vector bool short);
42311     vector signed short vec_vminsh (vector signed short,
42312                                     vector signed short);
42313
42314     vector unsigned short vec_vminuh (vector bool short,
42315                                       vector unsigned short);
42316     vector unsigned short vec_vminuh (vector unsigned short,
42317                                       vector bool short);
42318     vector unsigned short vec_vminuh (vector unsigned short,
42319                                       vector unsigned short);
42320
42321     vector signed char vec_vminsb (vector bool char, vector signed char);
42322     vector signed char vec_vminsb (vector signed char, vector bool char);
42323     vector signed char vec_vminsb (vector signed char, vector signed char);
42324
42325     vector unsigned char vec_vminub (vector bool char,
42326                                      vector unsigned char);
42327     vector unsigned char vec_vminub (vector unsigned char,
42328                                      vector bool char);
42329     vector unsigned char vec_vminub (vector unsigned char,
42330                                      vector unsigned char);
42331
42332     vector signed short vec_mladd (vector signed short,
42333                                    vector signed short,
42334                                    vector signed short);
42335     vector signed short vec_mladd (vector signed short,
42336                                    vector unsigned short,
42337                                    vector unsigned short);
42338     vector signed short vec_mladd (vector unsigned short,
42339                                    vector signed short,
42340                                    vector signed short);
42341     vector unsigned short vec_mladd (vector unsigned short,
42342                                      vector unsigned short,
42343                                      vector unsigned short);
42344
42345     vector signed short vec_mradds (vector signed short,
42346                                     vector signed short,
42347                                     vector signed short);
42348
42349     vector unsigned int vec_msum (vector unsigned char,
42350                                   vector unsigned char,
42351                                   vector unsigned int);
42352     vector signed int vec_msum (vector signed char,
42353                                 vector unsigned char,
42354                                 vector signed int);
42355     vector unsigned int vec_msum (vector unsigned short,
42356                                   vector unsigned short,
42357                                   vector unsigned int);
42358     vector signed int vec_msum (vector signed short,
42359                                 vector signed short,
42360                                 vector signed int);
42361
42362     vector signed int vec_vmsumshm (vector signed short,
42363                                     vector signed short,
42364                                     vector signed int);
42365
42366     vector unsigned int vec_vmsumuhm (vector unsigned short,
42367                                       vector unsigned short,
42368                                       vector unsigned int);
42369
42370     vector signed int vec_vmsummbm (vector signed char,
42371                                     vector unsigned char,
42372                                     vector signed int);
42373
42374     vector unsigned int vec_vmsumubm (vector unsigned char,
42375                                       vector unsigned char,
42376                                       vector unsigned int);
42377
42378     vector unsigned int vec_msums (vector unsigned short,
42379                                    vector unsigned short,
42380                                    vector unsigned int);
42381     vector signed int vec_msums (vector signed short,
42382                                  vector signed short,
42383                                  vector signed int);
42384
42385     vector signed int vec_vmsumshs (vector signed short,
42386                                     vector signed short,
42387                                     vector signed int);
42388
42389     vector unsigned int vec_vmsumuhs (vector unsigned short,
42390                                       vector unsigned short,
42391                                       vector unsigned int);
42392
42393     void vec_mtvscr (vector signed int);
42394     void vec_mtvscr (vector unsigned int);
42395     void vec_mtvscr (vector bool int);
42396     void vec_mtvscr (vector signed short);
42397     void vec_mtvscr (vector unsigned short);
42398     void vec_mtvscr (vector bool short);
42399     void vec_mtvscr (vector pixel);
42400     void vec_mtvscr (vector signed char);
42401     void vec_mtvscr (vector unsigned char);
42402     void vec_mtvscr (vector bool char);
42403
42404     vector unsigned short vec_mule (vector unsigned char,
42405                                     vector unsigned char);
42406     vector signed short vec_mule (vector signed char,
42407                                   vector signed char);
42408     vector unsigned int vec_mule (vector unsigned short,
42409                                   vector unsigned short);
42410     vector signed int vec_mule (vector signed short, vector signed short);
42411
42412     vector signed int vec_vmulesh (vector signed short,
42413                                    vector signed short);
42414
42415     vector unsigned int vec_vmuleuh (vector unsigned short,
42416                                      vector unsigned short);
42417
42418     vector signed short vec_vmulesb (vector signed char,
42419                                      vector signed char);
42420
42421     vector unsigned short vec_vmuleub (vector unsigned char,
42422                                       vector unsigned char);
42423
42424     vector unsigned short vec_mulo (vector unsigned char,
42425                                     vector unsigned char);
42426     vector signed short vec_mulo (vector signed char, vector signed char);
42427     vector unsigned int vec_mulo (vector unsigned short,
42428                                   vector unsigned short);
42429     vector signed int vec_mulo (vector signed short, vector signed short);
42430
42431     vector signed int vec_vmulosh (vector signed short,
42432                                    vector signed short);
42433
42434     vector unsigned int vec_vmulouh (vector unsigned short,
42435                                      vector unsigned short);
42436
42437     vector signed short vec_vmulosb (vector signed char,
42438                                      vector signed char);
42439
42440     vector unsigned short vec_vmuloub (vector unsigned char,
42441                                        vector unsigned char);
42442
42443     vector float vec_nmsub (vector float, vector float, vector float);
42444
42445     vector float vec_nor (vector float, vector float);
42446     vector signed int vec_nor (vector signed int, vector signed int);
42447     vector unsigned int vec_nor (vector unsigned int, vector unsigned int);
42448     vector bool int vec_nor (vector bool int, vector bool int);
42449     vector signed short vec_nor (vector signed short, vector signed short);
42450     vector unsigned short vec_nor (vector unsigned short,
42451                                    vector unsigned short);
42452     vector bool short vec_nor (vector bool short, vector bool short);
42453     vector signed char vec_nor (vector signed char, vector signed char);
42454     vector unsigned char vec_nor (vector unsigned char,
42455                                   vector unsigned char);
42456     vector bool char vec_nor (vector bool char, vector bool char);
42457
42458     vector float vec_or (vector float, vector float);
42459     vector float vec_or (vector float, vector bool int);
42460     vector float vec_or (vector bool int, vector float);
42461     vector bool int vec_or (vector bool int, vector bool int);
42462     vector signed int vec_or (vector bool int, vector signed int);
42463     vector signed int vec_or (vector signed int, vector bool int);
42464     vector signed int vec_or (vector signed int, vector signed int);
42465     vector unsigned int vec_or (vector bool int, vector unsigned int);
42466     vector unsigned int vec_or (vector unsigned int, vector bool int);
42467     vector unsigned int vec_or (vector unsigned int, vector unsigned int);
42468     vector bool short vec_or (vector bool short, vector bool short);
42469     vector signed short vec_or (vector bool short, vector signed short);
42470     vector signed short vec_or (vector signed short, vector bool short);
42471     vector signed short vec_or (vector signed short, vector signed short);
42472     vector unsigned short vec_or (vector bool short, vector unsigned short);
42473     vector unsigned short vec_or (vector unsigned short, vector bool short);
42474     vector unsigned short vec_or (vector unsigned short,
42475                                   vector unsigned short);
42476     vector signed char vec_or (vector bool char, vector signed char);
42477     vector bool char vec_or (vector bool char, vector bool char);
42478     vector signed char vec_or (vector signed char, vector bool char);
42479     vector signed char vec_or (vector signed char, vector signed char);
42480     vector unsigned char vec_or (vector bool char, vector unsigned char);
42481     vector unsigned char vec_or (vector unsigned char, vector bool char);
42482     vector unsigned char vec_or (vector unsigned char,
42483                                  vector unsigned char);
42484
42485     vector signed char vec_pack (vector signed short, vector signed short);
42486     vector unsigned char vec_pack (vector unsigned short,
42487                                    vector unsigned short);
42488     vector bool char vec_pack (vector bool short, vector bool short);
42489     vector signed short vec_pack (vector signed int, vector signed int);
42490     vector unsigned short vec_pack (vector unsigned int,
42491                                     vector unsigned int);
42492     vector bool short vec_pack (vector bool int, vector bool int);
42493
42494     vector bool short vec_vpkuwum (vector bool int, vector bool int);
42495     vector signed short vec_vpkuwum (vector signed int, vector signed int);
42496     vector unsigned short vec_vpkuwum (vector unsigned int,
42497                                        vector unsigned int);
42498
42499     vector bool char vec_vpkuhum (vector bool short, vector bool short);
42500     vector signed char vec_vpkuhum (vector signed short,
42501                                     vector signed short);
42502     vector unsigned char vec_vpkuhum (vector unsigned short,
42503                                       vector unsigned short);
42504
42505     vector pixel vec_packpx (vector unsigned int, vector unsigned int);
42506
42507     vector unsigned char vec_packs (vector unsigned short,
42508                                     vector unsigned short);
42509     vector signed char vec_packs (vector signed short, vector signed short);
42510     vector unsigned short vec_packs (vector unsigned int,
42511                                      vector unsigned int);
42512     vector signed short vec_packs (vector signed int, vector signed int);
42513
42514     vector signed short vec_vpkswss (vector signed int, vector signed int);
42515
42516     vector unsigned short vec_vpkuwus (vector unsigned int,
42517                                        vector unsigned int);
42518
42519     vector signed char vec_vpkshss (vector signed short,
42520                                     vector signed short);
42521
42522     vector unsigned char vec_vpkuhus (vector unsigned short,
42523                                       vector unsigned short);
42524
42525     vector unsigned char vec_packsu (vector unsigned short,
42526                                      vector unsigned short);
42527     vector unsigned char vec_packsu (vector signed short,
42528                                      vector signed short);
42529     vector unsigned short vec_packsu (vector unsigned int,
42530                                       vector unsigned int);
42531     vector unsigned short vec_packsu (vector signed int, vector signed int);
42532
42533     vector unsigned short vec_vpkswus (vector signed int,
42534                                        vector signed int);
42535
42536     vector unsigned char vec_vpkshus (vector signed short,
42537                                       vector signed short);
42538
42539     vector float vec_perm (vector float,
42540                            vector float,
42541                            vector unsigned char);
42542     vector signed int vec_perm (vector signed int,
42543                                 vector signed int,
42544                                 vector unsigned char);
42545     vector unsigned int vec_perm (vector unsigned int,
42546                                   vector unsigned int,
42547                                   vector unsigned char);
42548     vector bool int vec_perm (vector bool int,
42549                               vector bool int,
42550                               vector unsigned char);
42551     vector signed short vec_perm (vector signed short,
42552                                   vector signed short,
42553                                   vector unsigned char);
42554     vector unsigned short vec_perm (vector unsigned short,
42555                                     vector unsigned short,
42556                                     vector unsigned char);
42557     vector bool short vec_perm (vector bool short,
42558                                 vector bool short,
42559                                 vector unsigned char);
42560     vector pixel vec_perm (vector pixel,
42561                            vector pixel,
42562                            vector unsigned char);
42563     vector signed char vec_perm (vector signed char,
42564                                  vector signed char,
42565                                  vector unsigned char);
42566     vector unsigned char vec_perm (vector unsigned char,
42567                                    vector unsigned char,
42568                                    vector unsigned char);
42569     vector bool char vec_perm (vector bool char,
42570                                vector bool char,
42571                                vector unsigned char);
42572
42573     vector float vec_re (vector float);
42574
42575     vector signed char vec_rl (vector signed char,
42576                                vector unsigned char);
42577     vector unsigned char vec_rl (vector unsigned char,
42578                                  vector unsigned char);
42579     vector signed short vec_rl (vector signed short, vector unsigned short);
42580     vector unsigned short vec_rl (vector unsigned short,
42581                                   vector unsigned short);
42582     vector signed int vec_rl (vector signed int, vector unsigned int);
42583     vector unsigned int vec_rl (vector unsigned int, vector unsigned int);
42584
42585     vector signed int vec_vrlw (vector signed int, vector unsigned int);
42586     vector unsigned int vec_vrlw (vector unsigned int, vector unsigned int);
42587
42588     vector signed short vec_vrlh (vector signed short,
42589                                   vector unsigned short);
42590     vector unsigned short vec_vrlh (vector unsigned short,
42591                                     vector unsigned short);
42592
42593     vector signed char vec_vrlb (vector signed char, vector unsigned char);
42594     vector unsigned char vec_vrlb (vector unsigned char,
42595                                    vector unsigned char);
42596
42597     vector float vec_round (vector float);
42598
42599     vector float vec_recip (vector float, vector float);
42600
42601     vector float vec_rsqrt (vector float);
42602
42603     vector float vec_rsqrte (vector float);
42604
42605     vector float vec_sel (vector float, vector float, vector bool int);
42606     vector float vec_sel (vector float, vector float, vector unsigned int);
42607     vector signed int vec_sel (vector signed int,
42608                                vector signed int,
42609                                vector bool int);
42610     vector signed int vec_sel (vector signed int,
42611                                vector signed int,
42612                                vector unsigned int);
42613     vector unsigned int vec_sel (vector unsigned int,
42614                                  vector unsigned int,
42615                                  vector bool int);
42616     vector unsigned int vec_sel (vector unsigned int,
42617                                  vector unsigned int,
42618                                  vector unsigned int);
42619     vector bool int vec_sel (vector bool int,
42620                              vector bool int,
42621                              vector bool int);
42622     vector bool int vec_sel (vector bool int,
42623                              vector bool int,
42624                              vector unsigned int);
42625     vector signed short vec_sel (vector signed short,
42626                                  vector signed short,
42627                                  vector bool short);
42628     vector signed short vec_sel (vector signed short,
42629                                  vector signed short,
42630                                  vector unsigned short);
42631     vector unsigned short vec_sel (vector unsigned short,
42632                                    vector unsigned short,
42633                                    vector bool short);
42634     vector unsigned short vec_sel (vector unsigned short,
42635                                    vector unsigned short,
42636                                    vector unsigned short);
42637     vector bool short vec_sel (vector bool short,
42638                                vector bool short,
42639                                vector bool short);
42640     vector bool short vec_sel (vector bool short,
42641                                vector bool short,
42642                                vector unsigned short);
42643     vector signed char vec_sel (vector signed char,
42644                                 vector signed char,
42645                                 vector bool char);
42646     vector signed char vec_sel (vector signed char,
42647                                 vector signed char,
42648                                 vector unsigned char);
42649     vector unsigned char vec_sel (vector unsigned char,
42650                                   vector unsigned char,
42651                                   vector bool char);
42652     vector unsigned char vec_sel (vector unsigned char,
42653                                   vector unsigned char,
42654                                   vector unsigned char);
42655     vector bool char vec_sel (vector bool char,
42656                               vector bool char,
42657                               vector bool char);
42658     vector bool char vec_sel (vector bool char,
42659                               vector bool char,
42660                               vector unsigned char);
42661
42662     vector signed char vec_sl (vector signed char,
42663                                vector unsigned char);
42664     vector unsigned char vec_sl (vector unsigned char,
42665                                  vector unsigned char);
42666     vector signed short vec_sl (vector signed short, vector unsigned short);
42667     vector unsigned short vec_sl (vector unsigned short,
42668                                   vector unsigned short);
42669     vector signed int vec_sl (vector signed int, vector unsigned int);
42670     vector unsigned int vec_sl (vector unsigned int, vector unsigned int);
42671
42672     vector signed int vec_vslw (vector signed int, vector unsigned int);
42673     vector unsigned int vec_vslw (vector unsigned int, vector unsigned int);
42674
42675     vector signed short vec_vslh (vector signed short,
42676                                   vector unsigned short);
42677     vector unsigned short vec_vslh (vector unsigned short,
42678                                     vector unsigned short);
42679
42680     vector signed char vec_vslb (vector signed char, vector unsigned char);
42681     vector unsigned char vec_vslb (vector unsigned char,
42682                                    vector unsigned char);
42683
42684     vector float vec_sld (vector float, vector float, const int);
42685     vector signed int vec_sld (vector signed int,
42686                                vector signed int,
42687                                const int);
42688     vector unsigned int vec_sld (vector unsigned int,
42689                                  vector unsigned int,
42690                                  const int);
42691     vector bool int vec_sld (vector bool int,
42692                              vector bool int,
42693                              const int);
42694     vector signed short vec_sld (vector signed short,
42695                                  vector signed short,
42696                                  const int);
42697     vector unsigned short vec_sld (vector unsigned short,
42698                                    vector unsigned short,
42699                                    const int);
42700     vector bool short vec_sld (vector bool short,
42701                                vector bool short,
42702                                const int);
42703     vector pixel vec_sld (vector pixel,
42704                           vector pixel,
42705                           const int);
42706     vector signed char vec_sld (vector signed char,
42707                                 vector signed char,
42708                                 const int);
42709     vector unsigned char vec_sld (vector unsigned char,
42710                                   vector unsigned char,
42711                                   const int);
42712     vector bool char vec_sld (vector bool char,
42713                               vector bool char,
42714                               const int);
42715
42716     vector signed int vec_sll (vector signed int,
42717                                vector unsigned int);
42718     vector signed int vec_sll (vector signed int,
42719                                vector unsigned short);
42720     vector signed int vec_sll (vector signed int,
42721                                vector unsigned char);
42722     vector unsigned int vec_sll (vector unsigned int,
42723                                  vector unsigned int);
42724     vector unsigned int vec_sll (vector unsigned int,
42725                                  vector unsigned short);
42726     vector unsigned int vec_sll (vector unsigned int,
42727                                  vector unsigned char);
42728     vector bool int vec_sll (vector bool int,
42729                              vector unsigned int);
42730     vector bool int vec_sll (vector bool int,
42731                              vector unsigned short);
42732     vector bool int vec_sll (vector bool int,
42733                              vector unsigned char);
42734     vector signed short vec_sll (vector signed short,
42735                                  vector unsigned int);
42736     vector signed short vec_sll (vector signed short,
42737                                  vector unsigned short);
42738     vector signed short vec_sll (vector signed short,
42739                                  vector unsigned char);
42740     vector unsigned short vec_sll (vector unsigned short,
42741                                    vector unsigned int);
42742     vector unsigned short vec_sll (vector unsigned short,
42743                                    vector unsigned short);
42744     vector unsigned short vec_sll (vector unsigned short,
42745                                    vector unsigned char);
42746     vector bool short vec_sll (vector bool short, vector unsigned int);
42747     vector bool short vec_sll (vector bool short, vector unsigned short);
42748     vector bool short vec_sll (vector bool short, vector unsigned char);
42749     vector pixel vec_sll (vector pixel, vector unsigned int);
42750     vector pixel vec_sll (vector pixel, vector unsigned short);
42751     vector pixel vec_sll (vector pixel, vector unsigned char);
42752     vector signed char vec_sll (vector signed char, vector unsigned int);
42753     vector signed char vec_sll (vector signed char, vector unsigned short);
42754     vector signed char vec_sll (vector signed char, vector unsigned char);
42755     vector unsigned char vec_sll (vector unsigned char,
42756                                   vector unsigned int);
42757     vector unsigned char vec_sll (vector unsigned char,
42758                                   vector unsigned short);
42759     vector unsigned char vec_sll (vector unsigned char,
42760                                   vector unsigned char);
42761     vector bool char vec_sll (vector bool char, vector unsigned int);
42762     vector bool char vec_sll (vector bool char, vector unsigned short);
42763     vector bool char vec_sll (vector bool char, vector unsigned char);
42764
42765     vector float vec_slo (vector float, vector signed char);
42766     vector float vec_slo (vector float, vector unsigned char);
42767     vector signed int vec_slo (vector signed int, vector signed char);
42768     vector signed int vec_slo (vector signed int, vector unsigned char);
42769     vector unsigned int vec_slo (vector unsigned int, vector signed char);
42770     vector unsigned int vec_slo (vector unsigned int, vector unsigned char);
42771     vector signed short vec_slo (vector signed short, vector signed char);
42772     vector signed short vec_slo (vector signed short, vector unsigned char);
42773     vector unsigned short vec_slo (vector unsigned short,
42774                                    vector signed char);
42775     vector unsigned short vec_slo (vector unsigned short,
42776                                    vector unsigned char);
42777     vector pixel vec_slo (vector pixel, vector signed char);
42778     vector pixel vec_slo (vector pixel, vector unsigned char);
42779     vector signed char vec_slo (vector signed char, vector signed char);
42780     vector signed char vec_slo (vector signed char, vector unsigned char);
42781     vector unsigned char vec_slo (vector unsigned char, vector signed char);
42782     vector unsigned char vec_slo (vector unsigned char,
42783                                   vector unsigned char);
42784
42785     vector signed char vec_splat (vector signed char, const int);
42786     vector unsigned char vec_splat (vector unsigned char, const int);
42787     vector bool char vec_splat (vector bool char, const int);
42788     vector signed short vec_splat (vector signed short, const int);
42789     vector unsigned short vec_splat (vector unsigned short, const int);
42790     vector bool short vec_splat (vector bool short, const int);
42791     vector pixel vec_splat (vector pixel, const int);
42792     vector float vec_splat (vector float, const int);
42793     vector signed int vec_splat (vector signed int, const int);
42794     vector unsigned int vec_splat (vector unsigned int, const int);
42795     vector bool int vec_splat (vector bool int, const int);
42796
42797     vector float vec_vspltw (vector float, const int);
42798     vector signed int vec_vspltw (vector signed int, const int);
42799     vector unsigned int vec_vspltw (vector unsigned int, const int);
42800     vector bool int vec_vspltw (vector bool int, const int);
42801
42802     vector bool short vec_vsplth (vector bool short, const int);
42803     vector signed short vec_vsplth (vector signed short, const int);
42804     vector unsigned short vec_vsplth (vector unsigned short, const int);
42805     vector pixel vec_vsplth (vector pixel, const int);
42806
42807     vector signed char vec_vspltb (vector signed char, const int);
42808     vector unsigned char vec_vspltb (vector unsigned char, const int);
42809     vector bool char vec_vspltb (vector bool char, const int);
42810
42811     vector signed char vec_splat_s8 (const int);
42812
42813     vector signed short vec_splat_s16 (const int);
42814
42815     vector signed int vec_splat_s32 (const int);
42816
42817     vector unsigned char vec_splat_u8 (const int);
42818
42819     vector unsigned short vec_splat_u16 (const int);
42820
42821     vector unsigned int vec_splat_u32 (const int);
42822
42823     vector signed char vec_sr (vector signed char, vector unsigned char);
42824     vector unsigned char vec_sr (vector unsigned char,
42825                                  vector unsigned char);
42826     vector signed short vec_sr (vector signed short,
42827                                 vector unsigned short);
42828     vector unsigned short vec_sr (vector unsigned short,
42829                                   vector unsigned short);
42830     vector signed int vec_sr (vector signed int, vector unsigned int);
42831     vector unsigned int vec_sr (vector unsigned int, vector unsigned int);
42832
42833     vector signed int vec_vsrw (vector signed int, vector unsigned int);
42834     vector unsigned int vec_vsrw (vector unsigned int, vector unsigned int);
42835
42836     vector signed short vec_vsrh (vector signed short,
42837                                   vector unsigned short);
42838     vector unsigned short vec_vsrh (vector unsigned short,
42839                                     vector unsigned short);
42840
42841     vector signed char vec_vsrb (vector signed char, vector unsigned char);
42842     vector unsigned char vec_vsrb (vector unsigned char,
42843                                    vector unsigned char);
42844
42845     vector signed char vec_sra (vector signed char, vector unsigned char);
42846     vector unsigned char vec_sra (vector unsigned char,
42847                                   vector unsigned char);
42848     vector signed short vec_sra (vector signed short,
42849                                  vector unsigned short);
42850     vector unsigned short vec_sra (vector unsigned short,
42851                                    vector unsigned short);
42852     vector signed int vec_sra (vector signed int, vector unsigned int);
42853     vector unsigned int vec_sra (vector unsigned int, vector unsigned int);
42854
42855     vector signed int vec_vsraw (vector signed int, vector unsigned int);
42856     vector unsigned int vec_vsraw (vector unsigned int,
42857                                    vector unsigned int);
42858
42859     vector signed short vec_vsrah (vector signed short,
42860                                    vector unsigned short);
42861     vector unsigned short vec_vsrah (vector unsigned short,
42862                                      vector unsigned short);
42863
42864     vector signed char vec_vsrab (vector signed char, vector unsigned char);
42865     vector unsigned char vec_vsrab (vector unsigned char,
42866                                     vector unsigned char);
42867
42868     vector signed int vec_srl (vector signed int, vector unsigned int);
42869     vector signed int vec_srl (vector signed int, vector unsigned short);
42870     vector signed int vec_srl (vector signed int, vector unsigned char);
42871     vector unsigned int vec_srl (vector unsigned int, vector unsigned int);
42872     vector unsigned int vec_srl (vector unsigned int,
42873                                  vector unsigned short);
42874     vector unsigned int vec_srl (vector unsigned int, vector unsigned char);
42875     vector bool int vec_srl (vector bool int, vector unsigned int);
42876     vector bool int vec_srl (vector bool int, vector unsigned short);
42877     vector bool int vec_srl (vector bool int, vector unsigned char);
42878     vector signed short vec_srl (vector signed short, vector unsigned int);
42879     vector signed short vec_srl (vector signed short,
42880                                  vector unsigned short);
42881     vector signed short vec_srl (vector signed short, vector unsigned char);
42882     vector unsigned short vec_srl (vector unsigned short,
42883                                    vector unsigned int);
42884     vector unsigned short vec_srl (vector unsigned short,
42885                                    vector unsigned short);
42886     vector unsigned short vec_srl (vector unsigned short,
42887                                    vector unsigned char);
42888     vector bool short vec_srl (vector bool short, vector unsigned int);
42889     vector bool short vec_srl (vector bool short, vector unsigned short);
42890     vector bool short vec_srl (vector bool short, vector unsigned char);
42891     vector pixel vec_srl (vector pixel, vector unsigned int);
42892     vector pixel vec_srl (vector pixel, vector unsigned short);
42893     vector pixel vec_srl (vector pixel, vector unsigned char);
42894     vector signed char vec_srl (vector signed char, vector unsigned int);
42895     vector signed char vec_srl (vector signed char, vector unsigned short);
42896     vector signed char vec_srl (vector signed char, vector unsigned char);
42897     vector unsigned char vec_srl (vector unsigned char,
42898                                   vector unsigned int);
42899     vector unsigned char vec_srl (vector unsigned char,
42900                                   vector unsigned short);
42901     vector unsigned char vec_srl (vector unsigned char,
42902                                   vector unsigned char);
42903     vector bool char vec_srl (vector bool char, vector unsigned int);
42904     vector bool char vec_srl (vector bool char, vector unsigned short);
42905     vector bool char vec_srl (vector bool char, vector unsigned char);
42906
42907     vector float vec_sro (vector float, vector signed char);
42908     vector float vec_sro (vector float, vector unsigned char);
42909     vector signed int vec_sro (vector signed int, vector signed char);
42910     vector signed int vec_sro (vector signed int, vector unsigned char);
42911     vector unsigned int vec_sro (vector unsigned int, vector signed char);
42912     vector unsigned int vec_sro (vector unsigned int, vector unsigned char);
42913     vector signed short vec_sro (vector signed short, vector signed char);
42914     vector signed short vec_sro (vector signed short, vector unsigned char);
42915     vector unsigned short vec_sro (vector unsigned short,
42916                                    vector signed char);
42917     vector unsigned short vec_sro (vector unsigned short,
42918                                    vector unsigned char);
42919     vector pixel vec_sro (vector pixel, vector signed char);
42920     vector pixel vec_sro (vector pixel, vector unsigned char);
42921     vector signed char vec_sro (vector signed char, vector signed char);
42922     vector signed char vec_sro (vector signed char, vector unsigned char);
42923     vector unsigned char vec_sro (vector unsigned char, vector signed char);
42924     vector unsigned char vec_sro (vector unsigned char,
42925                                   vector unsigned char);
42926
42927     void vec_st (vector float, int, vector float *);
42928     void vec_st (vector float, int, float *);
42929     void vec_st (vector signed int, int, vector signed int *);
42930     void vec_st (vector signed int, int, int *);
42931     void vec_st (vector unsigned int, int, vector unsigned int *);
42932     void vec_st (vector unsigned int, int, unsigned int *);
42933     void vec_st (vector bool int, int, vector bool int *);
42934     void vec_st (vector bool int, int, unsigned int *);
42935     void vec_st (vector bool int, int, int *);
42936     void vec_st (vector signed short, int, vector signed short *);
42937     void vec_st (vector signed short, int, short *);
42938     void vec_st (vector unsigned short, int, vector unsigned short *);
42939     void vec_st (vector unsigned short, int, unsigned short *);
42940     void vec_st (vector bool short, int, vector bool short *);
42941     void vec_st (vector bool short, int, unsigned short *);
42942     void vec_st (vector pixel, int, vector pixel *);
42943     void vec_st (vector pixel, int, unsigned short *);
42944     void vec_st (vector pixel, int, short *);
42945     void vec_st (vector bool short, int, short *);
42946     void vec_st (vector signed char, int, vector signed char *);
42947     void vec_st (vector signed char, int, signed char *);
42948     void vec_st (vector unsigned char, int, vector unsigned char *);
42949     void vec_st (vector unsigned char, int, unsigned char *);
42950     void vec_st (vector bool char, int, vector bool char *);
42951     void vec_st (vector bool char, int, unsigned char *);
42952     void vec_st (vector bool char, int, signed char *);
42953
42954     void vec_ste (vector signed char, int, signed char *);
42955     void vec_ste (vector unsigned char, int, unsigned char *);
42956     void vec_ste (vector bool char, int, signed char *);
42957     void vec_ste (vector bool char, int, unsigned char *);
42958     void vec_ste (vector signed short, int, short *);
42959     void vec_ste (vector unsigned short, int, unsigned short *);
42960     void vec_ste (vector bool short, int, short *);
42961     void vec_ste (vector bool short, int, unsigned short *);
42962     void vec_ste (vector pixel, int, short *);
42963     void vec_ste (vector pixel, int, unsigned short *);
42964     void vec_ste (vector float, int, float *);
42965     void vec_ste (vector signed int, int, int *);
42966     void vec_ste (vector unsigned int, int, unsigned int *);
42967     void vec_ste (vector bool int, int, int *);
42968     void vec_ste (vector bool int, int, unsigned int *);
42969
42970     void vec_stvewx (vector float, int, float *);
42971     void vec_stvewx (vector signed int, int, int *);
42972     void vec_stvewx (vector unsigned int, int, unsigned int *);
42973     void vec_stvewx (vector bool int, int, int *);
42974     void vec_stvewx (vector bool int, int, unsigned int *);
42975
42976     void vec_stvehx (vector signed short, int, short *);
42977     void vec_stvehx (vector unsigned short, int, unsigned short *);
42978     void vec_stvehx (vector bool short, int, short *);
42979     void vec_stvehx (vector bool short, int, unsigned short *);
42980     void vec_stvehx (vector pixel, int, short *);
42981     void vec_stvehx (vector pixel, int, unsigned short *);
42982
42983     void vec_stvebx (vector signed char, int, signed char *);
42984     void vec_stvebx (vector unsigned char, int, unsigned char *);
42985     void vec_stvebx (vector bool char, int, signed char *);
42986     void vec_stvebx (vector bool char, int, unsigned char *);
42987
42988     void vec_stl (vector float, int, vector float *);
42989     void vec_stl (vector float, int, float *);
42990     void vec_stl (vector signed int, int, vector signed int *);
42991     void vec_stl (vector signed int, int, int *);
42992     void vec_stl (vector unsigned int, int, vector unsigned int *);
42993     void vec_stl (vector unsigned int, int, unsigned int *);
42994     void vec_stl (vector bool int, int, vector bool int *);
42995     void vec_stl (vector bool int, int, unsigned int *);
42996     void vec_stl (vector bool int, int, int *);
42997     void vec_stl (vector signed short, int, vector signed short *);
42998     void vec_stl (vector signed short, int, short *);
42999     void vec_stl (vector unsigned short, int, vector unsigned short *);
43000     void vec_stl (vector unsigned short, int, unsigned short *);
43001     void vec_stl (vector bool short, int, vector bool short *);
43002     void vec_stl (vector bool short, int, unsigned short *);
43003     void vec_stl (vector bool short, int, short *);
43004     void vec_stl (vector pixel, int, vector pixel *);
43005     void vec_stl (vector pixel, int, unsigned short *);
43006     void vec_stl (vector pixel, int, short *);
43007     void vec_stl (vector signed char, int, vector signed char *);
43008     void vec_stl (vector signed char, int, signed char *);
43009     void vec_stl (vector unsigned char, int, vector unsigned char *);
43010     void vec_stl (vector unsigned char, int, unsigned char *);
43011     void vec_stl (vector bool char, int, vector bool char *);
43012     void vec_stl (vector bool char, int, unsigned char *);
43013     void vec_stl (vector bool char, int, signed char *);
43014
43015     vector signed char vec_sub (vector bool char, vector signed char);
43016     vector signed char vec_sub (vector signed char, vector bool char);
43017     vector signed char vec_sub (vector signed char, vector signed char);
43018     vector unsigned char vec_sub (vector bool char, vector unsigned char);
43019     vector unsigned char vec_sub (vector unsigned char, vector bool char);
43020     vector unsigned char vec_sub (vector unsigned char,
43021                                   vector unsigned char);
43022     vector signed short vec_sub (vector bool short, vector signed short);
43023     vector signed short vec_sub (vector signed short, vector bool short);
43024     vector signed short vec_sub (vector signed short, vector signed short);
43025     vector unsigned short vec_sub (vector bool short,
43026                                    vector unsigned short);
43027     vector unsigned short vec_sub (vector unsigned short,
43028                                    vector bool short);
43029     vector unsigned short vec_sub (vector unsigned short,
43030                                    vector unsigned short);
43031     vector signed int vec_sub (vector bool int, vector signed int);
43032     vector signed int vec_sub (vector signed int, vector bool int);
43033     vector signed int vec_sub (vector signed int, vector signed int);
43034     vector unsigned int vec_sub (vector bool int, vector unsigned int);
43035     vector unsigned int vec_sub (vector unsigned int, vector bool int);
43036     vector unsigned int vec_sub (vector unsigned int, vector unsigned int);
43037     vector float vec_sub (vector float, vector float);
43038
43039     vector float vec_vsubfp (vector float, vector float);
43040
43041     vector signed int vec_vsubuwm (vector bool int, vector signed int);
43042     vector signed int vec_vsubuwm (vector signed int, vector bool int);
43043     vector signed int vec_vsubuwm (vector signed int, vector signed int);
43044     vector unsigned int vec_vsubuwm (vector bool int, vector unsigned int);
43045     vector unsigned int vec_vsubuwm (vector unsigned int, vector bool int);
43046     vector unsigned int vec_vsubuwm (vector unsigned int,
43047                                      vector unsigned int);
43048
43049     vector signed short vec_vsubuhm (vector bool short,
43050                                      vector signed short);
43051     vector signed short vec_vsubuhm (vector signed short,
43052                                      vector bool short);
43053     vector signed short vec_vsubuhm (vector signed short,
43054                                      vector signed short);
43055     vector unsigned short vec_vsubuhm (vector bool short,
43056                                        vector unsigned short);
43057     vector unsigned short vec_vsubuhm (vector unsigned short,
43058                                        vector bool short);
43059     vector unsigned short vec_vsubuhm (vector unsigned short,
43060                                        vector unsigned short);
43061
43062     vector signed char vec_vsububm (vector bool char, vector signed char);
43063     vector signed char vec_vsububm (vector signed char, vector bool char);
43064     vector signed char vec_vsububm (vector signed char, vector signed char);
43065     vector unsigned char vec_vsububm (vector bool char,
43066                                       vector unsigned char);
43067     vector unsigned char vec_vsububm (vector unsigned char,
43068                                       vector bool char);
43069     vector unsigned char vec_vsububm (vector unsigned char,
43070                                       vector unsigned char);
43071
43072     vector unsigned int vec_subc (vector unsigned int, vector unsigned int);
43073
43074     vector unsigned char vec_subs (vector bool char, vector unsigned char);
43075     vector unsigned char vec_subs (vector unsigned char, vector bool char);
43076     vector unsigned char vec_subs (vector unsigned char,
43077                                    vector unsigned char);
43078     vector signed char vec_subs (vector bool char, vector signed char);
43079     vector signed char vec_subs (vector signed char, vector bool char);
43080     vector signed char vec_subs (vector signed char, vector signed char);
43081     vector unsigned short vec_subs (vector bool short,
43082                                     vector unsigned short);
43083     vector unsigned short vec_subs (vector unsigned short,
43084                                     vector bool short);
43085     vector unsigned short vec_subs (vector unsigned short,
43086                                     vector unsigned short);
43087     vector signed short vec_subs (vector bool short, vector signed short);
43088     vector signed short vec_subs (vector signed short, vector bool short);
43089     vector signed short vec_subs (vector signed short, vector signed short);
43090     vector unsigned int vec_subs (vector bool int, vector unsigned int);
43091     vector unsigned int vec_subs (vector unsigned int, vector bool int);
43092     vector unsigned int vec_subs (vector unsigned int, vector unsigned int);
43093     vector signed int vec_subs (vector bool int, vector signed int);
43094     vector signed int vec_subs (vector signed int, vector bool int);
43095     vector signed int vec_subs (vector signed int, vector signed int);
43096
43097     vector signed int vec_vsubsws (vector bool int, vector signed int);
43098     vector signed int vec_vsubsws (vector signed int, vector bool int);
43099     vector signed int vec_vsubsws (vector signed int, vector signed int);
43100
43101     vector unsigned int vec_vsubuws (vector bool int, vector unsigned int);
43102     vector unsigned int vec_vsubuws (vector unsigned int, vector bool int);
43103     vector unsigned int vec_vsubuws (vector unsigned int,
43104                                      vector unsigned int);
43105
43106     vector signed short vec_vsubshs (vector bool short,
43107                                      vector signed short);
43108     vector signed short vec_vsubshs (vector signed short,
43109                                      vector bool short);
43110     vector signed short vec_vsubshs (vector signed short,
43111                                      vector signed short);
43112
43113     vector unsigned short vec_vsubuhs (vector bool short,
43114                                        vector unsigned short);
43115     vector unsigned short vec_vsubuhs (vector unsigned short,
43116                                        vector bool short);
43117     vector unsigned short vec_vsubuhs (vector unsigned short,
43118                                        vector unsigned short);
43119
43120     vector signed char vec_vsubsbs (vector bool char, vector signed char);
43121     vector signed char vec_vsubsbs (vector signed char, vector bool char);
43122     vector signed char vec_vsubsbs (vector signed char, vector signed char);
43123
43124     vector unsigned char vec_vsububs (vector bool char,
43125                                       vector unsigned char);
43126     vector unsigned char vec_vsububs (vector unsigned char,
43127                                       vector bool char);
43128     vector unsigned char vec_vsububs (vector unsigned char,
43129                                       vector unsigned char);
43130
43131     vector unsigned int vec_sum4s (vector unsigned char,
43132                                    vector unsigned int);
43133     vector signed int vec_sum4s (vector signed char, vector signed int);
43134     vector signed int vec_sum4s (vector signed short, vector signed int);
43135
43136     vector signed int vec_vsum4shs (vector signed short, vector signed int);
43137
43138     vector signed int vec_vsum4sbs (vector signed char, vector signed int);
43139
43140     vector unsigned int vec_vsum4ubs (vector unsigned char,
43141                                       vector unsigned int);
43142
43143     vector signed int vec_sum2s (vector signed int, vector signed int);
43144
43145     vector signed int vec_sums (vector signed int, vector signed int);
43146
43147     vector float vec_trunc (vector float);
43148
43149     vector signed short vec_unpackh (vector signed char);
43150     vector bool short vec_unpackh (vector bool char);
43151     vector signed int vec_unpackh (vector signed short);
43152     vector bool int vec_unpackh (vector bool short);
43153     vector unsigned int vec_unpackh (vector pixel);
43154
43155     vector bool int vec_vupkhsh (vector bool short);
43156     vector signed int vec_vupkhsh (vector signed short);
43157
43158     vector unsigned int vec_vupkhpx (vector pixel);
43159
43160     vector bool short vec_vupkhsb (vector bool char);
43161     vector signed short vec_vupkhsb (vector signed char);
43162
43163     vector signed short vec_unpackl (vector signed char);
43164     vector bool short vec_unpackl (vector bool char);
43165     vector unsigned int vec_unpackl (vector pixel);
43166     vector signed int vec_unpackl (vector signed short);
43167     vector bool int vec_unpackl (vector bool short);
43168
43169     vector unsigned int vec_vupklpx (vector pixel);
43170
43171     vector bool int vec_vupklsh (vector bool short);
43172     vector signed int vec_vupklsh (vector signed short);
43173
43174     vector bool short vec_vupklsb (vector bool char);
43175     vector signed short vec_vupklsb (vector signed char);
43176
43177     vector float vec_xor (vector float, vector float);
43178     vector float vec_xor (vector float, vector bool int);
43179     vector float vec_xor (vector bool int, vector float);
43180     vector bool int vec_xor (vector bool int, vector bool int);
43181     vector signed int vec_xor (vector bool int, vector signed int);
43182     vector signed int vec_xor (vector signed int, vector bool int);
43183     vector signed int vec_xor (vector signed int, vector signed int);
43184     vector unsigned int vec_xor (vector bool int, vector unsigned int);
43185     vector unsigned int vec_xor (vector unsigned int, vector bool int);
43186     vector unsigned int vec_xor (vector unsigned int, vector unsigned int);
43187     vector bool short vec_xor (vector bool short, vector bool short);
43188     vector signed short vec_xor (vector bool short, vector signed short);
43189     vector signed short vec_xor (vector signed short, vector bool short);
43190     vector signed short vec_xor (vector signed short, vector signed short);
43191     vector unsigned short vec_xor (vector bool short,
43192                                    vector unsigned short);
43193     vector unsigned short vec_xor (vector unsigned short,
43194                                    vector bool short);
43195     vector unsigned short vec_xor (vector unsigned short,
43196                                    vector unsigned short);
43197     vector signed char vec_xor (vector bool char, vector signed char);
43198     vector bool char vec_xor (vector bool char, vector bool char);
43199     vector signed char vec_xor (vector signed char, vector bool char);
43200     vector signed char vec_xor (vector signed char, vector signed char);
43201     vector unsigned char vec_xor (vector bool char, vector unsigned char);
43202     vector unsigned char vec_xor (vector unsigned char, vector bool char);
43203     vector unsigned char vec_xor (vector unsigned char,
43204                                   vector unsigned char);
43205
43206     int vec_all_eq (vector signed char, vector bool char);
43207     int vec_all_eq (vector signed char, vector signed char);
43208     int vec_all_eq (vector unsigned char, vector bool char);
43209     int vec_all_eq (vector unsigned char, vector unsigned char);
43210     int vec_all_eq (vector bool char, vector bool char);
43211     int vec_all_eq (vector bool char, vector unsigned char);
43212     int vec_all_eq (vector bool char, vector signed char);
43213     int vec_all_eq (vector signed short, vector bool short);
43214     int vec_all_eq (vector signed short, vector signed short);
43215     int vec_all_eq (vector unsigned short, vector bool short);
43216     int vec_all_eq (vector unsigned short, vector unsigned short);
43217     int vec_all_eq (vector bool short, vector bool short);
43218     int vec_all_eq (vector bool short, vector unsigned short);
43219     int vec_all_eq (vector bool short, vector signed short);
43220     int vec_all_eq (vector pixel, vector pixel);
43221     int vec_all_eq (vector signed int, vector bool int);
43222     int vec_all_eq (vector signed int, vector signed int);
43223     int vec_all_eq (vector unsigned int, vector bool int);
43224     int vec_all_eq (vector unsigned int, vector unsigned int);
43225     int vec_all_eq (vector bool int, vector bool int);
43226     int vec_all_eq (vector bool int, vector unsigned int);
43227     int vec_all_eq (vector bool int, vector signed int);
43228     int vec_all_eq (vector float, vector float);
43229
43230     int vec_all_ge (vector bool char, vector unsigned char);
43231     int vec_all_ge (vector unsigned char, vector bool char);
43232     int vec_all_ge (vector unsigned char, vector unsigned char);
43233     int vec_all_ge (vector bool char, vector signed char);
43234     int vec_all_ge (vector signed char, vector bool char);
43235     int vec_all_ge (vector signed char, vector signed char);
43236     int vec_all_ge (vector bool short, vector unsigned short);
43237     int vec_all_ge (vector unsigned short, vector bool short);
43238     int vec_all_ge (vector unsigned short, vector unsigned short);
43239     int vec_all_ge (vector signed short, vector signed short);
43240     int vec_all_ge (vector bool short, vector signed short);
43241     int vec_all_ge (vector signed short, vector bool short);
43242     int vec_all_ge (vector bool int, vector unsigned int);
43243     int vec_all_ge (vector unsigned int, vector bool int);
43244     int vec_all_ge (vector unsigned int, vector unsigned int);
43245     int vec_all_ge (vector bool int, vector signed int);
43246     int vec_all_ge (vector signed int, vector bool int);
43247     int vec_all_ge (vector signed int, vector signed int);
43248     int vec_all_ge (vector float, vector float);
43249
43250     int vec_all_gt (vector bool char, vector unsigned char);
43251     int vec_all_gt (vector unsigned char, vector bool char);
43252     int vec_all_gt (vector unsigned char, vector unsigned char);
43253     int vec_all_gt (vector bool char, vector signed char);
43254     int vec_all_gt (vector signed char, vector bool char);
43255     int vec_all_gt (vector signed char, vector signed char);
43256     int vec_all_gt (vector bool short, vector unsigned short);
43257     int vec_all_gt (vector unsigned short, vector bool short);
43258     int vec_all_gt (vector unsigned short, vector unsigned short);
43259     int vec_all_gt (vector bool short, vector signed short);
43260     int vec_all_gt (vector signed short, vector bool short);
43261     int vec_all_gt (vector signed short, vector signed short);
43262     int vec_all_gt (vector bool int, vector unsigned int);
43263     int vec_all_gt (vector unsigned int, vector bool int);
43264     int vec_all_gt (vector unsigned int, vector unsigned int);
43265     int vec_all_gt (vector bool int, vector signed int);
43266     int vec_all_gt (vector signed int, vector bool int);
43267     int vec_all_gt (vector signed int, vector signed int);
43268     int vec_all_gt (vector float, vector float);
43269
43270     int vec_all_in (vector float, vector float);
43271
43272     int vec_all_le (vector bool char, vector unsigned char);
43273     int vec_all_le (vector unsigned char, vector bool char);
43274     int vec_all_le (vector unsigned char, vector unsigned char);
43275     int vec_all_le (vector bool char, vector signed char);
43276     int vec_all_le (vector signed char, vector bool char);
43277     int vec_all_le (vector signed char, vector signed char);
43278     int vec_all_le (vector bool short, vector unsigned short);
43279     int vec_all_le (vector unsigned short, vector bool short);
43280     int vec_all_le (vector unsigned short, vector unsigned short);
43281     int vec_all_le (vector bool short, vector signed short);
43282     int vec_all_le (vector signed short, vector bool short);
43283     int vec_all_le (vector signed short, vector signed short);
43284     int vec_all_le (vector bool int, vector unsigned int);
43285     int vec_all_le (vector unsigned int, vector bool int);
43286     int vec_all_le (vector unsigned int, vector unsigned int);
43287     int vec_all_le (vector bool int, vector signed int);
43288     int vec_all_le (vector signed int, vector bool int);
43289     int vec_all_le (vector signed int, vector signed int);
43290     int vec_all_le (vector float, vector float);
43291
43292     int vec_all_lt (vector bool char, vector unsigned char);
43293     int vec_all_lt (vector unsigned char, vector bool char);
43294     int vec_all_lt (vector unsigned char, vector unsigned char);
43295     int vec_all_lt (vector bool char, vector signed char);
43296     int vec_all_lt (vector signed char, vector bool char);
43297     int vec_all_lt (vector signed char, vector signed char);
43298     int vec_all_lt (vector bool short, vector unsigned short);
43299     int vec_all_lt (vector unsigned short, vector bool short);
43300     int vec_all_lt (vector unsigned short, vector unsigned short);
43301     int vec_all_lt (vector bool short, vector signed short);
43302     int vec_all_lt (vector signed short, vector bool short);
43303     int vec_all_lt (vector signed short, vector signed short);
43304     int vec_all_lt (vector bool int, vector unsigned int);
43305     int vec_all_lt (vector unsigned int, vector bool int);
43306     int vec_all_lt (vector unsigned int, vector unsigned int);
43307     int vec_all_lt (vector bool int, vector signed int);
43308     int vec_all_lt (vector signed int, vector bool int);
43309     int vec_all_lt (vector signed int, vector signed int);
43310     int vec_all_lt (vector float, vector float);
43311
43312     int vec_all_nan (vector float);
43313
43314     int vec_all_ne (vector signed char, vector bool char);
43315     int vec_all_ne (vector signed char, vector signed char);
43316     int vec_all_ne (vector unsigned char, vector bool char);
43317     int vec_all_ne (vector unsigned char, vector unsigned char);
43318     int vec_all_ne (vector bool char, vector bool char);
43319     int vec_all_ne (vector bool char, vector unsigned char);
43320     int vec_all_ne (vector bool char, vector signed char);
43321     int vec_all_ne (vector signed short, vector bool short);
43322     int vec_all_ne (vector signed short, vector signed short);
43323     int vec_all_ne (vector unsigned short, vector bool short);
43324     int vec_all_ne (vector unsigned short, vector unsigned short);
43325     int vec_all_ne (vector bool short, vector bool short);
43326     int vec_all_ne (vector bool short, vector unsigned short);
43327     int vec_all_ne (vector bool short, vector signed short);
43328     int vec_all_ne (vector pixel, vector pixel);
43329     int vec_all_ne (vector signed int, vector bool int);
43330     int vec_all_ne (vector signed int, vector signed int);
43331     int vec_all_ne (vector unsigned int, vector bool int);
43332     int vec_all_ne (vector unsigned int, vector unsigned int);
43333     int vec_all_ne (vector bool int, vector bool int);
43334     int vec_all_ne (vector bool int, vector unsigned int);
43335     int vec_all_ne (vector bool int, vector signed int);
43336     int vec_all_ne (vector float, vector float);
43337
43338     int vec_all_nge (vector float, vector float);
43339
43340     int vec_all_ngt (vector float, vector float);
43341
43342     int vec_all_nle (vector float, vector float);
43343
43344     int vec_all_nlt (vector float, vector float);
43345
43346     int vec_all_numeric (vector float);
43347
43348     int vec_any_eq (vector signed char, vector bool char);
43349     int vec_any_eq (vector signed char, vector signed char);
43350     int vec_any_eq (vector unsigned char, vector bool char);
43351     int vec_any_eq (vector unsigned char, vector unsigned char);
43352     int vec_any_eq (vector bool char, vector bool char);
43353     int vec_any_eq (vector bool char, vector unsigned char);
43354     int vec_any_eq (vector bool char, vector signed char);
43355     int vec_any_eq (vector signed short, vector bool short);
43356     int vec_any_eq (vector signed short, vector signed short);
43357     int vec_any_eq (vector unsigned short, vector bool short);
43358     int vec_any_eq (vector unsigned short, vector unsigned short);
43359     int vec_any_eq (vector bool short, vector bool short);
43360     int vec_any_eq (vector bool short, vector unsigned short);
43361     int vec_any_eq (vector bool short, vector signed short);
43362     int vec_any_eq (vector pixel, vector pixel);
43363     int vec_any_eq (vector signed int, vector bool int);
43364     int vec_any_eq (vector signed int, vector signed int);
43365     int vec_any_eq (vector unsigned int, vector bool int);
43366     int vec_any_eq (vector unsigned int, vector unsigned int);
43367     int vec_any_eq (vector bool int, vector bool int);
43368     int vec_any_eq (vector bool int, vector unsigned int);
43369     int vec_any_eq (vector bool int, vector signed int);
43370     int vec_any_eq (vector float, vector float);
43371
43372     int vec_any_ge (vector signed char, vector bool char);
43373     int vec_any_ge (vector unsigned char, vector bool char);
43374     int vec_any_ge (vector unsigned char, vector unsigned char);
43375     int vec_any_ge (vector signed char, vector signed char);
43376     int vec_any_ge (vector bool char, vector unsigned char);
43377     int vec_any_ge (vector bool char, vector signed char);
43378     int vec_any_ge (vector unsigned short, vector bool short);
43379     int vec_any_ge (vector unsigned short, vector unsigned short);
43380     int vec_any_ge (vector signed short, vector signed short);
43381     int vec_any_ge (vector signed short, vector bool short);
43382     int vec_any_ge (vector bool short, vector unsigned short);
43383     int vec_any_ge (vector bool short, vector signed short);
43384     int vec_any_ge (vector signed int, vector bool int);
43385     int vec_any_ge (vector unsigned int, vector bool int);
43386     int vec_any_ge (vector unsigned int, vector unsigned int);
43387     int vec_any_ge (vector signed int, vector signed int);
43388     int vec_any_ge (vector bool int, vector unsigned int);
43389     int vec_any_ge (vector bool int, vector signed int);
43390     int vec_any_ge (vector float, vector float);
43391
43392     int vec_any_gt (vector bool char, vector unsigned char);
43393     int vec_any_gt (vector unsigned char, vector bool char);
43394     int vec_any_gt (vector unsigned char, vector unsigned char);
43395     int vec_any_gt (vector bool char, vector signed char);
43396     int vec_any_gt (vector signed char, vector bool char);
43397     int vec_any_gt (vector signed char, vector signed char);
43398     int vec_any_gt (vector bool short, vector unsigned short);
43399     int vec_any_gt (vector unsigned short, vector bool short);
43400     int vec_any_gt (vector unsigned short, vector unsigned short);
43401     int vec_any_gt (vector bool short, vector signed short);
43402     int vec_any_gt (vector signed short, vector bool short);
43403     int vec_any_gt (vector signed short, vector signed short);
43404     int vec_any_gt (vector bool int, vector unsigned int);
43405     int vec_any_gt (vector unsigned int, vector bool int);
43406     int vec_any_gt (vector unsigned int, vector unsigned int);
43407     int vec_any_gt (vector bool int, vector signed int);
43408     int vec_any_gt (vector signed int, vector bool int);
43409     int vec_any_gt (vector signed int, vector signed int);
43410     int vec_any_gt (vector float, vector float);
43411
43412     int vec_any_le (vector bool char, vector unsigned char);
43413     int vec_any_le (vector unsigned char, vector bool char);
43414     int vec_any_le (vector unsigned char, vector unsigned char);
43415     int vec_any_le (vector bool char, vector signed char);
43416     int vec_any_le (vector signed char, vector bool char);
43417     int vec_any_le (vector signed char, vector signed char);
43418     int vec_any_le (vector bool short, vector unsigned short);
43419     int vec_any_le (vector unsigned short, vector bool short);
43420     int vec_any_le (vector unsigned short, vector unsigned short);
43421     int vec_any_le (vector bool short, vector signed short);
43422     int vec_any_le (vector signed short, vector bool short);
43423     int vec_any_le (vector signed short, vector signed short);
43424     int vec_any_le (vector bool int, vector unsigned int);
43425     int vec_any_le (vector unsigned int, vector bool int);
43426     int vec_any_le (vector unsigned int, vector unsigned int);
43427     int vec_any_le (vector bool int, vector signed int);
43428     int vec_any_le (vector signed int, vector bool int);
43429     int vec_any_le (vector signed int, vector signed int);
43430     int vec_any_le (vector float, vector float);
43431
43432     int vec_any_lt (vector bool char, vector unsigned char);
43433     int vec_any_lt (vector unsigned char, vector bool char);
43434     int vec_any_lt (vector unsigned char, vector unsigned char);
43435     int vec_any_lt (vector bool char, vector signed char);
43436     int vec_any_lt (vector signed char, vector bool char);
43437     int vec_any_lt (vector signed char, vector signed char);
43438     int vec_any_lt (vector bool short, vector unsigned short);
43439     int vec_any_lt (vector unsigned short, vector bool short);
43440     int vec_any_lt (vector unsigned short, vector unsigned short);
43441     int vec_any_lt (vector bool short, vector signed short);
43442     int vec_any_lt (vector signed short, vector bool short);
43443     int vec_any_lt (vector signed short, vector signed short);
43444     int vec_any_lt (vector bool int, vector unsigned int);
43445     int vec_any_lt (vector unsigned int, vector bool int);
43446     int vec_any_lt (vector unsigned int, vector unsigned int);
43447     int vec_any_lt (vector bool int, vector signed int);
43448     int vec_any_lt (vector signed int, vector bool int);
43449     int vec_any_lt (vector signed int, vector signed int);
43450     int vec_any_lt (vector float, vector float);
43451
43452     int vec_any_nan (vector float);
43453
43454     int vec_any_ne (vector signed char, vector bool char);
43455     int vec_any_ne (vector signed char, vector signed char);
43456     int vec_any_ne (vector unsigned char, vector bool char);
43457     int vec_any_ne (vector unsigned char, vector unsigned char);
43458     int vec_any_ne (vector bool char, vector bool char);
43459     int vec_any_ne (vector bool char, vector unsigned char);
43460     int vec_any_ne (vector bool char, vector signed char);
43461     int vec_any_ne (vector signed short, vector bool short);
43462     int vec_any_ne (vector signed short, vector signed short);
43463     int vec_any_ne (vector unsigned short, vector bool short);
43464     int vec_any_ne (vector unsigned short, vector unsigned short);
43465     int vec_any_ne (vector bool short, vector bool short);
43466     int vec_any_ne (vector bool short, vector unsigned short);
43467     int vec_any_ne (vector bool short, vector signed short);
43468     int vec_any_ne (vector pixel, vector pixel);
43469     int vec_any_ne (vector signed int, vector bool int);
43470     int vec_any_ne (vector signed int, vector signed int);
43471     int vec_any_ne (vector unsigned int, vector bool int);
43472     int vec_any_ne (vector unsigned int, vector unsigned int);
43473     int vec_any_ne (vector bool int, vector bool int);
43474     int vec_any_ne (vector bool int, vector unsigned int);
43475     int vec_any_ne (vector bool int, vector signed int);
43476     int vec_any_ne (vector float, vector float);
43477
43478     int vec_any_nge (vector float, vector float);
43479
43480     int vec_any_ngt (vector float, vector float);
43481
43482     int vec_any_nle (vector float, vector float);
43483
43484     int vec_any_nlt (vector float, vector float);
43485
43486     int vec_any_numeric (vector float);
43487
43488     int vec_any_out (vector float, vector float);
43489
43490 If the vector/scalar (VSX) instruction set is available, the following
43491additional functions are available:
43492
43493     vector double vec_abs (vector double);
43494     vector double vec_add (vector double, vector double);
43495     vector double vec_and (vector double, vector double);
43496     vector double vec_and (vector double, vector bool long);
43497     vector double vec_and (vector bool long, vector double);
43498     vector double vec_andc (vector double, vector double);
43499     vector double vec_andc (vector double, vector bool long);
43500     vector double vec_andc (vector bool long, vector double);
43501     vector double vec_ceil (vector double);
43502     vector bool long vec_cmpeq (vector double, vector double);
43503     vector bool long vec_cmpge (vector double, vector double);
43504     vector bool long vec_cmpgt (vector double, vector double);
43505     vector bool long vec_cmple (vector double, vector double);
43506     vector bool long vec_cmplt (vector double, vector double);
43507     vector float vec_div (vector float, vector float);
43508     vector double vec_div (vector double, vector double);
43509     vector double vec_floor (vector double);
43510     vector double vec_ld (int, const vector double *);
43511     vector double vec_ld (int, const double *);
43512     vector double vec_ldl (int, const vector double *);
43513     vector double vec_ldl (int, const double *);
43514     vector unsigned char vec_lvsl (int, const volatile double *);
43515     vector unsigned char vec_lvsr (int, const volatile double *);
43516     vector double vec_madd (vector double, vector double, vector double);
43517     vector double vec_max (vector double, vector double);
43518     vector double vec_min (vector double, vector double);
43519     vector float vec_msub (vector float, vector float, vector float);
43520     vector double vec_msub (vector double, vector double, vector double);
43521     vector float vec_mul (vector float, vector float);
43522     vector double vec_mul (vector double, vector double);
43523     vector float vec_nearbyint (vector float);
43524     vector double vec_nearbyint (vector double);
43525     vector float vec_nmadd (vector float, vector float, vector float);
43526     vector double vec_nmadd (vector double, vector double, vector double);
43527     vector double vec_nmsub (vector double, vector double, vector double);
43528     vector double vec_nor (vector double, vector double);
43529     vector double vec_or (vector double, vector double);
43530     vector double vec_or (vector double, vector bool long);
43531     vector double vec_or (vector bool long, vector double);
43532     vector double vec_perm (vector double,
43533                             vector double,
43534                             vector unsigned char);
43535     vector double vec_rint (vector double);
43536     vector double vec_recip (vector double, vector double);
43537     vector double vec_rsqrt (vector double);
43538     vector double vec_rsqrte (vector double);
43539     vector double vec_sel (vector double, vector double, vector bool long);
43540     vector double vec_sel (vector double, vector double, vector unsigned long);
43541     vector double vec_sub (vector double, vector double);
43542     vector float vec_sqrt (vector float);
43543     vector double vec_sqrt (vector double);
43544     void vec_st (vector double, int, vector double *);
43545     void vec_st (vector double, int, double *);
43546     vector double vec_trunc (vector double);
43547     vector double vec_xor (vector double, vector double);
43548     vector double vec_xor (vector double, vector bool long);
43549     vector double vec_xor (vector bool long, vector double);
43550     int vec_all_eq (vector double, vector double);
43551     int vec_all_ge (vector double, vector double);
43552     int vec_all_gt (vector double, vector double);
43553     int vec_all_le (vector double, vector double);
43554     int vec_all_lt (vector double, vector double);
43555     int vec_all_nan (vector double);
43556     int vec_all_ne (vector double, vector double);
43557     int vec_all_nge (vector double, vector double);
43558     int vec_all_ngt (vector double, vector double);
43559     int vec_all_nle (vector double, vector double);
43560     int vec_all_nlt (vector double, vector double);
43561     int vec_all_numeric (vector double);
43562     int vec_any_eq (vector double, vector double);
43563     int vec_any_ge (vector double, vector double);
43564     int vec_any_gt (vector double, vector double);
43565     int vec_any_le (vector double, vector double);
43566     int vec_any_lt (vector double, vector double);
43567     int vec_any_nan (vector double);
43568     int vec_any_ne (vector double, vector double);
43569     int vec_any_nge (vector double, vector double);
43570     int vec_any_ngt (vector double, vector double);
43571     int vec_any_nle (vector double, vector double);
43572     int vec_any_nlt (vector double, vector double);
43573     int vec_any_numeric (vector double);
43574
43575     vector double vec_vsx_ld (int, const vector double *);
43576     vector double vec_vsx_ld (int, const double *);
43577     vector float vec_vsx_ld (int, const vector float *);
43578     vector float vec_vsx_ld (int, const float *);
43579     vector bool int vec_vsx_ld (int, const vector bool int *);
43580     vector signed int vec_vsx_ld (int, const vector signed int *);
43581     vector signed int vec_vsx_ld (int, const int *);
43582     vector signed int vec_vsx_ld (int, const long *);
43583     vector unsigned int vec_vsx_ld (int, const vector unsigned int *);
43584     vector unsigned int vec_vsx_ld (int, const unsigned int *);
43585     vector unsigned int vec_vsx_ld (int, const unsigned long *);
43586     vector bool short vec_vsx_ld (int, const vector bool short *);
43587     vector pixel vec_vsx_ld (int, const vector pixel *);
43588     vector signed short vec_vsx_ld (int, const vector signed short *);
43589     vector signed short vec_vsx_ld (int, const short *);
43590     vector unsigned short vec_vsx_ld (int, const vector unsigned short *);
43591     vector unsigned short vec_vsx_ld (int, const unsigned short *);
43592     vector bool char vec_vsx_ld (int, const vector bool char *);
43593     vector signed char vec_vsx_ld (int, const vector signed char *);
43594     vector signed char vec_vsx_ld (int, const signed char *);
43595     vector unsigned char vec_vsx_ld (int, const vector unsigned char *);
43596     vector unsigned char vec_vsx_ld (int, const unsigned char *);
43597
43598     void vec_vsx_st (vector double, int, vector double *);
43599     void vec_vsx_st (vector double, int, double *);
43600     void vec_vsx_st (vector float, int, vector float *);
43601     void vec_vsx_st (vector float, int, float *);
43602     void vec_vsx_st (vector signed int, int, vector signed int *);
43603     void vec_vsx_st (vector signed int, int, int *);
43604     void vec_vsx_st (vector unsigned int, int, vector unsigned int *);
43605     void vec_vsx_st (vector unsigned int, int, unsigned int *);
43606     void vec_vsx_st (vector bool int, int, vector bool int *);
43607     void vec_vsx_st (vector bool int, int, unsigned int *);
43608     void vec_vsx_st (vector bool int, int, int *);
43609     void vec_vsx_st (vector signed short, int, vector signed short *);
43610     void vec_vsx_st (vector signed short, int, short *);
43611     void vec_vsx_st (vector unsigned short, int, vector unsigned short *);
43612     void vec_vsx_st (vector unsigned short, int, unsigned short *);
43613     void vec_vsx_st (vector bool short, int, vector bool short *);
43614     void vec_vsx_st (vector bool short, int, unsigned short *);
43615     void vec_vsx_st (vector pixel, int, vector pixel *);
43616     void vec_vsx_st (vector pixel, int, unsigned short *);
43617     void vec_vsx_st (vector pixel, int, short *);
43618     void vec_vsx_st (vector bool short, int, short *);
43619     void vec_vsx_st (vector signed char, int, vector signed char *);
43620     void vec_vsx_st (vector signed char, int, signed char *);
43621     void vec_vsx_st (vector unsigned char, int, vector unsigned char *);
43622     void vec_vsx_st (vector unsigned char, int, unsigned char *);
43623     void vec_vsx_st (vector bool char, int, vector bool char *);
43624     void vec_vsx_st (vector bool char, int, unsigned char *);
43625     void vec_vsx_st (vector bool char, int, signed char *);
43626
43627     vector double vec_xxpermdi (vector double, vector double, int);
43628     vector float vec_xxpermdi (vector float, vector float, int);
43629     vector long long vec_xxpermdi (vector long long, vector long long, int);
43630     vector unsigned long long vec_xxpermdi (vector unsigned long long,
43631                                             vector unsigned long long, int);
43632     vector int vec_xxpermdi (vector int, vector int, int);
43633     vector unsigned int vec_xxpermdi (vector unsigned int,
43634                                       vector unsigned int, int);
43635     vector short vec_xxpermdi (vector short, vector short, int);
43636     vector unsigned short vec_xxpermdi (vector unsigned short,
43637                                         vector unsigned short, int);
43638     vector signed char vec_xxpermdi (vector signed char, vector signed char, int);
43639     vector unsigned char vec_xxpermdi (vector unsigned char,
43640                                        vector unsigned char, int);
43641
43642     vector double vec_xxsldi (vector double, vector double, int);
43643     vector float vec_xxsldi (vector float, vector float, int);
43644     vector long long vec_xxsldi (vector long long, vector long long, int);
43645     vector unsigned long long vec_xxsldi (vector unsigned long long,
43646                                           vector unsigned long long, int);
43647     vector int vec_xxsldi (vector int, vector int, int);
43648     vector unsigned int vec_xxsldi (vector unsigned int, vector unsigned int, int);
43649     vector short vec_xxsldi (vector short, vector short, int);
43650     vector unsigned short vec_xxsldi (vector unsigned short,
43651                                       vector unsigned short, int);
43652     vector signed char vec_xxsldi (vector signed char, vector signed char, int);
43653     vector unsigned char vec_xxsldi (vector unsigned char,
43654                                      vector unsigned char, int);
43655
43656 Note that the 'vec_ld' and 'vec_st' built-in functions always generate
43657the AltiVec 'LVX' and 'STVX' instructions even if the VSX instruction
43658set is available.  The 'vec_vsx_ld' and 'vec_vsx_st' built-in functions
43659always generate the VSX 'LXVD2X', 'LXVW4X', 'STXVD2X', and 'STXVW4X'
43660instructions.
43661
43662 If the ISA 2.07 additions to the vector/scalar (power8-vector)
43663instruction set is available, the following additional functions are
43664available for both 32-bit and 64-bit targets.  For 64-bit targets, you
43665can use VECTOR LONG instead of VECTOR LONG LONG, VECTOR BOOL LONG
43666instead of VECTOR BOOL LONG LONG, and VECTOR UNSIGNED LONG instead of
43667VECTOR UNSIGNED LONG LONG.
43668
43669     vector long long vec_abs (vector long long);
43670
43671     vector long long vec_add (vector long long, vector long long);
43672     vector unsigned long long vec_add (vector unsigned long long,
43673                                        vector unsigned long long);
43674
43675     int vec_all_eq (vector long long, vector long long);
43676     int vec_all_ge (vector long long, vector long long);
43677     int vec_all_gt (vector long long, vector long long);
43678     int vec_all_le (vector long long, vector long long);
43679     int vec_all_lt (vector long long, vector long long);
43680     int vec_all_ne (vector long long, vector long long);
43681     int vec_any_eq (vector long long, vector long long);
43682     int vec_any_ge (vector long long, vector long long);
43683     int vec_any_gt (vector long long, vector long long);
43684     int vec_any_le (vector long long, vector long long);
43685     int vec_any_lt (vector long long, vector long long);
43686     int vec_any_ne (vector long long, vector long long);
43687
43688     vector long long vec_eqv (vector long long, vector long long);
43689     vector long long vec_eqv (vector bool long long, vector long long);
43690     vector long long vec_eqv (vector long long, vector bool long long);
43691     vector unsigned long long vec_eqv (vector unsigned long long,
43692                                        vector unsigned long long);
43693     vector unsigned long long vec_eqv (vector bool long long,
43694                                        vector unsigned long long);
43695     vector unsigned long long vec_eqv (vector unsigned long long,
43696                                        vector bool long long);
43697     vector int vec_eqv (vector int, vector int);
43698     vector int vec_eqv (vector bool int, vector int);
43699     vector int vec_eqv (vector int, vector bool int);
43700     vector unsigned int vec_eqv (vector unsigned int, vector unsigned int);
43701     vector unsigned int vec_eqv (vector bool unsigned int,
43702                                  vector unsigned int);
43703     vector unsigned int vec_eqv (vector unsigned int,
43704                                  vector bool unsigned int);
43705     vector short vec_eqv (vector short, vector short);
43706     vector short vec_eqv (vector bool short, vector short);
43707     vector short vec_eqv (vector short, vector bool short);
43708     vector unsigned short vec_eqv (vector unsigned short, vector unsigned short);
43709     vector unsigned short vec_eqv (vector bool unsigned short,
43710                                    vector unsigned short);
43711     vector unsigned short vec_eqv (vector unsigned short,
43712                                    vector bool unsigned short);
43713     vector signed char vec_eqv (vector signed char, vector signed char);
43714     vector signed char vec_eqv (vector bool signed char, vector signed char);
43715     vector signed char vec_eqv (vector signed char, vector bool signed char);
43716     vector unsigned char vec_eqv (vector unsigned char, vector unsigned char);
43717     vector unsigned char vec_eqv (vector bool unsigned char, vector unsigned char);
43718     vector unsigned char vec_eqv (vector unsigned char, vector bool unsigned char);
43719
43720     vector long long vec_max (vector long long, vector long long);
43721     vector unsigned long long vec_max (vector unsigned long long,
43722                                        vector unsigned long long);
43723
43724     vector long long vec_min (vector long long, vector long long);
43725     vector unsigned long long vec_min (vector unsigned long long,
43726                                        vector unsigned long long);
43727
43728     vector long long vec_nand (vector long long, vector long long);
43729     vector long long vec_nand (vector bool long long, vector long long);
43730     vector long long vec_nand (vector long long, vector bool long long);
43731     vector unsigned long long vec_nand (vector unsigned long long,
43732                                         vector unsigned long long);
43733     vector unsigned long long vec_nand (vector bool long long,
43734                                        vector unsigned long long);
43735     vector unsigned long long vec_nand (vector unsigned long long,
43736                                         vector bool long long);
43737     vector int vec_nand (vector int, vector int);
43738     vector int vec_nand (vector bool int, vector int);
43739     vector int vec_nand (vector int, vector bool int);
43740     vector unsigned int vec_nand (vector unsigned int, vector unsigned int);
43741     vector unsigned int vec_nand (vector bool unsigned int,
43742                                   vector unsigned int);
43743     vector unsigned int vec_nand (vector unsigned int,
43744                                   vector bool unsigned int);
43745     vector short vec_nand (vector short, vector short);
43746     vector short vec_nand (vector bool short, vector short);
43747     vector short vec_nand (vector short, vector bool short);
43748     vector unsigned short vec_nand (vector unsigned short, vector unsigned short);
43749     vector unsigned short vec_nand (vector bool unsigned short,
43750                                     vector unsigned short);
43751     vector unsigned short vec_nand (vector unsigned short,
43752                                     vector bool unsigned short);
43753     vector signed char vec_nand (vector signed char, vector signed char);
43754     vector signed char vec_nand (vector bool signed char, vector signed char);
43755     vector signed char vec_nand (vector signed char, vector bool signed char);
43756     vector unsigned char vec_nand (vector unsigned char, vector unsigned char);
43757     vector unsigned char vec_nand (vector bool unsigned char, vector unsigned char);
43758     vector unsigned char vec_nand (vector unsigned char, vector bool unsigned char);
43759
43760     vector long long vec_orc (vector long long, vector long long);
43761     vector long long vec_orc (vector bool long long, vector long long);
43762     vector long long vec_orc (vector long long, vector bool long long);
43763     vector unsigned long long vec_orc (vector unsigned long long,
43764                                        vector unsigned long long);
43765     vector unsigned long long vec_orc (vector bool long long,
43766                                        vector unsigned long long);
43767     vector unsigned long long vec_orc (vector unsigned long long,
43768                                        vector bool long long);
43769     vector int vec_orc (vector int, vector int);
43770     vector int vec_orc (vector bool int, vector int);
43771     vector int vec_orc (vector int, vector bool int);
43772     vector unsigned int vec_orc (vector unsigned int, vector unsigned int);
43773     vector unsigned int vec_orc (vector bool unsigned int,
43774                                  vector unsigned int);
43775     vector unsigned int vec_orc (vector unsigned int,
43776                                  vector bool unsigned int);
43777     vector short vec_orc (vector short, vector short);
43778     vector short vec_orc (vector bool short, vector short);
43779     vector short vec_orc (vector short, vector bool short);
43780     vector unsigned short vec_orc (vector unsigned short, vector unsigned short);
43781     vector unsigned short vec_orc (vector bool unsigned short,
43782                                    vector unsigned short);
43783     vector unsigned short vec_orc (vector unsigned short,
43784                                    vector bool unsigned short);
43785     vector signed char vec_orc (vector signed char, vector signed char);
43786     vector signed char vec_orc (vector bool signed char, vector signed char);
43787     vector signed char vec_orc (vector signed char, vector bool signed char);
43788     vector unsigned char vec_orc (vector unsigned char, vector unsigned char);
43789     vector unsigned char vec_orc (vector bool unsigned char, vector unsigned char);
43790     vector unsigned char vec_orc (vector unsigned char, vector bool unsigned char);
43791
43792     vector int vec_pack (vector long long, vector long long);
43793     vector unsigned int vec_pack (vector unsigned long long,
43794                                   vector unsigned long long);
43795     vector bool int vec_pack (vector bool long long, vector bool long long);
43796
43797     vector int vec_packs (vector long long, vector long long);
43798     vector unsigned int vec_packs (vector unsigned long long,
43799                                    vector unsigned long long);
43800
43801     vector unsigned int vec_packsu (vector long long, vector long long);
43802
43803     vector long long vec_rl (vector long long,
43804                              vector unsigned long long);
43805     vector long long vec_rl (vector unsigned long long,
43806                              vector unsigned long long);
43807
43808     vector long long vec_sl (vector long long, vector unsigned long long);
43809     vector long long vec_sl (vector unsigned long long,
43810                              vector unsigned long long);
43811
43812     vector long long vec_sr (vector long long, vector unsigned long long);
43813     vector unsigned long long char vec_sr (vector unsigned long long,
43814                                            vector unsigned long long);
43815
43816     vector long long vec_sra (vector long long, vector unsigned long long);
43817     vector unsigned long long vec_sra (vector unsigned long long,
43818                                        vector unsigned long long);
43819
43820     vector long long vec_sub (vector long long, vector long long);
43821     vector unsigned long long vec_sub (vector unsigned long long,
43822                                        vector unsigned long long);
43823
43824     vector long long vec_unpackh (vector int);
43825     vector unsigned long long vec_unpackh (vector unsigned int);
43826
43827     vector long long vec_unpackl (vector int);
43828     vector unsigned long long vec_unpackl (vector unsigned int);
43829
43830     vector long long vec_vaddudm (vector long long, vector long long);
43831     vector long long vec_vaddudm (vector bool long long, vector long long);
43832     vector long long vec_vaddudm (vector long long, vector bool long long);
43833     vector unsigned long long vec_vaddudm (vector unsigned long long,
43834                                            vector unsigned long long);
43835     vector unsigned long long vec_vaddudm (vector bool unsigned long long,
43836                                            vector unsigned long long);
43837     vector unsigned long long vec_vaddudm (vector unsigned long long,
43838                                            vector bool unsigned long long);
43839
43840     vector long long vec_vbpermq (vector signed char, vector signed char);
43841     vector long long vec_vbpermq (vector unsigned char, vector unsigned char);
43842
43843     vector long long vec_vclz (vector long long);
43844     vector unsigned long long vec_vclz (vector unsigned long long);
43845     vector int vec_vclz (vector int);
43846     vector unsigned int vec_vclz (vector int);
43847     vector short vec_vclz (vector short);
43848     vector unsigned short vec_vclz (vector unsigned short);
43849     vector signed char vec_vclz (vector signed char);
43850     vector unsigned char vec_vclz (vector unsigned char);
43851
43852     vector signed char vec_vclzb (vector signed char);
43853     vector unsigned char vec_vclzb (vector unsigned char);
43854
43855     vector long long vec_vclzd (vector long long);
43856     vector unsigned long long vec_vclzd (vector unsigned long long);
43857
43858     vector short vec_vclzh (vector short);
43859     vector unsigned short vec_vclzh (vector unsigned short);
43860
43861     vector int vec_vclzw (vector int);
43862     vector unsigned int vec_vclzw (vector int);
43863
43864     vector signed char vec_vgbbd (vector signed char);
43865     vector unsigned char vec_vgbbd (vector unsigned char);
43866
43867     vector long long vec_vmaxsd (vector long long, vector long long);
43868
43869     vector unsigned long long vec_vmaxud (vector unsigned long long,
43870                                           unsigned vector long long);
43871
43872     vector long long vec_vminsd (vector long long, vector long long);
43873
43874     vector unsigned long long vec_vminud (vector long long,
43875                                           vector long long);
43876
43877     vector int vec_vpksdss (vector long long, vector long long);
43878     vector unsigned int vec_vpksdss (vector long long, vector long long);
43879
43880     vector unsigned int vec_vpkudus (vector unsigned long long,
43881                                      vector unsigned long long);
43882
43883     vector int vec_vpkudum (vector long long, vector long long);
43884     vector unsigned int vec_vpkudum (vector unsigned long long,
43885                                      vector unsigned long long);
43886     vector bool int vec_vpkudum (vector bool long long, vector bool long long);
43887
43888     vector long long vec_vpopcnt (vector long long);
43889     vector unsigned long long vec_vpopcnt (vector unsigned long long);
43890     vector int vec_vpopcnt (vector int);
43891     vector unsigned int vec_vpopcnt (vector int);
43892     vector short vec_vpopcnt (vector short);
43893     vector unsigned short vec_vpopcnt (vector unsigned short);
43894     vector signed char vec_vpopcnt (vector signed char);
43895     vector unsigned char vec_vpopcnt (vector unsigned char);
43896
43897     vector signed char vec_vpopcntb (vector signed char);
43898     vector unsigned char vec_vpopcntb (vector unsigned char);
43899
43900     vector long long vec_vpopcntd (vector long long);
43901     vector unsigned long long vec_vpopcntd (vector unsigned long long);
43902
43903     vector short vec_vpopcnth (vector short);
43904     vector unsigned short vec_vpopcnth (vector unsigned short);
43905
43906     vector int vec_vpopcntw (vector int);
43907     vector unsigned int vec_vpopcntw (vector int);
43908
43909     vector long long vec_vrld (vector long long, vector unsigned long long);
43910     vector unsigned long long vec_vrld (vector unsigned long long,
43911                                         vector unsigned long long);
43912
43913     vector long long vec_vsld (vector long long, vector unsigned long long);
43914     vector long long vec_vsld (vector unsigned long long,
43915                                vector unsigned long long);
43916
43917     vector long long vec_vsrad (vector long long, vector unsigned long long);
43918     vector unsigned long long vec_vsrad (vector unsigned long long,
43919                                          vector unsigned long long);
43920
43921     vector long long vec_vsrd (vector long long, vector unsigned long long);
43922     vector unsigned long long char vec_vsrd (vector unsigned long long,
43923                                              vector unsigned long long);
43924
43925     vector long long vec_vsubudm (vector long long, vector long long);
43926     vector long long vec_vsubudm (vector bool long long, vector long long);
43927     vector long long vec_vsubudm (vector long long, vector bool long long);
43928     vector unsigned long long vec_vsubudm (vector unsigned long long,
43929                                            vector unsigned long long);
43930     vector unsigned long long vec_vsubudm (vector bool long long,
43931                                            vector unsigned long long);
43932     vector unsigned long long vec_vsubudm (vector unsigned long long,
43933                                            vector bool long long);
43934
43935     vector long long vec_vupkhsw (vector int);
43936     vector unsigned long long vec_vupkhsw (vector unsigned int);
43937
43938     vector long long vec_vupklsw (vector int);
43939     vector unsigned long long vec_vupklsw (vector int);
43940
43941 If the ISA 2.07 additions to the vector/scalar (power8-vector)
43942instruction set is available, the following additional functions are
43943available for 64-bit targets.  New vector types (VECTOR __INT128_T and
43944VECTOR __UINT128_T) are available to hold the __INT128_T and __UINT128_T
43945types to use these builtins.
43946
43947 The normal vector extract, and set operations work on VECTOR __INT128_T
43948and VECTOR __UINT128_T types, but the index value must be 0.
43949
43950     vector __int128_t vec_vaddcuq (vector __int128_t, vector __int128_t);
43951     vector __uint128_t vec_vaddcuq (vector __uint128_t, vector __uint128_t);
43952
43953     vector __int128_t vec_vadduqm (vector __int128_t, vector __int128_t);
43954     vector __uint128_t vec_vadduqm (vector __uint128_t, vector __uint128_t);
43955
43956     vector __int128_t vec_vaddecuq (vector __int128_t, vector __int128_t,
43957                                     vector __int128_t);
43958     vector __uint128_t vec_vaddecuq (vector __uint128_t, vector __uint128_t,
43959                                      vector __uint128_t);
43960
43961     vector __int128_t vec_vaddeuqm (vector __int128_t, vector __int128_t,
43962                                     vector __int128_t);
43963     vector __uint128_t vec_vaddeuqm (vector __uint128_t, vector __uint128_t,
43964                                      vector __uint128_t);
43965
43966     vector __int128_t vec_vsubecuq (vector __int128_t, vector __int128_t,
43967                                     vector __int128_t);
43968     vector __uint128_t vec_vsubecuq (vector __uint128_t, vector __uint128_t,
43969                                      vector __uint128_t);
43970
43971     vector __int128_t vec_vsubeuqm (vector __int128_t, vector __int128_t,
43972                                     vector __int128_t);
43973     vector __uint128_t vec_vsubeuqm (vector __uint128_t, vector __uint128_t,
43974                                      vector __uint128_t);
43975
43976     vector __int128_t vec_vsubcuq (vector __int128_t, vector __int128_t);
43977     vector __uint128_t vec_vsubcuq (vector __uint128_t, vector __uint128_t);
43978
43979     __int128_t vec_vsubuqm (__int128_t, __int128_t);
43980     __uint128_t vec_vsubuqm (__uint128_t, __uint128_t);
43981
43982     vector __int128_t __builtin_bcdadd (vector __int128_t, vector__int128_t);
43983     int __builtin_bcdadd_lt (vector __int128_t, vector__int128_t);
43984     int __builtin_bcdadd_eq (vector __int128_t, vector__int128_t);
43985     int __builtin_bcdadd_gt (vector __int128_t, vector__int128_t);
43986     int __builtin_bcdadd_ov (vector __int128_t, vector__int128_t);
43987     vector __int128_t bcdsub (vector __int128_t, vector__int128_t);
43988     int __builtin_bcdsub_lt (vector __int128_t, vector__int128_t);
43989     int __builtin_bcdsub_eq (vector __int128_t, vector__int128_t);
43990     int __builtin_bcdsub_gt (vector __int128_t, vector__int128_t);
43991     int __builtin_bcdsub_ov (vector __int128_t, vector__int128_t);
43992
43993 If the cryptographic instructions are enabled ('-mcrypto' or
43994'-mcpu=power8'), the following builtins are enabled.
43995
43996     vector unsigned long long __builtin_crypto_vsbox (vector unsigned long long);
43997
43998     vector unsigned long long __builtin_crypto_vcipher (vector unsigned long long,
43999                                                         vector unsigned long long);
44000
44001     vector unsigned long long __builtin_crypto_vcipherlast
44002                                          (vector unsigned long long,
44003                                           vector unsigned long long);
44004
44005     vector unsigned long long __builtin_crypto_vncipher (vector unsigned long long,
44006                                                          vector unsigned long long);
44007
44008     vector unsigned long long __builtin_crypto_vncipherlast
44009                                          (vector unsigned long long,
44010                                           vector unsigned long long);
44011
44012     vector unsigned char __builtin_crypto_vpermxor (vector unsigned char,
44013                                                     vector unsigned char,
44014                                                     vector unsigned char);
44015
44016     vector unsigned short __builtin_crypto_vpermxor (vector unsigned short,
44017                                                      vector unsigned short,
44018                                                      vector unsigned short);
44019
44020     vector unsigned int __builtin_crypto_vpermxor (vector unsigned int,
44021                                                    vector unsigned int,
44022                                                    vector unsigned int);
44023
44024     vector unsigned long long __builtin_crypto_vpermxor (vector unsigned long long,
44025                                                          vector unsigned long long,
44026                                                          vector unsigned long long);
44027
44028     vector unsigned char __builtin_crypto_vpmsumb (vector unsigned char,
44029                                                    vector unsigned char);
44030
44031     vector unsigned short __builtin_crypto_vpmsumb (vector unsigned short,
44032                                                     vector unsigned short);
44033
44034     vector unsigned int __builtin_crypto_vpmsumb (vector unsigned int,
44035                                                   vector unsigned int);
44036
44037     vector unsigned long long __builtin_crypto_vpmsumb (vector unsigned long long,
44038                                                         vector unsigned long long);
44039
44040     vector unsigned long long __builtin_crypto_vshasigmad
44041                                    (vector unsigned long long, int, int);
44042
44043     vector unsigned int __builtin_crypto_vshasigmaw (vector unsigned int,
44044                                                      int, int);
44045
44046 The second argument to the __BUILTIN_CRYPTO_VSHASIGMAD and
44047__BUILTIN_CRYPTO_VSHASIGMAW builtin functions must be a constant integer
44048that is 0 or 1.  The third argument to these builtin functions must be a
44049constant integer in the range of 0 to 15.
44050
44051
44052File: 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
44053
440546.57.22 PowerPC Hardware Transactional Memory Built-in Functions
44055----------------------------------------------------------------
44056
44057GCC provides two interfaces for accessing the Hardware Transactional
44058Memory (HTM) instructions available on some of the PowerPC family of
44059prcoessors (eg, POWER8).  The two interfaces come in a low level
44060interface, consisting of built-in functions specific to PowerPC and a
44061higher level interface consisting of inline functions that are common
44062between PowerPC and S/390.
44063
440646.57.22.1 PowerPC HTM Low Level Built-in Functions
44065..................................................
44066
44067The following low level built-in functions are available with '-mhtm' or
44068'-mcpu=CPU' where CPU is 'power8' or later.  They all generate the
44069machine instruction that is part of the name.
44070
44071 The HTM built-ins return true or false depending on their success and
44072their arguments match exactly the type and order of the associated
44073hardware instruction's operands.  Refer to the ISA manual for a
44074description of each instruction's operands.
44075
44076     unsigned int __builtin_tbegin (unsigned int)
44077     unsigned int __builtin_tend (unsigned int)
44078
44079     unsigned int __builtin_tabort (unsigned int)
44080     unsigned int __builtin_tabortdc (unsigned int, unsigned int, unsigned int)
44081     unsigned int __builtin_tabortdci (unsigned int, unsigned int, int)
44082     unsigned int __builtin_tabortwc (unsigned int, unsigned int, unsigned int)
44083     unsigned int __builtin_tabortwci (unsigned int, unsigned int, int)
44084
44085     unsigned int __builtin_tcheck (unsigned int)
44086     unsigned int __builtin_treclaim (unsigned int)
44087     unsigned int __builtin_trechkpt (void)
44088     unsigned int __builtin_tsr (unsigned int)
44089
44090 In addition to the above HTM built-ins, we have added built-ins for
44091some common extended mnemonics of the HTM instructions:
44092
44093     unsigned int __builtin_tendall (void)
44094     unsigned int __builtin_tresume (void)
44095     unsigned int __builtin_tsuspend (void)
44096
44097 The following set of built-in functions are available to gain access to
44098the HTM specific special purpose registers.
44099
44100     unsigned long __builtin_get_texasr (void)
44101     unsigned long __builtin_get_texasru (void)
44102     unsigned long __builtin_get_tfhar (void)
44103     unsigned long __builtin_get_tfiar (void)
44104
44105     void __builtin_set_texasr (unsigned long);
44106     void __builtin_set_texasru (unsigned long);
44107     void __builtin_set_tfhar (unsigned long);
44108     void __builtin_set_tfiar (unsigned long);
44109
44110 Example usage of these low level built-in functions may look like:
44111
44112     #include <htmintrin.h>
44113
44114     int num_retries = 10;
44115
44116     while (1)
44117       {
44118         if (__builtin_tbegin (0))
44119           {
44120             /* Transaction State Initiated.  */
44121             if (is_locked (lock))
44122               __builtin_tabort (0);
44123             ... transaction code...
44124             __builtin_tend (0);
44125             break;
44126           }
44127         else
44128           {
44129             /* Transaction State Failed.  Use locks if the transaction
44130                failure is "persistent" or we've tried too many times.  */
44131             if (num_retries-- <= 0
44132                 || _TEXASRU_FAILURE_PERSISTENT (__builtin_get_texasru ()))
44133               {
44134                 acquire_lock (lock);
44135                 ... non transactional fallback path...
44136                 release_lock (lock);
44137                 break;
44138               }
44139           }
44140       }
44141
44142 One final built-in function has been added that returns the value of
44143the 2-bit Transaction State field of the Machine Status Register (MSR)
44144as stored in 'CR0'.
44145
44146     unsigned long __builtin_ttest (void)
44147
44148 This built-in can be used to determine the current transaction state
44149using the following code example:
44150
44151     #include <htmintrin.h>
44152
44153     unsigned char tx_state = _HTM_STATE (__builtin_ttest ());
44154
44155     if (tx_state == _HTM_TRANSACTIONAL)
44156       {
44157         /* Code to use in transactional state.  */
44158       }
44159     else if (tx_state == _HTM_NONTRANSACTIONAL)
44160       {
44161         /* Code to use in non-transactional state.  */
44162       }
44163     else if (tx_state == _HTM_SUSPENDED)
44164       {
44165         /* Code to use in transaction suspended state.  */
44166       }
44167
441686.57.22.2 PowerPC HTM High Level Inline Functions
44169.................................................
44170
44171The following high level HTM interface is made available by including
44172'<htmxlintrin.h>' and using '-mhtm' or '-mcpu=CPU' where CPU is 'power8'
44173or later.  This interface is common between PowerPC and S/390, allowing
44174users to write one HTM source implementation that can be compiled and
44175executed on either system.
44176
44177     long __TM_simple_begin (void)
44178     long __TM_begin (void* const TM_buff)
44179     long __TM_end (void)
44180     void __TM_abort (void)
44181     void __TM_named_abort (unsigned char const code)
44182     void __TM_resume (void)
44183     void __TM_suspend (void)
44184
44185     long __TM_is_user_abort (void* const TM_buff)
44186     long __TM_is_named_user_abort (void* const TM_buff, unsigned char *code)
44187     long __TM_is_illegal (void* const TM_buff)
44188     long __TM_is_footprint_exceeded (void* const TM_buff)
44189     long __TM_nesting_depth (void* const TM_buff)
44190     long __TM_is_nested_too_deep(void* const TM_buff)
44191     long __TM_is_conflict(void* const TM_buff)
44192     long __TM_is_failure_persistent(void* const TM_buff)
44193     long __TM_failure_address(void* const TM_buff)
44194     long long __TM_failure_code(void* const TM_buff)
44195
44196 Using these common set of HTM inline functions, we can create a more
44197portable version of the HTM example in the previous section that will
44198work on either PowerPC or S/390:
44199
44200     #include <htmxlintrin.h>
44201
44202     int num_retries = 10;
44203     TM_buff_type TM_buff;
44204
44205     while (1)
44206       {
44207         if (__TM_begin (TM_buff))
44208           {
44209             /* Transaction State Initiated.  */
44210             if (is_locked (lock))
44211               __TM_abort ();
44212             ... transaction code...
44213             __TM_end ();
44214             break;
44215           }
44216         else
44217           {
44218             /* Transaction State Failed.  Use locks if the transaction
44219                failure is "persistent" or we've tried too many times.  */
44220             if (num_retries-- <= 0
44221                 || __TM_is_failure_persistent (TM_buff))
44222               {
44223                 acquire_lock (lock);
44224                 ... non transactional fallback path...
44225                 release_lock (lock);
44226                 break;
44227               }
44228           }
44229       }
44230
44231
44232File: 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
44233
442346.57.23 RX Built-in Functions
44235-----------------------------
44236
44237GCC supports some of the RX instructions which cannot be expressed in
44238the C programming language via the use of built-in functions.  The
44239following functions are supported:
44240
44241 -- Built-in Function: void __builtin_rx_brk (void)
44242     Generates the 'brk' machine instruction.
44243
44244 -- Built-in Function: void __builtin_rx_clrpsw (int)
44245     Generates the 'clrpsw' machine instruction to clear the specified
44246     bit in the processor status word.
44247
44248 -- Built-in Function: void __builtin_rx_int (int)
44249     Generates the 'int' machine instruction to generate an interrupt
44250     with the specified value.
44251
44252 -- Built-in Function: void __builtin_rx_machi (int, int)
44253     Generates the 'machi' machine instruction to add the result of
44254     multiplying the top 16 bits of the two arguments into the
44255     accumulator.
44256
44257 -- Built-in Function: void __builtin_rx_maclo (int, int)
44258     Generates the 'maclo' machine instruction to add the result of
44259     multiplying the bottom 16 bits of the two arguments into the
44260     accumulator.
44261
44262 -- Built-in Function: void __builtin_rx_mulhi (int, int)
44263     Generates the 'mulhi' machine instruction to place the result of
44264     multiplying the top 16 bits of the two arguments into the
44265     accumulator.
44266
44267 -- Built-in Function: void __builtin_rx_mullo (int, int)
44268     Generates the 'mullo' machine instruction to place the result of
44269     multiplying the bottom 16 bits of the two arguments into the
44270     accumulator.
44271
44272 -- Built-in Function: int __builtin_rx_mvfachi (void)
44273     Generates the 'mvfachi' machine instruction to read the top 32 bits
44274     of the accumulator.
44275
44276 -- Built-in Function: int __builtin_rx_mvfacmi (void)
44277     Generates the 'mvfacmi' machine instruction to read the middle 32
44278     bits of the accumulator.
44279
44280 -- Built-in Function: int __builtin_rx_mvfc (int)
44281     Generates the 'mvfc' machine instruction which reads the control
44282     register specified in its argument and returns its value.
44283
44284 -- Built-in Function: void __builtin_rx_mvtachi (int)
44285     Generates the 'mvtachi' machine instruction to set the top 32 bits
44286     of the accumulator.
44287
44288 -- Built-in Function: void __builtin_rx_mvtaclo (int)
44289     Generates the 'mvtaclo' machine instruction to set the bottom 32
44290     bits of the accumulator.
44291
44292 -- Built-in Function: void __builtin_rx_mvtc (int reg, int val)
44293     Generates the 'mvtc' machine instruction which sets control
44294     register number 'reg' to 'val'.
44295
44296 -- Built-in Function: void __builtin_rx_mvtipl (int)
44297     Generates the 'mvtipl' machine instruction set the interrupt
44298     priority level.
44299
44300 -- Built-in Function: void __builtin_rx_racw (int)
44301     Generates the 'racw' machine instruction to round the accumulator
44302     according to the specified mode.
44303
44304 -- Built-in Function: int __builtin_rx_revw (int)
44305     Generates the 'revw' machine instruction which swaps the bytes in
44306     the argument so that bits 0-7 now occupy bits 8-15 and vice versa,
44307     and also bits 16-23 occupy bits 24-31 and vice versa.
44308
44309 -- Built-in Function: void __builtin_rx_rmpa (void)
44310     Generates the 'rmpa' machine instruction which initiates a repeated
44311     multiply and accumulate sequence.
44312
44313 -- Built-in Function: void __builtin_rx_round (float)
44314     Generates the 'round' machine instruction which returns the
44315     floating-point argument rounded according to the current rounding
44316     mode set in the floating-point status word register.
44317
44318 -- Built-in Function: int __builtin_rx_sat (int)
44319     Generates the 'sat' machine instruction which returns the saturated
44320     value of the argument.
44321
44322 -- Built-in Function: void __builtin_rx_setpsw (int)
44323     Generates the 'setpsw' machine instruction to set the specified bit
44324     in the processor status word.
44325
44326 -- Built-in Function: void __builtin_rx_wait (void)
44327     Generates the 'wait' machine instruction.
44328
44329
44330File: gcc.info,  Node: S/390 System z Built-in Functions,  Next: SH Built-in Functions,  Prev: RX Built-in Functions,  Up: Target Builtins
44331
443326.57.24 S/390 System z Built-in Functions
44333-----------------------------------------
44334
44335 -- Built-in Function: int __builtin_tbegin (void*)
44336     Generates the 'tbegin' machine instruction starting a
44337     non-constraint hardware transaction.  If the parameter is non-NULL
44338     the memory area is used to store the transaction diagnostic buffer
44339     and will be passed as first operand to 'tbegin'.  This buffer can
44340     be defined using the 'struct __htm_tdb' C struct defined in
44341     'htmintrin.h' and must reside on a double-word boundary.  The
44342     second tbegin operand is set to '0xff0c'.  This enables
44343     save/restore of all GPRs and disables aborts for FPR and AR
44344     manipulations inside the transaction body.  The condition code set
44345     by the tbegin instruction is returned as integer value.  The tbegin
44346     instruction by definition overwrites the content of all FPRs.  The
44347     compiler will generate code which saves and restores the FPRs.  For
44348     soft-float code it is recommended to used the '*_nofloat' variant.
44349     In order to prevent a TDB from being written it is required to pass
44350     an constant zero value as parameter.  Passing the zero value
44351     through a variable is not sufficient.  Although modifications of
44352     access registers inside the transaction will not trigger an
44353     transaction abort it is not supported to actually modify them.
44354     Access registers do not get saved when entering a transaction.
44355     They will have undefined state when reaching the abort code.
44356
44357 Macros for the possible return codes of tbegin are defined in the
44358'htmintrin.h' header file:
44359
44360'_HTM_TBEGIN_STARTED'
44361     'tbegin' has been executed as part of normal processing.  The
44362     transaction body is supposed to be executed.
44363'_HTM_TBEGIN_INDETERMINATE'
44364     The transaction was aborted due to an indeterminate condition which
44365     might be persistent.
44366'_HTM_TBEGIN_TRANSIENT'
44367     The transaction aborted due to a transient failure.  The
44368     transaction should be re-executed in that case.
44369'_HTM_TBEGIN_PERSISTENT'
44370     The transaction aborted due to a persistent failure.  Re-execution
44371     under same circumstances will not be productive.
44372
44373 -- Macro: _HTM_FIRST_USER_ABORT_CODE
44374     The '_HTM_FIRST_USER_ABORT_CODE' defined in 'htmintrin.h' specifies
44375     the first abort code which can be used for '__builtin_tabort'.
44376     Values below this threshold are reserved for machine use.
44377
44378 -- Data type: struct __htm_tdb
44379     The 'struct __htm_tdb' defined in 'htmintrin.h' describes the
44380     structure of the transaction diagnostic block as specified in the
44381     Principles of Operation manual chapter 5-91.
44382
44383 -- Built-in Function: int __builtin_tbegin_nofloat (void*)
44384     Same as '__builtin_tbegin' but without FPR saves and restores.
44385     Using this variant in code making use of FPRs will leave the FPRs
44386     in undefined state when entering the transaction abort handler
44387     code.
44388
44389 -- Built-in Function: int __builtin_tbegin_retry (void*, int)
44390     In addition to '__builtin_tbegin' a loop for transient failures is
44391     generated.  If tbegin returns a condition code of 2 the transaction
44392     will be retried as often as specified in the second argument.  The
44393     perform processor assist instruction is used to tell the CPU about
44394     the number of fails so far.
44395
44396 -- Built-in Function: int __builtin_tbegin_retry_nofloat (void*, int)
44397     Same as '__builtin_tbegin_retry' but without FPR saves and
44398     restores.  Using this variant in code making use of FPRs will leave
44399     the FPRs in undefined state when entering the transaction abort
44400     handler code.
44401
44402 -- Built-in Function: void __builtin_tbeginc (void)
44403     Generates the 'tbeginc' machine instruction starting a constraint
44404     hardware transaction.  The second operand is set to '0xff08'.
44405
44406 -- Built-in Function: int __builtin_tend (void)
44407     Generates the 'tend' machine instruction finishing a transaction
44408     and making the changes visible to other threads.  The condition
44409     code generated by tend is returned as integer value.
44410
44411 -- Built-in Function: void __builtin_tabort (int)
44412     Generates the 'tabort' machine instruction with the specified abort
44413     code.  Abort codes from 0 through 255 are reserved and will result
44414     in an error message.
44415
44416 -- Built-in Function: void __builtin_tx_assist (int)
44417     Generates the 'ppa rX,rY,1' machine instruction.  Where the integer
44418     parameter is loaded into rX and a value of zero is loaded into rY.
44419     The integer parameter specifies the number of times the transaction
44420     repeatedly aborted.
44421
44422 -- Built-in Function: int __builtin_tx_nesting_depth (void)
44423     Generates the 'etnd' machine instruction.  The current nesting
44424     depth is returned as integer value.  For a nesting depth of 0 the
44425     code is not executed as part of an transaction.
44426
44427 -- Built-in Function: void __builtin_non_tx_store (uint64_t *,
44428          uint64_t)
44429
44430     Generates the 'ntstg' machine instruction.  The second argument is
44431     written to the first arguments location.  The store operation will
44432     not be rolled-back in case of an transaction abort.
44433
44434
44435File: gcc.info,  Node: SH Built-in Functions,  Next: SPARC VIS Built-in Functions,  Prev: S/390 System z Built-in Functions,  Up: Target Builtins
44436
444376.57.25 SH Built-in Functions
44438-----------------------------
44439
44440The following built-in functions are supported on the SH1, SH2, SH3 and
44441SH4 families of processors:
44442
44443 -- Built-in Function: void __builtin_set_thread_pointer (void *PTR)
44444     Sets the 'GBR' register to the specified value PTR.  This is
44445     usually used by system code that manages threads and execution
44446     contexts.  The compiler normally does not generate code that
44447     modifies the contents of 'GBR' and thus the value is preserved
44448     across function calls.  Changing the 'GBR' value in user code must
44449     be done with caution, since the compiler might use 'GBR' in order
44450     to access thread local variables.
44451
44452 -- Built-in Function: void * __builtin_thread_pointer (void)
44453     Returns the value that is currently set in the 'GBR' register.
44454     Memory loads and stores that use the thread pointer as a base
44455     address are turned into 'GBR' based displacement loads and stores,
44456     if possible.  For example:
44457          struct my_tcb
44458          {
44459             int a, b, c, d, e;
44460          };
44461
44462          int get_tcb_value (void)
44463          {
44464            // Generate 'mov.l @(8,gbr),r0' instruction
44465            return ((my_tcb*)__builtin_thread_pointer ())->c;
44466          }
44467
44468
44469
44470File: gcc.info,  Node: SPARC VIS Built-in Functions,  Next: SPU Built-in Functions,  Prev: SH Built-in Functions,  Up: Target Builtins
44471
444726.57.26 SPARC VIS Built-in Functions
44473------------------------------------
44474
44475GCC supports SIMD operations on the SPARC using both the generic vector
44476extensions (*note Vector Extensions::) as well as built-in functions for
44477the SPARC Visual Instruction Set (VIS). When you use the '-mvis' switch,
44478the VIS extension is exposed as the following built-in functions:
44479
44480     typedef int v1si __attribute__ ((vector_size (4)));
44481     typedef int v2si __attribute__ ((vector_size (8)));
44482     typedef short v4hi __attribute__ ((vector_size (8)));
44483     typedef short v2hi __attribute__ ((vector_size (4)));
44484     typedef unsigned char v8qi __attribute__ ((vector_size (8)));
44485     typedef unsigned char v4qi __attribute__ ((vector_size (4)));
44486
44487     void __builtin_vis_write_gsr (int64_t);
44488     int64_t __builtin_vis_read_gsr (void);
44489
44490     void * __builtin_vis_alignaddr (void *, long);
44491     void * __builtin_vis_alignaddrl (void *, long);
44492     int64_t __builtin_vis_faligndatadi (int64_t, int64_t);
44493     v2si __builtin_vis_faligndatav2si (v2si, v2si);
44494     v4hi __builtin_vis_faligndatav4hi (v4si, v4si);
44495     v8qi __builtin_vis_faligndatav8qi (v8qi, v8qi);
44496
44497     v4hi __builtin_vis_fexpand (v4qi);
44498
44499     v4hi __builtin_vis_fmul8x16 (v4qi, v4hi);
44500     v4hi __builtin_vis_fmul8x16au (v4qi, v2hi);
44501     v4hi __builtin_vis_fmul8x16al (v4qi, v2hi);
44502     v4hi __builtin_vis_fmul8sux16 (v8qi, v4hi);
44503     v4hi __builtin_vis_fmul8ulx16 (v8qi, v4hi);
44504     v2si __builtin_vis_fmuld8sux16 (v4qi, v2hi);
44505     v2si __builtin_vis_fmuld8ulx16 (v4qi, v2hi);
44506
44507     v4qi __builtin_vis_fpack16 (v4hi);
44508     v8qi __builtin_vis_fpack32 (v2si, v8qi);
44509     v2hi __builtin_vis_fpackfix (v2si);
44510     v8qi __builtin_vis_fpmerge (v4qi, v4qi);
44511
44512     int64_t __builtin_vis_pdist (v8qi, v8qi, int64_t);
44513
44514     long __builtin_vis_edge8 (void *, void *);
44515     long __builtin_vis_edge8l (void *, void *);
44516     long __builtin_vis_edge16 (void *, void *);
44517     long __builtin_vis_edge16l (void *, void *);
44518     long __builtin_vis_edge32 (void *, void *);
44519     long __builtin_vis_edge32l (void *, void *);
44520
44521     long __builtin_vis_fcmple16 (v4hi, v4hi);
44522     long __builtin_vis_fcmple32 (v2si, v2si);
44523     long __builtin_vis_fcmpne16 (v4hi, v4hi);
44524     long __builtin_vis_fcmpne32 (v2si, v2si);
44525     long __builtin_vis_fcmpgt16 (v4hi, v4hi);
44526     long __builtin_vis_fcmpgt32 (v2si, v2si);
44527     long __builtin_vis_fcmpeq16 (v4hi, v4hi);
44528     long __builtin_vis_fcmpeq32 (v2si, v2si);
44529
44530     v4hi __builtin_vis_fpadd16 (v4hi, v4hi);
44531     v2hi __builtin_vis_fpadd16s (v2hi, v2hi);
44532     v2si __builtin_vis_fpadd32 (v2si, v2si);
44533     v1si __builtin_vis_fpadd32s (v1si, v1si);
44534     v4hi __builtin_vis_fpsub16 (v4hi, v4hi);
44535     v2hi __builtin_vis_fpsub16s (v2hi, v2hi);
44536     v2si __builtin_vis_fpsub32 (v2si, v2si);
44537     v1si __builtin_vis_fpsub32s (v1si, v1si);
44538
44539     long __builtin_vis_array8 (long, long);
44540     long __builtin_vis_array16 (long, long);
44541     long __builtin_vis_array32 (long, long);
44542
44543 When you use the '-mvis2' switch, the VIS version 2.0 built-in
44544functions also become available:
44545
44546     long __builtin_vis_bmask (long, long);
44547     int64_t __builtin_vis_bshuffledi (int64_t, int64_t);
44548     v2si __builtin_vis_bshufflev2si (v2si, v2si);
44549     v4hi __builtin_vis_bshufflev2si (v4hi, v4hi);
44550     v8qi __builtin_vis_bshufflev2si (v8qi, v8qi);
44551
44552     long __builtin_vis_edge8n (void *, void *);
44553     long __builtin_vis_edge8ln (void *, void *);
44554     long __builtin_vis_edge16n (void *, void *);
44555     long __builtin_vis_edge16ln (void *, void *);
44556     long __builtin_vis_edge32n (void *, void *);
44557     long __builtin_vis_edge32ln (void *, void *);
44558
44559 When you use the '-mvis3' switch, the VIS version 3.0 built-in
44560functions also become available:
44561
44562     void __builtin_vis_cmask8 (long);
44563     void __builtin_vis_cmask16 (long);
44564     void __builtin_vis_cmask32 (long);
44565
44566     v4hi __builtin_vis_fchksm16 (v4hi, v4hi);
44567
44568     v4hi __builtin_vis_fsll16 (v4hi, v4hi);
44569     v4hi __builtin_vis_fslas16 (v4hi, v4hi);
44570     v4hi __builtin_vis_fsrl16 (v4hi, v4hi);
44571     v4hi __builtin_vis_fsra16 (v4hi, v4hi);
44572     v2si __builtin_vis_fsll16 (v2si, v2si);
44573     v2si __builtin_vis_fslas16 (v2si, v2si);
44574     v2si __builtin_vis_fsrl16 (v2si, v2si);
44575     v2si __builtin_vis_fsra16 (v2si, v2si);
44576
44577     long __builtin_vis_pdistn (v8qi, v8qi);
44578
44579     v4hi __builtin_vis_fmean16 (v4hi, v4hi);
44580
44581     int64_t __builtin_vis_fpadd64 (int64_t, int64_t);
44582     int64_t __builtin_vis_fpsub64 (int64_t, int64_t);
44583
44584     v4hi __builtin_vis_fpadds16 (v4hi, v4hi);
44585     v2hi __builtin_vis_fpadds16s (v2hi, v2hi);
44586     v4hi __builtin_vis_fpsubs16 (v4hi, v4hi);
44587     v2hi __builtin_vis_fpsubs16s (v2hi, v2hi);
44588     v2si __builtin_vis_fpadds32 (v2si, v2si);
44589     v1si __builtin_vis_fpadds32s (v1si, v1si);
44590     v2si __builtin_vis_fpsubs32 (v2si, v2si);
44591     v1si __builtin_vis_fpsubs32s (v1si, v1si);
44592
44593     long __builtin_vis_fucmple8 (v8qi, v8qi);
44594     long __builtin_vis_fucmpne8 (v8qi, v8qi);
44595     long __builtin_vis_fucmpgt8 (v8qi, v8qi);
44596     long __builtin_vis_fucmpeq8 (v8qi, v8qi);
44597
44598     float __builtin_vis_fhadds (float, float);
44599     double __builtin_vis_fhaddd (double, double);
44600     float __builtin_vis_fhsubs (float, float);
44601     double __builtin_vis_fhsubd (double, double);
44602     float __builtin_vis_fnhadds (float, float);
44603     double __builtin_vis_fnhaddd (double, double);
44604
44605     int64_t __builtin_vis_umulxhi (int64_t, int64_t);
44606     int64_t __builtin_vis_xmulx (int64_t, int64_t);
44607     int64_t __builtin_vis_xmulxhi (int64_t, int64_t);
44608
44609
44610File: gcc.info,  Node: SPU Built-in Functions,  Next: TI C6X Built-in Functions,  Prev: SPARC VIS Built-in Functions,  Up: Target Builtins
44611
446126.57.27 SPU Built-in Functions
44613------------------------------
44614
44615GCC provides extensions for the SPU processor as described in the
44616Sony/Toshiba/IBM SPU Language Extensions Specification, which can be
44617found at <http://cell.scei.co.jp/> or
44618<http://www.ibm.com/developerworks/power/cell/>.  GCC's implementation
44619differs in several ways.
44620
44621   * The optional extension of specifying vector constants in
44622     parentheses is not supported.
44623
44624   * A vector initializer requires no cast if the vector constant is of
44625     the same type as the variable it is initializing.
44626
44627   * If 'signed' or 'unsigned' is omitted, the signedness of the vector
44628     type is the default signedness of the base type.  The default
44629     varies depending on the operating system, so a portable program
44630     should always specify the signedness.
44631
44632   * By default, the keyword '__vector' is added.  The macro 'vector' is
44633     defined in '<spu_intrinsics.h>' and can be undefined.
44634
44635   * GCC allows using a 'typedef' name as the type specifier for a
44636     vector type.
44637
44638   * For C, overloaded functions are implemented with macros so the
44639     following does not work:
44640
44641            spu_add ((vector signed int){1, 2, 3, 4}, foo);
44642
44643     Since 'spu_add' is a macro, the vector constant in the example is
44644     treated as four separate arguments.  Wrap the entire argument in
44645     parentheses for this to work.
44646
44647   * The extended version of '__builtin_expect' is not supported.
44648
44649 _Note:_ Only the interface described in the aforementioned
44650specification is supported.  Internally, GCC uses built-in functions to
44651implement the required functionality, but these are not supported and
44652are subject to change without notice.
44653
44654
44655File: gcc.info,  Node: TI C6X Built-in Functions,  Next: TILE-Gx Built-in Functions,  Prev: SPU Built-in Functions,  Up: Target Builtins
44656
446576.57.28 TI C6X Built-in Functions
44658---------------------------------
44659
44660GCC provides intrinsics to access certain instructions of the TI C6X
44661processors.  These intrinsics, listed below, are available after
44662inclusion of the 'c6x_intrinsics.h' header file.  They map directly to
44663C6X instructions.
44664
44665
44666     int _sadd (int, int)
44667     int _ssub (int, int)
44668     int _sadd2 (int, int)
44669     int _ssub2 (int, int)
44670     long long _mpy2 (int, int)
44671     long long _smpy2 (int, int)
44672     int _add4 (int, int)
44673     int _sub4 (int, int)
44674     int _saddu4 (int, int)
44675
44676     int _smpy (int, int)
44677     int _smpyh (int, int)
44678     int _smpyhl (int, int)
44679     int _smpylh (int, int)
44680
44681     int _sshl (int, int)
44682     int _subc (int, int)
44683
44684     int _avg2 (int, int)
44685     int _avgu4 (int, int)
44686
44687     int _clrr (int, int)
44688     int _extr (int, int)
44689     int _extru (int, int)
44690     int _abs (int)
44691     int _abs2 (int)
44692
44693
44694
44695File: gcc.info,  Node: TILE-Gx Built-in Functions,  Next: TILEPro Built-in Functions,  Prev: TI C6X Built-in Functions,  Up: Target Builtins
44696
446976.57.29 TILE-Gx Built-in Functions
44698----------------------------------
44699
44700GCC provides intrinsics to access every instruction of the TILE-Gx
44701processor.  The intrinsics are of the form:
44702
44703
44704     unsigned long long __insn_OP (...)
44705
44706
44707 Where OP is the name of the instruction.  Refer to the ISA manual for
44708the complete list of instructions.
44709
44710 GCC also provides intrinsics to directly access the network registers.
44711The intrinsics are:
44712
44713
44714     unsigned long long __tile_idn0_receive (void)
44715     unsigned long long __tile_idn1_receive (void)
44716     unsigned long long __tile_udn0_receive (void)
44717     unsigned long long __tile_udn1_receive (void)
44718     unsigned long long __tile_udn2_receive (void)
44719     unsigned long long __tile_udn3_receive (void)
44720     void __tile_idn_send (unsigned long long)
44721     void __tile_udn_send (unsigned long long)
44722
44723
44724 The intrinsic 'void __tile_network_barrier (void)' is used to guarantee
44725that no network operations before it are reordered with those after it.
44726
44727
44728File: gcc.info,  Node: TILEPro Built-in Functions,  Prev: TILE-Gx Built-in Functions,  Up: Target Builtins
44729
447306.57.30 TILEPro Built-in Functions
44731----------------------------------
44732
44733GCC provides intrinsics to access every instruction of the TILEPro
44734processor.  The intrinsics are of the form:
44735
44736
44737     unsigned __insn_OP (...)
44738
44739
44740where OP is the name of the instruction.  Refer to the ISA manual for
44741the complete list of instructions.
44742
44743 GCC also provides intrinsics to directly access the network registers.
44744The intrinsics are:
44745
44746
44747     unsigned __tile_idn0_receive (void)
44748     unsigned __tile_idn1_receive (void)
44749     unsigned __tile_sn_receive (void)
44750     unsigned __tile_udn0_receive (void)
44751     unsigned __tile_udn1_receive (void)
44752     unsigned __tile_udn2_receive (void)
44753     unsigned __tile_udn3_receive (void)
44754     void __tile_idn_send (unsigned)
44755     void __tile_sn_send (unsigned)
44756     void __tile_udn_send (unsigned)
44757
44758
44759 The intrinsic 'void __tile_network_barrier (void)' is used to guarantee
44760that no network operations before it are reordered with those after it.
44761
44762
44763File: gcc.info,  Node: Target Format Checks,  Next: Pragmas,  Prev: Target Builtins,  Up: C Extensions
44764
447656.58 Format Checks Specific to Particular Target Machines
44766=========================================================
44767
44768For some target machines, GCC supports additional options to the format
44769attribute (*note Declaring Attributes of Functions: Function
44770Attributes.).
44771
44772* Menu:
44773
44774* Solaris Format Checks::
44775* Darwin Format Checks::
44776
44777
44778File: gcc.info,  Node: Solaris Format Checks,  Next: Darwin Format Checks,  Up: Target Format Checks
44779
447806.58.1 Solaris Format Checks
44781----------------------------
44782
44783Solaris targets support the 'cmn_err' (or '__cmn_err__') format check.
44784'cmn_err' accepts a subset of the standard 'printf' conversions, and the
44785two-argument '%b' conversion for displaying bit-fields.  See the Solaris
44786man page for 'cmn_err' for more information.
44787
44788
44789File: gcc.info,  Node: Darwin Format Checks,  Prev: Solaris Format Checks,  Up: Target Format Checks
44790
447916.58.2 Darwin Format Checks
44792---------------------------
44793
44794Darwin targets support the 'CFString' (or '__CFString__') in the format
44795attribute context.  Declarations made with such attribution are parsed
44796for correct syntax and format argument types.  However, parsing of the
44797format string itself is currently undefined and is not carried out by
44798this version of the compiler.
44799
44800 Additionally, 'CFStringRefs' (defined by the 'CoreFoundation' headers)
44801may also be used as format arguments.  Note that the relevant headers
44802are only likely to be available on Darwin (OSX) installations.  On such
44803installations, the XCode and system documentation provide descriptions
44804of 'CFString', 'CFStringRefs' and associated functions.
44805
44806
44807File: gcc.info,  Node: Pragmas,  Next: Unnamed Fields,  Prev: Target Format Checks,  Up: C Extensions
44808
448096.59 Pragmas Accepted by GCC
44810============================
44811
44812GCC supports several types of pragmas, primarily in order to compile
44813code originally written for other compilers.  Note that in general we do
44814not recommend the use of pragmas; *Note Function Attributes::, for
44815further explanation.
44816
44817* Menu:
44818
44819* ARM Pragmas::
44820* M32C Pragmas::
44821* MeP Pragmas::
44822* RS/6000 and PowerPC Pragmas::
44823* Darwin Pragmas::
44824* Solaris Pragmas::
44825* Symbol-Renaming Pragmas::
44826* Structure-Packing Pragmas::
44827* Weak Pragmas::
44828* Diagnostic Pragmas::
44829* Visibility Pragmas::
44830* Push/Pop Macro Pragmas::
44831* Function Specific Option Pragmas::
44832* Loop-Specific Pragmas::
44833
44834
44835File: gcc.info,  Node: ARM Pragmas,  Next: M32C Pragmas,  Up: Pragmas
44836
448376.59.1 ARM Pragmas
44838------------------
44839
44840The ARM target defines pragmas for controlling the default addition of
44841'long_call' and 'short_call' attributes to functions.  *Note Function
44842Attributes::, for information about the effects of these attributes.
44843
44844'long_calls'
44845     Set all subsequent functions to have the 'long_call' attribute.
44846
44847'no_long_calls'
44848     Set all subsequent functions to have the 'short_call' attribute.
44849
44850'long_calls_off'
44851     Do not affect the 'long_call' or 'short_call' attributes of
44852     subsequent functions.
44853
44854
44855File: gcc.info,  Node: M32C Pragmas,  Next: MeP Pragmas,  Prev: ARM Pragmas,  Up: Pragmas
44856
448576.59.2 M32C Pragmas
44858-------------------
44859
44860'GCC memregs NUMBER'
44861     Overrides the command-line option '-memregs=' for the current file.
44862     Use with care!  This pragma must be before any function in the
44863     file, and mixing different memregs values in different objects may
44864     make them incompatible.  This pragma is useful when a
44865     performance-critical function uses a memreg for temporary values,
44866     as it may allow you to reduce the number of memregs used.
44867
44868'ADDRESS NAME ADDRESS'
44869     For any declared symbols matching NAME, this does three things to
44870     that symbol: it forces the symbol to be located at the given
44871     address (a number), it forces the symbol to be volatile, and it
44872     changes the symbol's scope to be static.  This pragma exists for
44873     compatibility with other compilers, but note that the common
44874     '1234H' numeric syntax is not supported (use '0x1234' instead).
44875     Example:
44876
44877          #pragma ADDRESS port3 0x103
44878          char port3;
44879
44880
44881File: gcc.info,  Node: MeP Pragmas,  Next: RS/6000 and PowerPC Pragmas,  Prev: M32C Pragmas,  Up: Pragmas
44882
448836.59.3 MeP Pragmas
44884------------------
44885
44886'custom io_volatile (on|off)'
44887     Overrides the command-line option '-mio-volatile' for the current
44888     file.  Note that for compatibility with future GCC releases, this
44889     option should only be used once before any 'io' variables in each
44890     file.
44891
44892'GCC coprocessor available REGISTERS'
44893     Specifies which coprocessor registers are available to the register
44894     allocator.  REGISTERS may be a single register, register range
44895     separated by ellipses, or comma-separated list of those.  Example:
44896
44897          #pragma GCC coprocessor available $c0...$c10, $c28
44898
44899'GCC coprocessor call_saved REGISTERS'
44900     Specifies which coprocessor registers are to be saved and restored
44901     by any function using them.  REGISTERS may be a single register,
44902     register range separated by ellipses, or comma-separated list of
44903     those.  Example:
44904
44905          #pragma GCC coprocessor call_saved $c4...$c6, $c31
44906
44907'GCC coprocessor subclass '(A|B|C|D)' = REGISTERS'
44908     Creates and defines a register class.  These register classes can
44909     be used by inline 'asm' constructs.  REGISTERS may be a single
44910     register, register range separated by ellipses, or comma-separated
44911     list of those.  Example:
44912
44913          #pragma GCC coprocessor subclass 'B' = $c2, $c4, $c6
44914
44915          asm ("cpfoo %0" : "=B" (x));
44916
44917'GCC disinterrupt NAME , NAME ...'
44918     For the named functions, the compiler adds code to disable
44919     interrupts for the duration of those functions.  If any functions
44920     so named are not encountered in the source, a warning is emitted
44921     that the pragma is not used.  Examples:
44922
44923          #pragma disinterrupt foo
44924          #pragma disinterrupt bar, grill
44925          int foo () { ... }
44926
44927'GCC call NAME , NAME ...'
44928     For the named functions, the compiler always uses a
44929     register-indirect call model when calling the named functions.
44930     Examples:
44931
44932          extern int foo ();
44933          #pragma call foo
44934
44935
44936File: gcc.info,  Node: RS/6000 and PowerPC Pragmas,  Next: Darwin Pragmas,  Prev: MeP Pragmas,  Up: Pragmas
44937
449386.59.4 RS/6000 and PowerPC Pragmas
44939----------------------------------
44940
44941The RS/6000 and PowerPC targets define one pragma for controlling
44942whether or not the 'longcall' attribute is added to function
44943declarations by default.  This pragma overrides the '-mlongcall' option,
44944but not the 'longcall' and 'shortcall' attributes.  *Note RS/6000 and
44945PowerPC Options::, for more information about when long calls are and
44946are not necessary.
44947
44948'longcall (1)'
44949     Apply the 'longcall' attribute to all subsequent function
44950     declarations.
44951
44952'longcall (0)'
44953     Do not apply the 'longcall' attribute to subsequent function
44954     declarations.
44955
44956
44957File: gcc.info,  Node: Darwin Pragmas,  Next: Solaris Pragmas,  Prev: RS/6000 and PowerPC Pragmas,  Up: Pragmas
44958
449596.59.5 Darwin Pragmas
44960---------------------
44961
44962The following pragmas are available for all architectures running the
44963Darwin operating system.  These are useful for compatibility with other
44964Mac OS compilers.
44965
44966'mark TOKENS...'
44967     This pragma is accepted, but has no effect.
44968
44969'options align=ALIGNMENT'
44970     This pragma sets the alignment of fields in structures.  The values
44971     of ALIGNMENT may be 'mac68k', to emulate m68k alignment, or
44972     'power', to emulate PowerPC alignment.  Uses of this pragma nest
44973     properly; to restore the previous setting, use 'reset' for the
44974     ALIGNMENT.
44975
44976'segment TOKENS...'
44977     This pragma is accepted, but has no effect.
44978
44979'unused (VAR [, VAR]...)'
44980     This pragma declares variables to be possibly unused.  GCC does not
44981     produce warnings for the listed variables.  The effect is similar
44982     to that of the 'unused' attribute, except that this pragma may
44983     appear anywhere within the variables' scopes.
44984
44985
44986File: gcc.info,  Node: Solaris Pragmas,  Next: Symbol-Renaming Pragmas,  Prev: Darwin Pragmas,  Up: Pragmas
44987
449886.59.6 Solaris Pragmas
44989----------------------
44990
44991The Solaris target supports '#pragma redefine_extname' (*note
44992Symbol-Renaming Pragmas::).  It also supports additional '#pragma'
44993directives for compatibility with the system compiler.
44994
44995'align ALIGNMENT (VARIABLE [, VARIABLE]...)'
44996
44997     Increase the minimum alignment of each VARIABLE to ALIGNMENT.  This
44998     is the same as GCC's 'aligned' attribute *note Variable
44999     Attributes::).  Macro expansion occurs on the arguments to this
45000     pragma when compiling C and Objective-C.  It does not currently
45001     occur when compiling C++, but this is a bug which may be fixed in a
45002     future release.
45003
45004'fini (FUNCTION [, FUNCTION]...)'
45005
45006     This pragma causes each listed FUNCTION to be called after main, or
45007     during shared module unloading, by adding a call to the '.fini'
45008     section.
45009
45010'init (FUNCTION [, FUNCTION]...)'
45011
45012     This pragma causes each listed FUNCTION to be called during
45013     initialization (before 'main') or during shared module loading, by
45014     adding a call to the '.init' section.
45015
45016
45017File: gcc.info,  Node: Symbol-Renaming Pragmas,  Next: Structure-Packing Pragmas,  Prev: Solaris Pragmas,  Up: Pragmas
45018
450196.59.7 Symbol-Renaming Pragmas
45020------------------------------
45021
45022For compatibility with the Solaris system headers, GCC supports two
45023'#pragma' directives that change the name used in assembly for a given
45024declaration.  To get this effect on all platforms supported by GCC, use
45025the asm labels extension (*note Asm Labels::).
45026
45027'redefine_extname OLDNAME NEWNAME'
45028
45029     This pragma gives the C function OLDNAME the assembly symbol
45030     NEWNAME.  The preprocessor macro '__PRAGMA_REDEFINE_EXTNAME' is
45031     defined if this pragma is available (currently on all platforms).
45032
45033 This pragma and the asm labels extension interact in a complicated
45034manner.  Here are some corner cases you may want to be aware of.
45035
45036  1. Both pragmas silently apply only to declarations with external
45037     linkage.  Asm labels do not have this restriction.
45038
45039  2. In C++, both pragmas silently apply only to declarations with "C"
45040     linkage.  Again, asm labels do not have this restriction.
45041
45042  3. If any of the three ways of changing the assembly name of a
45043     declaration is applied to a declaration whose assembly name has
45044     already been determined (either by a previous use of one of these
45045     features, or because the compiler needed the assembly name in order
45046     to generate code), and the new name is different, a warning issues
45047     and the name does not change.
45048
45049  4. The OLDNAME used by '#pragma redefine_extname' is always the
45050     C-language name.
45051
45052
45053File: gcc.info,  Node: Structure-Packing Pragmas,  Next: Weak Pragmas,  Prev: Symbol-Renaming Pragmas,  Up: Pragmas
45054
450556.59.8 Structure-Packing Pragmas
45056--------------------------------
45057
45058For compatibility with Microsoft Windows compilers, GCC supports a set
45059of '#pragma' directives that change the maximum alignment of members of
45060structures (other than zero-width bit-fields), unions, and classes
45061subsequently defined.  The N value below always is required to be a
45062small power of two and specifies the new alignment in bytes.
45063
45064  1. '#pragma pack(N)' simply sets the new alignment.
45065  2. '#pragma pack()' sets the alignment to the one that was in effect
45066     when compilation started (see also command-line option
45067     '-fpack-struct[=N]' *note Code Gen Options::).
45068  3. '#pragma pack(push[,N])' pushes the current alignment setting on an
45069     internal stack and then optionally sets the new alignment.
45070  4. '#pragma pack(pop)' restores the alignment setting to the one saved
45071     at the top of the internal stack (and removes that stack entry).
45072     Note that '#pragma pack([N])' does not influence this internal
45073     stack; thus it is possible to have '#pragma pack(push)' followed by
45074     multiple '#pragma pack(N)' instances and finalized by a single
45075     '#pragma pack(pop)'.
45076
45077 Some targets, e.g. i386 and PowerPC, support the 'ms_struct' '#pragma'
45078which lays out a structure as the documented '__attribute__
45079((ms_struct))'.
45080  1. '#pragma ms_struct on' turns on the layout for structures declared.
45081  2. '#pragma ms_struct off' turns off the layout for structures
45082     declared.
45083  3. '#pragma ms_struct reset' goes back to the default layout.
45084
45085
45086File: gcc.info,  Node: Weak Pragmas,  Next: Diagnostic Pragmas,  Prev: Structure-Packing Pragmas,  Up: Pragmas
45087
450886.59.9 Weak Pragmas
45089-------------------
45090
45091For compatibility with SVR4, GCC supports a set of '#pragma' directives
45092for declaring symbols to be weak, and defining weak aliases.
45093
45094'#pragma weak SYMBOL'
45095     This pragma declares SYMBOL to be weak, as if the declaration had
45096     the attribute of the same name.  The pragma may appear before or
45097     after the declaration of SYMBOL.  It is not an error for SYMBOL to
45098     never be defined at all.
45099
45100'#pragma weak SYMBOL1 = SYMBOL2'
45101     This pragma declares SYMBOL1 to be a weak alias of SYMBOL2.  It is
45102     an error if SYMBOL2 is not defined in the current translation unit.
45103
45104
45105File: gcc.info,  Node: Diagnostic Pragmas,  Next: Visibility Pragmas,  Prev: Weak Pragmas,  Up: Pragmas
45106
451076.59.10 Diagnostic Pragmas
45108--------------------------
45109
45110GCC allows the user to selectively enable or disable certain types of
45111diagnostics, and change the kind of the diagnostic.  For example, a
45112project's policy might require that all sources compile with '-Werror'
45113but certain files might have exceptions allowing specific types of
45114warnings.  Or, a project might selectively enable diagnostics and treat
45115them as errors depending on which preprocessor macros are defined.
45116
45117'#pragma GCC diagnostic KIND OPTION'
45118
45119     Modifies the disposition of a diagnostic.  Note that not all
45120     diagnostics are modifiable; at the moment only warnings (normally
45121     controlled by '-W...') can be controlled, and not all of them.  Use
45122     '-fdiagnostics-show-option' to determine which diagnostics are
45123     controllable and which option controls them.
45124
45125     KIND is 'error' to treat this diagnostic as an error, 'warning' to
45126     treat it like a warning (even if '-Werror' is in effect), or
45127     'ignored' if the diagnostic is to be ignored.  OPTION is a double
45128     quoted string that matches the command-line option.
45129
45130          #pragma GCC diagnostic warning "-Wformat"
45131          #pragma GCC diagnostic error "-Wformat"
45132          #pragma GCC diagnostic ignored "-Wformat"
45133
45134     Note that these pragmas override any command-line options.  GCC
45135     keeps track of the location of each pragma, and issues diagnostics
45136     according to the state as of that point in the source file.  Thus,
45137     pragmas occurring after a line do not affect diagnostics caused by
45138     that line.
45139
45140'#pragma GCC diagnostic push'
45141'#pragma GCC diagnostic pop'
45142
45143     Causes GCC to remember the state of the diagnostics as of each
45144     'push', and restore to that point at each 'pop'.  If a 'pop' has no
45145     matching 'push', the command-line options are restored.
45146
45147          #pragma GCC diagnostic error "-Wuninitialized"
45148            foo(a);                       /* error is given for this one */
45149          #pragma GCC diagnostic push
45150          #pragma GCC diagnostic ignored "-Wuninitialized"
45151            foo(b);                       /* no diagnostic for this one */
45152          #pragma GCC diagnostic pop
45153            foo(c);                       /* error is given for this one */
45154          #pragma GCC diagnostic pop
45155            foo(d);                       /* depends on command-line options */
45156
45157 GCC also offers a simple mechanism for printing messages during
45158compilation.
45159
45160'#pragma message STRING'
45161
45162     Prints STRING as a compiler message on compilation.  The message is
45163     informational only, and is neither a compilation warning nor an
45164     error.
45165
45166          #pragma message "Compiling " __FILE__ "..."
45167
45168     STRING may be parenthesized, and is printed with location
45169     information.  For example,
45170
45171          #define DO_PRAGMA(x) _Pragma (#x)
45172          #define TODO(x) DO_PRAGMA(message ("TODO - " #x))
45173
45174          TODO(Remember to fix this)
45175
45176     prints '/tmp/file.c:4: note: #pragma message: TODO - Remember to
45177     fix this'.
45178
45179
45180File: gcc.info,  Node: Visibility Pragmas,  Next: Push/Pop Macro Pragmas,  Prev: Diagnostic Pragmas,  Up: Pragmas
45181
451826.59.11 Visibility Pragmas
45183--------------------------
45184
45185'#pragma GCC visibility push(VISIBILITY)'
45186'#pragma GCC visibility pop'
45187
45188     This pragma allows the user to set the visibility for multiple
45189     declarations without having to give each a visibility attribute
45190     *Note Function Attributes::, for more information about visibility
45191     and the attribute syntax.
45192
45193     In C++, '#pragma GCC visibility' affects only namespace-scope
45194     declarations.  Class members and template specializations are not
45195     affected; if you want to override the visibility for a particular
45196     member or instantiation, you must use an attribute.
45197
45198
45199File: gcc.info,  Node: Push/Pop Macro Pragmas,  Next: Function Specific Option Pragmas,  Prev: Visibility Pragmas,  Up: Pragmas
45200
452016.59.12 Push/Pop Macro Pragmas
45202------------------------------
45203
45204For compatibility with Microsoft Windows compilers, GCC supports
45205'#pragma push_macro("MACRO_NAME")' and '#pragma
45206pop_macro("MACRO_NAME")'.
45207
45208'#pragma push_macro("MACRO_NAME")'
45209     This pragma saves the value of the macro named as MACRO_NAME to the
45210     top of the stack for this macro.
45211
45212'#pragma pop_macro("MACRO_NAME")'
45213     This pragma sets the value of the macro named as MACRO_NAME to the
45214     value on top of the stack for this macro.  If the stack for
45215     MACRO_NAME is empty, the value of the macro remains unchanged.
45216
45217 For example:
45218
45219     #define X  1
45220     #pragma push_macro("X")
45221     #undef X
45222     #define X -1
45223     #pragma pop_macro("X")
45224     int x [X];
45225
45226In this example, the definition of X as 1 is saved by '#pragma
45227push_macro' and restored by '#pragma pop_macro'.
45228
45229
45230File: gcc.info,  Node: Function Specific Option Pragmas,  Next: Loop-Specific Pragmas,  Prev: Push/Pop Macro Pragmas,  Up: Pragmas
45231
452326.59.13 Function Specific Option Pragmas
45233----------------------------------------
45234
45235'#pragma GCC target ("STRING"...)'
45236
45237     This pragma allows you to set target specific options for functions
45238     defined later in the source file.  One or more strings can be
45239     specified.  Each function that is defined after this point is as if
45240     'attribute((target("STRING")))' was specified for that function.
45241     The parenthesis around the options is optional.  *Note Function
45242     Attributes::, for more information about the 'target' attribute and
45243     the attribute syntax.
45244
45245     The '#pragma GCC target' pragma is presently implemented for
45246     i386/x86_64, PowerPC, and Nios II targets only.
45247
45248'#pragma GCC optimize ("STRING"...)'
45249
45250     This pragma allows you to set global optimization options for
45251     functions defined later in the source file.  One or more strings
45252     can be specified.  Each function that is defined after this point
45253     is as if 'attribute((optimize("STRING")))' was specified for that
45254     function.  The parenthesis around the options is optional.  *Note
45255     Function Attributes::, for more information about the 'optimize'
45256     attribute and the attribute syntax.
45257
45258     The '#pragma GCC optimize' pragma is not implemented in GCC
45259     versions earlier than 4.4.
45260
45261'#pragma GCC push_options'
45262'#pragma GCC pop_options'
45263
45264     These pragmas maintain a stack of the current target and
45265     optimization options.  It is intended for include files where you
45266     temporarily want to switch to using a different '#pragma GCC
45267     target' or '#pragma GCC optimize' and then to pop back to the
45268     previous options.
45269
45270     The '#pragma GCC push_options' and '#pragma GCC pop_options'
45271     pragmas are not implemented in GCC versions earlier than 4.4.
45272
45273'#pragma GCC reset_options'
45274
45275     This pragma clears the current '#pragma GCC target' and '#pragma
45276     GCC optimize' to use the default switches as specified on the
45277     command line.
45278
45279     The '#pragma GCC reset_options' pragma is not implemented in GCC
45280     versions earlier than 4.4.
45281
45282
45283File: gcc.info,  Node: Loop-Specific Pragmas,  Prev: Function Specific Option Pragmas,  Up: Pragmas
45284
452856.59.14 Loop-Specific Pragmas
45286-----------------------------
45287
45288'#pragma GCC ivdep'
45289
45290 With this pragma, the programmer asserts that there are no loop-carried
45291dependencies which would prevent that consecutive iterations of the
45292following loop can be executed concurrently with SIMD (single
45293instruction multiple data) instructions.
45294
45295 For example, the compiler can only unconditionally vectorize the
45296following loop with the pragma:
45297
45298     void foo (int n, int *a, int *b, int *c)
45299     {
45300       int i, j;
45301     #pragma GCC ivdep
45302       for (i = 0; i < n; ++i)
45303         a[i] = b[i] + c[i];
45304     }
45305
45306In this example, using the 'restrict' qualifier had the same effect.  In
45307the following example, that would not be possible.  Assume k < -m or k
45308>= m.  Only with the pragma, the compiler knows that it can
45309unconditionally vectorize the following loop:
45310
45311     void ignore_vec_dep (int *a, int k, int c, int m)
45312     {
45313     #pragma GCC ivdep
45314       for (int i = 0; i < m; i++)
45315         a[i] = a[i + k] * c;
45316     }
45317
45318
45319File: gcc.info,  Node: Unnamed Fields,  Next: Thread-Local,  Prev: Pragmas,  Up: C Extensions
45320
453216.60 Unnamed struct/union fields within structs/unions
45322======================================================
45323
45324As permitted by ISO C11 and for compatibility with other compilers, GCC
45325allows you to define a structure or union that contains, as fields,
45326structures and unions without names.  For example:
45327
45328     struct {
45329       int a;
45330       union {
45331         int b;
45332         float c;
45333       };
45334       int d;
45335     } foo;
45336
45337In this example, you are able to access members of the unnamed union
45338with code like 'foo.b'.  Note that only unnamed structs and unions are
45339allowed, you may not have, for example, an unnamed 'int'.
45340
45341 You must never create such structures that cause ambiguous field
45342definitions.  For example, in this structure:
45343
45344     struct {
45345       int a;
45346       struct {
45347         int a;
45348       };
45349     } foo;
45350
45351it is ambiguous which 'a' is being referred to with 'foo.a'.  The
45352compiler gives errors for such constructs.
45353
45354 Unless '-fms-extensions' is used, the unnamed field must be a structure
45355or union definition without a tag (for example, 'struct { int a; };').
45356If '-fms-extensions' is used, the field may also be a definition with a
45357tag such as 'struct foo { int a; };', a reference to a previously
45358defined structure or union such as 'struct foo;', or a reference to a
45359'typedef' name for a previously defined structure or union type.
45360
45361 The option '-fplan9-extensions' enables '-fms-extensions' as well as
45362two other extensions.  First, a pointer to a structure is automatically
45363converted to a pointer to an anonymous field for assignments and
45364function calls.  For example:
45365
45366     struct s1 { int a; };
45367     struct s2 { struct s1; };
45368     extern void f1 (struct s1 *);
45369     void f2 (struct s2 *p) { f1 (p); }
45370
45371In the call to 'f1' inside 'f2', the pointer 'p' is converted into a
45372pointer to the anonymous field.
45373
45374 Second, when the type of an anonymous field is a 'typedef' for a
45375'struct' or 'union', code may refer to the field using the name of the
45376'typedef'.
45377
45378     typedef struct { int a; } s1;
45379     struct s2 { s1; };
45380     s1 f1 (struct s2 *p) { return p->s1; }
45381
45382 These usages are only permitted when they are not ambiguous.
45383
45384
45385File: gcc.info,  Node: Thread-Local,  Next: Binary constants,  Prev: Unnamed Fields,  Up: C Extensions
45386
453876.61 Thread-Local Storage
45388=========================
45389
45390Thread-local storage (TLS) is a mechanism by which variables are
45391allocated such that there is one instance of the variable per extant
45392thread.  The runtime model GCC uses to implement this originates in the
45393IA-64 processor-specific ABI, but has since been migrated to other
45394processors as well.  It requires significant support from the linker
45395('ld'), dynamic linker ('ld.so'), and system libraries ('libc.so' and
45396'libpthread.so'), so it is not available everywhere.
45397
45398 At the user level, the extension is visible with a new storage class
45399keyword: '__thread'.  For example:
45400
45401     __thread int i;
45402     extern __thread struct state s;
45403     static __thread char *p;
45404
45405 The '__thread' specifier may be used alone, with the 'extern' or
45406'static' specifiers, but with no other storage class specifier.  When
45407used with 'extern' or 'static', '__thread' must appear immediately after
45408the other storage class specifier.
45409
45410 The '__thread' specifier may be applied to any global, file-scoped
45411static, function-scoped static, or static data member of a class.  It
45412may not be applied to block-scoped automatic or non-static data member.
45413
45414 When the address-of operator is applied to a thread-local variable, it
45415is evaluated at run time and returns the address of the current thread's
45416instance of that variable.  An address so obtained may be used by any
45417thread.  When a thread terminates, any pointers to thread-local
45418variables in that thread become invalid.
45419
45420 No static initialization may refer to the address of a thread-local
45421variable.
45422
45423 In C++, if an initializer is present for a thread-local variable, it
45424must be a CONSTANT-EXPRESSION, as defined in 5.19.2 of the ANSI/ISO C++
45425standard.
45426
45427 See ELF Handling For Thread-Local Storage
45428(http://www.akkadia.org/drepper/tls.pdf) for a detailed explanation of
45429the four thread-local storage addressing models, and how the runtime is
45430expected to function.
45431
45432* Menu:
45433
45434* C99 Thread-Local Edits::
45435* C++98 Thread-Local Edits::
45436
45437
45438File: gcc.info,  Node: C99 Thread-Local Edits,  Next: C++98 Thread-Local Edits,  Up: Thread-Local
45439
454406.61.1 ISO/IEC 9899:1999 Edits for Thread-Local Storage
45441-------------------------------------------------------
45442
45443The following are a set of changes to ISO/IEC 9899:1999 (aka C99) that
45444document the exact semantics of the language extension.
45445
45446   * '5.1.2 Execution environments'
45447
45448     Add new text after paragraph 1
45449
45450          Within either execution environment, a "thread" is a flow of
45451          control within a program.  It is implementation defined
45452          whether or not there may be more than one thread associated
45453          with a program.  It is implementation defined how threads
45454          beyond the first are created, the name and type of the
45455          function called at thread startup, and how threads may be
45456          terminated.  However, objects with thread storage duration
45457          shall be initialized before thread startup.
45458
45459   * '6.2.4 Storage durations of objects'
45460
45461     Add new text before paragraph 3
45462
45463          An object whose identifier is declared with the storage-class
45464          specifier '__thread' has "thread storage duration".  Its
45465          lifetime is the entire execution of the thread, and its stored
45466          value is initialized only once, prior to thread startup.
45467
45468   * '6.4.1 Keywords'
45469
45470     Add '__thread'.
45471
45472   * '6.7.1 Storage-class specifiers'
45473
45474     Add '__thread' to the list of storage class specifiers in paragraph
45475     1.
45476
45477     Change paragraph 2 to
45478
45479          With the exception of '__thread', at most one storage-class
45480          specifier may be given [...].  The '__thread' specifier may be
45481          used alone, or immediately following 'extern' or 'static'.
45482
45483     Add new text after paragraph 6
45484
45485          The declaration of an identifier for a variable that has block
45486          scope that specifies '__thread' shall also specify either
45487          'extern' or 'static'.
45488
45489          The '__thread' specifier shall be used only with variables.
45490
45491
45492File: gcc.info,  Node: C++98 Thread-Local Edits,  Prev: C99 Thread-Local Edits,  Up: Thread-Local
45493
454946.61.2 ISO/IEC 14882:1998 Edits for Thread-Local Storage
45495--------------------------------------------------------
45496
45497The following are a set of changes to ISO/IEC 14882:1998 (aka C++98)
45498that document the exact semantics of the language extension.
45499
45500   * [intro.execution]
45501
45502     New text after paragraph 4
45503
45504          A "thread" is a flow of control within the abstract machine.
45505          It is implementation defined whether or not there may be more
45506          than one thread.
45507
45508     New text after paragraph 7
45509
45510          It is unspecified whether additional action must be taken to
45511          ensure when and whether side effects are visible to other
45512          threads.
45513
45514   * [lex.key]
45515
45516     Add '__thread'.
45517
45518   * [basic.start.main]
45519
45520     Add after paragraph 5
45521
45522          The thread that begins execution at the 'main' function is
45523          called the "main thread".  It is implementation defined how
45524          functions beginning threads other than the main thread are
45525          designated or typed.  A function so designated, as well as the
45526          'main' function, is called a "thread startup function".  It is
45527          implementation defined what happens if a thread startup
45528          function returns.  It is implementation defined what happens
45529          to other threads when any thread calls 'exit'.
45530
45531   * [basic.start.init]
45532
45533     Add after paragraph 4
45534
45535          The storage for an object of thread storage duration shall be
45536          statically initialized before the first statement of the
45537          thread startup function.  An object of thread storage duration
45538          shall not require dynamic initialization.
45539
45540   * [basic.start.term]
45541
45542     Add after paragraph 3
45543
45544          The type of an object with thread storage duration shall not
45545          have a non-trivial destructor, nor shall it be an array type
45546          whose elements (directly or indirectly) have non-trivial
45547          destructors.
45548
45549   * [basic.stc]
45550
45551     Add "thread storage duration" to the list in paragraph 1.
45552
45553     Change paragraph 2
45554
45555          Thread, static, and automatic storage durations are associated
45556          with objects introduced by declarations [...].
45557
45558     Add '__thread' to the list of specifiers in paragraph 3.
45559
45560   * [basic.stc.thread]
45561
45562     New section before [basic.stc.static]
45563
45564          The keyword '__thread' applied to a non-local object gives the
45565          object thread storage duration.
45566
45567          A local variable or class data member declared both 'static'
45568          and '__thread' gives the variable or member thread storage
45569          duration.
45570
45571   * [basic.stc.static]
45572
45573     Change paragraph 1
45574
45575          All objects that have neither thread storage duration, dynamic
45576          storage duration nor are local [...].
45577
45578   * [dcl.stc]
45579
45580     Add '__thread' to the list in paragraph 1.
45581
45582     Change paragraph 1
45583
45584          With the exception of '__thread', at most one
45585          STORAGE-CLASS-SPECIFIER shall appear in a given
45586          DECL-SPECIFIER-SEQ.  The '__thread' specifier may be used
45587          alone, or immediately following the 'extern' or 'static'
45588          specifiers.  [...]
45589
45590     Add after paragraph 5
45591
45592          The '__thread' specifier can be applied only to the names of
45593          objects and to anonymous unions.
45594
45595   * [class.mem]
45596
45597     Add after paragraph 6
45598
45599          Non-'static' members shall not be '__thread'.
45600
45601
45602File: gcc.info,  Node: Binary constants,  Prev: Thread-Local,  Up: C Extensions
45603
456046.62 Binary constants using the '0b' prefix
45605===========================================
45606
45607Integer constants can be written as binary constants, consisting of a
45608sequence of '0' and '1' digits, prefixed by '0b' or '0B'.  This is
45609particularly useful in environments that operate a lot on the bit level
45610(like microcontrollers).
45611
45612 The following statements are identical:
45613
45614     i =       42;
45615     i =     0x2a;
45616     i =      052;
45617     i = 0b101010;
45618
45619 The type of these constants follows the same rules as for octal or
45620hexadecimal integer constants, so suffixes like 'L' or 'UL' can be
45621applied.
45622
45623
45624File: gcc.info,  Node: C++ Extensions,  Next: Objective-C,  Prev: C Extensions,  Up: Top
45625
456267 Extensions to the C++ Language
45627********************************
45628
45629The GNU compiler provides these extensions to the C++ language (and you
45630can also use most of the C language extensions in your C++ programs).
45631If you want to write code that checks whether these features are
45632available, you can test for the GNU compiler the same way as for C
45633programs: check for a predefined macro '__GNUC__'.  You can also use
45634'__GNUG__' to test specifically for GNU C++ (*note Predefined Macros:
45635(cpp)Common Predefined Macros.).
45636
45637* Menu:
45638
45639* C++ Volatiles::       What constitutes an access to a volatile object.
45640* Restricted Pointers:: C99 restricted pointers and references.
45641* Vague Linkage::       Where G++ puts inlines, vtables and such.
45642* C++ Interface::       You can use a single C++ header file for both
45643                        declarations and definitions.
45644* Template Instantiation:: Methods for ensuring that exactly one copy of
45645                        each needed template instantiation is emitted.
45646* Bound member functions:: You can extract a function pointer to the
45647                        method denoted by a '->*' or '.*' expression.
45648* C++ Attributes::      Variable, function, and type attributes for C++ only.
45649* Function Multiversioning::   Declaring multiple function versions.
45650* Namespace Association:: Strong using-directives for namespace association.
45651* Type Traits::         Compiler support for type traits
45652* Java Exceptions::     Tweaking exception handling to work with Java.
45653* Deprecated Features:: Things will disappear from G++.
45654* Backwards Compatibility:: Compatibilities with earlier definitions of C++.
45655
45656
45657File: gcc.info,  Node: C++ Volatiles,  Next: Restricted Pointers,  Up: C++ Extensions
45658
456597.1 When is a Volatile C++ Object Accessed?
45660===========================================
45661
45662The C++ standard differs from the C standard in its treatment of
45663volatile objects.  It fails to specify what constitutes a volatile
45664access, except to say that C++ should behave in a similar manner to C
45665with respect to volatiles, where possible.  However, the different
45666lvalueness of expressions between C and C++ complicate the behavior.
45667G++ behaves the same as GCC for volatile access, *Note Volatiles: C
45668Extensions, for a description of GCC's behavior.
45669
45670 The C and C++ language specifications differ when an object is accessed
45671in a void context:
45672
45673     volatile int *src = SOMEVALUE;
45674     *src;
45675
45676 The C++ standard specifies that such expressions do not undergo lvalue
45677to rvalue conversion, and that the type of the dereferenced object may
45678be incomplete.  The C++ standard does not specify explicitly that it is
45679lvalue to rvalue conversion that is responsible for causing an access.
45680There is reason to believe that it is, because otherwise certain simple
45681expressions become undefined.  However, because it would surprise most
45682programmers, G++ treats dereferencing a pointer to volatile object of
45683complete type as GCC would do for an equivalent type in C.  When the
45684object has incomplete type, G++ issues a warning; if you wish to force
45685an error, you must force a conversion to rvalue with, for instance, a
45686static cast.
45687
45688 When using a reference to volatile, G++ does not treat equivalent
45689expressions as accesses to volatiles, but instead issues a warning that
45690no volatile is accessed.  The rationale for this is that otherwise it
45691becomes difficult to determine where volatile access occur, and not
45692possible to ignore the return value from functions returning volatile
45693references.  Again, if you wish to force a read, cast the reference to
45694an rvalue.
45695
45696 G++ implements the same behavior as GCC does when assigning to a
45697volatile object--there is no reread of the assigned-to object, the
45698assigned rvalue is reused.  Note that in C++ assignment expressions are
45699lvalues, and if used as an lvalue, the volatile object is referred to.
45700For instance, VREF refers to VOBJ, as expected, in the following
45701example:
45702
45703     volatile int vobj;
45704     volatile int &vref = vobj = SOMETHING;
45705
45706
45707File: gcc.info,  Node: Restricted Pointers,  Next: Vague Linkage,  Prev: C++ Volatiles,  Up: C++ Extensions
45708
457097.2 Restricting Pointer Aliasing
45710================================
45711
45712As with the C front end, G++ understands the C99 feature of restricted
45713pointers, specified with the '__restrict__', or '__restrict' type
45714qualifier.  Because you cannot compile C++ by specifying the '-std=c99'
45715language flag, 'restrict' is not a keyword in C++.
45716
45717 In addition to allowing restricted pointers, you can specify restricted
45718references, which indicate that the reference is not aliased in the
45719local context.
45720
45721     void fn (int *__restrict__ rptr, int &__restrict__ rref)
45722     {
45723       /* ... */
45724     }
45725
45726In the body of 'fn', RPTR points to an unaliased integer and RREF refers
45727to a (different) unaliased integer.
45728
45729 You may also specify whether a member function's THIS pointer is
45730unaliased by using '__restrict__' as a member function qualifier.
45731
45732     void T::fn () __restrict__
45733     {
45734       /* ... */
45735     }
45736
45737Within the body of 'T::fn', THIS has the effective definition 'T
45738*__restrict__ const this'.  Notice that the interpretation of a
45739'__restrict__' member function qualifier is different to that of 'const'
45740or 'volatile' qualifier, in that it is applied to the pointer rather
45741than the object.  This is consistent with other compilers that implement
45742restricted pointers.
45743
45744 As with all outermost parameter qualifiers, '__restrict__' is ignored
45745in function definition matching.  This means you only need to specify
45746'__restrict__' in a function definition, rather than in a function
45747prototype as well.
45748
45749
45750File: gcc.info,  Node: Vague Linkage,  Next: C++ Interface,  Prev: Restricted Pointers,  Up: C++ Extensions
45751
457527.3 Vague Linkage
45753=================
45754
45755There are several constructs in C++ that require space in the object
45756file but are not clearly tied to a single translation unit.  We say that
45757these constructs have "vague linkage".  Typically such constructs are
45758emitted wherever they are needed, though sometimes we can be more
45759clever.
45760
45761Inline Functions
45762     Inline functions are typically defined in a header file which can
45763     be included in many different compilations.  Hopefully they can
45764     usually be inlined, but sometimes an out-of-line copy is necessary,
45765     if the address of the function is taken or if inlining fails.  In
45766     general, we emit an out-of-line copy in all translation units where
45767     one is needed.  As an exception, we only emit inline virtual
45768     functions with the vtable, since it always requires a copy.
45769
45770     Local static variables and string constants used in an inline
45771     function are also considered to have vague linkage, since they must
45772     be shared between all inlined and out-of-line instances of the
45773     function.
45774
45775VTables
45776     C++ virtual functions are implemented in most compilers using a
45777     lookup table, known as a vtable.  The vtable contains pointers to
45778     the virtual functions provided by a class, and each object of the
45779     class contains a pointer to its vtable (or vtables, in some
45780     multiple-inheritance situations).  If the class declares any
45781     non-inline, non-pure virtual functions, the first one is chosen as
45782     the "key method" for the class, and the vtable is only emitted in
45783     the translation unit where the key method is defined.
45784
45785     _Note:_ If the chosen key method is later defined as inline, the
45786     vtable is still emitted in every translation unit that defines it.
45787     Make sure that any inline virtuals are declared inline in the class
45788     body, even if they are not defined there.
45789
45790'type_info' objects
45791     C++ requires information about types to be written out in order to
45792     implement 'dynamic_cast', 'typeid' and exception handling.  For
45793     polymorphic classes (classes with virtual functions), the
45794     'type_info' object is written out along with the vtable so that
45795     'dynamic_cast' can determine the dynamic type of a class object at
45796     run time.  For all other types, we write out the 'type_info' object
45797     when it is used: when applying 'typeid' to an expression, throwing
45798     an object, or referring to a type in a catch clause or exception
45799     specification.
45800
45801Template Instantiations
45802     Most everything in this section also applies to template
45803     instantiations, but there are other options as well.  *Note Where's
45804     the Template?: Template Instantiation.
45805
45806 When used with GNU ld version 2.8 or later on an ELF system such as
45807GNU/Linux or Solaris 2, or on Microsoft Windows, duplicate copies of
45808these constructs will be discarded at link time.  This is known as
45809COMDAT support.
45810
45811 On targets that don't support COMDAT, but do support weak symbols, GCC
45812uses them.  This way one copy overrides all the others, but the unused
45813copies still take up space in the executable.
45814
45815 For targets that do not support either COMDAT or weak symbols, most
45816entities with vague linkage are emitted as local symbols to avoid
45817duplicate definition errors from the linker.  This does not happen for
45818local statics in inlines, however, as having multiple copies almost
45819certainly breaks things.
45820
45821 *Note Declarations and Definitions in One Header: C++ Interface, for
45822another way to control placement of these constructs.
45823
45824
45825File: gcc.info,  Node: C++ Interface,  Next: Template Instantiation,  Prev: Vague Linkage,  Up: C++ Extensions
45826
458277.4 #pragma interface and implementation
45828========================================
45829
45830'#pragma interface' and '#pragma implementation' provide the user with a
45831way of explicitly directing the compiler to emit entities with vague
45832linkage (and debugging information) in a particular translation unit.
45833
45834 _Note:_ As of GCC 2.7.2, these '#pragma's are not useful in most cases,
45835because of COMDAT support and the "key method" heuristic mentioned in
45836*note Vague Linkage::.  Using them can actually cause your program to
45837grow due to unnecessary out-of-line copies of inline functions.
45838Currently (3.4) the only benefit of these '#pragma's is reduced
45839duplication of debugging information, and that should be addressed soon
45840on DWARF 2 targets with the use of COMDAT groups.
45841
45842'#pragma interface'
45843'#pragma interface "SUBDIR/OBJECTS.h"'
45844     Use this directive in _header files_ that define object classes, to
45845     save space in most of the object files that use those classes.
45846     Normally, local copies of certain information (backup copies of
45847     inline member functions, debugging information, and the internal
45848     tables that implement virtual functions) must be kept in each
45849     object file that includes class definitions.  You can use this
45850     pragma to avoid such duplication.  When a header file containing
45851     '#pragma interface' is included in a compilation, this auxiliary
45852     information is not generated (unless the main input source file
45853     itself uses '#pragma implementation').  Instead, the object files
45854     contain references to be resolved at link time.
45855
45856     The second form of this directive is useful for the case where you
45857     have multiple headers with the same name in different directories.
45858     If you use this form, you must specify the same string to '#pragma
45859     implementation'.
45860
45861'#pragma implementation'
45862'#pragma implementation "OBJECTS.h"'
45863     Use this pragma in a _main input file_, when you want full output
45864     from included header files to be generated (and made globally
45865     visible).  The included header file, in turn, should use '#pragma
45866     interface'.  Backup copies of inline member functions, debugging
45867     information, and the internal tables used to implement virtual
45868     functions are all generated in implementation files.
45869
45870     If you use '#pragma implementation' with no argument, it applies to
45871     an include file with the same basename(1) as your source file.  For
45872     example, in 'allclass.cc', giving just '#pragma implementation' by
45873     itself is equivalent to '#pragma implementation "allclass.h"'.
45874
45875     In versions of GNU C++ prior to 2.6.0 'allclass.h' was treated as
45876     an implementation file whenever you would include it from
45877     'allclass.cc' even if you never specified '#pragma implementation'.
45878     This was deemed to be more trouble than it was worth, however, and
45879     disabled.
45880
45881     Use the string argument if you want a single implementation file to
45882     include code from multiple header files.  (You must also use
45883     '#include' to include the header file; '#pragma implementation'
45884     only specifies how to use the file--it doesn't actually include
45885     it.)
45886
45887     There is no way to split up the contents of a single header file
45888     into multiple implementation files.
45889
45890 '#pragma implementation' and '#pragma interface' also have an effect on
45891function inlining.
45892
45893 If you define a class in a header file marked with '#pragma interface',
45894the effect on an inline function defined in that class is similar to an
45895explicit 'extern' declaration--the compiler emits no code at all to
45896define an independent version of the function.  Its definition is used
45897only for inlining with its callers.
45898
45899 Conversely, when you include the same header file in a main source file
45900that declares it as '#pragma implementation', the compiler emits code
45901for the function itself; this defines a version of the function that can
45902be found via pointers (or by callers compiled without inlining).  If all
45903calls to the function can be inlined, you can avoid emitting the
45904function by compiling with '-fno-implement-inlines'.  If any calls are
45905not inlined, you will get linker errors.
45906
45907   ---------- Footnotes ----------
45908
45909   (1) A file's "basename" is the name stripped of all leading path
45910information and of trailing suffixes, such as '.h' or '.C' or '.cc'.
45911
45912
45913File: gcc.info,  Node: Template Instantiation,  Next: Bound member functions,  Prev: C++ Interface,  Up: C++ Extensions
45914
459157.5 Where's the Template?
45916=========================
45917
45918C++ templates are the first language feature to require more
45919intelligence from the environment than one usually finds on a UNIX
45920system.  Somehow the compiler and linker have to make sure that each
45921template instance occurs exactly once in the executable if it is needed,
45922and not at all otherwise.  There are two basic approaches to this
45923problem, which are referred to as the Borland model and the Cfront
45924model.
45925
45926Borland model
45927     Borland C++ solved the template instantiation problem by adding the
45928     code equivalent of common blocks to their linker; the compiler
45929     emits template instances in each translation unit that uses them,
45930     and the linker collapses them together.  The advantage of this
45931     model is that the linker only has to consider the object files
45932     themselves; there is no external complexity to worry about.  This
45933     disadvantage is that compilation time is increased because the
45934     template code is being compiled repeatedly.  Code written for this
45935     model tends to include definitions of all templates in the header
45936     file, since they must be seen to be instantiated.
45937
45938Cfront model
45939     The AT&T C++ translator, Cfront, solved the template instantiation
45940     problem by creating the notion of a template repository, an
45941     automatically maintained place where template instances are stored.
45942     A more modern version of the repository works as follows: As
45943     individual object files are built, the compiler places any template
45944     definitions and instantiations encountered in the repository.  At
45945     link time, the link wrapper adds in the objects in the repository
45946     and compiles any needed instances that were not previously emitted.
45947     The advantages of this model are more optimal compilation speed and
45948     the ability to use the system linker; to implement the Borland
45949     model a compiler vendor also needs to replace the linker.  The
45950     disadvantages are vastly increased complexity, and thus potential
45951     for error; for some code this can be just as transparent, but in
45952     practice it can been very difficult to build multiple programs in
45953     one directory and one program in multiple directories.  Code
45954     written for this model tends to separate definitions of non-inline
45955     member templates into a separate file, which should be compiled
45956     separately.
45957
45958 When used with GNU ld version 2.8 or later on an ELF system such as
45959GNU/Linux or Solaris 2, or on Microsoft Windows, G++ supports the
45960Borland model.  On other systems, G++ implements neither automatic
45961model.
45962
45963 You have the following options for dealing with template
45964instantiations:
45965
45966  1. Compile your template-using code with '-frepo'.  The compiler
45967     generates files with the extension '.rpo' listing all of the
45968     template instantiations used in the corresponding object files that
45969     could be instantiated there; the link wrapper, 'collect2', then
45970     updates the '.rpo' files to tell the compiler where to place those
45971     instantiations and rebuild any affected object files.  The
45972     link-time overhead is negligible after the first pass, as the
45973     compiler continues to place the instantiations in the same files.
45974
45975     This is your best option for application code written for the
45976     Borland model, as it just works.  Code written for the Cfront model
45977     needs to be modified so that the template definitions are available
45978     at one or more points of instantiation; usually this is as simple
45979     as adding '#include <tmethods.cc>' to the end of each template
45980     header.
45981
45982     For library code, if you want the library to provide all of the
45983     template instantiations it needs, just try to link all of its
45984     object files together; the link will fail, but cause the
45985     instantiations to be generated as a side effect.  Be warned,
45986     however, that this may cause conflicts if multiple libraries try to
45987     provide the same instantiations.  For greater control, use explicit
45988     instantiation as described in the next option.
45989
45990  2. Compile your code with '-fno-implicit-templates' to disable the
45991     implicit generation of template instances, and explicitly
45992     instantiate all the ones you use.  This approach requires more
45993     knowledge of exactly which instances you need than do the others,
45994     but it's less mysterious and allows greater control.  You can
45995     scatter the explicit instantiations throughout your program,
45996     perhaps putting them in the translation units where the instances
45997     are used or the translation units that define the templates
45998     themselves; you can put all of the explicit instantiations you need
45999     into one big file; or you can create small files like
46000
46001          #include "Foo.h"
46002          #include "Foo.cc"
46003
46004          template class Foo<int>;
46005          template ostream& operator <<
46006                          (ostream&, const Foo<int>&);
46007
46008     for each of the instances you need, and create a template
46009     instantiation library from those.
46010
46011     If you are using Cfront-model code, you can probably get away with
46012     not using '-fno-implicit-templates' when compiling files that don't
46013     '#include' the member template definitions.
46014
46015     If you use one big file to do the instantiations, you may want to
46016     compile it without '-fno-implicit-templates' so you get all of the
46017     instances required by your explicit instantiations (but not by any
46018     other files) without having to specify them as well.
46019
46020     The ISO C++ 2011 standard allows forward declaration of explicit
46021     instantiations (with 'extern').  G++ supports explicit
46022     instantiation declarations in C++98 mode and has extended the
46023     template instantiation syntax to support instantiation of the
46024     compiler support data for a template class (i.e. the vtable)
46025     without instantiating any of its members (with 'inline'), and
46026     instantiation of only the static data members of a template class,
46027     without the support data or member functions (with ('static'):
46028
46029          extern template int max (int, int);
46030          inline template class Foo<int>;
46031          static template class Foo<int>;
46032
46033  3. Do nothing.  Pretend G++ does implement automatic instantiation
46034     management.  Code written for the Borland model works fine, but
46035     each translation unit contains instances of each of the templates
46036     it uses.  In a large program, this can lead to an unacceptable
46037     amount of code duplication.
46038
46039
46040File: gcc.info,  Node: Bound member functions,  Next: C++ Attributes,  Prev: Template Instantiation,  Up: C++ Extensions
46041
460427.6 Extracting the function pointer from a bound pointer to member function
46043===========================================================================
46044
46045In C++, pointer to member functions (PMFs) are implemented using a wide
46046pointer of sorts to handle all the possible call mechanisms; the PMF
46047needs to store information about how to adjust the 'this' pointer, and
46048if the function pointed to is virtual, where to find the vtable, and
46049where in the vtable to look for the member function.  If you are using
46050PMFs in an inner loop, you should really reconsider that decision.  If
46051that is not an option, you can extract the pointer to the function that
46052would be called for a given object/PMF pair and call it directly inside
46053the inner loop, to save a bit of time.
46054
46055 Note that you still pay the penalty for the call through a function
46056pointer; on most modern architectures, such a call defeats the branch
46057prediction features of the CPU.  This is also true of normal virtual
46058function calls.
46059
46060 The syntax for this extension is
46061
46062     extern A a;
46063     extern int (A::*fp)();
46064     typedef int (*fptr)(A *);
46065
46066     fptr p = (fptr)(a.*fp);
46067
46068 For PMF constants (i.e. expressions of the form '&Klasse::Member'), no
46069object is needed to obtain the address of the function.  They can be
46070converted to function pointers directly:
46071
46072     fptr p1 = (fptr)(&A::foo);
46073
46074 You must specify '-Wno-pmf-conversions' to use this extension.
46075
46076
46077File: gcc.info,  Node: C++ Attributes,  Next: Function Multiversioning,  Prev: Bound member functions,  Up: C++ Extensions
46078
460797.7 C++-Specific Variable, Function, and Type Attributes
46080========================================================
46081
46082Some attributes only make sense for C++ programs.
46083
46084'abi_tag ("TAG", ...)'
46085     The 'abi_tag' attribute can be applied to a function or class
46086     declaration.  It modifies the mangled name of the function or class
46087     to incorporate the tag name, in order to distinguish the function
46088     or class from an earlier version with a different ABI; perhaps the
46089     class has changed size, or the function has a different return type
46090     that is not encoded in the mangled name.
46091
46092     The argument can be a list of strings of arbitrary length.  The
46093     strings are sorted on output, so the order of the list is
46094     unimportant.
46095
46096     A redeclaration of a function or class must not add new ABI tags,
46097     since doing so would change the mangled name.
46098
46099     The ABI tags apply to a name, so all instantiations and
46100     specializations of a template have the same tags.  The attribute
46101     will be ignored if applied to an explicit specialization or
46102     instantiation.
46103
46104     The '-Wabi-tag' flag enables a warning about a class which does not
46105     have all the ABI tags used by its subobjects and virtual functions;
46106     for users with code that needs to coexist with an earlier ABI,
46107     using this option can help to find all affected types that need to
46108     be tagged.
46109
46110'init_priority (PRIORITY)'
46111
46112     In Standard C++, objects defined at namespace scope are guaranteed
46113     to be initialized in an order in strict accordance with that of
46114     their definitions _in a given translation unit_.  No guarantee is
46115     made for initializations across translation units.  However, GNU
46116     C++ allows users to control the order of initialization of objects
46117     defined at namespace scope with the 'init_priority' attribute by
46118     specifying a relative PRIORITY, a constant integral expression
46119     currently bounded between 101 and 65535 inclusive.  Lower numbers
46120     indicate a higher priority.
46121
46122     In the following example, 'A' would normally be created before 'B',
46123     but the 'init_priority' attribute reverses that order:
46124
46125          Some_Class  A  __attribute__ ((init_priority (2000)));
46126          Some_Class  B  __attribute__ ((init_priority (543)));
46127
46128     Note that the particular values of PRIORITY do not matter; only
46129     their relative ordering.
46130
46131'java_interface'
46132
46133     This type attribute informs C++ that the class is a Java interface.
46134     It may only be applied to classes declared within an 'extern
46135     "Java"' block.  Calls to methods declared in this interface are
46136     dispatched using GCJ's interface table mechanism, instead of
46137     regular virtual table dispatch.
46138
46139'warn_unused'
46140
46141     For C++ types with non-trivial constructors and/or destructors it
46142     is impossible for the compiler to determine whether a variable of
46143     this type is truly unused if it is not referenced.  This type
46144     attribute informs the compiler that variables of this type should
46145     be warned about if they appear to be unused, just like variables of
46146     fundamental types.
46147
46148     This attribute is appropriate for types which just represent a
46149     value, such as 'std::string'; it is not appropriate for types which
46150     control a resource, such as 'std::mutex'.
46151
46152     This attribute is also accepted in C, but it is unnecessary because
46153     C does not have constructors or destructors.
46154
46155 See also *note Namespace Association::.
46156
46157
46158File: gcc.info,  Node: Function Multiversioning,  Next: Namespace Association,  Prev: C++ Attributes,  Up: C++ Extensions
46159
461607.8 Function Multiversioning
46161============================
46162
46163With the GNU C++ front end, for target i386, you may specify multiple
46164versions of a function, where each function is specialized for a
46165specific target feature.  At runtime, the appropriate version of the
46166function is automatically executed depending on the characteristics of
46167the execution platform.  Here is an example.
46168
46169     __attribute__ ((target ("default")))
46170     int foo ()
46171     {
46172       // The default version of foo.
46173       return 0;
46174     }
46175
46176     __attribute__ ((target ("sse4.2")))
46177     int foo ()
46178     {
46179       // foo version for SSE4.2
46180       return 1;
46181     }
46182
46183     __attribute__ ((target ("arch=atom")))
46184     int foo ()
46185     {
46186       // foo version for the Intel ATOM processor
46187       return 2;
46188     }
46189
46190     __attribute__ ((target ("arch=amdfam10")))
46191     int foo ()
46192     {
46193       // foo version for the AMD Family 0x10 processors.
46194       return 3;
46195     }
46196
46197     int main ()
46198     {
46199       int (*p)() = &foo;
46200       assert ((*p) () == foo ());
46201       return 0;
46202     }
46203
46204 In the above example, four versions of function foo are created.  The
46205first version of foo with the target attribute "default" is the default
46206version.  This version gets executed when no other target specific
46207version qualifies for execution on a particular platform.  A new version
46208of foo is created by using the same function signature but with a
46209different target string.  Function foo is called or a pointer to it is
46210taken just like a regular function.  GCC takes care of doing the
46211dispatching to call the right version at runtime.  Refer to the GCC wiki
46212on Function Multiversioning
46213(http://gcc.gnu.org/wiki/FunctionMultiVersioning) for more details.
46214
46215
46216File: gcc.info,  Node: Namespace Association,  Next: Type Traits,  Prev: Function Multiversioning,  Up: C++ Extensions
46217
462187.9 Namespace Association
46219=========================
46220
46221*Caution:* The semantics of this extension are equivalent to C++ 2011
46222inline namespaces.  Users should use inline namespaces instead as this
46223extension will be removed in future versions of G++.
46224
46225 A using-directive with '__attribute ((strong))' is stronger than a
46226normal using-directive in two ways:
46227
46228   * Templates from the used namespace can be specialized and explicitly
46229     instantiated as though they were members of the using namespace.
46230
46231   * The using namespace is considered an associated namespace of all
46232     templates in the used namespace for purposes of argument-dependent
46233     name lookup.
46234
46235 The used namespace must be nested within the using namespace so that
46236normal unqualified lookup works properly.
46237
46238 This is useful for composing a namespace transparently from
46239implementation namespaces.  For example:
46240
46241     namespace std {
46242       namespace debug {
46243         template <class T> struct A { };
46244       }
46245       using namespace debug __attribute ((__strong__));
46246       template <> struct A<int> { };   // OK to specialize
46247
46248       template <class T> void f (A<T>);
46249     }
46250
46251     int main()
46252     {
46253       f (std::A<float>());             // lookup finds std::f
46254       f (std::A<int>());
46255     }
46256
46257
46258File: gcc.info,  Node: Type Traits,  Next: Java Exceptions,  Prev: Namespace Association,  Up: C++ Extensions
46259
462607.10 Type Traits
46261================
46262
46263The C++ front end implements syntactic extensions that allow
46264compile-time determination of various characteristics of a type (or of a
46265pair of types).
46266
46267'__has_nothrow_assign (type)'
46268     If 'type' is const qualified or is a reference type then the trait
46269     is false.  Otherwise if '__has_trivial_assign (type)' is true then
46270     the trait is true, else if 'type' is a cv class or union type with
46271     copy assignment operators that are known not to throw an exception
46272     then the trait is true, else it is false.  Requires: 'type' shall
46273     be a complete type, (possibly cv-qualified) 'void', or an array of
46274     unknown bound.
46275
46276'__has_nothrow_copy (type)'
46277     If '__has_trivial_copy (type)' is true then the trait is true, else
46278     if 'type' is a cv class or union type with copy constructors that
46279     are known not to throw an exception then the trait is true, else it
46280     is false.  Requires: 'type' shall be a complete type, (possibly
46281     cv-qualified) 'void', or an array of unknown bound.
46282
46283'__has_nothrow_constructor (type)'
46284     If '__has_trivial_constructor (type)' is true then the trait is
46285     true, else if 'type' is a cv class or union type (or array thereof)
46286     with a default constructor that is known not to throw an exception
46287     then the trait is true, else it is false.  Requires: 'type' shall
46288     be a complete type, (possibly cv-qualified) 'void', or an array of
46289     unknown bound.
46290
46291'__has_trivial_assign (type)'
46292     If 'type' is const qualified or is a reference type then the trait
46293     is false.  Otherwise if '__is_pod (type)' is true then the trait is
46294     true, else if 'type' is a cv class or union type with a trivial
46295     copy assignment ([class.copy]) then the trait is true, else it is
46296     false.  Requires: 'type' shall be a complete type, (possibly
46297     cv-qualified) 'void', or an array of unknown bound.
46298
46299'__has_trivial_copy (type)'
46300     If '__is_pod (type)' is true or 'type' is a reference type then the
46301     trait is true, else if 'type' is a cv class or union type with a
46302     trivial copy constructor ([class.copy]) then the trait is true,
46303     else it is false.  Requires: 'type' shall be a complete type,
46304     (possibly cv-qualified) 'void', or an array of unknown bound.
46305
46306'__has_trivial_constructor (type)'
46307     If '__is_pod (type)' is true then the trait is true, else if 'type'
46308     is a cv class or union type (or array thereof) with a trivial
46309     default constructor ([class.ctor]) then the trait is true, else it
46310     is false.  Requires: 'type' shall be a complete type, (possibly
46311     cv-qualified) 'void', or an array of unknown bound.
46312
46313'__has_trivial_destructor (type)'
46314     If '__is_pod (type)' is true or 'type' is a reference type then the
46315     trait is true, else if 'type' is a cv class or union type (or array
46316     thereof) with a trivial destructor ([class.dtor]) then the trait is
46317     true, else it is false.  Requires: 'type' shall be a complete type,
46318     (possibly cv-qualified) 'void', or an array of unknown bound.
46319
46320'__has_virtual_destructor (type)'
46321     If 'type' is a class type with a virtual destructor ([class.dtor])
46322     then the trait is true, else it is false.  Requires: 'type' shall
46323     be a complete type, (possibly cv-qualified) 'void', or an array of
46324     unknown bound.
46325
46326'__is_abstract (type)'
46327     If 'type' is an abstract class ([class.abstract]) then the trait is
46328     true, else it is false.  Requires: 'type' shall be a complete type,
46329     (possibly cv-qualified) 'void', or an array of unknown bound.
46330
46331'__is_base_of (base_type, derived_type)'
46332     If 'base_type' is a base class of 'derived_type' ([class.derived])
46333     then the trait is true, otherwise it is false.  Top-level cv
46334     qualifications of 'base_type' and 'derived_type' are ignored.  For
46335     the purposes of this trait, a class type is considered is own base.
46336     Requires: if '__is_class (base_type)' and '__is_class
46337     (derived_type)' are true and 'base_type' and 'derived_type' are not
46338     the same type (disregarding cv-qualifiers), 'derived_type' shall be
46339     a complete type.  Diagnostic is produced if this requirement is not
46340     met.
46341
46342'__is_class (type)'
46343     If 'type' is a cv class type, and not a union type
46344     ([basic.compound]) the trait is true, else it is false.
46345
46346'__is_empty (type)'
46347     If '__is_class (type)' is false then the trait is false.  Otherwise
46348     'type' is considered empty if and only if: 'type' has no non-static
46349     data members, or all non-static data members, if any, are
46350     bit-fields of length 0, and 'type' has no virtual members, and
46351     'type' has no virtual base classes, and 'type' has no base classes
46352     'base_type' for which '__is_empty (base_type)' is false.  Requires:
46353     'type' shall be a complete type, (possibly cv-qualified) 'void', or
46354     an array of unknown bound.
46355
46356'__is_enum (type)'
46357     If 'type' is a cv enumeration type ([basic.compound]) the trait is
46358     true, else it is false.
46359
46360'__is_literal_type (type)'
46361     If 'type' is a literal type ([basic.types]) the trait is true, else
46362     it is false.  Requires: 'type' shall be a complete type, (possibly
46363     cv-qualified) 'void', or an array of unknown bound.
46364
46365'__is_pod (type)'
46366     If 'type' is a cv POD type ([basic.types]) then the trait is true,
46367     else it is false.  Requires: 'type' shall be a complete type,
46368     (possibly cv-qualified) 'void', or an array of unknown bound.
46369
46370'__is_polymorphic (type)'
46371     If 'type' is a polymorphic class ([class.virtual]) then the trait
46372     is true, else it is false.  Requires: 'type' shall be a complete
46373     type, (possibly cv-qualified) 'void', or an array of unknown bound.
46374
46375'__is_standard_layout (type)'
46376     If 'type' is a standard-layout type ([basic.types]) the trait is
46377     true, else it is false.  Requires: 'type' shall be a complete type,
46378     (possibly cv-qualified) 'void', or an array of unknown bound.
46379
46380'__is_trivial (type)'
46381     If 'type' is a trivial type ([basic.types]) the trait is true, else
46382     it is false.  Requires: 'type' shall be a complete type, (possibly
46383     cv-qualified) 'void', or an array of unknown bound.
46384
46385'__is_union (type)'
46386     If 'type' is a cv union type ([basic.compound]) the trait is true,
46387     else it is false.
46388
46389'__underlying_type (type)'
46390     The underlying type of 'type'.  Requires: 'type' shall be an
46391     enumeration type ([dcl.enum]).
46392
46393
46394File: gcc.info,  Node: Java Exceptions,  Next: Deprecated Features,  Prev: Type Traits,  Up: C++ Extensions
46395
463967.11 Java Exceptions
46397====================
46398
46399The Java language uses a slightly different exception handling model
46400from C++.  Normally, GNU C++ automatically detects when you are writing
46401C++ code that uses Java exceptions, and handle them appropriately.
46402However, if C++ code only needs to execute destructors when Java
46403exceptions are thrown through it, GCC guesses incorrectly.  Sample
46404problematic code is:
46405
46406       struct S { ~S(); };
46407       extern void bar();    // is written in Java, and may throw exceptions
46408       void foo()
46409       {
46410         S s;
46411         bar();
46412       }
46413
46414The usual effect of an incorrect guess is a link failure, complaining of
46415a missing routine called '__gxx_personality_v0'.
46416
46417 You can inform the compiler that Java exceptions are to be used in a
46418translation unit, irrespective of what it might think, by writing
46419'#pragma GCC java_exceptions' at the head of the file.  This '#pragma'
46420must appear before any functions that throw or catch exceptions, or run
46421destructors when exceptions are thrown through them.
46422
46423 You cannot mix Java and C++ exceptions in the same translation unit.
46424It is believed to be safe to throw a C++ exception from one file through
46425another file compiled for the Java exception model, or vice versa, but
46426there may be bugs in this area.
46427
46428
46429File: gcc.info,  Node: Deprecated Features,  Next: Backwards Compatibility,  Prev: Java Exceptions,  Up: C++ Extensions
46430
464317.12 Deprecated Features
46432========================
46433
46434In the past, the GNU C++ compiler was extended to experiment with new
46435features, at a time when the C++ language was still evolving.  Now that
46436the C++ standard is complete, some of those features are superseded by
46437superior alternatives.  Using the old features might cause a warning in
46438some cases that the feature will be dropped in the future.  In other
46439cases, the feature might be gone already.
46440
46441 While the list below is not exhaustive, it documents some of the
46442options that are now deprecated:
46443
46444'-fexternal-templates'
46445'-falt-external-templates'
46446     These are two of the many ways for G++ to implement template
46447     instantiation.  *Note Template Instantiation::.  The C++ standard
46448     clearly defines how template definitions have to be organized
46449     across implementation units.  G++ has an implicit instantiation
46450     mechanism that should work just fine for standard-conforming code.
46451
46452'-fstrict-prototype'
46453'-fno-strict-prototype'
46454     Previously it was possible to use an empty prototype parameter list
46455     to indicate an unspecified number of parameters (like C), rather
46456     than no parameters, as C++ demands.  This feature has been removed,
46457     except where it is required for backwards compatibility.  *Note
46458     Backwards Compatibility::.
46459
46460 G++ allows a virtual function returning 'void *' to be overridden by
46461one returning a different pointer type.  This extension to the covariant
46462return type rules is now deprecated and will be removed from a future
46463version.
46464
46465 The G++ minimum and maximum operators ('<?' and '>?') and their
46466compound forms ('<?=') and '>?=') have been deprecated and are now
46467removed from G++.  Code using these operators should be modified to use
46468'std::min' and 'std::max' instead.
46469
46470 The named return value extension has been deprecated, and is now
46471removed from G++.
46472
46473 The use of initializer lists with new expressions has been deprecated,
46474and is now removed from G++.
46475
46476 Floating and complex non-type template parameters have been deprecated,
46477and are now removed from G++.
46478
46479 The implicit typename extension has been deprecated and is now removed
46480from G++.
46481
46482 The use of default arguments in function pointers, function typedefs
46483and other places where they are not permitted by the standard is
46484deprecated and will be removed from a future version of G++.
46485
46486 G++ allows floating-point literals to appear in integral constant
46487expressions, e.g. ' enum E { e = int(2.2 * 3.7) } ' This extension is
46488deprecated and will be removed from a future version.
46489
46490 G++ allows static data members of const floating-point type to be
46491declared with an initializer in a class definition.  The standard only
46492allows initializers for static members of const integral types and const
46493enumeration types so this extension has been deprecated and will be
46494removed from a future version.
46495
46496
46497File: gcc.info,  Node: Backwards Compatibility,  Prev: Deprecated Features,  Up: C++ Extensions
46498
464997.13 Backwards Compatibility
46500============================
46501
46502Now that there is a definitive ISO standard C++, G++ has a specification
46503to adhere to.  The C++ language evolved over time, and features that
46504used to be acceptable in previous drafts of the standard, such as the
46505ARM [Annotated C++ Reference Manual], are no longer accepted.  In order
46506to allow compilation of C++ written to such drafts, G++ contains some
46507backwards compatibilities.  _All such backwards compatibility features
46508are liable to disappear in future versions of G++._  They should be
46509considered deprecated.  *Note Deprecated Features::.
46510
46511'For scope'
46512     If a variable is declared at for scope, it used to remain in scope
46513     until the end of the scope that contained the for statement (rather
46514     than just within the for scope).  G++ retains this, but issues a
46515     warning, if such a variable is accessed outside the for scope.
46516
46517'Implicit C language'
46518     Old C system header files did not contain an 'extern "C" {...}'
46519     scope to set the language.  On such systems, all header files are
46520     implicitly scoped inside a C language scope.  Also, an empty
46521     prototype '()' is treated as an unspecified number of arguments,
46522     rather than no arguments, as C++ demands.
46523
46524
46525File: gcc.info,  Node: Objective-C,  Next: Compatibility,  Prev: C++ Extensions,  Up: Top
46526
465278 GNU Objective-C features
46528**************************
46529
46530This document is meant to describe some of the GNU Objective-C features.
46531It is not intended to teach you Objective-C. There are several resources
46532on the Internet that present the language.
46533
46534* Menu:
46535
46536* GNU Objective-C runtime API::
46537* Executing code before main::
46538* Type encoding::
46539* Garbage Collection::
46540* Constant string objects::
46541* compatibility_alias::
46542* Exceptions::
46543* Synchronization::
46544* Fast enumeration::
46545* Messaging with the GNU Objective-C runtime::
46546
46547
46548File: gcc.info,  Node: GNU Objective-C runtime API,  Next: Executing code before main,  Up: Objective-C
46549
465508.1 GNU Objective-C runtime API
46551===============================
46552
46553This section is specific for the GNU Objective-C runtime.  If you are
46554using a different runtime, you can skip it.
46555
46556 The GNU Objective-C runtime provides an API that allows you to interact
46557with the Objective-C runtime system, querying the live runtime
46558structures and even manipulating them.  This allows you for example to
46559inspect and navigate classes, methods and protocols; to define new
46560classes or new methods, and even to modify existing classes or
46561protocols.
46562
46563 If you are using a "Foundation" library such as GNUstep-Base, this
46564library will provide you with a rich set of functionality to do most of
46565the inspection tasks, and you probably will only need direct access to
46566the GNU Objective-C runtime API to define new classes or methods.
46567
46568* Menu:
46569
46570* Modern GNU Objective-C runtime API::
46571* Traditional GNU Objective-C runtime API::
46572
46573
46574File: gcc.info,  Node: Modern GNU Objective-C runtime API,  Next: Traditional GNU Objective-C runtime API,  Up: GNU Objective-C runtime API
46575
465768.1.1 Modern GNU Objective-C runtime API
46577----------------------------------------
46578
46579The GNU Objective-C runtime provides an API which is similar to the one
46580provided by the "Objective-C 2.0" Apple/NeXT Objective-C runtime.  The
46581API is documented in the public header files of the GNU Objective-C
46582runtime:
46583
46584   * 'objc/objc.h': this is the basic Objective-C header file, defining
46585     the basic Objective-C types such as 'id', 'Class' and 'BOOL'.  You
46586     have to include this header to do almost anything with Objective-C.
46587
46588   * 'objc/runtime.h': this header declares most of the public runtime
46589     API functions allowing you to inspect and manipulate the
46590     Objective-C runtime data structures.  These functions are fairly
46591     standardized across Objective-C runtimes and are almost identical
46592     to the Apple/NeXT Objective-C runtime ones.  It does not declare
46593     functions in some specialized areas (constructing and forwarding
46594     message invocations, threading) which are in the other headers
46595     below.  You have to include 'objc/objc.h' and 'objc/runtime.h' to
46596     use any of the functions, such as 'class_getName()', declared in
46597     'objc/runtime.h'.
46598
46599   * 'objc/message.h': this header declares public functions used to
46600     construct, deconstruct and forward message invocations.  Because
46601     messaging is done in quite a different way on different runtimes,
46602     functions in this header are specific to the GNU Objective-C
46603     runtime implementation.
46604
46605   * 'objc/objc-exception.h': this header declares some public functions
46606     related to Objective-C exceptions.  For example functions in this
46607     header allow you to throw an Objective-C exception from plain C/C++
46608     code.
46609
46610   * 'objc/objc-sync.h': this header declares some public functions
46611     related to the Objective-C '@synchronized()' syntax, allowing you
46612     to emulate an Objective-C '@synchronized()' block in plain C/C++
46613     code.
46614
46615   * 'objc/thr.h': this header declares a public runtime API threading
46616     layer that is only provided by the GNU Objective-C runtime.  It
46617     declares functions such as 'objc_mutex_lock()', which provide a
46618     platform-independent set of threading functions.
46619
46620 The header files contain detailed documentation for each function in
46621the GNU Objective-C runtime API.
46622
46623
46624File: gcc.info,  Node: Traditional GNU Objective-C runtime API,  Prev: Modern GNU Objective-C runtime API,  Up: GNU Objective-C runtime API
46625
466268.1.2 Traditional GNU Objective-C runtime API
46627---------------------------------------------
46628
46629The GNU Objective-C runtime used to provide a different API, which we
46630call the "traditional" GNU Objective-C runtime API. Functions belonging
46631to this API are easy to recognize because they use a different naming
46632convention, such as 'class_get_super_class()' (traditional API) instead
46633of 'class_getSuperclass()' (modern API). Software using this API
46634includes the file 'objc/objc-api.h' where it is declared.
46635
46636 Starting with GCC 4.7.0, the traditional GNU runtime API is no longer
46637available.
46638
46639
46640File: gcc.info,  Node: Executing code before main,  Next: Type encoding,  Prev: GNU Objective-C runtime API,  Up: Objective-C
46641
466428.2 '+load': Executing code before main
46643=======================================
46644
46645This section is specific for the GNU Objective-C runtime.  If you are
46646using a different runtime, you can skip it.
46647
46648 The GNU Objective-C runtime provides a way that allows you to execute
46649code before the execution of the program enters the 'main' function.
46650The code is executed on a per-class and a per-category basis, through a
46651special class method '+load'.
46652
46653 This facility is very useful if you want to initialize global variables
46654which can be accessed by the program directly, without sending a message
46655to the class first.  The usual way to initialize global variables, in
46656the '+initialize' method, might not be useful because '+initialize' is
46657only called when the first message is sent to a class object, which in
46658some cases could be too late.
46659
46660 Suppose for example you have a 'FileStream' class that declares
46661'Stdin', 'Stdout' and 'Stderr' as global variables, like below:
46662
46663
46664     FileStream *Stdin = nil;
46665     FileStream *Stdout = nil;
46666     FileStream *Stderr = nil;
46667
46668     @implementation FileStream
46669
46670     + (void)initialize
46671     {
46672         Stdin = [[FileStream new] initWithFd:0];
46673         Stdout = [[FileStream new] initWithFd:1];
46674         Stderr = [[FileStream new] initWithFd:2];
46675     }
46676
46677     /* Other methods here */
46678     @end
46679
46680
46681 In this example, the initialization of 'Stdin', 'Stdout' and 'Stderr'
46682in '+initialize' occurs too late.  The programmer can send a message to
46683one of these objects before the variables are actually initialized, thus
46684sending messages to the 'nil' object.  The '+initialize' method which
46685actually initializes the global variables is not invoked until the first
46686message is sent to the class object.  The solution would require these
46687variables to be initialized just before entering 'main'.
46688
46689 The correct solution of the above problem is to use the '+load' method
46690instead of '+initialize':
46691
46692
46693     @implementation FileStream
46694
46695     + (void)load
46696     {
46697         Stdin = [[FileStream new] initWithFd:0];
46698         Stdout = [[FileStream new] initWithFd:1];
46699         Stderr = [[FileStream new] initWithFd:2];
46700     }
46701
46702     /* Other methods here */
46703     @end
46704
46705
46706 The '+load' is a method that is not overridden by categories.  If a
46707class and a category of it both implement '+load', both methods are
46708invoked.  This allows some additional initializations to be performed in
46709a category.
46710
46711 This mechanism is not intended to be a replacement for '+initialize'.
46712You should be aware of its limitations when you decide to use it instead
46713of '+initialize'.
46714
46715* Menu:
46716
46717* What you can and what you cannot do in +load::
46718
46719
46720File: gcc.info,  Node: What you can and what you cannot do in +load,  Up: Executing code before main
46721
467228.2.1 What you can and what you cannot do in '+load'
46723----------------------------------------------------
46724
46725'+load' is to be used only as a last resort.  Because it is executed
46726very early, most of the Objective-C runtime machinery will not be ready
46727when '+load' is executed; hence '+load' works best for executing C code
46728that is independent on the Objective-C runtime.
46729
46730 The '+load' implementation in the GNU runtime guarantees you the
46731following things:
46732
46733   * you can write whatever C code you like;
46734
46735   * you can allocate and send messages to objects whose class is
46736     implemented in the same file;
46737
46738   * the '+load' implementation of all super classes of a class are
46739     executed before the '+load' of that class is executed;
46740
46741   * the '+load' implementation of a class is executed before the
46742     '+load' implementation of any category.
46743
46744 In particular, the following things, even if they can work in a
46745particular case, are not guaranteed:
46746
46747   * allocation of or sending messages to arbitrary objects;
46748
46749   * allocation of or sending messages to objects whose classes have a
46750     category implemented in the same file;
46751
46752   * sending messages to Objective-C constant strings ('@"this is a
46753     constant string"');
46754
46755 You should make no assumptions about receiving '+load' in sibling
46756classes when you write '+load' of a class.  The order in which sibling
46757classes receive '+load' is not guaranteed.
46758
46759 The order in which '+load' and '+initialize' are called could be
46760problematic if this matters.  If you don't allocate objects inside
46761'+load', it is guaranteed that '+load' is called before '+initialize'.
46762If you create an object inside '+load' the '+initialize' method of
46763object's class is invoked even if '+load' was not invoked.  Note if you
46764explicitly call '+load' on a class, '+initialize' will be called first.
46765To avoid possible problems try to implement only one of these methods.
46766
46767 The '+load' method is also invoked when a bundle is dynamically loaded
46768into your running program.  This happens automatically without any
46769intervening operation from you.  When you write bundles and you need to
46770write '+load' you can safely create and send messages to objects whose
46771classes already exist in the running program.  The same restrictions as
46772above apply to classes defined in bundle.
46773
46774
46775File: gcc.info,  Node: Type encoding,  Next: Garbage Collection,  Prev: Executing code before main,  Up: Objective-C
46776
467778.3 Type encoding
46778=================
46779
46780This is an advanced section.  Type encodings are used extensively by the
46781compiler and by the runtime, but you generally do not need to know about
46782them to use Objective-C.
46783
46784 The Objective-C compiler generates type encodings for all the types.
46785These type encodings are used at runtime to find out information about
46786selectors and methods and about objects and classes.
46787
46788 The types are encoded in the following way:
46789
46790'_Bool'            'B'
46791'char'             'c'
46792'unsigned char'    'C'
46793'short'            's'
46794'unsigned short'   'S'
46795'int'              'i'
46796'unsigned int'     'I'
46797'long'             'l'
46798'unsigned long'    'L'
46799'long long'        'q'
46800'unsigned long     'Q'
46801long'
46802'float'            'f'
46803'double'           'd'
46804'long double'      'D'
46805'void'             'v'
46806'id'               '@'
46807'Class'            '#'
46808'SEL'              ':'
46809'char*'            '*'
46810'enum'             an 'enum' is encoded exactly as the integer type
46811                   that the compiler uses for it, which depends on the
46812                   enumeration values.  Often the compiler users
46813                   'unsigned int', which is then encoded as 'I'.
46814unknown type       '?'
46815Complex types      'j' followed by the inner type.  For example
46816                   '_Complex double' is encoded as "jd".
46817bit-fields         'b' followed by the starting position of the
46818                   bit-field, the type of the bit-field and the size of
46819                   the bit-field (the bit-fields encoding was changed
46820                   from the NeXT's compiler encoding, see below)
46821
46822 The encoding of bit-fields has changed to allow bit-fields to be
46823properly handled by the runtime functions that compute sizes and
46824alignments of types that contain bit-fields.  The previous encoding
46825contained only the size of the bit-field.  Using only this information
46826it is not possible to reliably compute the size occupied by the
46827bit-field.  This is very important in the presence of the Boehm's
46828garbage collector because the objects are allocated using the typed
46829memory facility available in this collector.  The typed memory
46830allocation requires information about where the pointers are located
46831inside the object.
46832
46833 The position in the bit-field is the position, counting in bits, of the
46834bit closest to the beginning of the structure.
46835
46836 The non-atomic types are encoded as follows:
46837
46838pointers       '^' followed by the pointed type.
46839arrays         '[' followed by the number of elements in the array
46840               followed by the type of the elements followed by ']'
46841structures     '{' followed by the name of the structure (or '?' if the
46842               structure is unnamed), the '=' sign, the type of the
46843               members and by '}'
46844unions         '(' followed by the name of the structure (or '?' if the
46845               union is unnamed), the '=' sign, the type of the members
46846               followed by ')'
46847vectors        '![' followed by the vector_size (the number of bytes
46848               composing the vector) followed by a comma, followed by
46849               the alignment (in bytes) of the vector, followed by the
46850               type of the elements followed by ']'
46851
46852 Here are some types and their encodings, as they are generated by the
46853compiler on an i386 machine:
46854
46855
46856Objective-C type   Compiler encoding
46857     int a[10];    '[10i]'
46858     struct {      '{?=i[3f]b128i3b131i2c}'
46859       int i;
46860       float f[3];
46861       int a:3;
46862       int b:2;
46863       char c;
46864     }
46865     int a __attribute__ ((vector_size (16)));'![16,16i]' (alignment would depend on the machine)
46866
46867
46868 In addition to the types the compiler also encodes the type specifiers.
46869The table below describes the encoding of the current Objective-C type
46870specifiers:
46871
46872
46873Specifier          Encoding
46874'const'            'r'
46875'in'               'n'
46876'inout'            'N'
46877'out'              'o'
46878'bycopy'           'O'
46879'byref'            'R'
46880'oneway'           'V'
46881
46882
46883 The type specifiers are encoded just before the type.  Unlike types
46884however, the type specifiers are only encoded when they appear in method
46885argument types.
46886
46887 Note how 'const' interacts with pointers:
46888
46889
46890Objective-C type   Compiler encoding
46891     const int     'ri'
46892     const int*    '^ri'
46893     int *const    'r^i'
46894
46895
46896 'const int*' is a pointer to a 'const int', and so is encoded as '^ri'.
46897'int* const', instead, is a 'const' pointer to an 'int', and so is
46898encoded as 'r^i'.
46899
46900 Finally, there is a complication when encoding 'const char *' versus
46901'char * const'.  Because 'char *' is encoded as '*' and not as '^c',
46902there is no way to express the fact that 'r' applies to the pointer or
46903to the pointee.
46904
46905 Hence, it is assumed as a convention that 'r*' means 'const char *'
46906(since it is what is most often meant), and there is no way to encode
46907'char *const'.  'char *const' would simply be encoded as '*', and the
46908'const' is lost.
46909
46910* Menu:
46911
46912* Legacy type encoding::
46913* @encode::
46914* Method signatures::
46915
46916
46917File: gcc.info,  Node: Legacy type encoding,  Next: @encode,  Up: Type encoding
46918
469198.3.1 Legacy type encoding
46920--------------------------
46921
46922Unfortunately, historically GCC used to have a number of bugs in its
46923encoding code.  The NeXT runtime expects GCC to emit type encodings in
46924this historical format (compatible with GCC-3.3), so when using the NeXT
46925runtime, GCC will introduce on purpose a number of incorrect encodings:
46926
46927   * the read-only qualifier of the pointee gets emitted before the '^'.
46928     The read-only qualifier of the pointer itself gets ignored, unless
46929     it is a typedef.  Also, the 'r' is only emitted for the outermost
46930     type.
46931
46932   * 32-bit longs are encoded as 'l' or 'L', but not always.  For
46933     typedefs, the compiler uses 'i' or 'I' instead if encoding a struct
46934     field or a pointer.
46935
46936   * 'enum's are always encoded as 'i' (int) even if they are actually
46937     unsigned or long.
46938
46939 In addition to that, the NeXT runtime uses a different encoding for
46940bitfields.  It encodes them as 'b' followed by the size, without a bit
46941offset or the underlying field type.
46942
46943
46944File: gcc.info,  Node: @encode,  Next: Method signatures,  Prev: Legacy type encoding,  Up: Type encoding
46945
469468.3.2 @encode
46947-------------
46948
46949GNU Objective-C supports the '@encode' syntax that allows you to create
46950a type encoding from a C/Objective-C type.  For example, '@encode(int)'
46951is compiled by the compiler into '"i"'.
46952
46953 '@encode' does not support type qualifiers other than 'const'.  For
46954example, '@encode(const char*)' is valid and is compiled into '"r*"',
46955while '@encode(bycopy char *)' is invalid and will cause a compilation
46956error.
46957
46958
46959File: gcc.info,  Node: Method signatures,  Prev: @encode,  Up: Type encoding
46960
469618.3.3 Method signatures
46962-----------------------
46963
46964This section documents the encoding of method types, which is rarely
46965needed to use Objective-C. You should skip it at a first reading; the
46966runtime provides functions that will work on methods and can walk
46967through the list of parameters and interpret them for you.  These
46968functions are part of the public "API" and are the preferred way to
46969interact with method signatures from user code.
46970
46971 But if you need to debug a problem with method signatures and need to
46972know how they are implemented (i.e., the "ABI"), read on.
46973
46974 Methods have their "signature" encoded and made available to the
46975runtime.  The "signature" encodes all the information required to
46976dynamically build invocations of the method at runtime: return type and
46977arguments.
46978
46979 The "signature" is a null-terminated string, composed of the following:
46980
46981   * The return type, including type qualifiers.  For example, a method
46982     returning 'int' would have 'i' here.
46983
46984   * The total size (in bytes) required to pass all the parameters.
46985     This includes the two hidden parameters (the object 'self' and the
46986     method selector '_cmd').
46987
46988   * Each argument, with the type encoding, followed by the offset (in
46989     bytes) of the argument in the list of parameters.
46990
46991 For example, a method with no arguments and returning 'int' would have
46992the signature 'i8@0:4' if the size of a pointer is 4.  The signature is
46993interpreted as follows: the 'i' is the return type (an 'int'), the '8'
46994is the total size of the parameters in bytes (two pointers each of size
469954), the '@0' is the first parameter (an object at byte offset '0') and
46996':4' is the second parameter (a 'SEL' at byte offset '4').
46997
46998 You can easily find more examples by running the "strings" program on
46999an Objective-C object file compiled by GCC. You'll see a lot of strings
47000that look very much like 'i8@0:4'.  They are signatures of Objective-C
47001methods.
47002
47003
47004File: gcc.info,  Node: Garbage Collection,  Next: Constant string objects,  Prev: Type encoding,  Up: Objective-C
47005
470068.4 Garbage Collection
47007======================
47008
47009This section is specific for the GNU Objective-C runtime.  If you are
47010using a different runtime, you can skip it.
47011
47012 Support for garbage collection with the GNU runtime has been added by
47013using a powerful conservative garbage collector, known as the
47014Boehm-Demers-Weiser conservative garbage collector.
47015
47016 To enable the support for it you have to configure the compiler using
47017an additional argument, '--enable-objc-gc'.  This will build the
47018boehm-gc library, and build an additional runtime library which has
47019several enhancements to support the garbage collector.  The new library
47020has a new name, 'libobjc_gc.a' to not conflict with the
47021non-garbage-collected library.
47022
47023 When the garbage collector is used, the objects are allocated using the
47024so-called typed memory allocation mechanism available in the
47025Boehm-Demers-Weiser collector.  This mode requires precise information
47026on where pointers are located inside objects.  This information is
47027computed once per class, immediately after the class has been
47028initialized.
47029
47030 There is a new runtime function 'class_ivar_set_gcinvisible()' which
47031can be used to declare a so-called "weak pointer" reference.  Such a
47032pointer is basically hidden for the garbage collector; this can be
47033useful in certain situations, especially when you want to keep track of
47034the allocated objects, yet allow them to be collected.  This kind of
47035pointers can only be members of objects, you cannot declare a global
47036pointer as a weak reference.  Every type which is a pointer type can be
47037declared a weak pointer, including 'id', 'Class' and 'SEL'.
47038
47039 Here is an example of how to use this feature.  Suppose you want to
47040implement a class whose instances hold a weak pointer reference; the
47041following class does this:
47042
47043
47044     @interface WeakPointer : Object
47045     {
47046         const void* weakPointer;
47047     }
47048
47049     - initWithPointer:(const void*)p;
47050     - (const void*)weakPointer;
47051     @end
47052
47053
47054     @implementation WeakPointer
47055
47056     + (void)initialize
47057     {
47058       if (self == objc_lookUpClass ("WeakPointer"))
47059         class_ivar_set_gcinvisible (self, "weakPointer", YES);
47060     }
47061
47062     - initWithPointer:(const void*)p
47063     {
47064       weakPointer = p;
47065       return self;
47066     }
47067
47068     - (const void*)weakPointer
47069     {
47070       return weakPointer;
47071     }
47072
47073     @end
47074
47075
47076 Weak pointers are supported through a new type character specifier
47077represented by the '!' character.  The 'class_ivar_set_gcinvisible()'
47078function adds or removes this specifier to the string type description
47079of the instance variable named as argument.
47080
47081
47082File: gcc.info,  Node: Constant string objects,  Next: compatibility_alias,  Prev: Garbage Collection,  Up: Objective-C
47083
470848.5 Constant string objects
47085===========================
47086
47087GNU Objective-C provides constant string objects that are generated
47088directly by the compiler.  You declare a constant string object by
47089prefixing a C constant string with the character '@':
47090
47091       id myString = @"this is a constant string object";
47092
47093 The constant string objects are by default instances of the
47094'NXConstantString' class which is provided by the GNU Objective-C
47095runtime.  To get the definition of this class you must include the
47096'objc/NXConstStr.h' header file.
47097
47098 User defined libraries may want to implement their own constant string
47099class.  To be able to support them, the GNU Objective-C compiler
47100provides a new command line options
47101'-fconstant-string-class=CLASS-NAME'.  The provided class should adhere
47102to a strict structure, the same as 'NXConstantString''s structure:
47103
47104
47105     @interface MyConstantStringClass
47106     {
47107       Class isa;
47108       char *c_string;
47109       unsigned int len;
47110     }
47111     @end
47112
47113
47114 'NXConstantString' inherits from 'Object'; user class libraries may
47115choose to inherit the customized constant string class from a different
47116class than 'Object'.  There is no requirement in the methods the
47117constant string class has to implement, but the final ivar layout of the
47118class must be the compatible with the given structure.
47119
47120 When the compiler creates the statically allocated constant string
47121object, the 'c_string' field will be filled by the compiler with the
47122string; the 'length' field will be filled by the compiler with the
47123string length; the 'isa' pointer will be filled with 'NULL' by the
47124compiler, and it will later be fixed up automatically at runtime by the
47125GNU Objective-C runtime library to point to the class which was set by
47126the '-fconstant-string-class' option when the object file is loaded (if
47127you wonder how it works behind the scenes, the name of the class to use,
47128and the list of static objects to fixup, are stored by the compiler in
47129the object file in a place where the GNU runtime library will find them
47130at runtime).
47131
47132 As a result, when a file is compiled with the '-fconstant-string-class'
47133option, all the constant string objects will be instances of the class
47134specified as argument to this option.  It is possible to have multiple
47135compilation units referring to different constant string classes,
47136neither the compiler nor the linker impose any restrictions in doing
47137this.
47138
47139
47140File: gcc.info,  Node: compatibility_alias,  Next: Exceptions,  Prev: Constant string objects,  Up: Objective-C
47141
471428.6 compatibility_alias
47143=======================
47144
47145The keyword '@compatibility_alias' allows you to define a class name as
47146equivalent to another class name.  For example:
47147
47148     @compatibility_alias WOApplication GSWApplication;
47149
47150 tells the compiler that each time it encounters 'WOApplication' as a
47151class name, it should replace it with 'GSWApplication' (that is,
47152'WOApplication' is just an alias for 'GSWApplication').
47153
47154 There are some constraints on how this can be used--
47155
47156   * 'WOApplication' (the alias) must not be an existing class;
47157
47158   * 'GSWApplication' (the real class) must be an existing class.
47159
47160
47161File: gcc.info,  Node: Exceptions,  Next: Synchronization,  Prev: compatibility_alias,  Up: Objective-C
47162
471638.7 Exceptions
47164==============
47165
47166GNU Objective-C provides exception support built into the language, as
47167in the following example:
47168
47169       @try {
47170         ...
47171            @throw expr;
47172         ...
47173       }
47174       @catch (AnObjCClass *exc) {
47175         ...
47176           @throw expr;
47177         ...
47178           @throw;
47179         ...
47180       }
47181       @catch (AnotherClass *exc) {
47182         ...
47183       }
47184       @catch (id allOthers) {
47185         ...
47186       }
47187       @finally {
47188         ...
47189           @throw expr;
47190         ...
47191       }
47192
47193 The '@throw' statement may appear anywhere in an Objective-C or
47194Objective-C++ program; when used inside of a '@catch' block, the
47195'@throw' may appear without an argument (as shown above), in which case
47196the object caught by the '@catch' will be rethrown.
47197
47198 Note that only (pointers to) Objective-C objects may be thrown and
47199caught using this scheme.  When an object is thrown, it will be caught
47200by the nearest '@catch' clause capable of handling objects of that type,
47201analogously to how 'catch' blocks work in C++ and Java.  A '@catch(id
47202...)' clause (as shown above) may also be provided to catch any and all
47203Objective-C exceptions not caught by previous '@catch' clauses (if any).
47204
47205 The '@finally' clause, if present, will be executed upon exit from the
47206immediately preceding '@try ... @catch' section.  This will happen
47207regardless of whether any exceptions are thrown, caught or rethrown
47208inside the '@try ... @catch' section, analogously to the behavior of the
47209'finally' clause in Java.
47210
47211 There are several caveats to using the new exception mechanism:
47212
47213   * The '-fobjc-exceptions' command line option must be used when
47214     compiling Objective-C files that use exceptions.
47215
47216   * With the GNU runtime, exceptions are always implemented as "native"
47217     exceptions and it is recommended that the '-fexceptions' and
47218     '-shared-libgcc' options are used when linking.
47219
47220   * With the NeXT runtime, although currently designed to be binary
47221     compatible with 'NS_HANDLER'-style idioms provided by the
47222     'NSException' class, the new exceptions can only be used on Mac OS
47223     X 10.3 (Panther) and later systems, due to additional functionality
47224     needed in the NeXT Objective-C runtime.
47225
47226   * As mentioned above, the new exceptions do not support handling
47227     types other than Objective-C objects.  Furthermore, when used from
47228     Objective-C++, the Objective-C exception model does not
47229     interoperate with C++ exceptions at this time.  This means you
47230     cannot '@throw' an exception from Objective-C and 'catch' it in
47231     C++, or vice versa (i.e., 'throw ... @catch').
47232
47233
47234File: gcc.info,  Node: Synchronization,  Next: Fast enumeration,  Prev: Exceptions,  Up: Objective-C
47235
472368.8 Synchronization
47237===================
47238
47239GNU Objective-C provides support for synchronized blocks:
47240
47241       @synchronized (ObjCClass *guard) {
47242         ...
47243       }
47244
47245 Upon entering the '@synchronized' block, a thread of execution shall
47246first check whether a lock has been placed on the corresponding 'guard'
47247object by another thread.  If it has, the current thread shall wait
47248until the other thread relinquishes its lock.  Once 'guard' becomes
47249available, the current thread will place its own lock on it, execute the
47250code contained in the '@synchronized' block, and finally relinquish the
47251lock (thereby making 'guard' available to other threads).
47252
47253 Unlike Java, Objective-C does not allow for entire methods to be marked
47254'@synchronized'.  Note that throwing exceptions out of '@synchronized'
47255blocks is allowed, and will cause the guarding object to be unlocked
47256properly.
47257
47258 Because of the interactions between synchronization and exception
47259handling, you can only use '@synchronized' when compiling with
47260exceptions enabled, that is with the command line option
47261'-fobjc-exceptions'.
47262
47263
47264File: gcc.info,  Node: Fast enumeration,  Next: Messaging with the GNU Objective-C runtime,  Prev: Synchronization,  Up: Objective-C
47265
472668.9 Fast enumeration
47267====================
47268
47269* Menu:
47270
47271* Using fast enumeration::
47272* c99-like fast enumeration syntax::
47273* Fast enumeration details::
47274* Fast enumeration protocol::
47275
47276
47277File: gcc.info,  Node: Using fast enumeration,  Next: c99-like fast enumeration syntax,  Up: Fast enumeration
47278
472798.9.1 Using fast enumeration
47280----------------------------
47281
47282GNU Objective-C provides support for the fast enumeration syntax:
47283
47284       id array = ...;
47285       id object;
47286
47287       for (object in array)
47288       {
47289         /* Do something with 'object' */
47290       }
47291
47292 'array' needs to be an Objective-C object (usually a collection object,
47293for example an array, a dictionary or a set) which implements the "Fast
47294Enumeration Protocol" (see below).  If you are using a Foundation
47295library such as GNUstep Base or Apple Cocoa Foundation, all collection
47296objects in the library implement this protocol and can be used in this
47297way.
47298
47299 The code above would iterate over all objects in 'array'.  For each of
47300them, it assigns it to 'object', then executes the 'Do something with
47301'object'' statements.
47302
47303 Here is a fully worked-out example using a Foundation library (which
47304provides the implementation of 'NSArray', 'NSString' and 'NSLog'):
47305
47306       NSArray *array = [NSArray arrayWithObjects: @"1", @"2", @"3", nil];
47307       NSString *object;
47308
47309       for (object in array)
47310         NSLog (@"Iterating over %@", object);
47311
47312
47313File: gcc.info,  Node: c99-like fast enumeration syntax,  Next: Fast enumeration details,  Prev: Using fast enumeration,  Up: Fast enumeration
47314
473158.9.2 c99-like fast enumeration syntax
47316--------------------------------------
47317
47318A c99-like declaration syntax is also allowed:
47319
47320       id array = ...;
47321
47322       for (id object in array)
47323       {
47324         /* Do something with 'object'  */
47325       }
47326
47327 this is completely equivalent to:
47328
47329       id array = ...;
47330
47331       {
47332         id object;
47333         for (object in array)
47334         {
47335           /* Do something with 'object'  */
47336         }
47337       }
47338
47339 but can save some typing.
47340
47341 Note that the option '-std=c99' is not required to allow this syntax in
47342Objective-C.
47343
47344
47345File: gcc.info,  Node: Fast enumeration details,  Next: Fast enumeration protocol,  Prev: c99-like fast enumeration syntax,  Up: Fast enumeration
47346
473478.9.3 Fast enumeration details
47348------------------------------
47349
47350Here is a more technical description with the gory details.  Consider
47351the code
47352
47353       for (OBJECT EXPRESSION in COLLECTION EXPRESSION)
47354       {
47355         STATEMENTS
47356       }
47357
47358 here is what happens when you run it:
47359
47360   * 'COLLECTION EXPRESSION' is evaluated exactly once and the result is
47361     used as the collection object to iterate over.  This means it is
47362     safe to write code such as 'for (object in [NSDictionary
47363     keyEnumerator]) ...'.
47364
47365   * the iteration is implemented by the compiler by repeatedly getting
47366     batches of objects from the collection object using the fast
47367     enumeration protocol (see below), then iterating over all objects
47368     in the batch.  This is faster than a normal enumeration where
47369     objects are retrieved one by one (hence the name "fast
47370     enumeration").
47371
47372   * if there are no objects in the collection, then 'OBJECT EXPRESSION'
47373     is set to 'nil' and the loop immediately terminates.
47374
47375   * if there are objects in the collection, then for each object in the
47376     collection (in the order they are returned) 'OBJECT EXPRESSION' is
47377     set to the object, then 'STATEMENTS' are executed.
47378
47379   * 'STATEMENTS' can contain 'break' and 'continue' commands, which
47380     will abort the iteration or skip to the next loop iteration as
47381     expected.
47382
47383   * when the iteration ends because there are no more objects to
47384     iterate over, 'OBJECT EXPRESSION' is set to 'nil'.  This allows you
47385     to determine whether the iteration finished because a 'break'
47386     command was used (in which case 'OBJECT EXPRESSION' will remain set
47387     to the last object that was iterated over) or because it iterated
47388     over all the objects (in which case 'OBJECT EXPRESSION' will be set
47389     to 'nil').
47390
47391   * 'STATEMENTS' must not make any changes to the collection object; if
47392     they do, it is a hard error and the fast enumeration terminates by
47393     invoking 'objc_enumerationMutation', a runtime function that
47394     normally aborts the program but which can be customized by
47395     Foundation libraries via 'objc_set_mutation_handler' to do
47396     something different, such as raising an exception.
47397
47398
47399File: gcc.info,  Node: Fast enumeration protocol,  Prev: Fast enumeration details,  Up: Fast enumeration
47400
474018.9.4 Fast enumeration protocol
47402-------------------------------
47403
47404If you want your own collection object to be usable with fast
47405enumeration, you need to have it implement the method
47406
47407     - (unsigned long) countByEnumeratingWithState: (NSFastEnumerationState *)state
47408                                           objects: (id *)objects
47409                                             count: (unsigned long)len;
47410
47411 where 'NSFastEnumerationState' must be defined in your code as follows:
47412
47413     typedef struct
47414     {
47415       unsigned long state;
47416       id            *itemsPtr;
47417       unsigned long *mutationsPtr;
47418       unsigned long extra[5];
47419     } NSFastEnumerationState;
47420
47421 If no 'NSFastEnumerationState' is defined in your code, the compiler
47422will automatically replace 'NSFastEnumerationState *' with 'struct
47423__objcFastEnumerationState *', where that type is silently defined by
47424the compiler in an identical way.  This can be confusing and we
47425recommend that you define 'NSFastEnumerationState' (as shown above)
47426instead.
47427
47428 The method is called repeatedly during a fast enumeration to retrieve
47429batches of objects.  Each invocation of the method should retrieve the
47430next batch of objects.
47431
47432 The return value of the method is the number of objects in the current
47433batch; this should not exceed 'len', which is the maximum size of a
47434batch as requested by the caller.  The batch itself is returned in the
47435'itemsPtr' field of the 'NSFastEnumerationState' struct.
47436
47437 To help with returning the objects, the 'objects' array is a C array
47438preallocated by the caller (on the stack) of size 'len'.  In many cases
47439you can put the objects you want to return in that 'objects' array, then
47440do 'itemsPtr = objects'.  But you don't have to; if your collection
47441already has the objects to return in some form of C array, it could
47442return them from there instead.
47443
47444 The 'state' and 'extra' fields of the 'NSFastEnumerationState'
47445structure allows your collection object to keep track of the state of
47446the enumeration.  In a simple array implementation, 'state' may keep
47447track of the index of the last object that was returned, and 'extra' may
47448be unused.
47449
47450 The 'mutationsPtr' field of the 'NSFastEnumerationState' is used to
47451keep track of mutations.  It should point to a number; before working on
47452each object, the fast enumeration loop will check that this number has
47453not changed.  If it has, a mutation has happened and the fast
47454enumeration will abort.  So, 'mutationsPtr' could be set to point to
47455some sort of version number of your collection, which is increased by
47456one every time there is a change (for example when an object is added or
47457removed).  Or, if you are content with less strict mutation checks, it
47458could point to the number of objects in your collection or some other
47459value that can be checked to perform an approximate check that the
47460collection has not been mutated.
47461
47462 Finally, note how we declared the 'len' argument and the return value
47463to be of type 'unsigned long'.  They could also be declared to be of
47464type 'unsigned int' and everything would still work.
47465
47466
47467File: gcc.info,  Node: Messaging with the GNU Objective-C runtime,  Prev: Fast enumeration,  Up: Objective-C
47468
474698.10 Messaging with the GNU Objective-C runtime
47470===============================================
47471
47472This section is specific for the GNU Objective-C runtime.  If you are
47473using a different runtime, you can skip it.
47474
47475 The implementation of messaging in the GNU Objective-C runtime is
47476designed to be portable, and so is based on standard C.
47477
47478 Sending a message in the GNU Objective-C runtime is composed of two
47479separate steps.  First, there is a call to the lookup function,
47480'objc_msg_lookup ()' (or, in the case of messages to super,
47481'objc_msg_lookup_super ()').  This runtime function takes as argument
47482the receiver and the selector of the method to be called; it returns the
47483'IMP', that is a pointer to the function implementing the method.  The
47484second step of method invocation consists of casting this pointer
47485function to the appropriate function pointer type, and calling the
47486function pointed to it with the right arguments.
47487
47488 For example, when the compiler encounters a method invocation such as
47489'[object init]', it compiles it into a call to 'objc_msg_lookup (object,
47490@selector(init))' followed by a cast of the returned value to the
47491appropriate function pointer type, and then it calls it.
47492
47493* Menu:
47494
47495* Dynamically registering methods::
47496* Forwarding hook::
47497
47498
47499File: gcc.info,  Node: Dynamically registering methods,  Next: Forwarding hook,  Up: Messaging with the GNU Objective-C runtime
47500
475018.10.1 Dynamically registering methods
47502--------------------------------------
47503
47504If 'objc_msg_lookup()' does not find a suitable method implementation,
47505because the receiver does not implement the required method, it tries to
47506see if the class can dynamically register the method.
47507
47508 To do so, the runtime checks if the class of the receiver implements
47509the method
47510
47511     + (BOOL) resolveInstanceMethod: (SEL)selector;
47512
47513 in the case of an instance method, or
47514
47515     + (BOOL) resolveClassMethod: (SEL)selector;
47516
47517 in the case of a class method.  If the class implements it, the runtime
47518invokes it, passing as argument the selector of the original method, and
47519if it returns 'YES', the runtime tries the lookup again, which could now
47520succeed if a matching method was added dynamically by
47521'+resolveInstanceMethod:' or '+resolveClassMethod:'.
47522
47523 This allows classes to dynamically register methods (by adding them to
47524the class using 'class_addMethod') when they are first called.  To do
47525so, a class should implement '+resolveInstanceMethod:' (or, depending on
47526the case, '+resolveClassMethod:') and have it recognize the selectors of
47527methods that can be registered dynamically at runtime, register them,
47528and return 'YES'.  It should return 'NO' for methods that it does not
47529dynamically registered at runtime.
47530
47531 If '+resolveInstanceMethod:' (or '+resolveClassMethod:') is not
47532implemented or returns 'NO', the runtime then tries the forwarding hook.
47533
47534 Support for '+resolveInstanceMethod:' and 'resolveClassMethod:' was
47535added to the GNU Objective-C runtime in GCC version 4.6.
47536
47537
47538File: gcc.info,  Node: Forwarding hook,  Prev: Dynamically registering methods,  Up: Messaging with the GNU Objective-C runtime
47539
475408.10.2 Forwarding hook
47541----------------------
47542
47543The GNU Objective-C runtime provides a hook, called
47544'__objc_msg_forward2', which is called by 'objc_msg_lookup()' when it
47545can't find a method implementation in the runtime tables and after
47546calling '+resolveInstanceMethod:' and '+resolveClassMethod:' has been
47547attempted and did not succeed in dynamically registering the method.
47548
47549 To configure the hook, you set the global variable
47550'__objc_msg_forward2' to a function with the same argument and return
47551types of 'objc_msg_lookup()'.  When 'objc_msg_lookup()' can not find a
47552method implementation, it invokes the hook function you provided to get
47553a method implementation to return.  So, in practice
47554'__objc_msg_forward2' allows you to extend 'objc_msg_lookup()' by adding
47555some custom code that is called to do a further lookup when no standard
47556method implementation can be found using the normal lookup.
47557
47558 This hook is generally reserved for "Foundation" libraries such as
47559GNUstep Base, which use it to implement their high-level method
47560forwarding API, typically based around the 'forwardInvocation:' method.
47561So, unless you are implementing your own "Foundation" library, you
47562should not set this hook.
47563
47564 In a typical forwarding implementation, the '__objc_msg_forward2' hook
47565function determines the argument and return type of the method that is
47566being looked up, and then creates a function that takes these arguments
47567and has that return type, and returns it to the caller.  Creating this
47568function is non-trivial and is typically performed using a dedicated
47569library such as 'libffi'.
47570
47571 The forwarding method implementation thus created is returned by
47572'objc_msg_lookup()' and is executed as if it was a normal method
47573implementation.  When the forwarding method implementation is called, it
47574is usually expected to pack all arguments into some sort of object
47575(typically, an 'NSInvocation' in a "Foundation" library), and hand it
47576over to the programmer ('forwardInvocation:') who is then allowed to
47577manipulate the method invocation using a high-level API provided by the
47578"Foundation" library.  For example, the programmer may want to examine
47579the method invocation arguments and name and potentially change them
47580before forwarding the method invocation to one or more local objects
47581('performInvocation:') or even to remote objects (by using Distributed
47582Objects or some other mechanism).  When all this completes, the return
47583value is passed back and must be returned correctly to the original
47584caller.
47585
47586 Note that the GNU Objective-C runtime currently provides no support for
47587method forwarding or method invocations other than the
47588'__objc_msg_forward2' hook.
47589
47590 If the forwarding hook does not exist or returns 'NULL', the runtime
47591currently attempts forwarding using an older, deprecated API, and if
47592that fails, it aborts the program.  In future versions of the GNU
47593Objective-C runtime, the runtime will immediately abort.
47594
47595
47596File: gcc.info,  Node: Compatibility,  Next: Gcov,  Prev: Objective-C,  Up: Top
47597
475989 Binary Compatibility
47599**********************
47600
47601Binary compatibility encompasses several related concepts:
47602
47603"application binary interface (ABI)"
47604     The set of runtime conventions followed by all of the tools that
47605     deal with binary representations of a program, including compilers,
47606     assemblers, linkers, and language runtime support.  Some ABIs are
47607     formal with a written specification, possibly designed by multiple
47608     interested parties.  Others are simply the way things are actually
47609     done by a particular set of tools.
47610
47611"ABI conformance"
47612     A compiler conforms to an ABI if it generates code that follows all
47613     of the specifications enumerated by that ABI.  A library conforms
47614     to an ABI if it is implemented according to that ABI.  An
47615     application conforms to an ABI if it is built using tools that
47616     conform to that ABI and does not contain source code that
47617     specifically changes behavior specified by the ABI.
47618
47619"calling conventions"
47620     Calling conventions are a subset of an ABI that specify of how
47621     arguments are passed and function results are returned.
47622
47623"interoperability"
47624     Different sets of tools are interoperable if they generate files
47625     that can be used in the same program.  The set of tools includes
47626     compilers, assemblers, linkers, libraries, header files, startup
47627     files, and debuggers.  Binaries produced by different sets of tools
47628     are not interoperable unless they implement the same ABI.  This
47629     applies to different versions of the same tools as well as tools
47630     from different vendors.
47631
47632"intercallability"
47633     Whether a function in a binary built by one set of tools can call a
47634     function in a binary built by a different set of tools is a subset
47635     of interoperability.
47636
47637"implementation-defined features"
47638     Language standards include lists of implementation-defined features
47639     whose behavior can vary from one implementation to another.  Some
47640     of these features are normally covered by a platform's ABI and
47641     others are not.  The features that are not covered by an ABI
47642     generally affect how a program behaves, but not intercallability.
47643
47644"compatibility"
47645     Conformance to the same ABI and the same behavior of
47646     implementation-defined features are both relevant for
47647     compatibility.
47648
47649 The application binary interface implemented by a C or C++ compiler
47650affects code generation and runtime support for:
47651
47652   * size and alignment of data types
47653   * layout of structured types
47654   * calling conventions
47655   * register usage conventions
47656   * interfaces for runtime arithmetic support
47657   * object file formats
47658
47659 In addition, the application binary interface implemented by a C++
47660compiler affects code generation and runtime support for:
47661   * name mangling
47662   * exception handling
47663   * invoking constructors and destructors
47664   * layout, alignment, and padding of classes
47665   * layout and alignment of virtual tables
47666
47667 Some GCC compilation options cause the compiler to generate code that
47668does not conform to the platform's default ABI.  Other options cause
47669different program behavior for implementation-defined features that are
47670not covered by an ABI.  These options are provided for consistency with
47671other compilers that do not follow the platform's default ABI or the
47672usual behavior of implementation-defined features for the platform.  Be
47673very careful about using such options.
47674
47675 Most platforms have a well-defined ABI that covers C code, but ABIs
47676that cover C++ functionality are not yet common.
47677
47678 Starting with GCC 3.2, GCC binary conventions for C++ are based on a
47679written, vendor-neutral C++ ABI that was designed to be specific to
4768064-bit Itanium but also includes generic specifications that apply to
47681any platform.  This C++ ABI is also implemented by other compiler
47682vendors on some platforms, notably GNU/Linux and BSD systems.  We have
47683tried hard to provide a stable ABI that will be compatible with future
47684GCC releases, but it is possible that we will encounter problems that
47685make this difficult.  Such problems could include different
47686interpretations of the C++ ABI by different vendors, bugs in the ABI, or
47687bugs in the implementation of the ABI in different compilers.  GCC's
47688'-Wabi' switch warns when G++ generates code that is probably not
47689compatible with the C++ ABI.
47690
47691 The C++ library used with a C++ compiler includes the Standard C++
47692Library, with functionality defined in the C++ Standard, plus language
47693runtime support.  The runtime support is included in a C++ ABI, but
47694there is no formal ABI for the Standard C++ Library.  Two
47695implementations of that library are interoperable if one follows the
47696de-facto ABI of the other and if they are both built with the same
47697compiler, or with compilers that conform to the same ABI for C++
47698compiler and runtime support.
47699
47700 When G++ and another C++ compiler conform to the same C++ ABI, but the
47701implementations of the Standard C++ Library that they normally use do
47702not follow the same ABI for the Standard C++ Library, object files built
47703with those compilers can be used in the same program only if they use
47704the same C++ library.  This requires specifying the location of the C++
47705library header files when invoking the compiler whose usual library is
47706not being used.  The location of GCC's C++ header files depends on how
47707the GCC build was configured, but can be seen by using the G++ '-v'
47708option.  With default configuration options for G++ 3.3 the compile line
47709for a different C++ compiler needs to include
47710
47711         -IGCC_INSTALL_DIRECTORY/include/c++/3.3
47712
47713 Similarly, compiling code with G++ that must use a C++ library other
47714than the GNU C++ library requires specifying the location of the header
47715files for that other library.
47716
47717 The most straightforward way to link a program to use a particular C++
47718library is to use a C++ driver that specifies that C++ library by
47719default.  The 'g++' driver, for example, tells the linker where to find
47720GCC's C++ library ('libstdc++') plus the other libraries and startup
47721files it needs, in the proper order.
47722
47723 If a program must use a different C++ library and it's not possible to
47724do the final link using a C++ driver that uses that library by default,
47725it is necessary to tell 'g++' the location and name of that library.  It
47726might also be necessary to specify different startup files and other
47727runtime support libraries, and to suppress the use of GCC's support
47728libraries with one or more of the options '-nostdlib', '-nostartfiles',
47729and '-nodefaultlibs'.
47730
47731
47732File: gcc.info,  Node: Gcov,  Next: Trouble,  Prev: Compatibility,  Up: Top
47733
4773410 'gcov'--a Test Coverage Program
47735**********************************
47736
47737'gcov' is a tool you can use in conjunction with GCC to test code
47738coverage in your programs.
47739
47740* Menu:
47741
47742* Gcov Intro::                  Introduction to gcov.
47743* Invoking Gcov::               How to use gcov.
47744* Gcov and Optimization::       Using gcov with GCC optimization.
47745* Gcov Data Files::             The files used by gcov.
47746* Cross-profiling::             Data file relocation.
47747
47748
47749File: gcc.info,  Node: Gcov Intro,  Next: Invoking Gcov,  Up: Gcov
47750
4775110.1 Introduction to 'gcov'
47752===========================
47753
47754'gcov' is a test coverage program.  Use it in concert with GCC to
47755analyze your programs to help create more efficient, faster running code
47756and to discover untested parts of your program.  You can use 'gcov' as a
47757profiling tool to help discover where your optimization efforts will
47758best affect your code.  You can also use 'gcov' along with the other
47759profiling tool, 'gprof', to assess which parts of your code use the
47760greatest amount of computing time.
47761
47762 Profiling tools help you analyze your code's performance.  Using a
47763profiler such as 'gcov' or 'gprof', you can find out some basic
47764performance statistics, such as:
47765
47766   * how often each line of code executes
47767
47768   * what lines of code are actually executed
47769
47770   * how much computing time each section of code uses
47771
47772 Once you know these things about how your code works when compiled, you
47773can look at each module to see which modules should be optimized.
47774'gcov' helps you determine where to work on optimization.
47775
47776 Software developers also use coverage testing in concert with
47777testsuites, to make sure software is actually good enough for a release.
47778Testsuites can verify that a program works as expected; a coverage
47779program tests to see how much of the program is exercised by the
47780testsuite.  Developers can then determine what kinds of test cases need
47781to be added to the testsuites to create both better testing and a better
47782final product.
47783
47784 You should compile your code without optimization if you plan to use
47785'gcov' because the optimization, by combining some lines of code into
47786one function, may not give you as much information as you need to look
47787for 'hot spots' where the code is using a great deal of computer time.
47788Likewise, because 'gcov' accumulates statistics by line (at the lowest
47789resolution), it works best with a programming style that places only one
47790statement on each line.  If you use complicated macros that expand to
47791loops or to other control structures, the statistics are less
47792helpful--they only report on the line where the macro call appears.  If
47793your complex macros behave like functions, you can replace them with
47794inline functions to solve this problem.
47795
47796 'gcov' creates a logfile called 'SOURCEFILE.gcov' which indicates how
47797many times each line of a source file 'SOURCEFILE.c' has executed.  You
47798can use these logfiles along with 'gprof' to aid in fine-tuning the
47799performance of your programs.  'gprof' gives timing information you can
47800use along with the information you get from 'gcov'.
47801
47802 'gcov' works only on code compiled with GCC.  It is not compatible with
47803any other profiling or test coverage mechanism.
47804
47805
47806File: gcc.info,  Node: Invoking Gcov,  Next: Gcov and Optimization,  Prev: Gcov Intro,  Up: Gcov
47807
4780810.2 Invoking 'gcov'
47809====================
47810
47811     gcov [OPTIONS] FILES
47812
47813 'gcov' accepts the following options:
47814
47815'-h'
47816'--help'
47817     Display help about using 'gcov' (on the standard output), and exit
47818     without doing any further processing.
47819
47820'-v'
47821'--version'
47822     Display the 'gcov' version number (on the standard output), and
47823     exit without doing any further processing.
47824
47825'-a'
47826'--all-blocks'
47827     Write individual execution counts for every basic block.  Normally
47828     gcov outputs execution counts only for the main blocks of a line.
47829     With this option you can determine if blocks within a single line
47830     are not being executed.
47831
47832'-b'
47833'--branch-probabilities'
47834     Write branch frequencies to the output file, and write branch
47835     summary info to the standard output.  This option allows you to see
47836     how often each branch in your program was taken.  Unconditional
47837     branches will not be shown, unless the '-u' option is given.
47838
47839'-c'
47840'--branch-counts'
47841     Write branch frequencies as the number of branches taken, rather
47842     than the percentage of branches taken.
47843
47844'-n'
47845'--no-output'
47846     Do not create the 'gcov' output file.
47847
47848'-l'
47849'--long-file-names'
47850     Create long file names for included source files.  For example, if
47851     the header file 'x.h' contains code, and was included in the file
47852     'a.c', then running 'gcov' on the file 'a.c' will produce an output
47853     file called 'a.c##x.h.gcov' instead of 'x.h.gcov'.  This can be
47854     useful if 'x.h' is included in multiple source files and you want
47855     to see the individual contributions.  If you use the '-p' option,
47856     both the including and included file names will be complete path
47857     names.
47858
47859'-p'
47860'--preserve-paths'
47861     Preserve complete path information in the names of generated
47862     '.gcov' files.  Without this option, just the filename component is
47863     used.  With this option, all directories are used, with '/'
47864     characters translated to '#' characters, '.' directory components
47865     removed and unremoveable '..' components renamed to '^'.  This is
47866     useful if sourcefiles are in several different directories.
47867
47868'-r'
47869'--relative-only'
47870     Only output information about source files with a relative pathname
47871     (after source prefix elision).  Absolute paths are usually system
47872     header files and coverage of any inline functions therein is
47873     normally uninteresting.
47874
47875'-f'
47876'--function-summaries'
47877     Output summaries for each function in addition to the file level
47878     summary.
47879
47880'-o DIRECTORY|FILE'
47881'--object-directory DIRECTORY'
47882'--object-file FILE'
47883     Specify either the directory containing the gcov data files, or the
47884     object path name.  The '.gcno', and '.gcda' data files are searched
47885     for using this option.  If a directory is specified, the data files
47886     are in that directory and named after the input file name, without
47887     its extension.  If a file is specified here, the data files are
47888     named after that file, without its extension.
47889
47890'-s DIRECTORY'
47891'--source-prefix DIRECTORY'
47892     A prefix for source file names to remove when generating the output
47893     coverage files.  This option is useful when building in a separate
47894     directory, and the pathname to the source directory is not wanted
47895     when determining the output file names.  Note that this prefix
47896     detection is applied before determining whether the source file is
47897     absolute.
47898
47899'-u'
47900'--unconditional-branches'
47901     When branch probabilities are given, include those of unconditional
47902     branches.  Unconditional branches are normally not interesting.
47903
47904'-d'
47905'--display-progress'
47906     Display the progress on the standard output.
47907
47908'-i'
47909'--intermediate-format'
47910     Output gcov file in an easy-to-parse intermediate text format that
47911     can be used by 'lcov' or other tools.  The output is a single
47912     '.gcov' file per '.gcda' file.  No source code is required.
47913
47914     The format of the intermediate '.gcov' file is plain text with one
47915     entry per line
47916
47917          file:SOURCE_FILE_NAME
47918          function:LINE_NUMBER,EXECUTION_COUNT,FUNCTION_NAME
47919          lcount:LINE NUMBER,EXECUTION_COUNT
47920          branch:LINE_NUMBER,BRANCH_COVERAGE_TYPE
47921
47922          Where the BRANCH_COVERAGE_TYPE is
47923             notexec (Branch not executed)
47924             taken (Branch executed and taken)
47925             nottaken (Branch executed, but not taken)
47926
47927          There can be multiple FILE entries in an intermediate gcov
47928          file. All entries following a FILE pertain to that source file
47929          until the next FILE entry.
47930
47931     Here is a sample when '-i' is used in conjunction with '-b' option:
47932
47933          file:array.cc
47934          function:11,1,_Z3sumRKSt6vectorIPiSaIS0_EE
47935          function:22,1,main
47936          lcount:11,1
47937          lcount:12,1
47938          lcount:14,1
47939          branch:14,taken
47940          lcount:26,1
47941          branch:28,nottaken
47942
47943'-m'
47944'--demangled-names'
47945     Display demangled function names in output.  The default is to show
47946     mangled function names.
47947
47948 'gcov' should be run with the current directory the same as that when
47949you invoked the compiler.  Otherwise it will not be able to locate the
47950source files.  'gcov' produces files called 'MANGLEDNAME.gcov' in the
47951current directory.  These contain the coverage information of the source
47952file they correspond to.  One '.gcov' file is produced for each source
47953(or header) file containing code, which was compiled to produce the data
47954files.  The MANGLEDNAME part of the output file name is usually simply
47955the source file name, but can be something more complicated if the '-l'
47956or '-p' options are given.  Refer to those options for details.
47957
47958 If you invoke 'gcov' with multiple input files, the contributions from
47959each input file are summed.  Typically you would invoke it with the same
47960list of files as the final link of your executable.
47961
47962 The '.gcov' files contain the ':' separated fields along with program
47963source code.  The format is
47964
47965     EXECUTION_COUNT:LINE_NUMBER:SOURCE LINE TEXT
47966
47967 Additional block information may succeed each line, when requested by
47968command line option.  The EXECUTION_COUNT is '-' for lines containing no
47969code.  Unexecuted lines are marked '#####' or '====', depending on
47970whether they are reachable by non-exceptional paths or only exceptional
47971paths such as C++ exception handlers, respectively.
47972
47973 Some lines of information at the start have LINE_NUMBER of zero.  These
47974preamble lines are of the form
47975
47976     -:0:TAG:VALUE
47977
47978 The ordering and number of these preamble lines will be augmented as
47979'gcov' development progresses -- do not rely on them remaining
47980unchanged.  Use TAG to locate a particular preamble line.
47981
47982 The additional block information is of the form
47983
47984     TAG INFORMATION
47985
47986 The INFORMATION is human readable, but designed to be simple enough for
47987machine parsing too.
47988
47989 When printing percentages, 0% and 100% are only printed when the values
47990are _exactly_ 0% and 100% respectively.  Other values which would
47991conventionally be rounded to 0% or 100% are instead printed as the
47992nearest non-boundary value.
47993
47994 When using 'gcov', you must first compile your program with two special
47995GCC options: '-fprofile-arcs -ftest-coverage'.  This tells the compiler
47996to generate additional information needed by gcov (basically a flow
47997graph of the program) and also includes additional code in the object
47998files for generating the extra profiling information needed by gcov.
47999These additional files are placed in the directory where the object file
48000is located.
48001
48002 Running the program will cause profile output to be generated.  For
48003each source file compiled with '-fprofile-arcs', an accompanying '.gcda'
48004file will be placed in the object file directory.
48005
48006 Running 'gcov' with your program's source file names as arguments will
48007now produce a listing of the code along with frequency of execution for
48008each line.  For example, if your program is called 'tmp.c', this is what
48009you see when you use the basic 'gcov' facility:
48010
48011     $ gcc -fprofile-arcs -ftest-coverage tmp.c
48012     $ a.out
48013     $ gcov tmp.c
48014     90.00% of 10 source lines executed in file tmp.c
48015     Creating tmp.c.gcov.
48016
48017 The file 'tmp.c.gcov' contains output from 'gcov'.  Here is a sample:
48018
48019             -:    0:Source:tmp.c
48020             -:    0:Graph:tmp.gcno
48021             -:    0:Data:tmp.gcda
48022             -:    0:Runs:1
48023             -:    0:Programs:1
48024             -:    1:#include <stdio.h>
48025             -:    2:
48026             -:    3:int main (void)
48027             1:    4:{
48028             1:    5:  int i, total;
48029             -:    6:
48030             1:    7:  total = 0;
48031             -:    8:
48032            11:    9:  for (i = 0; i < 10; i++)
48033            10:   10:    total += i;
48034             -:   11:
48035             1:   12:  if (total != 45)
48036         #####:   13:    printf ("Failure\n");
48037             -:   14:  else
48038             1:   15:    printf ("Success\n");
48039             1:   16:  return 0;
48040             -:   17:}
48041
48042 When you use the '-a' option, you will get individual block counts, and
48043the output looks like this:
48044
48045             -:    0:Source:tmp.c
48046             -:    0:Graph:tmp.gcno
48047             -:    0:Data:tmp.gcda
48048             -:    0:Runs:1
48049             -:    0:Programs:1
48050             -:    1:#include <stdio.h>
48051             -:    2:
48052             -:    3:int main (void)
48053             1:    4:{
48054             1:    4-block  0
48055             1:    5:  int i, total;
48056             -:    6:
48057             1:    7:  total = 0;
48058             -:    8:
48059            11:    9:  for (i = 0; i < 10; i++)
48060            11:    9-block  0
48061            10:   10:    total += i;
48062            10:   10-block  0
48063             -:   11:
48064             1:   12:  if (total != 45)
48065             1:   12-block  0
48066         #####:   13:    printf ("Failure\n");
48067         $$$$$:   13-block  0
48068             -:   14:  else
48069             1:   15:    printf ("Success\n");
48070             1:   15-block  0
48071             1:   16:  return 0;
48072             1:   16-block  0
48073             -:   17:}
48074
48075 In this mode, each basic block is only shown on one line - the last
48076line of the block.  A multi-line block will only contribute to the
48077execution count of that last line, and other lines will not be shown to
48078contain code, unless previous blocks end on those lines.  The total
48079execution count of a line is shown and subsequent lines show the
48080execution counts for individual blocks that end on that line.  After
48081each block, the branch and call counts of the block will be shown, if
48082the '-b' option is given.
48083
48084 Because of the way GCC instruments calls, a call count can be shown
48085after a line with no individual blocks.  As you can see, line 13
48086contains a basic block that was not executed.
48087
48088 When you use the '-b' option, your output looks like this:
48089
48090     $ gcov -b tmp.c
48091     90.00% of 10 source lines executed in file tmp.c
48092     80.00% of 5 branches executed in file tmp.c
48093     80.00% of 5 branches taken at least once in file tmp.c
48094     50.00% of 2 calls executed in file tmp.c
48095     Creating tmp.c.gcov.
48096
48097 Here is a sample of a resulting 'tmp.c.gcov' file:
48098
48099             -:    0:Source:tmp.c
48100             -:    0:Graph:tmp.gcno
48101             -:    0:Data:tmp.gcda
48102             -:    0:Runs:1
48103             -:    0:Programs:1
48104             -:    1:#include <stdio.h>
48105             -:    2:
48106             -:    3:int main (void)
48107     function main called 1 returned 1 blocks executed 75%
48108             1:    4:{
48109             1:    5:  int i, total;
48110             -:    6:
48111             1:    7:  total = 0;
48112             -:    8:
48113            11:    9:  for (i = 0; i < 10; i++)
48114     branch  0 taken 91% (fallthrough)
48115     branch  1 taken 9%
48116            10:   10:    total += i;
48117             -:   11:
48118             1:   12:  if (total != 45)
48119     branch  0 taken 0% (fallthrough)
48120     branch  1 taken 100%
48121         #####:   13:    printf ("Failure\n");
48122     call    0 never executed
48123             -:   14:  else
48124             1:   15:    printf ("Success\n");
48125     call    0 called 1 returned 100%
48126             1:   16:  return 0;
48127             -:   17:}
48128
48129 For each function, a line is printed showing how many times the
48130function is called, how many times it returns and what percentage of the
48131function's blocks were executed.
48132
48133 For each basic block, a line is printed after the last line of the
48134basic block describing the branch or call that ends the basic block.
48135There can be multiple branches and calls listed for a single source line
48136if there are multiple basic blocks that end on that line.  In this case,
48137the branches and calls are each given a number.  There is no simple way
48138to map these branches and calls back to source constructs.  In general,
48139though, the lowest numbered branch or call will correspond to the
48140leftmost construct on the source line.
48141
48142 For a branch, if it was executed at least once, then a percentage
48143indicating the number of times the branch was taken divided by the
48144number of times the branch was executed will be printed.  Otherwise, the
48145message "never executed" is printed.
48146
48147 For a call, if it was executed at least once, then a percentage
48148indicating the number of times the call returned divided by the number
48149of times the call was executed will be printed.  This will usually be
48150100%, but may be less for functions that call 'exit' or 'longjmp', and
48151thus may not return every time they are called.
48152
48153 The execution counts are cumulative.  If the example program were
48154executed again without removing the '.gcda' file, the count for the
48155number of times each line in the source was executed would be added to
48156the results of the previous run(s).  This is potentially useful in
48157several ways.  For example, it could be used to accumulate data over a
48158number of program runs as part of a test verification suite, or to
48159provide more accurate long-term information over a large number of
48160program runs.
48161
48162 The data in the '.gcda' files is saved immediately before the program
48163exits.  For each source file compiled with '-fprofile-arcs', the
48164profiling code first attempts to read in an existing '.gcda' file; if
48165the file doesn't match the executable (differing number of basic block
48166counts) it will ignore the contents of the file.  It then adds in the
48167new execution counts and finally writes the data to the file.
48168
48169
48170File: gcc.info,  Node: Gcov and Optimization,  Next: Gcov Data Files,  Prev: Invoking Gcov,  Up: Gcov
48171
4817210.3 Using 'gcov' with GCC Optimization
48173=======================================
48174
48175If you plan to use 'gcov' to help optimize your code, you must first
48176compile your program with two special GCC options: '-fprofile-arcs
48177-ftest-coverage'.  Aside from that, you can use any other GCC options;
48178but if you want to prove that every single line in your program was
48179executed, you should not compile with optimization at the same time.  On
48180some machines the optimizer can eliminate some simple code lines by
48181combining them with other lines.  For example, code like this:
48182
48183     if (a != b)
48184       c = 1;
48185     else
48186       c = 0;
48187
48188can be compiled into one instruction on some machines.  In this case,
48189there is no way for 'gcov' to calculate separate execution counts for
48190each line because there isn't separate code for each line.  Hence the
48191'gcov' output looks like this if you compiled the program with
48192optimization:
48193
48194           100:   12:if (a != b)
48195           100:   13:  c = 1;
48196           100:   14:else
48197           100:   15:  c = 0;
48198
48199 The output shows that this block of code, combined by optimization,
48200executed 100 times.  In one sense this result is correct, because there
48201was only one instruction representing all four of these lines.  However,
48202the output does not indicate how many times the result was 0 and how
48203many times the result was 1.
48204
48205 Inlineable functions can create unexpected line counts.  Line counts
48206are shown for the source code of the inlineable function, but what is
48207shown depends on where the function is inlined, or if it is not inlined
48208at all.
48209
48210 If the function is not inlined, the compiler must emit an out of line
48211copy of the function, in any object file that needs it.  If 'fileA.o'
48212and 'fileB.o' both contain out of line bodies of a particular inlineable
48213function, they will also both contain coverage counts for that function.
48214When 'fileA.o' and 'fileB.o' are linked together, the linker will, on
48215many systems, select one of those out of line bodies for all calls to
48216that function, and remove or ignore the other.  Unfortunately, it will
48217not remove the coverage counters for the unused function body.  Hence
48218when instrumented, all but one use of that function will show zero
48219counts.
48220
48221 If the function is inlined in several places, the block structure in
48222each location might not be the same.  For instance, a condition might
48223now be calculable at compile time in some instances.  Because the
48224coverage of all the uses of the inline function will be shown for the
48225same source lines, the line counts themselves might seem inconsistent.
48226
48227 Long-running applications can use the '_gcov_reset' and '_gcov_dump'
48228facilities to restrict profile collection to the program region of
48229interest.  Calling '_gcov_reset(void)' will clear all profile counters
48230to zero, and calling '_gcov_dump(void)' will cause the profile
48231information collected at that point to be dumped to '.gcda' output
48232files.
48233
48234
48235File: gcc.info,  Node: Gcov Data Files,  Next: Cross-profiling,  Prev: Gcov and Optimization,  Up: Gcov
48236
4823710.4 Brief description of 'gcov' data files
48238===========================================
48239
48240'gcov' uses two files for profiling.  The names of these files are
48241derived from the original _object_ file by substituting the file suffix
48242with either '.gcno', or '.gcda'.  The files contain coverage and profile
48243data stored in a platform-independent format.  The '.gcno' files are
48244placed in the same directory as the object file.  By default, the
48245'.gcda' files are also stored in the same directory as the object file,
48246but the GCC '-fprofile-dir' option may be used to store the '.gcda'
48247files in a separate directory.
48248
48249 The '.gcno' notes file is generated when the source file is compiled
48250with the GCC '-ftest-coverage' option.  It contains information to
48251reconstruct the basic block graphs and assign source line numbers to
48252blocks.
48253
48254 The '.gcda' count data file is generated when a program containing
48255object files built with the GCC '-fprofile-arcs' option is executed.  A
48256separate '.gcda' file is created for each object file compiled with this
48257option.  It contains arc transition counts, value profile counts, and
48258some summary information.
48259
48260 The full details of the file format is specified in 'gcov-io.h', and
48261functions provided in that header file should be used to access the
48262coverage files.
48263
48264
48265File: gcc.info,  Node: Cross-profiling,  Prev: Gcov Data Files,  Up: Gcov
48266
4826710.5 Data file relocation to support cross-profiling
48268====================================================
48269
48270Running the program will cause profile output to be generated.  For each
48271source file compiled with '-fprofile-arcs', an accompanying '.gcda' file
48272will be placed in the object file directory.  That implicitly requires
48273running the program on the same system as it was built or having the
48274same absolute directory structure on the target system.  The program
48275will try to create the needed directory structure, if it is not already
48276present.
48277
48278 To support cross-profiling, a program compiled with '-fprofile-arcs'
48279can relocate the data files based on two environment variables:
48280
48281   * GCOV_PREFIX contains the prefix to add to the absolute paths in the
48282     object file.  Prefix can be absolute, or relative.  The default is
48283     no prefix.
48284
48285   * GCOV_PREFIX_STRIP indicates the how many initial directory names to
48286     strip off the hardwired absolute paths.  Default value is 0.
48287
48288     _Note:_ If GCOV_PREFIX_STRIP is set without GCOV_PREFIX is
48289     undefined, then a relative path is made out of the hardwired
48290     absolute paths.
48291
48292 For example, if the object file '/user/build/foo.o' was built with
48293'-fprofile-arcs', the final executable will try to create the data file
48294'/user/build/foo.gcda' when running on the target system.  This will
48295fail if the corresponding directory does not exist and it is unable to
48296create it.  This can be overcome by, for example, setting the
48297environment as 'GCOV_PREFIX=/target/run' and 'GCOV_PREFIX_STRIP=1'.
48298Such a setting will name the data file '/target/run/build/foo.gcda'.
48299
48300 You must move the data files to the expected directory tree in order to
48301use them for profile directed optimizations ('--use-profile'), or to use
48302the 'gcov' tool.
48303
48304
48305File: gcc.info,  Node: Trouble,  Next: Bugs,  Prev: Gcov,  Up: Top
48306
4830711 Known Causes of Trouble with GCC
48308***********************************
48309
48310This section describes known problems that affect users of GCC.  Most of
48311these are not GCC bugs per se--if they were, we would fix them.  But the
48312result for a user may be like the result of a bug.
48313
48314 Some of these problems are due to bugs in other software, some are
48315missing features that are too much work to add, and some are places
48316where people's opinions differ as to what is best.
48317
48318* Menu:
48319
48320* Actual Bugs::         Bugs we will fix later.
48321* Interoperation::      Problems using GCC with other compilers,
48322                        and with certain linkers, assemblers and debuggers.
48323* Incompatibilities::   GCC is incompatible with traditional C.
48324* Fixed Headers::       GCC uses corrected versions of system header files.
48325                        This is necessary, but doesn't always work smoothly.
48326* Standard Libraries::  GCC uses the system C library, which might not be
48327                        compliant with the ISO C standard.
48328* Disappointments::     Regrettable things we can't change, but not quite bugs.
48329* C++ Misunderstandings:: Common misunderstandings with GNU C++.
48330* Non-bugs::            Things we think are right, but some others disagree.
48331* Warnings and Errors:: Which problems in your code get warnings,
48332                        and which get errors.
48333
48334
48335File: gcc.info,  Node: Actual Bugs,  Next: Interoperation,  Up: Trouble
48336
4833711.1 Actual Bugs We Haven't Fixed Yet
48338=====================================
48339
48340   * The 'fixincludes' script interacts badly with automounters; if the
48341     directory of system header files is automounted, it tends to be
48342     unmounted while 'fixincludes' is running.  This would seem to be a
48343     bug in the automounter.  We don't know any good way to work around
48344     it.
48345
48346
48347File: gcc.info,  Node: Interoperation,  Next: Incompatibilities,  Prev: Actual Bugs,  Up: Trouble
48348
4834911.2 Interoperation
48350===================
48351
48352This section lists various difficulties encountered in using GCC
48353together with other compilers or with the assemblers, linkers, libraries
48354and debuggers on certain systems.
48355
48356   * On many platforms, GCC supports a different ABI for C++ than do
48357     other compilers, so the object files compiled by GCC cannot be used
48358     with object files generated by another C++ compiler.
48359
48360     An area where the difference is most apparent is name mangling.
48361     The use of different name mangling is intentional, to protect you
48362     from more subtle problems.  Compilers differ as to many internal
48363     details of C++ implementation, including: how class instances are
48364     laid out, how multiple inheritance is implemented, and how virtual
48365     function calls are handled.  If the name encoding were made the
48366     same, your programs would link against libraries provided from
48367     other compilers--but the programs would then crash when run.
48368     Incompatible libraries are then detected at link time, rather than
48369     at run time.
48370
48371   * On some BSD systems, including some versions of Ultrix, use of
48372     profiling causes static variable destructors (currently used only
48373     in C++) not to be run.
48374
48375   * On a SPARC, GCC aligns all values of type 'double' on an 8-byte
48376     boundary, and it expects every 'double' to be so aligned.  The Sun
48377     compiler usually gives 'double' values 8-byte alignment, with one
48378     exception: function arguments of type 'double' may not be aligned.
48379
48380     As a result, if a function compiled with Sun CC takes the address
48381     of an argument of type 'double' and passes this pointer of type
48382     'double *' to a function compiled with GCC, dereferencing the
48383     pointer may cause a fatal signal.
48384
48385     One way to solve this problem is to compile your entire program
48386     with GCC.  Another solution is to modify the function that is
48387     compiled with Sun CC to copy the argument into a local variable;
48388     local variables are always properly aligned.  A third solution is
48389     to modify the function that uses the pointer to dereference it via
48390     the following function 'access_double' instead of directly with
48391     '*':
48392
48393          inline double
48394          access_double (double *unaligned_ptr)
48395          {
48396            union d2i { double d; int i[2]; };
48397
48398            union d2i *p = (union d2i *) unaligned_ptr;
48399            union d2i u;
48400
48401            u.i[0] = p->i[0];
48402            u.i[1] = p->i[1];
48403
48404            return u.d;
48405          }
48406
48407     Storing into the pointer can be done likewise with the same union.
48408
48409   * On Solaris, the 'malloc' function in the 'libmalloc.a' library may
48410     allocate memory that is only 4 byte aligned.  Since GCC on the
48411     SPARC assumes that doubles are 8 byte aligned, this may result in a
48412     fatal signal if doubles are stored in memory allocated by the
48413     'libmalloc.a' library.
48414
48415     The solution is to not use the 'libmalloc.a' library.  Use instead
48416     'malloc' and related functions from 'libc.a'; they do not have this
48417     problem.
48418
48419   * On the HP PA machine, ADB sometimes fails to work on functions
48420     compiled with GCC.  Specifically, it fails to work on functions
48421     that use 'alloca' or variable-size arrays.  This is because GCC
48422     doesn't generate HP-UX unwind descriptors for such functions.  It
48423     may even be impossible to generate them.
48424
48425   * Debugging ('-g') is not supported on the HP PA machine, unless you
48426     use the preliminary GNU tools.
48427
48428   * Taking the address of a label may generate errors from the HP-UX PA
48429     assembler.  GAS for the PA does not have this problem.
48430
48431   * Using floating point parameters for indirect calls to static
48432     functions will not work when using the HP assembler.  There simply
48433     is no way for GCC to specify what registers hold arguments for
48434     static functions when using the HP assembler.  GAS for the PA does
48435     not have this problem.
48436
48437   * In extremely rare cases involving some very large functions you may
48438     receive errors from the HP linker complaining about an out of
48439     bounds unconditional branch offset.  This used to occur more often
48440     in previous versions of GCC, but is now exceptionally rare.  If you
48441     should run into it, you can work around by making your function
48442     smaller.
48443
48444   * GCC compiled code sometimes emits warnings from the HP-UX assembler
48445     of the form:
48446
48447          (warning) Use of GR3 when
48448            frame >= 8192 may cause conflict.
48449
48450     These warnings are harmless and can be safely ignored.
48451
48452   * In extremely rare cases involving some very large functions you may
48453     receive errors from the AIX Assembler complaining about a
48454     displacement that is too large.  If you should run into it, you can
48455     work around by making your function smaller.
48456
48457   * The 'libstdc++.a' library in GCC relies on the SVR4 dynamic linker
48458     semantics which merges global symbols between libraries and
48459     applications, especially necessary for C++ streams functionality.
48460     This is not the default behavior of AIX shared libraries and
48461     dynamic linking.  'libstdc++.a' is built on AIX with
48462     "runtime-linking" enabled so that symbol merging can occur.  To
48463     utilize this feature, the application linked with 'libstdc++.a'
48464     must include the '-Wl,-brtl' flag on the link line.  G++ cannot
48465     impose this because this option may interfere with the semantics of
48466     the user program and users may not always use 'g++' to link his or
48467     her application.  Applications are not required to use the
48468     '-Wl,-brtl' flag on the link line--the rest of the 'libstdc++.a'
48469     library which is not dependent on the symbol merging semantics will
48470     continue to function correctly.
48471
48472   * An application can interpose its own definition of functions for
48473     functions invoked by 'libstdc++.a' with "runtime-linking" enabled
48474     on AIX.  To accomplish this the application must be linked with
48475     "runtime-linking" option and the functions explicitly must be
48476     exported by the application ('-Wl,-brtl,-bE:exportfile').
48477
48478   * AIX on the RS/6000 provides support (NLS) for environments outside
48479     of the United States.  Compilers and assemblers use NLS to support
48480     locale-specific representations of various objects including
48481     floating-point numbers ('.' vs ',' for separating decimal
48482     fractions).  There have been problems reported where the library
48483     linked with GCC does not produce the same floating-point formats
48484     that the assembler accepts.  If you have this problem, set the
48485     'LANG' environment variable to 'C' or 'En_US'.
48486
48487   * Even if you specify '-fdollars-in-identifiers', you cannot
48488     successfully use '$' in identifiers on the RS/6000 due to a
48489     restriction in the IBM assembler.  GAS supports these identifiers.
48490
48491
48492File: gcc.info,  Node: Incompatibilities,  Next: Fixed Headers,  Prev: Interoperation,  Up: Trouble
48493
4849411.3 Incompatibilities of GCC
48495=============================
48496
48497There are several noteworthy incompatibilities between GNU C and K&R
48498(non-ISO) versions of C.
48499
48500   * GCC normally makes string constants read-only.  If several
48501     identical-looking string constants are used, GCC stores only one
48502     copy of the string.
48503
48504     One consequence is that you cannot call 'mktemp' with a string
48505     constant argument.  The function 'mktemp' always alters the string
48506     its argument points to.
48507
48508     Another consequence is that 'sscanf' does not work on some very old
48509     systems when passed a string constant as its format control string
48510     or input.  This is because 'sscanf' incorrectly tries to write into
48511     the string constant.  Likewise 'fscanf' and 'scanf'.
48512
48513     The solution to these problems is to change the program to use
48514     'char'-array variables with initialization strings for these
48515     purposes instead of string constants.
48516
48517   * '-2147483648' is positive.
48518
48519     This is because 2147483648 cannot fit in the type 'int', so
48520     (following the ISO C rules) its data type is 'unsigned long int'.
48521     Negating this value yields 2147483648 again.
48522
48523   * GCC does not substitute macro arguments when they appear inside of
48524     string constants.  For example, the following macro in GCC
48525
48526          #define foo(a) "a"
48527
48528     will produce output '"a"' regardless of what the argument A is.
48529
48530   * When you use 'setjmp' and 'longjmp', the only automatic variables
48531     guaranteed to remain valid are those declared 'volatile'.  This is
48532     a consequence of automatic register allocation.  Consider this
48533     function:
48534
48535          jmp_buf j;
48536
48537          foo ()
48538          {
48539            int a, b;
48540
48541            a = fun1 ();
48542            if (setjmp (j))
48543              return a;
48544
48545            a = fun2 ();
48546            /* 'longjmp (j)' may occur in 'fun3'. */
48547            return a + fun3 ();
48548          }
48549
48550     Here 'a' may or may not be restored to its first value when the
48551     'longjmp' occurs.  If 'a' is allocated in a register, then its
48552     first value is restored; otherwise, it keeps the last value stored
48553     in it.
48554
48555     If you use the '-W' option with the '-O' option, you will get a
48556     warning when GCC thinks such a problem might be possible.
48557
48558   * Programs that use preprocessing directives in the middle of macro
48559     arguments do not work with GCC.  For example, a program like this
48560     will not work:
48561
48562          foobar (
48563          #define luser
48564                  hack)
48565
48566     ISO C does not permit such a construct.
48567
48568   * K&R compilers allow comments to cross over an inclusion boundary
48569     (i.e. started in an include file and ended in the including file).
48570
48571   * Declarations of external variables and functions within a block
48572     apply only to the block containing the declaration.  In other
48573     words, they have the same scope as any other declaration in the
48574     same place.
48575
48576     In some other C compilers, an 'extern' declaration affects all the
48577     rest of the file even if it happens within a block.
48578
48579   * In traditional C, you can combine 'long', etc., with a typedef
48580     name, as shown here:
48581
48582          typedef int foo;
48583          typedef long foo bar;
48584
48585     In ISO C, this is not allowed: 'long' and other type modifiers
48586     require an explicit 'int'.
48587
48588   * PCC allows typedef names to be used as function parameters.
48589
48590   * Traditional C allows the following erroneous pair of declarations
48591     to appear together in a given scope:
48592
48593          typedef int foo;
48594          typedef foo foo;
48595
48596   * GCC treats all characters of identifiers as significant.  According
48597     to K&R-1 (2.2), "No more than the first eight characters are
48598     significant, although more may be used.".  Also according to K&R-1
48599     (2.2), "An identifier is a sequence of letters and digits; the
48600     first character must be a letter.  The underscore _ counts as a
48601     letter.", but GCC also allows dollar signs in identifiers.
48602
48603   * PCC allows whitespace in the middle of compound assignment
48604     operators such as '+='.  GCC, following the ISO standard, does not
48605     allow this.
48606
48607   * GCC complains about unterminated character constants inside of
48608     preprocessing conditionals that fail.  Some programs have English
48609     comments enclosed in conditionals that are guaranteed to fail; if
48610     these comments contain apostrophes, GCC will probably report an
48611     error.  For example, this code would produce an error:
48612
48613          #if 0
48614          You can't expect this to work.
48615          #endif
48616
48617     The best solution to such a problem is to put the text into an
48618     actual C comment delimited by '/*...*/'.
48619
48620   * Many user programs contain the declaration 'long time ();'.  In the
48621     past, the system header files on many systems did not actually
48622     declare 'time', so it did not matter what type your program
48623     declared it to return.  But in systems with ISO C headers, 'time'
48624     is declared to return 'time_t', and if that is not the same as
48625     'long', then 'long time ();' is erroneous.
48626
48627     The solution is to change your program to use appropriate system
48628     headers ('<time.h>' on systems with ISO C headers) and not to
48629     declare 'time' if the system header files declare it, or failing
48630     that to use 'time_t' as the return type of 'time'.
48631
48632   * When compiling functions that return 'float', PCC converts it to a
48633     double.  GCC actually returns a 'float'.  If you are concerned with
48634     PCC compatibility, you should declare your functions to return
48635     'double'; you might as well say what you mean.
48636
48637   * When compiling functions that return structures or unions, GCC
48638     output code normally uses a method different from that used on most
48639     versions of Unix.  As a result, code compiled with GCC cannot call
48640     a structure-returning function compiled with PCC, and vice versa.
48641
48642     The method used by GCC is as follows: a structure or union which is
48643     1, 2, 4 or 8 bytes long is returned like a scalar.  A structure or
48644     union with any other size is stored into an address supplied by the
48645     caller (usually in a special, fixed register, but on some machines
48646     it is passed on the stack).  The target hook
48647     'TARGET_STRUCT_VALUE_RTX' tells GCC where to pass this address.
48648
48649     By contrast, PCC on most target machines returns structures and
48650     unions of any size by copying the data into an area of static
48651     storage, and then returning the address of that storage as if it
48652     were a pointer value.  The caller must copy the data from that
48653     memory area to the place where the value is wanted.  GCC does not
48654     use this method because it is slower and nonreentrant.
48655
48656     On some newer machines, PCC uses a reentrant convention for all
48657     structure and union returning.  GCC on most of these machines uses
48658     a compatible convention when returning structures and unions in
48659     memory, but still returns small structures and unions in registers.
48660
48661     You can tell GCC to use a compatible convention for all structure
48662     and union returning with the option '-fpcc-struct-return'.
48663
48664   * GCC complains about program fragments such as '0x74ae-0x4000' which
48665     appear to be two hexadecimal constants separated by the minus
48666     operator.  Actually, this string is a single "preprocessing token".
48667     Each such token must correspond to one token in C.  Since this does
48668     not, GCC prints an error message.  Although it may appear obvious
48669     that what is meant is an operator and two values, the ISO C
48670     standard specifically requires that this be treated as erroneous.
48671
48672     A "preprocessing token" is a "preprocessing number" if it begins
48673     with a digit and is followed by letters, underscores, digits,
48674     periods and 'e+', 'e-', 'E+', 'E-', 'p+', 'p-', 'P+', or 'P-'
48675     character sequences.  (In strict C90 mode, the sequences 'p+',
48676     'p-', 'P+' and 'P-' cannot appear in preprocessing numbers.)
48677
48678     To make the above program fragment valid, place whitespace in front
48679     of the minus sign.  This whitespace will end the preprocessing
48680     number.
48681
48682
48683File: gcc.info,  Node: Fixed Headers,  Next: Standard Libraries,  Prev: Incompatibilities,  Up: Trouble
48684
4868511.4 Fixed Header Files
48686=======================
48687
48688GCC needs to install corrected versions of some system header files.
48689This is because most target systems have some header files that won't
48690work with GCC unless they are changed.  Some have bugs, some are
48691incompatible with ISO C, and some depend on special features of other
48692compilers.
48693
48694 Installing GCC automatically creates and installs the fixed header
48695files, by running a program called 'fixincludes'.  Normally, you don't
48696need to pay attention to this.  But there are cases where it doesn't do
48697the right thing automatically.
48698
48699   * If you update the system's header files, such as by installing a
48700     new system version, the fixed header files of GCC are not
48701     automatically updated.  They can be updated using the 'mkheaders'
48702     script installed in 'LIBEXECDIR/gcc/TARGET/VERSION/install-tools/'.
48703
48704   * On some systems, header file directories contain machine-specific
48705     symbolic links in certain places.  This makes it possible to share
48706     most of the header files among hosts running the same version of
48707     the system on different machine models.
48708
48709     The programs that fix the header files do not understand this
48710     special way of using symbolic links; therefore, the directory of
48711     fixed header files is good only for the machine model used to build
48712     it.
48713
48714     It is possible to make separate sets of fixed header files for the
48715     different machine models, and arrange a structure of symbolic links
48716     so as to use the proper set, but you'll have to do this by hand.
48717
48718
48719File: gcc.info,  Node: Standard Libraries,  Next: Disappointments,  Prev: Fixed Headers,  Up: Trouble
48720
4872111.5 Standard Libraries
48722=======================
48723
48724GCC by itself attempts to be a conforming freestanding implementation.
48725*Note Language Standards Supported by GCC: Standards, for details of
48726what this means.  Beyond the library facilities required of such an
48727implementation, the rest of the C library is supplied by the vendor of
48728the operating system.  If that C library doesn't conform to the C
48729standards, then your programs might get warnings (especially when using
48730'-Wall') that you don't expect.
48731
48732 For example, the 'sprintf' function on SunOS 4.1.3 returns 'char *'
48733while the C standard says that 'sprintf' returns an 'int'.  The
48734'fixincludes' program could make the prototype for this function match
48735the Standard, but that would be wrong, since the function will still
48736return 'char *'.
48737
48738 If you need a Standard compliant library, then you need to find one, as
48739GCC does not provide one.  The GNU C library (called 'glibc') provides
48740ISO C, POSIX, BSD, SystemV and X/Open compatibility for GNU/Linux and
48741HURD-based GNU systems; no recent version of it supports other systems,
48742though some very old versions did.  Version 2.2 of the GNU C library
48743includes nearly complete C99 support.  You could also ask your operating
48744system vendor if newer libraries are available.
48745
48746
48747File: gcc.info,  Node: Disappointments,  Next: C++ Misunderstandings,  Prev: Standard Libraries,  Up: Trouble
48748
4874911.6 Disappointments and Misunderstandings
48750==========================================
48751
48752These problems are perhaps regrettable, but we don't know any practical
48753way around them.
48754
48755   * Certain local variables aren't recognized by debuggers when you
48756     compile with optimization.
48757
48758     This occurs because sometimes GCC optimizes the variable out of
48759     existence.  There is no way to tell the debugger how to compute the
48760     value such a variable "would have had", and it is not clear that
48761     would be desirable anyway.  So GCC simply does not mention the
48762     eliminated variable when it writes debugging information.
48763
48764     You have to expect a certain amount of disagreement between the
48765     executable and your source code, when you use optimization.
48766
48767   * Users often think it is a bug when GCC reports an error for code
48768     like this:
48769
48770          int foo (struct mumble *);
48771
48772          struct mumble { ... };
48773
48774          int foo (struct mumble *x)
48775          { ... }
48776
48777     This code really is erroneous, because the scope of 'struct mumble'
48778     in the prototype is limited to the argument list containing it.  It
48779     does not refer to the 'struct mumble' defined with file scope
48780     immediately below--they are two unrelated types with similar names
48781     in different scopes.
48782
48783     But in the definition of 'foo', the file-scope type is used because
48784     that is available to be inherited.  Thus, the definition and the
48785     prototype do not match, and you get an error.
48786
48787     This behavior may seem silly, but it's what the ISO standard
48788     specifies.  It is easy enough for you to make your code work by
48789     moving the definition of 'struct mumble' above the prototype.  It's
48790     not worth being incompatible with ISO C just to avoid an error for
48791     the example shown above.
48792
48793   * Accesses to bit-fields even in volatile objects works by accessing
48794     larger objects, such as a byte or a word.  You cannot rely on what
48795     size of object is accessed in order to read or write the bit-field;
48796     it may even vary for a given bit-field according to the precise
48797     usage.
48798
48799     If you care about controlling the amount of memory that is
48800     accessed, use volatile but do not use bit-fields.
48801
48802   * GCC comes with shell scripts to fix certain known problems in
48803     system header files.  They install corrected copies of various
48804     header files in a special directory where only GCC will normally
48805     look for them.  The scripts adapt to various systems by searching
48806     all the system header files for the problem cases that we know
48807     about.
48808
48809     If new system header files are installed, nothing automatically
48810     arranges to update the corrected header files.  They can be updated
48811     using the 'mkheaders' script installed in
48812     'LIBEXECDIR/gcc/TARGET/VERSION/install-tools/'.
48813
48814   * On 68000 and x86 systems, for instance, you can get paradoxical
48815     results if you test the precise values of floating point numbers.
48816     For example, you can find that a floating point value which is not
48817     a NaN is not equal to itself.  This results from the fact that the
48818     floating point registers hold a few more bits of precision than fit
48819     in a 'double' in memory.  Compiled code moves values between memory
48820     and floating point registers at its convenience, and moving them
48821     into memory truncates them.
48822
48823     You can partially avoid this problem by using the '-ffloat-store'
48824     option (*note Optimize Options::).
48825
48826   * On AIX and other platforms without weak symbol support, templates
48827     need to be instantiated explicitly and symbols for static members
48828     of templates will not be generated.
48829
48830   * On AIX, GCC scans object files and library archives for static
48831     constructors and destructors when linking an application before the
48832     linker prunes unreferenced symbols.  This is necessary to prevent
48833     the AIX linker from mistakenly assuming that static constructor or
48834     destructor are unused and removing them before the scanning can
48835     occur.  All static constructors and destructors found will be
48836     referenced even though the modules in which they occur may not be
48837     used by the program.  This may lead to both increased executable
48838     size and unexpected symbol references.
48839
48840
48841File: gcc.info,  Node: C++ Misunderstandings,  Next: Non-bugs,  Prev: Disappointments,  Up: Trouble
48842
4884311.7 Common Misunderstandings with GNU C++
48844==========================================
48845
48846C++ is a complex language and an evolving one, and its standard
48847definition (the ISO C++ standard) was only recently completed.  As a
48848result, your C++ compiler may occasionally surprise you, even when its
48849behavior is correct.  This section discusses some areas that frequently
48850give rise to questions of this sort.
48851
48852* Menu:
48853
48854* Static Definitions::  Static member declarations are not definitions
48855* Name lookup::         Name lookup, templates, and accessing members of base classes
48856* Temporaries::         Temporaries may vanish before you expect
48857* Copy Assignment::     Copy Assignment operators copy virtual bases twice
48858
48859
48860File: gcc.info,  Node: Static Definitions,  Next: Name lookup,  Up: C++ Misunderstandings
48861
4886211.7.1 Declare _and_ Define Static Members
48863------------------------------------------
48864
48865When a class has static data members, it is not enough to _declare_ the
48866static member; you must also _define_ it.  For example:
48867
48868     class Foo
48869     {
48870       ...
48871       void method();
48872       static int bar;
48873     };
48874
48875 This declaration only establishes that the class 'Foo' has an 'int'
48876named 'Foo::bar', and a member function named 'Foo::method'.  But you
48877still need to define _both_ 'method' and 'bar' elsewhere.  According to
48878the ISO standard, you must supply an initializer in one (and only one)
48879source file, such as:
48880
48881     int Foo::bar = 0;
48882
48883 Other C++ compilers may not correctly implement the standard behavior.
48884As a result, when you switch to 'g++' from one of these compilers, you
48885may discover that a program that appeared to work correctly in fact does
48886not conform to the standard: 'g++' reports as undefined symbols any
48887static data members that lack definitions.
48888
48889
48890File: gcc.info,  Node: Name lookup,  Next: Temporaries,  Prev: Static Definitions,  Up: C++ Misunderstandings
48891
4889211.7.2 Name lookup, templates, and accessing members of base classes
48893--------------------------------------------------------------------
48894
48895The C++ standard prescribes that all names that are not dependent on
48896template parameters are bound to their present definitions when parsing
48897a template function or class.(1)  Only names that are dependent are
48898looked up at the point of instantiation.  For example, consider
48899
48900       void foo(double);
48901
48902       struct A {
48903         template <typename T>
48904         void f () {
48905           foo (1);        // 1
48906           int i = N;      // 2
48907           T t;
48908           t.bar();        // 3
48909           foo (t);        // 4
48910         }
48911
48912         static const int N;
48913       };
48914
48915 Here, the names 'foo' and 'N' appear in a context that does not depend
48916on the type of 'T'.  The compiler will thus require that they are
48917defined in the context of use in the template, not only before the point
48918of instantiation, and will here use '::foo(double)' and 'A::N',
48919respectively.  In particular, it will convert the integer value to a
48920'double' when passing it to '::foo(double)'.
48921
48922 Conversely, 'bar' and the call to 'foo' in the fourth marked line are
48923used in contexts that do depend on the type of 'T', so they are only
48924looked up at the point of instantiation, and you can provide
48925declarations for them after declaring the template, but before
48926instantiating it.  In particular, if you instantiate 'A::f<int>', the
48927last line will call an overloaded '::foo(int)' if one was provided, even
48928if after the declaration of 'struct A'.
48929
48930 This distinction between lookup of dependent and non-dependent names is
48931called two-stage (or dependent) name lookup.  G++ implements it since
48932version 3.4.
48933
48934 Two-stage name lookup sometimes leads to situations with behavior
48935different from non-template codes.  The most common is probably this:
48936
48937       template <typename T> struct Base {
48938         int i;
48939       };
48940
48941       template <typename T> struct Derived : public Base<T> {
48942         int get_i() { return i; }
48943       };
48944
48945 In 'get_i()', 'i' is not used in a dependent context, so the compiler
48946will look for a name declared at the enclosing namespace scope (which is
48947the global scope here).  It will not look into the base class, since
48948that is dependent and you may declare specializations of 'Base' even
48949after declaring 'Derived', so the compiler can't really know what 'i'
48950would refer to.  If there is no global variable 'i', then you will get
48951an error message.
48952
48953 In order to make it clear that you want the member of the base class,
48954you need to defer lookup until instantiation time, at which the base
48955class is known.  For this, you need to access 'i' in a dependent
48956context, by either using 'this->i' (remember that 'this' is of type
48957'Derived<T>*', so is obviously dependent), or using 'Base<T>::i'.
48958Alternatively, 'Base<T>::i' might be brought into scope by a
48959'using'-declaration.
48960
48961 Another, similar example involves calling member functions of a base
48962class:
48963
48964       template <typename T> struct Base {
48965           int f();
48966       };
48967
48968       template <typename T> struct Derived : Base<T> {
48969           int g() { return f(); };
48970       };
48971
48972 Again, the call to 'f()' is not dependent on template arguments (there
48973are no arguments that depend on the type 'T', and it is also not
48974otherwise specified that the call should be in a dependent context).
48975Thus a global declaration of such a function must be available, since
48976the one in the base class is not visible until instantiation time.  The
48977compiler will consequently produce the following error message:
48978
48979       x.cc: In member function `int Derived<T>::g()':
48980       x.cc:6: error: there are no arguments to `f' that depend on a template
48981          parameter, so a declaration of `f' must be available
48982       x.cc:6: error: (if you use `-fpermissive', G++ will accept your code, but
48983          allowing the use of an undeclared name is deprecated)
48984
48985 To make the code valid either use 'this->f()', or 'Base<T>::f()'.
48986Using the '-fpermissive' flag will also let the compiler accept the
48987code, by marking all function calls for which no declaration is visible
48988at the time of definition of the template for later lookup at
48989instantiation time, as if it were a dependent call.  We do not recommend
48990using '-fpermissive' to work around invalid code, and it will also only
48991catch cases where functions in base classes are called, not where
48992variables in base classes are used (as in the example above).
48993
48994 Note that some compilers (including G++ versions prior to 3.4) get
48995these examples wrong and accept above code without an error.  Those
48996compilers do not implement two-stage name lookup correctly.
48997
48998   ---------- Footnotes ----------
48999
49000   (1) The C++ standard just uses the term "dependent" for names that
49001depend on the type or value of template parameters.  This shorter term
49002will also be used in the rest of this section.
49003
49004
49005File: gcc.info,  Node: Temporaries,  Next: Copy Assignment,  Prev: Name lookup,  Up: C++ Misunderstandings
49006
4900711.7.3 Temporaries May Vanish Before You Expect
49008-----------------------------------------------
49009
49010It is dangerous to use pointers or references to _portions_ of a
49011temporary object.  The compiler may very well delete the object before
49012you expect it to, leaving a pointer to garbage.  The most common place
49013where this problem crops up is in classes like string classes,
49014especially ones that define a conversion function to type 'char *' or
49015'const char *'--which is one reason why the standard 'string' class
49016requires you to call the 'c_str' member function.  However, any class
49017that returns a pointer to some internal structure is potentially subject
49018to this problem.
49019
49020 For example, a program may use a function 'strfunc' that returns
49021'string' objects, and another function 'charfunc' that operates on
49022pointers to 'char':
49023
49024     string strfunc ();
49025     void charfunc (const char *);
49026
49027     void
49028     f ()
49029     {
49030       const char *p = strfunc().c_str();
49031       ...
49032       charfunc (p);
49033       ...
49034       charfunc (p);
49035     }
49036
49037In this situation, it may seem reasonable to save a pointer to the C
49038string returned by the 'c_str' member function and use that rather than
49039call 'c_str' repeatedly.  However, the temporary string created by the
49040call to 'strfunc' is destroyed after 'p' is initialized, at which point
49041'p' is left pointing to freed memory.
49042
49043 Code like this may run successfully under some other compilers,
49044particularly obsolete cfront-based compilers that delete temporaries
49045along with normal local variables.  However, the GNU C++ behavior is
49046standard-conforming, so if your program depends on late destruction of
49047temporaries it is not portable.
49048
49049 The safe way to write such code is to give the temporary a name, which
49050forces it to remain until the end of the scope of the name.  For
49051example:
49052
49053     const string& tmp = strfunc ();
49054     charfunc (tmp.c_str ());
49055
49056
49057File: gcc.info,  Node: Copy Assignment,  Prev: Temporaries,  Up: C++ Misunderstandings
49058
4905911.7.4 Implicit Copy-Assignment for Virtual Bases
49060-------------------------------------------------
49061
49062When a base class is virtual, only one subobject of the base class
49063belongs to each full object.  Also, the constructors and destructors are
49064invoked only once, and called from the most-derived class.  However,
49065such objects behave unspecified when being assigned.  For example:
49066
49067     struct Base{
49068       char *name;
49069       Base(char *n) : name(strdup(n)){}
49070       Base& operator= (const Base& other){
49071        free (name);
49072        name = strdup (other.name);
49073       }
49074     };
49075
49076     struct A:virtual Base{
49077       int val;
49078       A():Base("A"){}
49079     };
49080
49081     struct B:virtual Base{
49082       int bval;
49083       B():Base("B"){}
49084     };
49085
49086     struct Derived:public A, public B{
49087       Derived():Base("Derived"){}
49088     };
49089
49090     void func(Derived &d1, Derived &d2)
49091     {
49092       d1 = d2;
49093     }
49094
49095 The C++ standard specifies that 'Base::Base' is only called once when
49096constructing or copy-constructing a Derived object.  It is unspecified
49097whether 'Base::operator=' is called more than once when the implicit
49098copy-assignment for Derived objects is invoked (as it is inside 'func'
49099in the example).
49100
49101 G++ implements the "intuitive" algorithm for copy-assignment: assign
49102all direct bases, then assign all members.  In that algorithm, the
49103virtual base subobject can be encountered more than once.  In the
49104example, copying proceeds in the following order: 'val', 'name' (via
49105'strdup'), 'bval', and 'name' again.
49106
49107 If application code relies on copy-assignment, a user-defined
49108copy-assignment operator removes any uncertainties.  With such an
49109operator, the application can define whether and how the virtual base
49110subobject is assigned.
49111
49112
49113File: gcc.info,  Node: Non-bugs,  Next: Warnings and Errors,  Prev: C++ Misunderstandings,  Up: Trouble
49114
4911511.8 Certain Changes We Don't Want to Make
49116==========================================
49117
49118This section lists changes that people frequently request, but which we
49119do not make because we think GCC is better without them.
49120
49121   * Checking the number and type of arguments to a function which has
49122     an old-fashioned definition and no prototype.
49123
49124     Such a feature would work only occasionally--only for calls that
49125     appear in the same file as the called function, following the
49126     definition.  The only way to check all calls reliably is to add a
49127     prototype for the function.  But adding a prototype eliminates the
49128     motivation for this feature.  So the feature is not worthwhile.
49129
49130   * Warning about using an expression whose type is signed as a shift
49131     count.
49132
49133     Shift count operands are probably signed more often than unsigned.
49134     Warning about this would cause far more annoyance than good.
49135
49136   * Warning about assigning a signed value to an unsigned variable.
49137
49138     Such assignments must be very common; warning about them would
49139     cause more annoyance than good.
49140
49141   * Warning when a non-void function value is ignored.
49142
49143     C contains many standard functions that return a value that most
49144     programs choose to ignore.  One obvious example is 'printf'.
49145     Warning about this practice only leads the defensive programmer to
49146     clutter programs with dozens of casts to 'void'.  Such casts are
49147     required so frequently that they become visual noise.  Writing
49148     those casts becomes so automatic that they no longer convey useful
49149     information about the intentions of the programmer.  For functions
49150     where the return value should never be ignored, use the
49151     'warn_unused_result' function attribute (*note Function
49152     Attributes::).
49153
49154   * Making '-fshort-enums' the default.
49155
49156     This would cause storage layout to be incompatible with most other
49157     C compilers.  And it doesn't seem very important, given that you
49158     can get the same result in other ways.  The case where it matters
49159     most is when the enumeration-valued object is inside a structure,
49160     and in that case you can specify a field width explicitly.
49161
49162   * Making bit-fields unsigned by default on particular machines where
49163     "the ABI standard" says to do so.
49164
49165     The ISO C standard leaves it up to the implementation whether a
49166     bit-field declared plain 'int' is signed or not.  This in effect
49167     creates two alternative dialects of C.
49168
49169     The GNU C compiler supports both dialects; you can specify the
49170     signed dialect with '-fsigned-bitfields' and the unsigned dialect
49171     with '-funsigned-bitfields'.  However, this leaves open the
49172     question of which dialect to use by default.
49173
49174     Currently, the preferred dialect makes plain bit-fields signed,
49175     because this is simplest.  Since 'int' is the same as 'signed int'
49176     in every other context, it is cleanest for them to be the same in
49177     bit-fields as well.
49178
49179     Some computer manufacturers have published Application Binary
49180     Interface standards which specify that plain bit-fields should be
49181     unsigned.  It is a mistake, however, to say anything about this
49182     issue in an ABI.  This is because the handling of plain bit-fields
49183     distinguishes two dialects of C.  Both dialects are meaningful on
49184     every type of machine.  Whether a particular object file was
49185     compiled using signed bit-fields or unsigned is of no concern to
49186     other object files, even if they access the same bit-fields in the
49187     same data structures.
49188
49189     A given program is written in one or the other of these two
49190     dialects.  The program stands a chance to work on most any machine
49191     if it is compiled with the proper dialect.  It is unlikely to work
49192     at all if compiled with the wrong dialect.
49193
49194     Many users appreciate the GNU C compiler because it provides an
49195     environment that is uniform across machines.  These users would be
49196     inconvenienced if the compiler treated plain bit-fields differently
49197     on certain machines.
49198
49199     Occasionally users write programs intended only for a particular
49200     machine type.  On these occasions, the users would benefit if the
49201     GNU C compiler were to support by default the same dialect as the
49202     other compilers on that machine.  But such applications are rare.
49203     And users writing a program to run on more than one type of machine
49204     cannot possibly benefit from this kind of compatibility.
49205
49206     This is why GCC does and will treat plain bit-fields in the same
49207     fashion on all types of machines (by default).
49208
49209     There are some arguments for making bit-fields unsigned by default
49210     on all machines.  If, for example, this becomes a universal de
49211     facto standard, it would make sense for GCC to go along with it.
49212     This is something to be considered in the future.
49213
49214     (Of course, users strongly concerned about portability should
49215     indicate explicitly in each bit-field whether it is signed or not.
49216     In this way, they write programs which have the same meaning in
49217     both C dialects.)
49218
49219   * Undefining '__STDC__' when '-ansi' is not used.
49220
49221     Currently, GCC defines '__STDC__' unconditionally.  This provides
49222     good results in practice.
49223
49224     Programmers normally use conditionals on '__STDC__' to ask whether
49225     it is safe to use certain features of ISO C, such as function
49226     prototypes or ISO token concatenation.  Since plain 'gcc' supports
49227     all the features of ISO C, the correct answer to these questions is
49228     "yes".
49229
49230     Some users try to use '__STDC__' to check for the availability of
49231     certain library facilities.  This is actually incorrect usage in an
49232     ISO C program, because the ISO C standard says that a conforming
49233     freestanding implementation should define '__STDC__' even though it
49234     does not have the library facilities.  'gcc -ansi -pedantic' is a
49235     conforming freestanding implementation, and it is therefore
49236     required to define '__STDC__', even though it does not come with an
49237     ISO C library.
49238
49239     Sometimes people say that defining '__STDC__' in a compiler that
49240     does not completely conform to the ISO C standard somehow violates
49241     the standard.  This is illogical.  The standard is a standard for
49242     compilers that claim to support ISO C, such as 'gcc -ansi'--not for
49243     other compilers such as plain 'gcc'.  Whatever the ISO C standard
49244     says is relevant to the design of plain 'gcc' without '-ansi' only
49245     for pragmatic reasons, not as a requirement.
49246
49247     GCC normally defines '__STDC__' to be 1, and in addition defines
49248     '__STRICT_ANSI__' if you specify the '-ansi' option, or a '-std'
49249     option for strict conformance to some version of ISO C.  On some
49250     hosts, system include files use a different convention, where
49251     '__STDC__' is normally 0, but is 1 if the user specifies strict
49252     conformance to the C Standard.  GCC follows the host convention
49253     when processing system include files, but when processing user
49254     files it follows the usual GNU C convention.
49255
49256   * Undefining '__STDC__' in C++.
49257
49258     Programs written to compile with C++-to-C translators get the value
49259     of '__STDC__' that goes with the C compiler that is subsequently
49260     used.  These programs must test '__STDC__' to determine what kind
49261     of C preprocessor that compiler uses: whether they should
49262     concatenate tokens in the ISO C fashion or in the traditional
49263     fashion.
49264
49265     These programs work properly with GNU C++ if '__STDC__' is defined.
49266     They would not work otherwise.
49267
49268     In addition, many header files are written to provide prototypes in
49269     ISO C but not in traditional C.  Many of these header files can
49270     work without change in C++ provided '__STDC__' is defined.  If
49271     '__STDC__' is not defined, they will all fail, and will all need to
49272     be changed to test explicitly for C++ as well.
49273
49274   * Deleting "empty" loops.
49275
49276     Historically, GCC has not deleted "empty" loops under the
49277     assumption that the most likely reason you would put one in a
49278     program is to have a delay, so deleting them will not make real
49279     programs run any faster.
49280
49281     However, the rationale here is that optimization of a nonempty loop
49282     cannot produce an empty one.  This held for carefully written C
49283     compiled with less powerful optimizers but is not always the case
49284     for carefully written C++ or with more powerful optimizers.  Thus
49285     GCC will remove operations from loops whenever it can determine
49286     those operations are not externally visible (apart from the time
49287     taken to execute them, of course).  In case the loop can be proved
49288     to be finite, GCC will also remove the loop itself.
49289
49290     Be aware of this when performing timing tests, for instance the
49291     following loop can be completely removed, provided
49292     'some_expression' can provably not change any global state.
49293
49294          {
49295             int sum = 0;
49296             int ix;
49297
49298             for (ix = 0; ix != 10000; ix++)
49299                sum += some_expression;
49300          }
49301
49302     Even though 'sum' is accumulated in the loop, no use is made of
49303     that summation, so the accumulation can be removed.
49304
49305   * Making side effects happen in the same order as in some other
49306     compiler.
49307
49308     It is never safe to depend on the order of evaluation of side
49309     effects.  For example, a function call like this may very well
49310     behave differently from one compiler to another:
49311
49312          void func (int, int);
49313
49314          int i = 2;
49315          func (i++, i++);
49316
49317     There is no guarantee (in either the C or the C++ standard language
49318     definitions) that the increments will be evaluated in any
49319     particular order.  Either increment might happen first.  'func'
49320     might get the arguments '2, 3', or it might get '3, 2', or even '2,
49321     2'.
49322
49323   * Making certain warnings into errors by default.
49324
49325     Some ISO C testsuites report failure when the compiler does not
49326     produce an error message for a certain program.
49327
49328     ISO C requires a "diagnostic" message for certain kinds of invalid
49329     programs, but a warning is defined by GCC to count as a diagnostic.
49330     If GCC produces a warning but not an error, that is correct ISO C
49331     support.  If testsuites call this "failure", they should be run
49332     with the GCC option '-pedantic-errors', which will turn these
49333     warnings into errors.
49334
49335
49336File: gcc.info,  Node: Warnings and Errors,  Prev: Non-bugs,  Up: Trouble
49337
4933811.9 Warning Messages and Error Messages
49339========================================
49340
49341The GNU compiler can produce two kinds of diagnostics: errors and
49342warnings.  Each kind has a different purpose:
49343
49344     "Errors" report problems that make it impossible to compile your
49345     program.  GCC reports errors with the source file name and line
49346     number where the problem is apparent.
49347
49348     "Warnings" report other unusual conditions in your code that _may_
49349     indicate a problem, although compilation can (and does) proceed.
49350     Warning messages also report the source file name and line number,
49351     but include the text 'warning:' to distinguish them from error
49352     messages.
49353
49354 Warnings may indicate danger points where you should check to make sure
49355that your program really does what you intend; or the use of obsolete
49356features; or the use of nonstandard features of GNU C or C++.  Many
49357warnings are issued only if you ask for them, with one of the '-W'
49358options (for instance, '-Wall' requests a variety of useful warnings).
49359
49360 GCC always tries to compile your program if possible; it never
49361gratuitously rejects a program whose meaning is clear merely because
49362(for instance) it fails to conform to a standard.  In some cases,
49363however, the C and C++ standards specify that certain extensions are
49364forbidden, and a diagnostic _must_ be issued by a conforming compiler.
49365The '-pedantic' option tells GCC to issue warnings in such cases;
49366'-pedantic-errors' says to make them errors instead.  This does not mean
49367that _all_ non-ISO constructs get warnings or errors.
49368
49369 *Note Options to Request or Suppress Warnings: Warning Options, for
49370more detail on these and related command-line options.
49371
49372
49373File: gcc.info,  Node: Bugs,  Next: Service,  Prev: Trouble,  Up: Top
49374
4937512 Reporting Bugs
49376*****************
49377
49378Your bug reports play an essential role in making GCC reliable.
49379
49380 When you encounter a problem, the first thing to do is to see if it is
49381already known.  *Note Trouble::.  If it isn't known, then you should
49382report the problem.
49383
49384* Menu:
49385
49386* Criteria:  Bug Criteria.   Have you really found a bug?
49387* Reporting: Bug Reporting.  How to report a bug effectively.
49388
49389
49390File: gcc.info,  Node: Bug Criteria,  Next: Bug Reporting,  Up: Bugs
49391
4939212.1 Have You Found a Bug?
49393==========================
49394
49395If you are not sure whether you have found a bug, here are some
49396guidelines:
49397
49398   * If the compiler gets a fatal signal, for any input whatever, that
49399     is a compiler bug.  Reliable compilers never crash.
49400
49401   * If the compiler produces invalid assembly code, for any input
49402     whatever (except an 'asm' statement), that is a compiler bug,
49403     unless the compiler reports errors (not just warnings) which would
49404     ordinarily prevent the assembler from being run.
49405
49406   * If the compiler produces valid assembly code that does not
49407     correctly execute the input source code, that is a compiler bug.
49408
49409     However, you must double-check to make sure, because you may have a
49410     program whose behavior is undefined, which happened by chance to
49411     give the desired results with another C or C++ compiler.
49412
49413     For example, in many nonoptimizing compilers, you can write 'x;' at
49414     the end of a function instead of 'return x;', with the same
49415     results.  But the value of the function is undefined if 'return' is
49416     omitted; it is not a bug when GCC produces different results.
49417
49418     Problems often result from expressions with two increment
49419     operators, as in 'f (*p++, *p++)'.  Your previous compiler might
49420     have interpreted that expression the way you intended; GCC might
49421     interpret it another way.  Neither compiler is wrong.  The bug is
49422     in your code.
49423
49424     After you have localized the error to a single source line, it
49425     should be easy to check for these things.  If your program is
49426     correct and well defined, you have found a compiler bug.
49427
49428   * If the compiler produces an error message for valid input, that is
49429     a compiler bug.
49430
49431   * If the compiler does not produce an error message for invalid
49432     input, that is a compiler bug.  However, you should note that your
49433     idea of "invalid input" might be someone else's idea of "an
49434     extension" or "support for traditional practice".
49435
49436   * If you are an experienced user of one of the languages GCC
49437     supports, your suggestions for improvement of GCC are welcome in
49438     any case.
49439
49440
49441File: gcc.info,  Node: Bug Reporting,  Prev: Bug Criteria,  Up: Bugs
49442
4944312.2 How and where to Report Bugs
49444=================================
49445
49446Bugs should be reported to the bug database at
49447<http://gcc.gnu.org/bugs.html>.
49448
49449
49450File: gcc.info,  Node: Service,  Next: Contributing,  Prev: Bugs,  Up: Top
49451
4945213 How To Get Help with GCC
49453***************************
49454
49455If you need help installing, using or changing GCC, there are two ways
49456to find it:
49457
49458   * Send a message to a suitable network mailing list.  First try
49459     <gcc-help@gcc.gnu.org> (for help installing or using GCC), and if
49460     that brings no response, try <gcc@gcc.gnu.org>.  For help changing
49461     GCC, ask <gcc@gcc.gnu.org>.  If you think you have found a bug in
49462     GCC, please report it following the instructions at *note Bug
49463     Reporting::.
49464
49465   * Look in the service directory for someone who might help you for a
49466     fee.  The service directory is found at
49467     <http://www.fsf.org/resources/service>.
49468
49469 For further information, see <http://gcc.gnu.org/faq.html#support>.
49470
49471
49472File: gcc.info,  Node: Contributing,  Next: Funding,  Prev: Service,  Up: Top
49473
4947414 Contributing to GCC Development
49475**********************************
49476
49477If you would like to help pretest GCC releases to assure they work well,
49478current development sources are available by SVN (see
49479<http://gcc.gnu.org/svn.html>).  Source and binary snapshots are also
49480available for FTP; see <http://gcc.gnu.org/snapshots.html>.
49481
49482 If you would like to work on improvements to GCC, please read the
49483advice at these URLs:
49484
49485     <http://gcc.gnu.org/contribute.html>
49486     <http://gcc.gnu.org/contributewhy.html>
49487
49488for information on how to make useful contributions and avoid
49489duplication of effort.  Suggested projects are listed at
49490<http://gcc.gnu.org/projects/>.
49491
49492
49493File: gcc.info,  Node: Funding,  Next: GNU Project,  Prev: Contributing,  Up: Top
49494
49495Funding Free Software
49496*********************
49497
49498If you want to have more free software a few years from now, it makes
49499sense for you to help encourage people to contribute funds for its
49500development.  The most effective approach known is to encourage
49501commercial redistributors to donate.
49502
49503 Users of free software systems can boost the pace of development by
49504encouraging for-a-fee distributors to donate part of their selling price
49505to free software developers--the Free Software Foundation, and others.
49506
49507 The way to convince distributors to do this is to demand it and expect
49508it from them.  So when you compare distributors, judge them partly by
49509how much they give to free software development.  Show distributors they
49510must compete to be the one who gives the most.
49511
49512 To make this approach work, you must insist on numbers that you can
49513compare, such as, "We will donate ten dollars to the Frobnitz project
49514for each disk sold."  Don't be satisfied with a vague promise, such as
49515"A portion of the profits are donated," since it doesn't give a basis
49516for comparison.
49517
49518 Even a precise fraction "of the profits from this disk" is not very
49519meaningful, since creative accounting and unrelated business decisions
49520can greatly alter what fraction of the sales price counts as profit.  If
49521the price you pay is $50, ten percent of the profit is probably less
49522than a dollar; it might be a few cents, or nothing at all.
49523
49524 Some redistributors do development work themselves.  This is useful
49525too; but to keep everyone honest, you need to inquire how much they do,
49526and what kind.  Some kinds of development make much more long-term
49527difference than others.  For example, maintaining a separate version of
49528a program contributes very little; maintaining the standard version of a
49529program for the whole community contributes much.  Easy new ports
49530contribute little, since someone else would surely do them; difficult
49531ports such as adding a new CPU to the GNU Compiler Collection contribute
49532more; major new features or packages contribute the most.
49533
49534 By establishing the idea that supporting further development is "the
49535proper thing to do" when distributing free software for a fee, we can
49536assure a steady flow of resources into making more free software.
49537
49538     Copyright (C) 1994 Free Software Foundation, Inc.
49539     Verbatim copying and redistribution of this section is permitted
49540     without royalty; alteration is not permitted.
49541
49542
49543File: gcc.info,  Node: GNU Project,  Next: Copying,  Prev: Funding,  Up: Top
49544
49545The GNU Project and GNU/Linux
49546*****************************
49547
49548The GNU Project was launched in 1984 to develop a complete Unix-like
49549operating system which is free software: the GNU system.  (GNU is a
49550recursive acronym for "GNU's Not Unix"; it is pronounced "guh-NEW".)
49551Variants of the GNU operating system, which use the kernel Linux, are
49552now widely used; though these systems are often referred to as "Linux",
49553they are more accurately called GNU/Linux systems.
49554
49555 For more information, see:
49556     <http://www.gnu.org/>
49557     <http://www.gnu.org/gnu/linux-and-gnu.html>
49558
49559
49560File: gcc.info,  Node: Copying,  Next: GNU Free Documentation License,  Prev: GNU Project,  Up: Top
49561
49562GNU General Public License
49563**************************
49564
49565                        Version 3, 29 June 2007
49566
49567     Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
49568
49569     Everyone is permitted to copy and distribute verbatim copies of this
49570     license document, but changing it is not allowed.
49571
49572Preamble
49573========
49574
49575The GNU General Public License is a free, copyleft license for software
49576and other kinds of works.
49577
49578 The licenses for most software and other practical works are designed
49579to take away your freedom to share and change the works.  By contrast,
49580the GNU General Public License is intended to guarantee your freedom to
49581share and change all versions of a program-to make sure it remains free
49582software for all its users.  We, the Free Software Foundation, use the
49583GNU General Public License for most of our software; it applies also to
49584any other work released this way by its authors.  You can apply it to
49585your programs, too.
49586
49587 When we speak of free software, we are referring to freedom, not price.
49588Our General Public Licenses are designed to make sure that you have the
49589freedom to distribute copies of free software (and charge for them if
49590you wish), that you receive source code or can get it if you want it,
49591that you can change the software or use pieces of it in new free
49592programs, and that you know you can do these things.
49593
49594 To protect your rights, we need to prevent others from denying you
49595these rights or asking you to surrender the rights.  Therefore, you have
49596certain responsibilities if you distribute copies of the software, or if
49597you modify it: responsibilities to respect the freedom of others.
49598
49599 For example, if you distribute copies of such a program, whether gratis
49600or for a fee, you must pass on to the recipients the same freedoms that
49601you received.  You must make sure that they, too, receive or can get the
49602source code.  And you must show them these terms so they know their
49603rights.
49604
49605 Developers that use the GNU GPL protect your rights with two steps: (1)
49606assert copyright on the software, and (2) offer you this License giving
49607you legal permission to copy, distribute and/or modify it.
49608
49609 For the developers' and authors' protection, the GPL clearly explains
49610that there is no warranty for this free software.  For both users' and
49611authors' sake, the GPL requires that modified versions be marked as
49612changed, so that their problems will not be attributed erroneously to
49613authors of previous versions.
49614
49615 Some devices are designed to deny users access to install or run
49616modified versions of the software inside them, although the manufacturer
49617can do so.  This is fundamentally incompatible with the aim of
49618protecting users' freedom to change the software.  The systematic
49619pattern of such abuse occurs in the area of products for individuals to
49620use, which is precisely where it is most unacceptable.  Therefore, we
49621have designed this version of the GPL to prohibit the practice for those
49622products.  If such problems arise substantially in other domains, we
49623stand ready to extend this provision to those domains in future versions
49624of the GPL, as needed to protect the freedom of users.
49625
49626 Finally, every program is threatened constantly by software patents.
49627States should not allow patents to restrict development and use of
49628software on general-purpose computers, but in those that do, we wish to
49629avoid the special danger that patents applied to a free program could
49630make it effectively proprietary.  To prevent this, the GPL assures that
49631patents cannot be used to render the program non-free.
49632
49633 The precise terms and conditions for copying, distribution and
49634modification follow.
49635
49636TERMS AND CONDITIONS
49637====================
49638
49639  0. Definitions.
49640
49641     "This License" refers to version 3 of the GNU General Public
49642     License.
49643
49644     "Copyright" also means copyright-like laws that apply to other
49645     kinds of works, such as semiconductor masks.
49646
49647     "The Program" refers to any copyrightable work licensed under this
49648     License.  Each licensee is addressed as "you".  "Licensees" and
49649     "recipients" may be individuals or organizations.
49650
49651     To "modify" a work means to copy from or adapt all or part of the
49652     work in a fashion requiring copyright permission, other than the
49653     making of an exact copy.  The resulting work is called a "modified
49654     version" of the earlier work or a work "based on" the earlier work.
49655
49656     A "covered work" means either the unmodified Program or a work
49657     based on the Program.
49658
49659     To "propagate" a work means to do anything with it that, without
49660     permission, would make you directly or secondarily liable for
49661     infringement under applicable copyright law, except executing it on
49662     a computer or modifying a private copy.  Propagation includes
49663     copying, distribution (with or without modification), making
49664     available to the public, and in some countries other activities as
49665     well.
49666
49667     To "convey" a work means any kind of propagation that enables other
49668     parties to make or receive copies.  Mere interaction with a user
49669     through a computer network, with no transfer of a copy, is not
49670     conveying.
49671
49672     An interactive user interface displays "Appropriate Legal Notices"
49673     to the extent that it includes a convenient and prominently visible
49674     feature that (1) displays an appropriate copyright notice, and (2)
49675     tells the user that there is no warranty for the work (except to
49676     the extent that warranties are provided), that licensees may convey
49677     the work under this License, and how to view a copy of this
49678     License.  If the interface presents a list of user commands or
49679     options, such as a menu, a prominent item in the list meets this
49680     criterion.
49681
49682  1. Source Code.
49683
49684     The "source code" for a work means the preferred form of the work
49685     for making modifications to it.  "Object code" means any non-source
49686     form of a work.
49687
49688     A "Standard Interface" means an interface that either is an
49689     official standard defined by a recognized standards body, or, in
49690     the case of interfaces specified for a particular programming
49691     language, one that is widely used among developers working in that
49692     language.
49693
49694     The "System Libraries" of an executable work include anything,
49695     other than the work as a whole, that (a) is included in the normal
49696     form of packaging a Major Component, but which is not part of that
49697     Major Component, and (b) serves only to enable use of the work with
49698     that Major Component, or to implement a Standard Interface for
49699     which an implementation is available to the public in source code
49700     form.  A "Major Component", in this context, means a major
49701     essential component (kernel, window system, and so on) of the
49702     specific operating system (if any) on which the executable work
49703     runs, or a compiler used to produce the work, or an object code
49704     interpreter used to run it.
49705
49706     The "Corresponding Source" for a work in object code form means all
49707     the source code needed to generate, install, and (for an executable
49708     work) run the object code and to modify the work, including scripts
49709     to control those activities.  However, it does not include the
49710     work's System Libraries, or general-purpose tools or generally
49711     available free programs which are used unmodified in performing
49712     those activities but which are not part of the work.  For example,
49713     Corresponding Source includes interface definition files associated
49714     with source files for the work, and the source code for shared
49715     libraries and dynamically linked subprograms that the work is
49716     specifically designed to require, such as by intimate data
49717     communication or control flow between those subprograms and other
49718     parts of the work.
49719
49720     The Corresponding Source need not include anything that users can
49721     regenerate automatically from other parts of the Corresponding
49722     Source.
49723
49724     The Corresponding Source for a work in source code form is that
49725     same work.
49726
49727  2. Basic Permissions.
49728
49729     All rights granted under this License are granted for the term of
49730     copyright on the Program, and are irrevocable provided the stated
49731     conditions are met.  This License explicitly affirms your unlimited
49732     permission to run the unmodified Program.  The output from running
49733     a covered work is covered by this License only if the output, given
49734     its content, constitutes a covered work.  This License acknowledges
49735     your rights of fair use or other equivalent, as provided by
49736     copyright law.
49737
49738     You may make, run and propagate covered works that you do not
49739     convey, without conditions so long as your license otherwise
49740     remains in force.  You may convey covered works to others for the
49741     sole purpose of having them make modifications exclusively for you,
49742     or provide you with facilities for running those works, provided
49743     that you comply with the terms of this License in conveying all
49744     material for which you do not control copyright.  Those thus making
49745     or running the covered works for you must do so exclusively on your
49746     behalf, under your direction and control, on terms that prohibit
49747     them from making any copies of your copyrighted material outside
49748     their relationship with you.
49749
49750     Conveying under any other circumstances is permitted solely under
49751     the conditions stated below.  Sublicensing is not allowed; section
49752     10 makes it unnecessary.
49753
49754  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
49755
49756     No covered work shall be deemed part of an effective technological
49757     measure under any applicable law fulfilling obligations under
49758     article 11 of the WIPO copyright treaty adopted on 20 December
49759     1996, or similar laws prohibiting or restricting circumvention of
49760     such measures.
49761
49762     When you convey a covered work, you waive any legal power to forbid
49763     circumvention of technological measures to the extent such
49764     circumvention is effected by exercising rights under this License
49765     with respect to the covered work, and you disclaim any intention to
49766     limit operation or modification of the work as a means of
49767     enforcing, against the work's users, your or third parties' legal
49768     rights to forbid circumvention of technological measures.
49769
49770  4. Conveying Verbatim Copies.
49771
49772     You may convey verbatim copies of the Program's source code as you
49773     receive it, in any medium, provided that you conspicuously and
49774     appropriately publish on each copy an appropriate copyright notice;
49775     keep intact all notices stating that this License and any
49776     non-permissive terms added in accord with section 7 apply to the
49777     code; keep intact all notices of the absence of any warranty; and
49778     give all recipients a copy of this License along with the Program.
49779
49780     You may charge any price or no price for each copy that you convey,
49781     and you may offer support or warranty protection for a fee.
49782
49783  5. Conveying Modified Source Versions.
49784
49785     You may convey a work based on the Program, or the modifications to
49786     produce it from the Program, in the form of source code under the
49787     terms of section 4, provided that you also meet all of these
49788     conditions:
49789
49790       a. The work must carry prominent notices stating that you
49791          modified it, and giving a relevant date.
49792
49793       b. The work must carry prominent notices stating that it is
49794          released under this License and any conditions added under
49795          section 7.  This requirement modifies the requirement in
49796          section 4 to "keep intact all notices".
49797
49798       c. You must license the entire work, as a whole, under this
49799          License to anyone who comes into possession of a copy.  This
49800          License will therefore apply, along with any applicable
49801          section 7 additional terms, to the whole of the work, and all
49802          its parts, regardless of how they are packaged.  This License
49803          gives no permission to license the work in any other way, but
49804          it does not invalidate such permission if you have separately
49805          received it.
49806
49807       d. If the work has interactive user interfaces, each must display
49808          Appropriate Legal Notices; however, if the Program has
49809          interactive interfaces that do not display Appropriate Legal
49810          Notices, your work need not make them do so.
49811
49812     A compilation of a covered work with other separate and independent
49813     works, which are not by their nature extensions of the covered
49814     work, and which are not combined with it such as to form a larger
49815     program, in or on a volume of a storage or distribution medium, is
49816     called an "aggregate" if the compilation and its resulting
49817     copyright are not used to limit the access or legal rights of the
49818     compilation's users beyond what the individual works permit.
49819     Inclusion of a covered work in an aggregate does not cause this
49820     License to apply to the other parts of the aggregate.
49821
49822  6. Conveying Non-Source Forms.
49823
49824     You may convey a covered work in object code form under the terms
49825     of sections 4 and 5, provided that you also convey the
49826     machine-readable Corresponding Source under the terms of this
49827     License, in one of these ways:
49828
49829       a. Convey the object code in, or embodied in, a physical product
49830          (including a physical distribution medium), accompanied by the
49831          Corresponding Source fixed on a durable physical medium
49832          customarily used for software interchange.
49833
49834       b. Convey the object code in, or embodied in, a physical product
49835          (including a physical distribution medium), accompanied by a
49836          written offer, valid for at least three years and valid for as
49837          long as you offer spare parts or customer support for that
49838          product model, to give anyone who possesses the object code
49839          either (1) a copy of the Corresponding Source for all the
49840          software in the product that is covered by this License, on a
49841          durable physical medium customarily used for software
49842          interchange, for a price no more than your reasonable cost of
49843          physically performing this conveying of source, or (2) access
49844          to copy the Corresponding Source from a network server at no
49845          charge.
49846
49847       c. Convey individual copies of the object code with a copy of the
49848          written offer to provide the Corresponding Source.  This
49849          alternative is allowed only occasionally and noncommercially,
49850          and only if you received the object code with such an offer,
49851          in accord with subsection 6b.
49852
49853       d. Convey the object code by offering access from a designated
49854          place (gratis or for a charge), and offer equivalent access to
49855          the Corresponding Source in the same way through the same
49856          place at no further charge.  You need not require recipients
49857          to copy the Corresponding Source along with the object code.
49858          If the place to copy the object code is a network server, the
49859          Corresponding Source may be on a different server (operated by
49860          you or a third party) that supports equivalent copying
49861          facilities, provided you maintain clear directions next to the
49862          object code saying where to find the Corresponding Source.
49863          Regardless of what server hosts the Corresponding Source, you
49864          remain obligated to ensure that it is available for as long as
49865          needed to satisfy these requirements.
49866
49867       e. Convey the object code using peer-to-peer transmission,
49868          provided you inform other peers where the object code and
49869          Corresponding Source of the work are being offered to the
49870          general public at no charge under subsection 6d.
49871
49872     A separable portion of the object code, whose source code is
49873     excluded from the Corresponding Source as a System Library, need
49874     not be included in conveying the object code work.
49875
49876     A "User Product" is either (1) a "consumer product", which means
49877     any tangible personal property which is normally used for personal,
49878     family, or household purposes, or (2) anything designed or sold for
49879     incorporation into a dwelling.  In determining whether a product is
49880     a consumer product, doubtful cases shall be resolved in favor of
49881     coverage.  For a particular product received by a particular user,
49882     "normally used" refers to a typical or common use of that class of
49883     product, regardless of the status of the particular user or of the
49884     way in which the particular user actually uses, or expects or is
49885     expected to use, the product.  A product is a consumer product
49886     regardless of whether the product has substantial commercial,
49887     industrial or non-consumer uses, unless such uses represent the
49888     only significant mode of use of the product.
49889
49890     "Installation Information" for a User Product means any methods,
49891     procedures, authorization keys, or other information required to
49892     install and execute modified versions of a covered work in that
49893     User Product from a modified version of its Corresponding Source.
49894     The information must suffice to ensure that the continued
49895     functioning of the modified object code is in no case prevented or
49896     interfered with solely because modification has been made.
49897
49898     If you convey an object code work under this section in, or with,
49899     or specifically for use in, a User Product, and the conveying
49900     occurs as part of a transaction in which the right of possession
49901     and use of the User Product is transferred to the recipient in
49902     perpetuity or for a fixed term (regardless of how the transaction
49903     is characterized), the Corresponding Source conveyed under this
49904     section must be accompanied by the Installation Information.  But
49905     this requirement does not apply if neither you nor any third party
49906     retains the ability to install modified object code on the User
49907     Product (for example, the work has been installed in ROM).
49908
49909     The requirement to provide Installation Information does not
49910     include a requirement to continue to provide support service,
49911     warranty, or updates for a work that has been modified or installed
49912     by the recipient, or for the User Product in which it has been
49913     modified or installed.  Access to a network may be denied when the
49914     modification itself materially and adversely affects the operation
49915     of the network or violates the rules and protocols for
49916     communication across the network.
49917
49918     Corresponding Source conveyed, and Installation Information
49919     provided, in accord with this section must be in a format that is
49920     publicly documented (and with an implementation available to the
49921     public in source code form), and must require no special password
49922     or key for unpacking, reading or copying.
49923
49924  7. Additional Terms.
49925
49926     "Additional permissions" are terms that supplement the terms of
49927     this License by making exceptions from one or more of its
49928     conditions.  Additional permissions that are applicable to the
49929     entire Program shall be treated as though they were included in
49930     this License, to the extent that they are valid under applicable
49931     law.  If additional permissions apply only to part of the Program,
49932     that part may be used separately under those permissions, but the
49933     entire Program remains governed by this License without regard to
49934     the additional permissions.
49935
49936     When you convey a copy of a covered work, you may at your option
49937     remove any additional permissions from that copy, or from any part
49938     of it.  (Additional permissions may be written to require their own
49939     removal in certain cases when you modify the work.)  You may place
49940     additional permissions on material, added by you to a covered work,
49941     for which you have or can give appropriate copyright permission.
49942
49943     Notwithstanding any other provision of this License, for material
49944     you add to a covered work, you may (if authorized by the copyright
49945     holders of that material) supplement the terms of this License with
49946     terms:
49947
49948       a. Disclaiming warranty or limiting liability differently from
49949          the terms of sections 15 and 16 of this License; or
49950
49951       b. Requiring preservation of specified reasonable legal notices
49952          or author attributions in that material or in the Appropriate
49953          Legal Notices displayed by works containing it; or
49954
49955       c. Prohibiting misrepresentation of the origin of that material,
49956          or requiring that modified versions of such material be marked
49957          in reasonable ways as different from the original version; or
49958
49959       d. Limiting the use for publicity purposes of names of licensors
49960          or authors of the material; or
49961
49962       e. Declining to grant rights under trademark law for use of some
49963          trade names, trademarks, or service marks; or
49964
49965       f. Requiring indemnification of licensors and authors of that
49966          material by anyone who conveys the material (or modified
49967          versions of it) with contractual assumptions of liability to
49968          the recipient, for any liability that these contractual
49969          assumptions directly impose on those licensors and authors.
49970
49971     All other non-permissive additional terms are considered "further
49972     restrictions" within the meaning of section 10.  If the Program as
49973     you received it, or any part of it, contains a notice stating that
49974     it is governed by this License along with a term that is a further
49975     restriction, you may remove that term.  If a license document
49976     contains a further restriction but permits relicensing or conveying
49977     under this License, you may add to a covered work material governed
49978     by the terms of that license document, provided that the further
49979     restriction does not survive such relicensing or conveying.
49980
49981     If you add terms to a covered work in accord with this section, you
49982     must place, in the relevant source files, a statement of the
49983     additional terms that apply to those files, or a notice indicating
49984     where to find the applicable terms.
49985
49986     Additional terms, permissive or non-permissive, may be stated in
49987     the form of a separately written license, or stated as exceptions;
49988     the above requirements apply either way.
49989
49990  8. Termination.
49991
49992     You may not propagate or modify a covered work except as expressly
49993     provided under this License.  Any attempt otherwise to propagate or
49994     modify it is void, and will automatically terminate your rights
49995     under this License (including any patent licenses granted under the
49996     third paragraph of section 11).
49997
49998     However, if you cease all violation of this License, then your
49999     license from a particular copyright holder is reinstated (a)
50000     provisionally, unless and until the copyright holder explicitly and
50001     finally terminates your license, and (b) permanently, if the
50002     copyright holder fails to notify you of the violation by some
50003     reasonable means prior to 60 days after the cessation.
50004
50005     Moreover, your license from a particular copyright holder is
50006     reinstated permanently if the copyright holder notifies you of the
50007     violation by some reasonable means, this is the first time you have
50008     received notice of violation of this License (for any work) from
50009     that copyright holder, and you cure the violation prior to 30 days
50010     after your receipt of the notice.
50011
50012     Termination of your rights under this section does not terminate
50013     the licenses of parties who have received copies or rights from you
50014     under this License.  If your rights have been terminated and not
50015     permanently reinstated, you do not qualify to receive new licenses
50016     for the same material under section 10.
50017
50018  9. Acceptance Not Required for Having Copies.
50019
50020     You are not required to accept this License in order to receive or
50021     run a copy of the Program.  Ancillary propagation of a covered work
50022     occurring solely as a consequence of using peer-to-peer
50023     transmission to receive a copy likewise does not require
50024     acceptance.  However, nothing other than this License grants you
50025     permission to propagate or modify any covered work.  These actions
50026     infringe copyright if you do not accept this License.  Therefore,
50027     by modifying or propagating a covered work, you indicate your
50028     acceptance of this License to do so.
50029
50030  10. Automatic Licensing of Downstream Recipients.
50031
50032     Each time you convey a covered work, the recipient automatically
50033     receives a license from the original licensors, to run, modify and
50034     propagate that work, subject to this License.  You are not
50035     responsible for enforcing compliance by third parties with this
50036     License.
50037
50038     An "entity transaction" is a transaction transferring control of an
50039     organization, or substantially all assets of one, or subdividing an
50040     organization, or merging organizations.  If propagation of a
50041     covered work results from an entity transaction, each party to that
50042     transaction who receives a copy of the work also receives whatever
50043     licenses to the work the party's predecessor in interest had or
50044     could give under the previous paragraph, plus a right to possession
50045     of the Corresponding Source of the work from the predecessor in
50046     interest, if the predecessor has it or can get it with reasonable
50047     efforts.
50048
50049     You may not impose any further restrictions on the exercise of the
50050     rights granted or affirmed under this License.  For example, you
50051     may not impose a license fee, royalty, or other charge for exercise
50052     of rights granted under this License, and you may not initiate
50053     litigation (including a cross-claim or counterclaim in a lawsuit)
50054     alleging that any patent claim is infringed by making, using,
50055     selling, offering for sale, or importing the Program or any portion
50056     of it.
50057
50058  11. Patents.
50059
50060     A "contributor" is a copyright holder who authorizes use under this
50061     License of the Program or a work on which the Program is based.
50062     The work thus licensed is called the contributor's "contributor
50063     version".
50064
50065     A contributor's "essential patent claims" are all patent claims
50066     owned or controlled by the contributor, whether already acquired or
50067     hereafter acquired, that would be infringed by some manner,
50068     permitted by this License, of making, using, or selling its
50069     contributor version, but do not include claims that would be
50070     infringed only as a consequence of further modification of the
50071     contributor version.  For purposes of this definition, "control"
50072     includes the right to grant patent sublicenses in a manner
50073     consistent with the requirements of this License.
50074
50075     Each contributor grants you a non-exclusive, worldwide,
50076     royalty-free patent license under the contributor's essential
50077     patent claims, to make, use, sell, offer for sale, import and
50078     otherwise run, modify and propagate the contents of its contributor
50079     version.
50080
50081     In the following three paragraphs, a "patent license" is any
50082     express agreement or commitment, however denominated, not to
50083     enforce a patent (such as an express permission to practice a
50084     patent or covenant not to sue for patent infringement).  To "grant"
50085     such a patent license to a party means to make such an agreement or
50086     commitment not to enforce a patent against the party.
50087
50088     If you convey a covered work, knowingly relying on a patent
50089     license, and the Corresponding Source of the work is not available
50090     for anyone to copy, free of charge and under the terms of this
50091     License, through a publicly available network server or other
50092     readily accessible means, then you must either (1) cause the
50093     Corresponding Source to be so available, or (2) arrange to deprive
50094     yourself of the benefit of the patent license for this particular
50095     work, or (3) arrange, in a manner consistent with the requirements
50096     of this License, to extend the patent license to downstream
50097     recipients.  "Knowingly relying" means you have actual knowledge
50098     that, but for the patent license, your conveying the covered work
50099     in a country, or your recipient's use of the covered work in a
50100     country, would infringe one or more identifiable patents in that
50101     country that you have reason to believe are valid.
50102
50103     If, pursuant to or in connection with a single transaction or
50104     arrangement, you convey, or propagate by procuring conveyance of, a
50105     covered work, and grant a patent license to some of the parties
50106     receiving the covered work authorizing them to use, propagate,
50107     modify or convey a specific copy of the covered work, then the
50108     patent license you grant is automatically extended to all
50109     recipients of the covered work and works based on it.
50110
50111     A patent license is "discriminatory" if it does not include within
50112     the scope of its coverage, prohibits the exercise of, or is
50113     conditioned on the non-exercise of one or more of the rights that
50114     are specifically granted under this License.  You may not convey a
50115     covered work if you are a party to an arrangement with a third
50116     party that is in the business of distributing software, under which
50117     you make payment to the third party based on the extent of your
50118     activity of conveying the work, and under which the third party
50119     grants, to any of the parties who would receive the covered work
50120     from you, a discriminatory patent license (a) in connection with
50121     copies of the covered work conveyed by you (or copies made from
50122     those copies), or (b) primarily for and in connection with specific
50123     products or compilations that contain the covered work, unless you
50124     entered into that arrangement, or that patent license was granted,
50125     prior to 28 March 2007.
50126
50127     Nothing in this License shall be construed as excluding or limiting
50128     any implied license or other defenses to infringement that may
50129     otherwise be available to you under applicable patent law.
50130
50131  12. No Surrender of Others' Freedom.
50132
50133     If conditions are imposed on you (whether by court order, agreement
50134     or otherwise) that contradict the conditions of this License, they
50135     do not excuse you from the conditions of this License.  If you
50136     cannot convey a covered work so as to satisfy simultaneously your
50137     obligations under this License and any other pertinent obligations,
50138     then as a consequence you may not convey it at all.  For example,
50139     if you agree to terms that obligate you to collect a royalty for
50140     further conveying from those to whom you convey the Program, the
50141     only way you could satisfy both those terms and this License would
50142     be to refrain entirely from conveying the Program.
50143
50144  13. Use with the GNU Affero General Public License.
50145
50146     Notwithstanding any other provision of this License, you have
50147     permission to link or combine any covered work with a work licensed
50148     under version 3 of the GNU Affero General Public License into a
50149     single combined work, and to convey the resulting work.  The terms
50150     of this License will continue to apply to the part which is the
50151     covered work, but the special requirements of the GNU Affero
50152     General Public License, section 13, concerning interaction through
50153     a network will apply to the combination as such.
50154
50155  14. Revised Versions of this License.
50156
50157     The Free Software Foundation may publish revised and/or new
50158     versions of the GNU General Public License from time to time.  Such
50159     new versions will be similar in spirit to the present version, but
50160     may differ in detail to address new problems or concerns.
50161
50162     Each version is given a distinguishing version number.  If the
50163     Program specifies that a certain numbered version of the GNU
50164     General Public License "or any later version" applies to it, you
50165     have the option of following the terms and conditions either of
50166     that numbered version or of any later version published by the Free
50167     Software Foundation.  If the Program does not specify a version
50168     number of the GNU General Public License, you may choose any
50169     version ever published by the Free Software Foundation.
50170
50171     If the Program specifies that a proxy can decide which future
50172     versions of the GNU General Public License can be used, that
50173     proxy's public statement of acceptance of a version permanently
50174     authorizes you to choose that version for the Program.
50175
50176     Later license versions may give you additional or different
50177     permissions.  However, no additional obligations are imposed on any
50178     author or copyright holder as a result of your choosing to follow a
50179     later version.
50180
50181  15. Disclaimer of Warranty.
50182
50183     THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
50184     APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE
50185     COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS"
50186     WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED,
50187     INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
50188     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE
50189     RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.
50190     SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL
50191     NECESSARY SERVICING, REPAIR OR CORRECTION.
50192
50193  16. Limitation of Liability.
50194
50195     IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
50196     WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES
50197     AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR
50198     DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
50199     CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE
50200     THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA
50201     BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
50202     PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
50203     PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF
50204     THE POSSIBILITY OF SUCH DAMAGES.
50205
50206  17. Interpretation of Sections 15 and 16.
50207
50208     If the disclaimer of warranty and limitation of liability provided
50209     above cannot be given local legal effect according to their terms,
50210     reviewing courts shall apply local law that most closely
50211     approximates an absolute waiver of all civil liability in
50212     connection with the Program, unless a warranty or assumption of
50213     liability accompanies a copy of the Program in return for a fee.
50214
50215END OF TERMS AND CONDITIONS
50216===========================
50217
50218How to Apply These Terms to Your New Programs
50219=============================================
50220
50221If you develop a new program, and you want it to be of the greatest
50222possible use to the public, the best way to achieve this is to make it
50223free software which everyone can redistribute and change under these
50224terms.
50225
50226 To do so, attach the following notices to the program.  It is safest to
50227attach them to the start of each source file to most effectively state
50228the exclusion of warranty; and each file should have at least the
50229"copyright" line and a pointer to where the full notice is found.
50230
50231     ONE LINE TO GIVE THE PROGRAM'S NAME AND A BRIEF IDEA OF WHAT IT DOES.
50232     Copyright (C) YEAR NAME OF AUTHOR
50233
50234     This program is free software: you can redistribute it and/or modify
50235     it under the terms of the GNU General Public License as published by
50236     the Free Software Foundation, either version 3 of the License, or (at
50237     your option) any later version.
50238
50239     This program is distributed in the hope that it will be useful, but
50240     WITHOUT ANY WARRANTY; without even the implied warranty of
50241     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
50242     General Public License for more details.
50243
50244     You should have received a copy of the GNU General Public License
50245     along with this program.  If not, see <http://www.gnu.org/licenses/>.
50246
50247 Also add information on how to contact you by electronic and paper
50248mail.
50249
50250 If the program does terminal interaction, make it output a short notice
50251like this when it starts in an interactive mode:
50252
50253     PROGRAM Copyright (C) YEAR NAME OF AUTHOR
50254     This program comes with ABSOLUTELY NO WARRANTY; for details type 'show w'.
50255     This is free software, and you are welcome to redistribute it
50256     under certain conditions; type 'show c' for details.
50257
50258 The hypothetical commands 'show w' and 'show c' should show the
50259appropriate parts of the General Public License.  Of course, your
50260program's commands might be different; for a GUI interface, you would
50261use an "about box".
50262
50263 You should also get your employer (if you work as a programmer) or
50264school, if any, to sign a "copyright disclaimer" for the program, if
50265necessary.  For more information on this, and how to apply and follow
50266the GNU GPL, see <http://www.gnu.org/licenses/>.
50267
50268 The GNU General Public License does not permit incorporating your
50269program into proprietary programs.  If your program is a subroutine
50270library, you may consider it more useful to permit linking proprietary
50271applications with the library.  If this is what you want to do, use the
50272GNU Lesser General Public License instead of this License.  But first,
50273please read <http://www.gnu.org/philosophy/why-not-lgpl.html>.
50274
50275
50276File: gcc.info,  Node: GNU Free Documentation License,  Next: Contributors,  Prev: Copying,  Up: Top
50277
50278GNU Free Documentation License
50279******************************
50280
50281                     Version 1.3, 3 November 2008
50282
50283     Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
50284     <http://fsf.org/>
50285
50286     Everyone is permitted to copy and distribute verbatim copies
50287     of this license document, but changing it is not allowed.
50288
50289  0. PREAMBLE
50290
50291     The purpose of this License is to make a manual, textbook, or other
50292     functional and useful document "free" in the sense of freedom: to
50293     assure everyone the effective freedom to copy and redistribute it,
50294     with or without modifying it, either commercially or
50295     noncommercially.  Secondarily, this License preserves for the
50296     author and publisher a way to get credit for their work, while not
50297     being considered responsible for modifications made by others.
50298
50299     This License is a kind of "copyleft", which means that derivative
50300     works of the document must themselves be free in the same sense.
50301     It complements the GNU General Public License, which is a copyleft
50302     license designed for free software.
50303
50304     We have designed this License in order to use it for manuals for
50305     free software, because free software needs free documentation: a
50306     free program should come with manuals providing the same freedoms
50307     that the software does.  But this License is not limited to
50308     software manuals; it can be used for any textual work, regardless
50309     of subject matter or whether it is published as a printed book.  We
50310     recommend this License principally for works whose purpose is
50311     instruction or reference.
50312
50313  1. APPLICABILITY AND DEFINITIONS
50314
50315     This License applies to any manual or other work, in any medium,
50316     that contains a notice placed by the copyright holder saying it can
50317     be distributed under the terms of this License.  Such a notice
50318     grants a world-wide, royalty-free license, unlimited in duration,
50319     to use that work under the conditions stated herein.  The
50320     "Document", below, refers to any such manual or work.  Any member
50321     of the public is a licensee, and is addressed as "you".  You accept
50322     the license if you copy, modify or distribute the work in a way
50323     requiring permission under copyright law.
50324
50325     A "Modified Version" of the Document means any work containing the
50326     Document or a portion of it, either copied verbatim, or with
50327     modifications and/or translated into another language.
50328
50329     A "Secondary Section" is a named appendix or a front-matter section
50330     of the Document that deals exclusively with the relationship of the
50331     publishers or authors of the Document to the Document's overall
50332     subject (or to related matters) and contains nothing that could
50333     fall directly within that overall subject.  (Thus, if the Document
50334     is in part a textbook of mathematics, a Secondary Section may not
50335     explain any mathematics.)  The relationship could be a matter of
50336     historical connection with the subject or with related matters, or
50337     of legal, commercial, philosophical, ethical or political position
50338     regarding them.
50339
50340     The "Invariant Sections" are certain Secondary Sections whose
50341     titles are designated, as being those of Invariant Sections, in the
50342     notice that says that the Document is released under this License.
50343     If a section does not fit the above definition of Secondary then it
50344     is not allowed to be designated as Invariant.  The Document may
50345     contain zero Invariant Sections.  If the Document does not identify
50346     any Invariant Sections then there are none.
50347
50348     The "Cover Texts" are certain short passages of text that are
50349     listed, as Front-Cover Texts or Back-Cover Texts, in the notice
50350     that says that the Document is released under this License.  A
50351     Front-Cover Text may be at most 5 words, and a Back-Cover Text may
50352     be at most 25 words.
50353
50354     A "Transparent" copy of the Document means a machine-readable copy,
50355     represented in a format whose specification is available to the
50356     general public, that is suitable for revising the document
50357     straightforwardly with generic text editors or (for images composed
50358     of pixels) generic paint programs or (for drawings) some widely
50359     available drawing editor, and that is suitable for input to text
50360     formatters or for automatic translation to a variety of formats
50361     suitable for input to text formatters.  A copy made in an otherwise
50362     Transparent file format whose markup, or absence of markup, has
50363     been arranged to thwart or discourage subsequent modification by
50364     readers is not Transparent.  An image format is not Transparent if
50365     used for any substantial amount of text.  A copy that is not
50366     "Transparent" is called "Opaque".
50367
50368     Examples of suitable formats for Transparent copies include plain
50369     ASCII without markup, Texinfo input format, LaTeX input format,
50370     SGML or XML using a publicly available DTD, and standard-conforming
50371     simple HTML, PostScript or PDF designed for human modification.
50372     Examples of transparent image formats include PNG, XCF and JPG.
50373     Opaque formats include proprietary formats that can be read and
50374     edited only by proprietary word processors, SGML or XML for which
50375     the DTD and/or processing tools are not generally available, and
50376     the machine-generated HTML, PostScript or PDF produced by some word
50377     processors for output purposes only.
50378
50379     The "Title Page" means, for a printed book, the title page itself,
50380     plus such following pages as are needed to hold, legibly, the
50381     material this License requires to appear in the title page.  For
50382     works in formats which do not have any title page as such, "Title
50383     Page" means the text near the most prominent appearance of the
50384     work's title, preceding the beginning of the body of the text.
50385
50386     The "publisher" means any person or entity that distributes copies
50387     of the Document to the public.
50388
50389     A section "Entitled XYZ" means a named subunit of the Document
50390     whose title either is precisely XYZ or contains XYZ in parentheses
50391     following text that translates XYZ in another language.  (Here XYZ
50392     stands for a specific section name mentioned below, such as
50393     "Acknowledgements", "Dedications", "Endorsements", or "History".)
50394     To "Preserve the Title" of such a section when you modify the
50395     Document means that it remains a section "Entitled XYZ" according
50396     to this definition.
50397
50398     The Document may include Warranty Disclaimers next to the notice
50399     which states that this License applies to the Document.  These
50400     Warranty Disclaimers are considered to be included by reference in
50401     this License, but only as regards disclaiming warranties: any other
50402     implication that these Warranty Disclaimers may have is void and
50403     has no effect on the meaning of this License.
50404
50405  2. VERBATIM COPYING
50406
50407     You may copy and distribute the Document in any medium, either
50408     commercially or noncommercially, provided that this License, the
50409     copyright notices, and the license notice saying this License
50410     applies to the Document are reproduced in all copies, and that you
50411     add no other conditions whatsoever to those of this License.  You
50412     may not use technical measures to obstruct or control the reading
50413     or further copying of the copies you make or distribute.  However,
50414     you may accept compensation in exchange for copies.  If you
50415     distribute a large enough number of copies you must also follow the
50416     conditions in section 3.
50417
50418     You may also lend copies, under the same conditions stated above,
50419     and you may publicly display copies.
50420
50421  3. COPYING IN QUANTITY
50422
50423     If you publish printed copies (or copies in media that commonly
50424     have printed covers) of the Document, numbering more than 100, and
50425     the Document's license notice requires Cover Texts, you must
50426     enclose the copies in covers that carry, clearly and legibly, all
50427     these Cover Texts: Front-Cover Texts on the front cover, and
50428     Back-Cover Texts on the back cover.  Both covers must also clearly
50429     and legibly identify you as the publisher of these copies.  The
50430     front cover must present the full title with all words of the title
50431     equally prominent and visible.  You may add other material on the
50432     covers in addition.  Copying with changes limited to the covers, as
50433     long as they preserve the title of the Document and satisfy these
50434     conditions, can be treated as verbatim copying in other respects.
50435
50436     If the required texts for either cover are too voluminous to fit
50437     legibly, you should put the first ones listed (as many as fit
50438     reasonably) on the actual cover, and continue the rest onto
50439     adjacent pages.
50440
50441     If you publish or distribute Opaque copies of the Document
50442     numbering more than 100, you must either include a machine-readable
50443     Transparent copy along with each Opaque copy, or state in or with
50444     each Opaque copy a computer-network location from which the general
50445     network-using public has access to download using public-standard
50446     network protocols a complete Transparent copy of the Document, free
50447     of added material.  If you use the latter option, you must take
50448     reasonably prudent steps, when you begin distribution of Opaque
50449     copies in quantity, to ensure that this Transparent copy will
50450     remain thus accessible at the stated location until at least one
50451     year after the last time you distribute an Opaque copy (directly or
50452     through your agents or retailers) of that edition to the public.
50453
50454     It is requested, but not required, that you contact the authors of
50455     the Document well before redistributing any large number of copies,
50456     to give them a chance to provide you with an updated version of the
50457     Document.
50458
50459  4. MODIFICATIONS
50460
50461     You may copy and distribute a Modified Version of the Document
50462     under the conditions of sections 2 and 3 above, provided that you
50463     release the Modified Version under precisely this License, with the
50464     Modified Version filling the role of the Document, thus licensing
50465     distribution and modification of the Modified Version to whoever
50466     possesses a copy of it.  In addition, you must do these things in
50467     the Modified Version:
50468
50469       A. Use in the Title Page (and on the covers, if any) a title
50470          distinct from that of the Document, and from those of previous
50471          versions (which should, if there were any, be listed in the
50472          History section of the Document).  You may use the same title
50473          as a previous version if the original publisher of that
50474          version gives permission.
50475
50476       B. List on the Title Page, as authors, one or more persons or
50477          entities responsible for authorship of the modifications in
50478          the Modified Version, together with at least five of the
50479          principal authors of the Document (all of its principal
50480          authors, if it has fewer than five), unless they release you
50481          from this requirement.
50482
50483       C. State on the Title page the name of the publisher of the
50484          Modified Version, as the publisher.
50485
50486       D. Preserve all the copyright notices of the Document.
50487
50488       E. Add an appropriate copyright notice for your modifications
50489          adjacent to the other copyright notices.
50490
50491       F. Include, immediately after the copyright notices, a license
50492          notice giving the public permission to use the Modified
50493          Version under the terms of this License, in the form shown in
50494          the Addendum below.
50495
50496       G. Preserve in that license notice the full lists of Invariant
50497          Sections and required Cover Texts given in the Document's
50498          license notice.
50499
50500       H. Include an unaltered copy of this License.
50501
50502       I. Preserve the section Entitled "History", Preserve its Title,
50503          and add to it an item stating at least the title, year, new
50504          authors, and publisher of the Modified Version as given on the
50505          Title Page.  If there is no section Entitled "History" in the
50506          Document, create one stating the title, year, authors, and
50507          publisher of the Document as given on its Title Page, then add
50508          an item describing the Modified Version as stated in the
50509          previous sentence.
50510
50511       J. Preserve the network location, if any, given in the Document
50512          for public access to a Transparent copy of the Document, and
50513          likewise the network locations given in the Document for
50514          previous versions it was based on.  These may be placed in the
50515          "History" section.  You may omit a network location for a work
50516          that was published at least four years before the Document
50517          itself, or if the original publisher of the version it refers
50518          to gives permission.
50519
50520       K. For any section Entitled "Acknowledgements" or "Dedications",
50521          Preserve the Title of the section, and preserve in the section
50522          all the substance and tone of each of the contributor
50523          acknowledgements and/or dedications given therein.
50524
50525       L. Preserve all the Invariant Sections of the Document, unaltered
50526          in their text and in their titles.  Section numbers or the
50527          equivalent are not considered part of the section titles.
50528
50529       M. Delete any section Entitled "Endorsements".  Such a section
50530          may not be included in the Modified Version.
50531
50532       N. Do not retitle any existing section to be Entitled
50533          "Endorsements" or to conflict in title with any Invariant
50534          Section.
50535
50536       O. Preserve any Warranty Disclaimers.
50537
50538     If the Modified Version includes new front-matter sections or
50539     appendices that qualify as Secondary Sections and contain no
50540     material copied from the Document, you may at your option designate
50541     some or all of these sections as invariant.  To do this, add their
50542     titles to the list of Invariant Sections in the Modified Version's
50543     license notice.  These titles must be distinct from any other
50544     section titles.
50545
50546     You may add a section Entitled "Endorsements", provided it contains
50547     nothing but endorsements of your Modified Version by various
50548     parties--for example, statements of peer review or that the text
50549     has been approved by an organization as the authoritative
50550     definition of a standard.
50551
50552     You may add a passage of up to five words as a Front-Cover Text,
50553     and a passage of up to 25 words as a Back-Cover Text, to the end of
50554     the list of Cover Texts in the Modified Version.  Only one passage
50555     of Front-Cover Text and one of Back-Cover Text may be added by (or
50556     through arrangements made by) any one entity.  If the Document
50557     already includes a cover text for the same cover, previously added
50558     by you or by arrangement made by the same entity you are acting on
50559     behalf of, you may not add another; but you may replace the old
50560     one, on explicit permission from the previous publisher that added
50561     the old one.
50562
50563     The author(s) and publisher(s) of the Document do not by this
50564     License give permission to use their names for publicity for or to
50565     assert or imply endorsement of any Modified Version.
50566
50567  5. COMBINING DOCUMENTS
50568
50569     You may combine the Document with other documents released under
50570     this License, under the terms defined in section 4 above for
50571     modified versions, provided that you include in the combination all
50572     of the Invariant Sections of all of the original documents,
50573     unmodified, and list them all as Invariant Sections of your
50574     combined work in its license notice, and that you preserve all
50575     their Warranty Disclaimers.
50576
50577     The combined work need only contain one copy of this License, and
50578     multiple identical Invariant Sections may be replaced with a single
50579     copy.  If there are multiple Invariant Sections with the same name
50580     but different contents, make the title of each such section unique
50581     by adding at the end of it, in parentheses, the name of the
50582     original author or publisher of that section if known, or else a
50583     unique number.  Make the same adjustment to the section titles in
50584     the list of Invariant Sections in the license notice of the
50585     combined work.
50586
50587     In the combination, you must combine any sections Entitled
50588     "History" in the various original documents, forming one section
50589     Entitled "History"; likewise combine any sections Entitled
50590     "Acknowledgements", and any sections Entitled "Dedications".  You
50591     must delete all sections Entitled "Endorsements."
50592
50593  6. COLLECTIONS OF DOCUMENTS
50594
50595     You may make a collection consisting of the Document and other
50596     documents released under this License, and replace the individual
50597     copies of this License in the various documents with a single copy
50598     that is included in the collection, provided that you follow the
50599     rules of this License for verbatim copying of each of the documents
50600     in all other respects.
50601
50602     You may extract a single document from such a collection, and
50603     distribute it individually under this License, provided you insert
50604     a copy of this License into the extracted document, and follow this
50605     License in all other respects regarding verbatim copying of that
50606     document.
50607
50608  7. AGGREGATION WITH INDEPENDENT WORKS
50609
50610     A compilation of the Document or its derivatives with other
50611     separate and independent documents or works, in or on a volume of a
50612     storage or distribution medium, is called an "aggregate" if the
50613     copyright resulting from the compilation is not used to limit the
50614     legal rights of the compilation's users beyond what the individual
50615     works permit.  When the Document is included in an aggregate, this
50616     License does not apply to the other works in the aggregate which
50617     are not themselves derivative works of the Document.
50618
50619     If the Cover Text requirement of section 3 is applicable to these
50620     copies of the Document, then if the Document is less than one half
50621     of the entire aggregate, the Document's Cover Texts may be placed
50622     on covers that bracket the Document within the aggregate, or the
50623     electronic equivalent of covers if the Document is in electronic
50624     form.  Otherwise they must appear on printed covers that bracket
50625     the whole aggregate.
50626
50627  8. TRANSLATION
50628
50629     Translation is considered a kind of modification, so you may
50630     distribute translations of the Document under the terms of section
50631     4.  Replacing Invariant Sections with translations requires special
50632     permission from their copyright holders, but you may include
50633     translations of some or all Invariant Sections in addition to the
50634     original versions of these Invariant Sections.  You may include a
50635     translation of this License, and all the license notices in the
50636     Document, and any Warranty Disclaimers, provided that you also
50637     include the original English version of this License and the
50638     original versions of those notices and disclaimers.  In case of a
50639     disagreement between the translation and the original version of
50640     this License or a notice or disclaimer, the original version will
50641     prevail.
50642
50643     If a section in the Document is Entitled "Acknowledgements",
50644     "Dedications", or "History", the requirement (section 4) to
50645     Preserve its Title (section 1) will typically require changing the
50646     actual title.
50647
50648  9. TERMINATION
50649
50650     You may not copy, modify, sublicense, or distribute the Document
50651     except as expressly provided under this License.  Any attempt
50652     otherwise to copy, modify, sublicense, or distribute it is void,
50653     and will automatically terminate your rights under this License.
50654
50655     However, if you cease all violation of this License, then your
50656     license from a particular copyright holder is reinstated (a)
50657     provisionally, unless and until the copyright holder explicitly and
50658     finally terminates your license, and (b) permanently, if the
50659     copyright holder fails to notify you of the violation by some
50660     reasonable means prior to 60 days after the cessation.
50661
50662     Moreover, your license from a particular copyright holder is
50663     reinstated permanently if the copyright holder notifies you of the
50664     violation by some reasonable means, this is the first time you have
50665     received notice of violation of this License (for any work) from
50666     that copyright holder, and you cure the violation prior to 30 days
50667     after your receipt of the notice.
50668
50669     Termination of your rights under this section does not terminate
50670     the licenses of parties who have received copies or rights from you
50671     under this License.  If your rights have been terminated and not
50672     permanently reinstated, receipt of a copy of some or all of the
50673     same material does not give you any rights to use it.
50674
50675  10. FUTURE REVISIONS OF THIS LICENSE
50676
50677     The Free Software Foundation may publish new, revised versions of
50678     the GNU Free Documentation License from time to time.  Such new
50679     versions will be similar in spirit to the present version, but may
50680     differ in detail to address new problems or concerns.  See
50681     <http://www.gnu.org/copyleft/>.
50682
50683     Each version of the License is given a distinguishing version
50684     number.  If the Document specifies that a particular numbered
50685     version of this License "or any later version" applies to it, you
50686     have the option of following the terms and conditions either of
50687     that specified version or of any later version that has been
50688     published (not as a draft) by the Free Software Foundation.  If the
50689     Document does not specify a version number of this License, you may
50690     choose any version ever published (not as a draft) by the Free
50691     Software Foundation.  If the Document specifies that a proxy can
50692     decide which future versions of this License can be used, that
50693     proxy's public statement of acceptance of a version permanently
50694     authorizes you to choose that version for the Document.
50695
50696  11. RELICENSING
50697
50698     "Massive Multiauthor Collaboration Site" (or "MMC Site") means any
50699     World Wide Web server that publishes copyrightable works and also
50700     provides prominent facilities for anybody to edit those works.  A
50701     public wiki that anybody can edit is an example of such a server.
50702     A "Massive Multiauthor Collaboration" (or "MMC") contained in the
50703     site means any set of copyrightable works thus published on the MMC
50704     site.
50705
50706     "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0
50707     license published by Creative Commons Corporation, a not-for-profit
50708     corporation with a principal place of business in San Francisco,
50709     California, as well as future copyleft versions of that license
50710     published by that same organization.
50711
50712     "Incorporate" means to publish or republish a Document, in whole or
50713     in part, as part of another Document.
50714
50715     An MMC is "eligible for relicensing" if it is licensed under this
50716     License, and if all works that were first published under this
50717     License somewhere other than this MMC, and subsequently
50718     incorporated in whole or in part into the MMC, (1) had no cover
50719     texts or invariant sections, and (2) were thus incorporated prior
50720     to November 1, 2008.
50721
50722     The operator of an MMC Site may republish an MMC contained in the
50723     site under CC-BY-SA on the same site at any time before August 1,
50724     2009, provided the MMC is eligible for relicensing.
50725
50726ADDENDUM: How to use this License for your documents
50727====================================================
50728
50729To use this License in a document you have written, include a copy of
50730the License in the document and put the following copyright and license
50731notices just after the title page:
50732
50733       Copyright (C)  YEAR  YOUR NAME.
50734       Permission is granted to copy, distribute and/or modify this document
50735       under the terms of the GNU Free Documentation License, Version 1.3
50736       or any later version published by the Free Software Foundation;
50737       with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
50738       Texts.  A copy of the license is included in the section entitled ``GNU
50739       Free Documentation License''.
50740
50741 If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
50742replace the "with...Texts."  line with this:
50743
50744         with the Invariant Sections being LIST THEIR TITLES, with
50745         the Front-Cover Texts being LIST, and with the Back-Cover Texts
50746         being LIST.
50747
50748 If you have Invariant Sections without Cover Texts, or some other
50749combination of the three, merge those two alternatives to suit the
50750situation.
50751
50752 If your document contains nontrivial examples of program code, we
50753recommend releasing these examples in parallel under your choice of free
50754software license, such as the GNU General Public License, to permit
50755their use in free software.
50756
50757
50758File: gcc.info,  Node: Contributors,  Next: Option Index,  Prev: GNU Free Documentation License,  Up: Top
50759
50760Contributors to GCC
50761*******************
50762
50763The GCC project would like to thank its many contributors.  Without them
50764the project would not have been nearly as successful as it has been.
50765Any omissions in this list are accidental.  Feel free to contact
50766<law@redhat.com> or <gerald@pfeifer.com> if you have been left out or
50767some of your contributions are not listed.  Please keep this list in
50768alphabetical order.
50769
50770   * Analog Devices helped implement the support for complex data types
50771     and iterators.
50772
50773   * John David Anglin for threading-related fixes and improvements to
50774     libstdc++-v3, and the HP-UX port.
50775
50776   * James van Artsdalen wrote the code that makes efficient use of the
50777     Intel 80387 register stack.
50778
50779   * Abramo and Roberto Bagnara for the SysV68 Motorola 3300 Delta
50780     Series port.
50781
50782   * Alasdair Baird for various bug fixes.
50783
50784   * Giovanni Bajo for analyzing lots of complicated C++ problem
50785     reports.
50786
50787   * Peter Barada for his work to improve code generation for new
50788     ColdFire cores.
50789
50790   * Gerald Baumgartner added the signature extension to the C++ front
50791     end.
50792
50793   * Godmar Back for his Java improvements and encouragement.
50794
50795   * Scott Bambrough for help porting the Java compiler.
50796
50797   * Wolfgang Bangerth for processing tons of bug reports.
50798
50799   * Jon Beniston for his Microsoft Windows port of Java and port to
50800     Lattice Mico32.
50801
50802   * Daniel Berlin for better DWARF2 support, faster/better
50803     optimizations, improved alias analysis, plus migrating GCC to
50804     Bugzilla.
50805
50806   * Geoff Berry for his Java object serialization work and various
50807     patches.
50808
50809   * David Binderman tests weekly snapshots of GCC trunk against Fedora
50810     Rawhide for several architectures.
50811
50812   * Uros Bizjak for the implementation of x87 math built-in functions
50813     and for various middle end and i386 back end improvements and bug
50814     fixes.
50815
50816   * Eric Blake for helping to make GCJ and libgcj conform to the
50817     specifications.
50818
50819   * Janne Blomqvist for contributions to GNU Fortran.
50820
50821   * Segher Boessenkool for various fixes.
50822
50823   * Hans-J. Boehm for his garbage collector, IA-64 libffi port, and
50824     other Java work.
50825
50826   * Neil Booth for work on cpplib, lang hooks, debug hooks and other
50827     miscellaneous clean-ups.
50828
50829   * Steven Bosscher for integrating the GNU Fortran front end into GCC
50830     and for contributing to the tree-ssa branch.
50831
50832   * Eric Botcazou for fixing middle- and backend bugs left and right.
50833
50834   * Per Bothner for his direction via the steering committee and
50835     various improvements to the infrastructure for supporting new
50836     languages.  Chill front end implementation.  Initial
50837     implementations of cpplib, fix-header, config.guess, libio, and
50838     past C++ library (libg++) maintainer.  Dreaming up, designing and
50839     implementing much of GCJ.
50840
50841   * Devon Bowen helped port GCC to the Tahoe.
50842
50843   * Don Bowman for mips-vxworks contributions.
50844
50845   * Dave Brolley for work on cpplib and Chill.
50846
50847   * Paul Brook for work on the ARM architecture and maintaining GNU
50848     Fortran.
50849
50850   * Robert Brown implemented the support for Encore 32000 systems.
50851
50852   * Christian Bruel for improvements to local store elimination.
50853
50854   * Herman A.J. ten Brugge for various fixes.
50855
50856   * Joerg Brunsmann for Java compiler hacking and help with the GCJ
50857     FAQ.
50858
50859   * Joe Buck for his direction via the steering committee.
50860
50861   * Craig Burley for leadership of the G77 Fortran effort.
50862
50863   * Stephan Buys for contributing Doxygen notes for libstdc++.
50864
50865   * Paolo Carlini for libstdc++ work: lots of efficiency improvements
50866     to the C++ strings, streambufs and formatted I/O, hard detective
50867     work on the frustrating localization issues, and keeping up with
50868     the problem reports.
50869
50870   * John Carr for his alias work, SPARC hacking, infrastructure
50871     improvements, previous contributions to the steering committee,
50872     loop optimizations, etc.
50873
50874   * Stephane Carrez for 68HC11 and 68HC12 ports.
50875
50876   * Steve Chamberlain for support for the Renesas SH and H8 processors
50877     and the PicoJava processor, and for GCJ config fixes.
50878
50879   * Glenn Chambers for help with the GCJ FAQ.
50880
50881   * John-Marc Chandonia for various libgcj patches.
50882
50883   * Denis Chertykov for contributing and maintaining the AVR port, the
50884     first GCC port for an 8-bit architecture.
50885
50886   * Scott Christley for his Objective-C contributions.
50887
50888   * Eric Christopher for his Java porting help and clean-ups.
50889
50890   * Branko Cibej for more warning contributions.
50891
50892   * The GNU Classpath project for all of their merged runtime code.
50893
50894   * Nick Clifton for arm, mcore, fr30, v850, m32r, msp430 rx work,
50895     '--help', and other random hacking.
50896
50897   * Michael Cook for libstdc++ cleanup patches to reduce warnings.
50898
50899   * R. Kelley Cook for making GCC buildable from a read-only directory
50900     as well as other miscellaneous build process and documentation
50901     clean-ups.
50902
50903   * Ralf Corsepius for SH testing and minor bug fixing.
50904
50905   * Stan Cox for care and feeding of the x86 port and lots of behind
50906     the scenes hacking.
50907
50908   * Alex Crain provided changes for the 3b1.
50909
50910   * Ian Dall for major improvements to the NS32k port.
50911
50912   * Paul Dale for his work to add uClinux platform support to the m68k
50913     backend.
50914
50915   * Dario Dariol contributed the four varieties of sample programs that
50916     print a copy of their source.
50917
50918   * Russell Davidson for fstream and stringstream fixes in libstdc++.
50919
50920   * Bud Davis for work on the G77 and GNU Fortran compilers.
50921
50922   * Mo DeJong for GCJ and libgcj bug fixes.
50923
50924   * DJ Delorie for the DJGPP port, build and libiberty maintenance,
50925     various bug fixes, and the M32C, MeP, MSP430, and RL78 ports.
50926
50927   * Arnaud Desitter for helping to debug GNU Fortran.
50928
50929   * Gabriel Dos Reis for contributions to G++, contributions and
50930     maintenance of GCC diagnostics infrastructure, libstdc++-v3,
50931     including 'valarray<>', 'complex<>', maintaining the numerics
50932     library (including that pesky '<limits>' :-) and keeping up-to-date
50933     anything to do with numbers.
50934
50935   * Ulrich Drepper for his work on glibc, testing of GCC using glibc,
50936     ISO C99 support, CFG dumping support, etc., plus support of the C++
50937     runtime libraries including for all kinds of C interface issues,
50938     contributing and maintaining 'complex<>', sanity checking and
50939     disbursement, configuration architecture, libio maintenance, and
50940     early math work.
50941
50942   * Franc,ois Dumont for his work on libstdc++-v3, especially
50943     maintaining and improving 'debug-mode' and associative and
50944     unordered containers.
50945
50946   * Zdenek Dvorak for a new loop unroller and various fixes.
50947
50948   * Michael Eager for his work on the Xilinx MicroBlaze port.
50949
50950   * Richard Earnshaw for his ongoing work with the ARM.
50951
50952   * David Edelsohn for his direction via the steering committee,
50953     ongoing work with the RS6000/PowerPC port, help cleaning up Haifa
50954     loop changes, doing the entire AIX port of libstdc++ with his bare
50955     hands, and for ensuring GCC properly keeps working on AIX.
50956
50957   * Kevin Ediger for the floating point formatting of num_put::do_put
50958     in libstdc++.
50959
50960   * Phil Edwards for libstdc++ work including configuration hackery,
50961     documentation maintainer, chief breaker of the web pages, the
50962     occasional iostream bug fix, and work on shared library symbol
50963     versioning.
50964
50965   * Paul Eggert for random hacking all over GCC.
50966
50967   * Mark Elbrecht for various DJGPP improvements, and for libstdc++
50968     configuration support for locales and fstream-related fixes.
50969
50970   * Vadim Egorov for libstdc++ fixes in strings, streambufs, and
50971     iostreams.
50972
50973   * Christian Ehrhardt for dealing with bug reports.
50974
50975   * Ben Elliston for his work to move the Objective-C runtime into its
50976     own subdirectory and for his work on autoconf.
50977
50978   * Revital Eres for work on the PowerPC 750CL port.
50979
50980   * Marc Espie for OpenBSD support.
50981
50982   * Doug Evans for much of the global optimization framework, arc,
50983     m32r, and SPARC work.
50984
50985   * Christopher Faylor for his work on the Cygwin port and for caring
50986     and feeding the gcc.gnu.org box and saving its users tons of spam.
50987
50988   * Fred Fish for BeOS support and Ada fixes.
50989
50990   * Ivan Fontes Garcia for the Portuguese translation of the GCJ FAQ.
50991
50992   * Peter Gerwinski for various bug fixes and the Pascal front end.
50993
50994   * Kaveh R. Ghazi for his direction via the steering committee,
50995     amazing work to make '-W -Wall -W* -Werror' useful, and testing GCC
50996     on a plethora of platforms.  Kaveh extends his gratitude to the
50997     CAIP Center at Rutgers University for providing him with computing
50998     resources to work on Free Software from the late 1980s to 2010.
50999
51000   * John Gilmore for a donation to the FSF earmarked improving GNU
51001     Java.
51002
51003   * Judy Goldberg for c++ contributions.
51004
51005   * Torbjorn Granlund for various fixes and the c-torture testsuite,
51006     multiply- and divide-by-constant optimization, improved long long
51007     support, improved leaf function register allocation, and his
51008     direction via the steering committee.
51009
51010   * Anthony Green for his '-Os' contributions, the moxie port, and Java
51011     front end work.
51012
51013   * Stu Grossman for gdb hacking, allowing GCJ developers to debug Java
51014     code.
51015
51016   * Michael K. Gschwind contributed the port to the PDP-11.
51017
51018   * Richard Biener for his ongoing middle-end contributions and bug
51019     fixes and for release management.
51020
51021   * Ron Guilmette implemented the 'protoize' and 'unprotoize' tools,
51022     the support for Dwarf symbolic debugging information, and much of
51023     the support for System V Release 4.  He has also worked heavily on
51024     the Intel 386 and 860 support.
51025
51026   * Sumanth Gundapaneni for contributing the CR16 port.
51027
51028   * Mostafa Hagog for Swing Modulo Scheduling (SMS) and post reload
51029     GCSE.
51030
51031   * Bruno Haible for improvements in the runtime overhead for EH, new
51032     warnings and assorted bug fixes.
51033
51034   * Andrew Haley for his amazing Java compiler and library efforts.
51035
51036   * Chris Hanson assisted in making GCC work on HP-UX for the 9000
51037     series 300.
51038
51039   * Michael Hayes for various thankless work he's done trying to get
51040     the c30/c40 ports functional.  Lots of loop and unroll improvements
51041     and fixes.
51042
51043   * Dara Hazeghi for wading through myriads of target-specific bug
51044     reports.
51045
51046   * Kate Hedstrom for staking the G77 folks with an initial testsuite.
51047
51048   * Richard Henderson for his ongoing SPARC, alpha, ia32, and ia64
51049     work, loop opts, and generally fixing lots of old problems we've
51050     ignored for years, flow rewrite and lots of further stuff,
51051     including reviewing tons of patches.
51052
51053   * Aldy Hernandez for working on the PowerPC port, SIMD support, and
51054     various fixes.
51055
51056   * Nobuyuki Hikichi of Software Research Associates, Tokyo,
51057     contributed the support for the Sony NEWS machine.
51058
51059   * Kazu Hirata for caring and feeding the Renesas H8/300 port and
51060     various fixes.
51061
51062   * Katherine Holcomb for work on GNU Fortran.
51063
51064   * Manfred Hollstein for his ongoing work to keep the m88k alive, lots
51065     of testing and bug fixing, particularly of GCC configury code.
51066
51067   * Steve Holmgren for MachTen patches.
51068
51069   * Mat Hostetter for work on the TILE-Gx and TILEPro ports.
51070
51071   * Jan Hubicka for his x86 port improvements.
51072
51073   * Falk Hueffner for working on C and optimization bug reports.
51074
51075   * Bernardo Innocenti for his m68k work, including merging of ColdFire
51076     improvements and uClinux support.
51077
51078   * Christian Iseli for various bug fixes.
51079
51080   * Kamil Iskra for general m68k hacking.
51081
51082   * Lee Iverson for random fixes and MIPS testing.
51083
51084   * Andreas Jaeger for testing and benchmarking of GCC and various bug
51085     fixes.
51086
51087   * Jakub Jelinek for his SPARC work and sibling call optimizations as
51088     well as lots of bug fixes and test cases, and for improving the
51089     Java build system.
51090
51091   * Janis Johnson for ia64 testing and fixes, her quality improvement
51092     sidetracks, and web page maintenance.
51093
51094   * Kean Johnston for SCO OpenServer support and various fixes.
51095
51096   * Tim Josling for the sample language treelang based originally on
51097     Richard Kenner's "toy" language.
51098
51099   * Nicolai Josuttis for additional libstdc++ documentation.
51100
51101   * Klaus Kaempf for his ongoing work to make alpha-vms a viable
51102     target.
51103
51104   * Steven G. Kargl for work on GNU Fortran.
51105
51106   * David Kashtan of SRI adapted GCC to VMS.
51107
51108   * Ryszard Kabatek for many, many libstdc++ bug fixes and
51109     optimizations of strings, especially member functions, and for
51110     auto_ptr fixes.
51111
51112   * Geoffrey Keating for his ongoing work to make the PPC work for
51113     GNU/Linux and his automatic regression tester.
51114
51115   * Brendan Kehoe for his ongoing work with G++ and for a lot of early
51116     work in just about every part of libstdc++.
51117
51118   * Oliver M. Kellogg of Deutsche Aerospace contributed the port to the
51119     MIL-STD-1750A.
51120
51121   * Richard Kenner of the New York University Ultracomputer Research
51122     Laboratory wrote the machine descriptions for the AMD 29000, the
51123     DEC Alpha, the IBM RT PC, and the IBM RS/6000 as well as the
51124     support for instruction attributes.  He also made changes to better
51125     support RISC processors including changes to common subexpression
51126     elimination, strength reduction, function calling sequence
51127     handling, and condition code support, in addition to generalizing
51128     the code for frame pointer elimination and delay slot scheduling.
51129     Richard Kenner was also the head maintainer of GCC for several
51130     years.
51131
51132   * Mumit Khan for various contributions to the Cygwin and Mingw32
51133     ports and maintaining binary releases for Microsoft Windows hosts,
51134     and for massive libstdc++ porting work to Cygwin/Mingw32.
51135
51136   * Robin Kirkham for cpu32 support.
51137
51138   * Mark Klein for PA improvements.
51139
51140   * Thomas Koenig for various bug fixes.
51141
51142   * Bruce Korb for the new and improved fixincludes code.
51143
51144   * Benjamin Kosnik for his G++ work and for leading the libstdc++-v3
51145     effort.
51146
51147   * Charles LaBrec contributed the support for the Integrated Solutions
51148     68020 system.
51149
51150   * Asher Langton and Mike Kumbera for contributing Cray pointer
51151     support to GNU Fortran, and for other GNU Fortran improvements.
51152
51153   * Jeff Law for his direction via the steering committee, coordinating
51154     the entire egcs project and GCC 2.95, rolling out snapshots and
51155     releases, handling merges from GCC2, reviewing tons of patches that
51156     might have fallen through the cracks else, and random but extensive
51157     hacking.
51158
51159   * Walter Lee for work on the TILE-Gx and TILEPro ports.
51160
51161   * Marc Lehmann for his direction via the steering committee and
51162     helping with analysis and improvements of x86 performance.
51163
51164   * Victor Leikehman for work on GNU Fortran.
51165
51166   * Ted Lemon wrote parts of the RTL reader and printer.
51167
51168   * Kriang Lerdsuwanakij for C++ improvements including template as
51169     template parameter support, and many C++ fixes.
51170
51171   * Warren Levy for tremendous work on libgcj (Java Runtime Library)
51172     and random work on the Java front end.
51173
51174   * Alain Lichnewsky ported GCC to the MIPS CPU.
51175
51176   * Oskar Liljeblad for hacking on AWT and his many Java bug reports
51177     and patches.
51178
51179   * Robert Lipe for OpenServer support, new testsuites, testing, etc.
51180
51181   * Chen Liqin for various S+core related fixes/improvement, and for
51182     maintaining the S+core port.
51183
51184   * Weiwen Liu for testing and various bug fixes.
51185
51186   * Manuel Lo'pez-Iba'n~ez for improving '-Wconversion' and many other
51187     diagnostics fixes and improvements.
51188
51189   * Dave Love for his ongoing work with the Fortran front end and
51190     runtime libraries.
51191
51192   * Martin von Lo"wis for internal consistency checking infrastructure,
51193     various C++ improvements including namespace support, and tons of
51194     assistance with libstdc++/compiler merges.
51195
51196   * H.J. Lu for his previous contributions to the steering committee,
51197     many x86 bug reports, prototype patches, and keeping the GNU/Linux
51198     ports working.
51199
51200   * Greg McGary for random fixes and (someday) bounded pointers.
51201
51202   * Andrew MacLeod for his ongoing work in building a real EH system,
51203     various code generation improvements, work on the global optimizer,
51204     etc.
51205
51206   * Vladimir Makarov for hacking some ugly i960 problems, PowerPC
51207     hacking improvements to compile-time performance, overall knowledge
51208     and direction in the area of instruction scheduling, and design and
51209     implementation of the automaton based instruction scheduler.
51210
51211   * Bob Manson for his behind the scenes work on dejagnu.
51212
51213   * Philip Martin for lots of libstdc++ string and vector iterator
51214     fixes and improvements, and string clean up and testsuites.
51215
51216   * All of the Mauve project contributors, for Java test code.
51217
51218   * Bryce McKinlay for numerous GCJ and libgcj fixes and improvements.
51219
51220   * Adam Megacz for his work on the Microsoft Windows port of GCJ.
51221
51222   * Michael Meissner for LRS framework, ia32, m32r, v850, m88k, MIPS,
51223     powerpc, haifa, ECOFF debug support, and other assorted hacking.
51224
51225   * Jason Merrill for his direction via the steering committee and
51226     leading the G++ effort.
51227
51228   * Martin Michlmayr for testing GCC on several architectures using the
51229     entire Debian archive.
51230
51231   * David Miller for his direction via the steering committee, lots of
51232     SPARC work, improvements in jump.c and interfacing with the Linux
51233     kernel developers.
51234
51235   * Gary Miller ported GCC to Charles River Data Systems machines.
51236
51237   * Alfred Minarik for libstdc++ string and ios bug fixes, and turning
51238     the entire libstdc++ testsuite namespace-compatible.
51239
51240   * Mark Mitchell for his direction via the steering committee,
51241     mountains of C++ work, load/store hoisting out of loops, alias
51242     analysis improvements, ISO C 'restrict' support, and serving as
51243     release manager from 2000 to 2011.
51244
51245   * Alan Modra for various GNU/Linux bits and testing.
51246
51247   * Toon Moene for his direction via the steering committee, Fortran
51248     maintenance, and his ongoing work to make us make Fortran run fast.
51249
51250   * Jason Molenda for major help in the care and feeding of all the
51251     services on the gcc.gnu.org (formerly egcs.cygnus.com)
51252     machine--mail, web services, ftp services, etc etc.  Doing all this
51253     work on scrap paper and the backs of envelopes would have been...
51254     difficult.
51255
51256   * Catherine Moore for fixing various ugly problems we have sent her
51257     way, including the haifa bug which was killing the Alpha & PowerPC
51258     Linux kernels.
51259
51260   * Mike Moreton for his various Java patches.
51261
51262   * David Mosberger-Tang for various Alpha improvements, and for the
51263     initial IA-64 port.
51264
51265   * Stephen Moshier contributed the floating point emulator that
51266     assists in cross-compilation and permits support for floating point
51267     numbers wider than 64 bits and for ISO C99 support.
51268
51269   * Bill Moyer for his behind the scenes work on various issues.
51270
51271   * Philippe De Muyter for his work on the m68k port.
51272
51273   * Joseph S. Myers for his work on the PDP-11 port, format checking
51274     and ISO C99 support, and continuous emphasis on (and contributions
51275     to) documentation.
51276
51277   * Nathan Myers for his work on libstdc++-v3: architecture and
51278     authorship through the first three snapshots, including
51279     implementation of locale infrastructure, string, shadow C headers,
51280     and the initial project documentation (DESIGN, CHECKLIST, and so
51281     forth).  Later, more work on MT-safe string and shadow headers.
51282
51283   * Felix Natter for documentation on porting libstdc++.
51284
51285   * Nathanael Nerode for cleaning up the configuration/build process.
51286
51287   * NeXT, Inc. donated the front end that supports the Objective-C
51288     language.
51289
51290   * Hans-Peter Nilsson for the CRIS and MMIX ports, improvements to the
51291     search engine setup, various documentation fixes and other small
51292     fixes.
51293
51294   * Geoff Noer for his work on getting cygwin native builds working.
51295
51296   * Diego Novillo for his work on Tree SSA, OpenMP, SPEC performance
51297     tracking web pages, GIMPLE tuples, and assorted fixes.
51298
51299   * David O'Brien for the FreeBSD/alpha, FreeBSD/AMD x86-64,
51300     FreeBSD/ARM, FreeBSD/PowerPC, and FreeBSD/SPARC64 ports and related
51301     infrastructure improvements.
51302
51303   * Alexandre Oliva for various build infrastructure improvements,
51304     scripts and amazing testing work, including keeping libtool issues
51305     sane and happy.
51306
51307   * Stefan Olsson for work on mt_alloc.
51308
51309   * Melissa O'Neill for various NeXT fixes.
51310
51311   * Rainer Orth for random MIPS work, including improvements to GCC's
51312     o32 ABI support, improvements to dejagnu's MIPS support, Java
51313     configuration clean-ups and porting work, and maintaining the IRIX,
51314     Solaris 2, and Tru64 UNIX ports.
51315
51316   * Hartmut Penner for work on the s390 port.
51317
51318   * Paul Petersen wrote the machine description for the Alliant FX/8.
51319
51320   * Alexandre Petit-Bianco for implementing much of the Java compiler
51321     and continued Java maintainership.
51322
51323   * Matthias Pfaller for major improvements to the NS32k port.
51324
51325   * Gerald Pfeifer for his direction via the steering committee,
51326     pointing out lots of problems we need to solve, maintenance of the
51327     web pages, and taking care of documentation maintenance in general.
51328
51329   * Andrew Pinski for processing bug reports by the dozen.
51330
51331   * Ovidiu Predescu for his work on the Objective-C front end and
51332     runtime libraries.
51333
51334   * Jerry Quinn for major performance improvements in C++ formatted
51335     I/O.
51336
51337   * Ken Raeburn for various improvements to checker, MIPS ports and
51338     various cleanups in the compiler.
51339
51340   * Rolf W. Rasmussen for hacking on AWT.
51341
51342   * David Reese of Sun Microsystems contributed to the Solaris on
51343     PowerPC port.
51344
51345   * Volker Reichelt for keeping up with the problem reports.
51346
51347   * Joern Rennecke for maintaining the sh port, loop, regmove & reload
51348     hacking and developing and maintaining the Epiphany port.
51349
51350   * Loren J. Rittle for improvements to libstdc++-v3 including the
51351     FreeBSD port, threading fixes, thread-related configury changes,
51352     critical threading documentation, and solutions to really tricky
51353     I/O problems, as well as keeping GCC properly working on FreeBSD
51354     and continuous testing.
51355
51356   * Craig Rodrigues for processing tons of bug reports.
51357
51358   * Ola Ro"nnerup for work on mt_alloc.
51359
51360   * Gavin Romig-Koch for lots of behind the scenes MIPS work.
51361
51362   * David Ronis inspired and encouraged Craig to rewrite the G77
51363     documentation in texinfo format by contributing a first pass at a
51364     translation of the old 'g77-0.5.16/f/DOC' file.
51365
51366   * Ken Rose for fixes to GCC's delay slot filling code.
51367
51368   * Paul Rubin wrote most of the preprocessor.
51369
51370   * Pe'tur Runo'lfsson for major performance improvements in C++
51371     formatted I/O and large file support in C++ filebuf.
51372
51373   * Chip Salzenberg for libstdc++ patches and improvements to locales,
51374     traits, Makefiles, libio, libtool hackery, and "long long" support.
51375
51376   * Juha Sarlin for improvements to the H8 code generator.
51377
51378   * Greg Satz assisted in making GCC work on HP-UX for the 9000 series
51379     300.
51380
51381   * Roger Sayle for improvements to constant folding and GCC's RTL
51382     optimizers as well as for fixing numerous bugs.
51383
51384   * Bradley Schatz for his work on the GCJ FAQ.
51385
51386   * Peter Schauer wrote the code to allow debugging to work on the
51387     Alpha.
51388
51389   * William Schelter did most of the work on the Intel 80386 support.
51390
51391   * Tobias Schlu"ter for work on GNU Fortran.
51392
51393   * Bernd Schmidt for various code generation improvements and major
51394     work in the reload pass, serving as release manager for GCC 2.95.3,
51395     and work on the Blackfin and C6X ports.
51396
51397   * Peter Schmid for constant testing of libstdc++--especially
51398     application testing, going above and beyond what was requested for
51399     the release criteria--and libstdc++ header file tweaks.
51400
51401   * Jason Schroeder for jcf-dump patches.
51402
51403   * Andreas Schwab for his work on the m68k port.
51404
51405   * Lars Segerlund for work on GNU Fortran.
51406
51407   * Dodji Seketeli for numerous C++ bug fixes and debug info
51408     improvements.
51409
51410   * Tim Shen for major work on '<regex>'.
51411
51412   * Joel Sherrill for his direction via the steering committee, RTEMS
51413     contributions and RTEMS testing.
51414
51415   * Nathan Sidwell for many C++ fixes/improvements.
51416
51417   * Jeffrey Siegal for helping RMS with the original design of GCC,
51418     some code which handles the parse tree and RTL data structures,
51419     constant folding and help with the original VAX & m68k ports.
51420
51421   * Kenny Simpson for prompting libstdc++ fixes due to defect reports
51422     from the LWG (thereby keeping GCC in line with updates from the
51423     ISO).
51424
51425   * Franz Sirl for his ongoing work with making the PPC port stable for
51426     GNU/Linux.
51427
51428   * Andrey Slepuhin for assorted AIX hacking.
51429
51430   * Trevor Smigiel for contributing the SPU port.
51431
51432   * Christopher Smith did the port for Convex machines.
51433
51434   * Danny Smith for his major efforts on the Mingw (and Cygwin) ports.
51435
51436   * Randy Smith finished the Sun FPA support.
51437
51438   * Ed Smith-Rowland for his continuous work on libstdc++-v3, special
51439     functions, '<random>', and various improvements to C++11 features.
51440
51441   * Scott Snyder for queue, iterator, istream, and string fixes and
51442     libstdc++ testsuite entries.  Also for providing the patch to G77
51443     to add rudimentary support for 'INTEGER*1', 'INTEGER*2', and
51444     'LOGICAL*1'.
51445
51446   * Zdenek Sojka for running automated regression testing of GCC and
51447     reporting numerous bugs.
51448
51449   * Jayant Sonar for contributing the CR16 port.
51450
51451   * Brad Spencer for contributions to the GLIBCPP_FORCE_NEW technique.
51452
51453   * Richard Stallman, for writing the original GCC and launching the
51454     GNU project.
51455
51456   * Jan Stein of the Chalmers Computer Society provided support for
51457     Genix, as well as part of the 32000 machine description.
51458
51459   * Nigel Stephens for various mips16 related fixes/improvements.
51460
51461   * Jonathan Stone wrote the machine description for the Pyramid
51462     computer.
51463
51464   * Graham Stott for various infrastructure improvements.
51465
51466   * John Stracke for his Java HTTP protocol fixes.
51467
51468   * Mike Stump for his Elxsi port, G++ contributions over the years and
51469     more recently his vxworks contributions
51470
51471   * Jeff Sturm for Java porting help, bug fixes, and encouragement.
51472
51473   * Shigeya Suzuki for this fixes for the bsdi platforms.
51474
51475   * Ian Lance Taylor for the Go frontend, the initial mips16 and mips64
51476     support, general configury hacking, fixincludes, etc.
51477
51478   * Holger Teutsch provided the support for the Clipper CPU.
51479
51480   * Gary Thomas for his ongoing work to make the PPC work for
51481     GNU/Linux.
51482
51483   * Philipp Thomas for random bug fixes throughout the compiler
51484
51485   * Jason Thorpe for thread support in libstdc++ on NetBSD.
51486
51487   * Kresten Krab Thorup wrote the run time support for the Objective-C
51488     language and the fantastic Java bytecode interpreter.
51489
51490   * Michael Tiemann for random bug fixes, the first instruction
51491     scheduler, initial C++ support, function integration, NS32k, SPARC
51492     and M88k machine description work, delay slot scheduling.
51493
51494   * Andreas Tobler for his work porting libgcj to Darwin.
51495
51496   * Teemu Torma for thread safe exception handling support.
51497
51498   * Leonard Tower wrote parts of the parser, RTL generator, and RTL
51499     definitions, and of the VAX machine description.
51500
51501   * Daniel Towner and Hariharan Sandanagobalane contributed and
51502     maintain the picoChip port.
51503
51504   * Tom Tromey for internationalization support and for his many Java
51505     contributions and libgcj maintainership.
51506
51507   * Lassi Tuura for improvements to config.guess to determine HP
51508     processor types.
51509
51510   * Petter Urkedal for libstdc++ CXXFLAGS, math, and algorithms fixes.
51511
51512   * Andy Vaught for the design and initial implementation of the GNU
51513     Fortran front end.
51514
51515   * Brent Verner for work with the libstdc++ cshadow files and their
51516     associated configure steps.
51517
51518   * Todd Vierling for contributions for NetBSD ports.
51519
51520   * Jonathan Wakely for contributing libstdc++ Doxygen notes and XHTML
51521     guidance.
51522
51523   * Dean Wakerley for converting the install documentation from HTML to
51524     texinfo in time for GCC 3.0.
51525
51526   * Krister Walfridsson for random bug fixes.
51527
51528   * Feng Wang for contributions to GNU Fortran.
51529
51530   * Stephen M. Webb for time and effort on making libstdc++ shadow
51531     files work with the tricky Solaris 8+ headers, and for pushing the
51532     build-time header tree.  Also, for starting and driving the
51533     '<regex>' effort.
51534
51535   * John Wehle for various improvements for the x86 code generator,
51536     related infrastructure improvements to help x86 code generation,
51537     value range propagation and other work, WE32k port.
51538
51539   * Ulrich Weigand for work on the s390 port.
51540
51541   * Zack Weinberg for major work on cpplib and various other bug fixes.
51542
51543   * Matt Welsh for help with Linux Threads support in GCJ.
51544
51545   * Urban Widmark for help fixing java.io.
51546
51547   * Mark Wielaard for new Java library code and his work integrating
51548     with Classpath.
51549
51550   * Dale Wiles helped port GCC to the Tahoe.
51551
51552   * Bob Wilson from Tensilica, Inc. for the Xtensa port.
51553
51554   * Jim Wilson for his direction via the steering committee, tackling
51555     hard problems in various places that nobody else wanted to work on,
51556     strength reduction and other loop optimizations.
51557
51558   * Paul Woegerer and Tal Agmon for the CRX port.
51559
51560   * Carlo Wood for various fixes.
51561
51562   * Tom Wood for work on the m88k port.
51563
51564   * Chung-Ju Wu for his work on the Andes NDS32 port.
51565
51566   * Canqun Yang for work on GNU Fortran.
51567
51568   * Masanobu Yuhara of Fujitsu Laboratories implemented the machine
51569     description for the Tron architecture (specifically, the Gmicro).
51570
51571   * Kevin Zachmann helped port GCC to the Tahoe.
51572
51573   * Ayal Zaks for Swing Modulo Scheduling (SMS).
51574
51575   * Xiaoqiang Zhang for work on GNU Fortran.
51576
51577   * Gilles Zunino for help porting Java to Irix.
51578
51579 The following people are recognized for their contributions to GNAT,
51580the Ada front end of GCC:
51581   * Bernard Banner
51582
51583   * Romain Berrendonner
51584
51585   * Geert Bosch
51586
51587   * Emmanuel Briot
51588
51589   * Joel Brobecker
51590
51591   * Ben Brosgol
51592
51593   * Vincent Celier
51594
51595   * Arnaud Charlet
51596
51597   * Chien Chieng
51598
51599   * Cyrille Comar
51600
51601   * Cyrille Crozes
51602
51603   * Robert Dewar
51604
51605   * Gary Dismukes
51606
51607   * Robert Duff
51608
51609   * Ed Falis
51610
51611   * Ramon Fernandez
51612
51613   * Sam Figueroa
51614
51615   * Vasiliy Fofanov
51616
51617   * Michael Friess
51618
51619   * Franco Gasperoni
51620
51621   * Ted Giering
51622
51623   * Matthew Gingell
51624
51625   * Laurent Guerby
51626
51627   * Jerome Guitton
51628
51629   * Olivier Hainque
51630
51631   * Jerome Hugues
51632
51633   * Hristian Kirtchev
51634
51635   * Jerome Lambourg
51636
51637   * Bruno Leclerc
51638
51639   * Albert Lee
51640
51641   * Sean McNeil
51642
51643   * Javier Miranda
51644
51645   * Laurent Nana
51646
51647   * Pascal Obry
51648
51649   * Dong-Ik Oh
51650
51651   * Laurent Pautet
51652
51653   * Brett Porter
51654
51655   * Thomas Quinot
51656
51657   * Nicolas Roche
51658
51659   * Pat Rogers
51660
51661   * Jose Ruiz
51662
51663   * Douglas Rupp
51664
51665   * Sergey Rybin
51666
51667   * Gail Schenker
51668
51669   * Ed Schonberg
51670
51671   * Nicolas Setton
51672
51673   * Samuel Tardieu
51674
51675 The following people are recognized for their contributions of new
51676features, bug reports, testing and integration of classpath/libgcj for
51677GCC version 4.1:
51678   * Lillian Angel for 'JTree' implementation and lots Free Swing
51679     additions and bug fixes.
51680
51681   * Wolfgang Baer for 'GapContent' bug fixes.
51682
51683   * Anthony Balkissoon for 'JList', Free Swing 1.5 updates and mouse
51684     event fixes, lots of Free Swing work including 'JTable' editing.
51685
51686   * Stuart Ballard for RMI constant fixes.
51687
51688   * Goffredo Baroncelli for 'HTTPURLConnection' fixes.
51689
51690   * Gary Benson for 'MessageFormat' fixes.
51691
51692   * Daniel Bonniot for 'Serialization' fixes.
51693
51694   * Chris Burdess for lots of gnu.xml and http protocol fixes, 'StAX'
51695     and 'DOM xml:id' support.
51696
51697   * Ka-Hing Cheung for 'TreePath' and 'TreeSelection' fixes.
51698
51699   * Archie Cobbs for build fixes, VM interface updates,
51700     'URLClassLoader' updates.
51701
51702   * Kelley Cook for build fixes.
51703
51704   * Martin Cordova for Suggestions for better 'SocketTimeoutException'.
51705
51706   * David Daney for 'BitSet' bug fixes, 'HttpURLConnection' rewrite and
51707     improvements.
51708
51709   * Thomas Fitzsimmons for lots of upgrades to the gtk+ AWT and Cairo
51710     2D support.  Lots of imageio framework additions, lots of AWT and
51711     Free Swing bug fixes.
51712
51713   * Jeroen Frijters for 'ClassLoader' and nio cleanups, serialization
51714     fixes, better 'Proxy' support, bug fixes and IKVM integration.
51715
51716   * Santiago Gala for 'AccessControlContext' fixes.
51717
51718   * Nicolas Geoffray for 'VMClassLoader' and 'AccessController'
51719     improvements.
51720
51721   * David Gilbert for 'basic' and 'metal' icon and plaf support and
51722     lots of documenting, Lots of Free Swing and metal theme additions.
51723     'MetalIconFactory' implementation.
51724
51725   * Anthony Green for 'MIDI' framework, 'ALSA' and 'DSSI' providers.
51726
51727   * Andrew Haley for 'Serialization' and 'URLClassLoader' fixes, gcj
51728     build speedups.
51729
51730   * Kim Ho for 'JFileChooser' implementation.
51731
51732   * Andrew John Hughes for 'Locale' and net fixes, URI RFC2986 updates,
51733     'Serialization' fixes, 'Properties' XML support and generic branch
51734     work, VMIntegration guide update.
51735
51736   * Bastiaan Huisman for 'TimeZone' bug fixing.
51737
51738   * Andreas Jaeger for mprec updates.
51739
51740   * Paul Jenner for better '-Werror' support.
51741
51742   * Ito Kazumitsu for 'NetworkInterface' implementation and updates.
51743
51744   * Roman Kennke for 'BoxLayout', 'GrayFilter' and 'SplitPane', plus
51745     bug fixes all over.  Lots of Free Swing work including styled text.
51746
51747   * Simon Kitching for 'String' cleanups and optimization suggestions.
51748
51749   * Michael Koch for configuration fixes, 'Locale' updates, bug and
51750     build fixes.
51751
51752   * Guilhem Lavaux for configuration, thread and channel fixes and
51753     Kaffe integration.  JCL native 'Pointer' updates.  Logger bug
51754     fixes.
51755
51756   * David Lichteblau for JCL support library global/local reference
51757     cleanups.
51758
51759   * Aaron Luchko for JDWP updates and documentation fixes.
51760
51761   * Ziga Mahkovec for 'Graphics2D' upgraded to Cairo 0.5 and new regex
51762     features.
51763
51764   * Sven de Marothy for BMP imageio support, CSS and 'TextLayout'
51765     fixes.  'GtkImage' rewrite, 2D, awt, free swing and date/time fixes
51766     and implementing the Qt4 peers.
51767
51768   * Casey Marshall for crypto algorithm fixes, 'FileChannel' lock,
51769     'SystemLogger' and 'FileHandler' rotate implementations, NIO
51770     'FileChannel.map' support, security and policy updates.
51771
51772   * Bryce McKinlay for RMI work.
51773
51774   * Audrius Meskauskas for lots of Free Corba, RMI and HTML work plus
51775     testing and documenting.
51776
51777   * Kalle Olavi Niemitalo for build fixes.
51778
51779   * Rainer Orth for build fixes.
51780
51781   * Andrew Overholt for 'File' locking fixes.
51782
51783   * Ingo Proetel for 'Image', 'Logger' and 'URLClassLoader' updates.
51784
51785   * Olga Rodimina for 'MenuSelectionManager' implementation.
51786
51787   * Jan Roehrich for 'BasicTreeUI' and 'JTree' fixes.
51788
51789   * Julian Scheid for documentation updates and gjdoc support.
51790
51791   * Christian Schlichtherle for zip fixes and cleanups.
51792
51793   * Robert Schuster for documentation updates and beans fixes,
51794     'TreeNode' enumerations and 'ActionCommand' and various fixes, XML
51795     and URL, AWT and Free Swing bug fixes.
51796
51797   * Keith Seitz for lots of JDWP work.
51798
51799   * Christian Thalinger for 64-bit cleanups, Configuration and VM
51800     interface fixes and 'CACAO' integration, 'fdlibm' updates.
51801
51802   * Gael Thomas for 'VMClassLoader' boot packages support suggestions.
51803
51804   * Andreas Tobler for Darwin and Solaris testing and fixing, 'Qt4'
51805     support for Darwin/OS X, 'Graphics2D' support, 'gtk+' updates.
51806
51807   * Dalibor Topic for better 'DEBUG' support, build cleanups and Kaffe
51808     integration.  'Qt4' build infrastructure, 'SHA1PRNG' and
51809     'GdkPixbugDecoder' updates.
51810
51811   * Tom Tromey for Eclipse integration, generics work, lots of bug
51812     fixes and gcj integration including coordinating The Big Merge.
51813
51814   * Mark Wielaard for bug fixes, packaging and release management,
51815     'Clipboard' implementation, system call interrupts and network
51816     timeouts and 'GdkPixpufDecoder' fixes.
51817
51818 In addition to the above, all of which also contributed time and energy
51819in testing GCC, we would like to thank the following for their
51820contributions to testing:
51821
51822   * Michael Abd-El-Malek
51823
51824   * Thomas Arend
51825
51826   * Bonzo Armstrong
51827
51828   * Steven Ashe
51829
51830   * Chris Baldwin
51831
51832   * David Billinghurst
51833
51834   * Jim Blandy
51835
51836   * Stephane Bortzmeyer
51837
51838   * Horst von Brand
51839
51840   * Frank Braun
51841
51842   * Rodney Brown
51843
51844   * Sidney Cadot
51845
51846   * Bradford Castalia
51847
51848   * Robert Clark
51849
51850   * Jonathan Corbet
51851
51852   * Ralph Doncaster
51853
51854   * Richard Emberson
51855
51856   * Levente Farkas
51857
51858   * Graham Fawcett
51859
51860   * Mark Fernyhough
51861
51862   * Robert A. French
51863
51864   * Jo"rgen Freyh
51865
51866   * Mark K. Gardner
51867
51868   * Charles-Antoine Gauthier
51869
51870   * Yung Shing Gene
51871
51872   * David Gilbert
51873
51874   * Simon Gornall
51875
51876   * Fred Gray
51877
51878   * John Griffin
51879
51880   * Patrik Hagglund
51881
51882   * Phil Hargett
51883
51884   * Amancio Hasty
51885
51886   * Takafumi Hayashi
51887
51888   * Bryan W. Headley
51889
51890   * Kevin B. Hendricks
51891
51892   * Joep Jansen
51893
51894   * Christian Joensson
51895
51896   * Michel Kern
51897
51898   * David Kidd
51899
51900   * Tobias Kuipers
51901
51902   * Anand Krishnaswamy
51903
51904   * A. O. V. Le Blanc
51905
51906   * llewelly
51907
51908   * Damon Love
51909
51910   * Brad Lucier
51911
51912   * Matthias Klose
51913
51914   * Martin Knoblauch
51915
51916   * Rick Lutowski
51917
51918   * Jesse Macnish
51919
51920   * Stefan Morrell
51921
51922   * Anon A. Mous
51923
51924   * Matthias Mueller
51925
51926   * Pekka Nikander
51927
51928   * Rick Niles
51929
51930   * Jon Olson
51931
51932   * Magnus Persson
51933
51934   * Chris Pollard
51935
51936   * Richard Polton
51937
51938   * Derk Reefman
51939
51940   * David Rees
51941
51942   * Paul Reilly
51943
51944   * Tom Reilly
51945
51946   * Torsten Rueger
51947
51948   * Danny Sadinoff
51949
51950   * Marc Schifer
51951
51952   * Erik Schnetter
51953
51954   * Wayne K. Schroll
51955
51956   * David Schuler
51957
51958   * Vin Shelton
51959
51960   * Tim Souder
51961
51962   * Adam Sulmicki
51963
51964   * Bill Thorson
51965
51966   * George Talbot
51967
51968   * Pedro A. M. Vazquez
51969
51970   * Gregory Warnes
51971
51972   * Ian Watson
51973
51974   * David E. Young
51975
51976   * And many others
51977
51978 And finally we'd like to thank everyone who uses the compiler, provides
51979feedback and generally reminds us why we're doing this work in the first
51980place.
51981
51982
51983File: gcc.info,  Node: Option Index,  Next: Keyword Index,  Prev: Contributors,  Up: Top
51984
51985Option Index
51986************
51987
51988GCC's command line options are indexed here without any initial '-' or
51989'--'.  Where an option has both positive and negative forms (such as
51990'-fOPTION' and '-fno-OPTION'), relevant entries in the manual are
51991indexed under the most appropriate form; it may sometimes be useful to
51992look up both forms.
51993
51994�[index�]
51995* Menu:
51996
51997* ###:                                   Overall Options.    (line  209)
51998* (fvtv-debug):                          C++ Dialect Options.
51999                                                             (line  362)
52000* -fno-keep-inline-dllexport:            Optimize Options.   (line  309)
52001* -mcpu:                                 RX Options.         (line   30)
52002* -mcpu=:                                MSP430 Options.     (line   35)
52003* -mfix-cortex-a53-835769:               AArch64 Options.    (line   67)
52004* -mno-fix-cortex-a53-835769:            AArch64 Options.    (line   67)
52005* -mpointer-size=SIZE:                   VMS Options.        (line   20)
52006* 8bit-idiv:                             i386 and x86-64 Options.
52007                                                             (line  917)
52008* A:                                     Preprocessor Options.
52009                                                             (line  596)
52010* allowable_client:                      Darwin Options.     (line  196)
52011* all_load:                              Darwin Options.     (line  110)
52012* ansi:                                  Standards.          (line   16)
52013* ansi <1>:                              C Dialect Options.  (line   11)
52014* ansi <2>:                              Preprocessor Options.
52015                                                             (line  340)
52016* ansi <3>:                              Other Builtins.     (line   21)
52017* ansi <4>:                              Non-bugs.           (line  107)
52018* arch_errors_fatal:                     Darwin Options.     (line  114)
52019* aux-info:                              C Dialect Options.  (line  173)
52020* avx256-split-unaligned-load:           i386 and x86-64 Options.
52021                                                             (line  925)
52022* avx256-split-unaligned-store:          i386 and x86-64 Options.
52023                                                             (line  925)
52024* B:                                     Directory Options.  (line   44)
52025* Bdynamic:                              VxWorks Options.    (line   22)
52026* bind_at_load:                          Darwin Options.     (line  118)
52027* Bstatic:                               VxWorks Options.    (line   22)
52028* bundle:                                Darwin Options.     (line  123)
52029* bundle_loader:                         Darwin Options.     (line  127)
52030* c:                                     Overall Options.    (line  164)
52031* C:                                     Preprocessor Options.
52032                                                             (line  653)
52033* c <1>:                                 Link Options.       (line   20)
52034* client_name:                           Darwin Options.     (line  196)
52035* compatibility_version:                 Darwin Options.     (line  196)
52036* coverage:                              Debugging Options.  (line  496)
52037* current_version:                       Darwin Options.     (line  196)
52038* d:                                     Debugging Options.  (line  628)
52039* D:                                     Preprocessor Options.
52040                                                             (line   46)
52041* da:                                    Debugging Options.  (line  831)
52042* dA:                                    Debugging Options.  (line  834)
52043* dD:                                    Debugging Options.  (line  838)
52044* dD <1>:                                Preprocessor Options.
52045                                                             (line  627)
52046* dead_strip:                            Darwin Options.     (line  196)
52047* dependency-file:                       Darwin Options.     (line  196)
52048* dH:                                    Debugging Options.  (line  842)
52049* dI:                                    Preprocessor Options.
52050                                                             (line  636)
52051* dM:                                    Preprocessor Options.
52052                                                             (line  612)
52053* dN:                                    Preprocessor Options.
52054                                                             (line  633)
52055* dp:                                    Debugging Options.  (line  845)
52056* dP:                                    Debugging Options.  (line  850)
52057* dU:                                    Preprocessor Options.
52058                                                             (line  640)
52059* dumpmachine:                           Debugging Options.  (line 1416)
52060* dumpspecs:                             Debugging Options.  (line 1424)
52061* dumpversion:                           Debugging Options.  (line 1420)
52062* dx:                                    Debugging Options.  (line  854)
52063* dylib_file:                            Darwin Options.     (line  196)
52064* dylinker_install_name:                 Darwin Options.     (line  196)
52065* dynamic:                               Darwin Options.     (line  196)
52066* dynamiclib:                            Darwin Options.     (line  131)
52067* E:                                     Overall Options.    (line  185)
52068* E <1>:                                 Link Options.       (line   20)
52069* EB:                                    ARC Options.        (line  345)
52070* EB <1>:                                MIPS Options.       (line    7)
52071* EL:                                    ARC Options.        (line  354)
52072* EL <1>:                                MIPS Options.       (line   10)
52073* exported_symbols_list:                 Darwin Options.     (line  196)
52074* F:                                     Darwin Options.     (line   31)
52075* fabi-version:                          C++ Dialect Options.
52076                                                             (line   19)
52077* fada-spec-parent:                      Overall Options.    (line  367)
52078* faggressive-loop-optimizations:        Optimize Options.   (line  478)
52079* falign-functions:                      Optimize Options.   (line 1472)
52080* falign-jumps:                          Optimize Options.   (line 1521)
52081* falign-labels:                         Optimize Options.   (line 1490)
52082* falign-loops:                          Optimize Options.   (line 1508)
52083* fallow-parameterless-variadic-functions: C Dialect Options.
52084                                                             (line  189)
52085* fassociative-math:                     Optimize Options.   (line 2000)
52086* fasynchronous-unwind-tables:           Code Gen Options.   (line  146)
52087* fauto-inc-dec:                         Optimize Options.   (line  502)
52088* fbounds-check:                         Code Gen Options.   (line   15)
52089* fbranch-probabilities:                 Optimize Options.   (line 2128)
52090* fbranch-target-load-optimize:          Optimize Options.   (line 2243)
52091* fbranch-target-load-optimize2:         Optimize Options.   (line 2249)
52092* fbtr-bb-exclusive:                     Optimize Options.   (line 2253)
52093* fcall-saved:                           Code Gen Options.   (line  356)
52094* fcall-used:                            Code Gen Options.   (line  342)
52095* fcaller-saves:                         Optimize Options.   (line  810)
52096* fcheck-data-deps:                      Optimize Options.   (line 1089)
52097* fcheck-new:                            C++ Dialect Options.
52098                                                             (line   54)
52099* fcilkplus:                             C Dialect Options.  (line  276)
52100* fcombine-stack-adjustments:            Optimize Options.   (line  822)
52101* fcommon:                               Variable Attributes.
52102                                                             (line  104)
52103* fcompare-debug:                        Debugging Options.  (line  287)
52104* fcompare-debug-second:                 Debugging Options.  (line  313)
52105* fcompare-elim:                         Optimize Options.   (line 1836)
52106* fcond-mismatch:                        C Dialect Options.  (line  339)
52107* fconserve-stack:                       Optimize Options.   (line  828)
52108* fconstant-string-class:                Objective-C and Objective-C++ Dialect Options.
52109                                                             (line   30)
52110* fconstexpr-depth:                      C++ Dialect Options.
52111                                                             (line   64)
52112* fcprop-registers:                      Optimize Options.   (line 1854)
52113* fcrossjumping:                         Optimize Options.   (line  495)
52114* fcse-follow-jumps:                     Optimize Options.   (line  414)
52115* fcse-skip-blocks:                      Optimize Options.   (line  423)
52116* fcx-fortran-rules:                     Optimize Options.   (line 2115)
52117* fcx-limited-range:                     Optimize Options.   (line 2103)
52118* fdata-sections:                        Optimize Options.   (line 2224)
52119* fdbg-cnt:                              Debugging Options.  (line  548)
52120* fdbg-cnt-list:                         Debugging Options.  (line  545)
52121* fdce:                                  Optimize Options.   (line  508)
52122* fdebug-cpp:                            Preprocessor Options.
52123                                                             (line  527)
52124* fdebug-prefix-map:                     Debugging Options.  (line  407)
52125* fdebug-types-section:                  Debugging Options.  (line   79)
52126* fdeclone-ctor-dtor:                    Optimize Options.   (line  531)
52127* fdeduce-init-list:                     C++ Dialect Options.
52128                                                             (line   70)
52129* fdelayed-branch:                       Optimize Options.   (line  657)
52130* fdelete-dead-exceptions:               Code Gen Options.   (line  131)
52131* fdelete-null-pointer-checks:           Optimize Options.   (line  542)
52132* fdevirtualize:                         Optimize Options.   (line  560)
52133* fdevirtualize-speculatively:           Optimize Options.   (line  567)
52134* fdiagnostics-color:                    Language Independent Options.
52135                                                             (line   35)
52136* fdiagnostics-show-caret:               Language Independent Options.
52137                                                             (line   92)
52138* fdiagnostics-show-location:            Language Independent Options.
52139                                                             (line   20)
52140* fdiagnostics-show-option:              Language Independent Options.
52141                                                             (line   86)
52142* fdirectives-only:                      Preprocessor Options.
52143                                                             (line  475)
52144* fdisable-:                             Debugging Options.  (line  558)
52145* fdollars-in-identifiers:               Preprocessor Options.
52146                                                             (line  496)
52147* fdollars-in-identifiers <1>:           Interoperation.     (line  141)
52148* fdse:                                  Optimize Options.   (line  512)
52149* fdump-ada-spec:                        Overall Options.    (line  362)
52150* fdump-class-hierarchy:                 Debugging Options.  (line  885)
52151* fdump-final-insns:                     Debugging Options.  (line  281)
52152* fdump-go-spec:                         Overall Options.    (line  371)
52153* fdump-ipa:                             Debugging Options.  (line  893)
52154* fdump-noaddr:                          Debugging Options.  (line  858)
52155* fdump-passes:                          Debugging Options.  (line  910)
52156* fdump-rtl-alignments:                  Debugging Options.  (line  649)
52157* fdump-rtl-all:                         Debugging Options.  (line  831)
52158* fdump-rtl-asmcons:                     Debugging Options.  (line  652)
52159* fdump-rtl-auto_inc_dec:                Debugging Options.  (line  656)
52160* fdump-rtl-barriers:                    Debugging Options.  (line  660)
52161* fdump-rtl-bbpart:                      Debugging Options.  (line  663)
52162* fdump-rtl-bbro:                        Debugging Options.  (line  666)
52163* fdump-rtl-btl2:                        Debugging Options.  (line  670)
52164* fdump-rtl-btl2 <1>:                    Debugging Options.  (line  670)
52165* fdump-rtl-bypass:                      Debugging Options.  (line  674)
52166* fdump-rtl-ce1:                         Debugging Options.  (line  685)
52167* fdump-rtl-ce2:                         Debugging Options.  (line  685)
52168* fdump-rtl-ce3:                         Debugging Options.  (line  685)
52169* fdump-rtl-combine:                     Debugging Options.  (line  677)
52170* fdump-rtl-compgotos:                   Debugging Options.  (line  680)
52171* fdump-rtl-cprop_hardreg:               Debugging Options.  (line  689)
52172* fdump-rtl-csa:                         Debugging Options.  (line  692)
52173* fdump-rtl-cse1:                        Debugging Options.  (line  696)
52174* fdump-rtl-cse2:                        Debugging Options.  (line  696)
52175* fdump-rtl-dbr:                         Debugging Options.  (line  703)
52176* fdump-rtl-dce:                         Debugging Options.  (line  700)
52177* fdump-rtl-dce1:                        Debugging Options.  (line  707)
52178* fdump-rtl-dce2:                        Debugging Options.  (line  707)
52179* fdump-rtl-dfinish:                     Debugging Options.  (line  827)
52180* fdump-rtl-dfinit:                      Debugging Options.  (line  827)
52181* fdump-rtl-eh:                          Debugging Options.  (line  711)
52182* fdump-rtl-eh_ranges:                   Debugging Options.  (line  714)
52183* fdump-rtl-expand:                      Debugging Options.  (line  717)
52184* fdump-rtl-fwprop1:                     Debugging Options.  (line  721)
52185* fdump-rtl-fwprop2:                     Debugging Options.  (line  721)
52186* fdump-rtl-gcse1:                       Debugging Options.  (line  726)
52187* fdump-rtl-gcse2:                       Debugging Options.  (line  726)
52188* fdump-rtl-init-regs:                   Debugging Options.  (line  730)
52189* fdump-rtl-initvals:                    Debugging Options.  (line  733)
52190* fdump-rtl-into_cfglayout:              Debugging Options.  (line  736)
52191* fdump-rtl-ira:                         Debugging Options.  (line  739)
52192* fdump-rtl-jump:                        Debugging Options.  (line  742)
52193* fdump-rtl-loop2:                       Debugging Options.  (line  745)
52194* fdump-rtl-mach:                        Debugging Options.  (line  749)
52195* fdump-rtl-mode_sw:                     Debugging Options.  (line  753)
52196* fdump-rtl-outof_cfglayout:             Debugging Options.  (line  759)
52197* fdump-rtl-PASS:                        Debugging Options.  (line  628)
52198* fdump-rtl-peephole2:                   Debugging Options.  (line  762)
52199* fdump-rtl-postreload:                  Debugging Options.  (line  765)
52200* fdump-rtl-pro_and_epilogue:            Debugging Options.  (line  768)
52201* fdump-rtl-ree:                         Debugging Options.  (line  776)
52202* fdump-rtl-regclass:                    Debugging Options.  (line  827)
52203* fdump-rtl-rnreg:                       Debugging Options.  (line  756)
52204* fdump-rtl-sched1:                      Debugging Options.  (line  772)
52205* fdump-rtl-sched2:                      Debugging Options.  (line  772)
52206* fdump-rtl-seqabstr:                    Debugging Options.  (line  779)
52207* fdump-rtl-shorten:                     Debugging Options.  (line  782)
52208* fdump-rtl-sibling:                     Debugging Options.  (line  785)
52209* fdump-rtl-sms:                         Debugging Options.  (line  797)
52210* fdump-rtl-split1:                      Debugging Options.  (line  792)
52211* fdump-rtl-split2:                      Debugging Options.  (line  792)
52212* fdump-rtl-split3:                      Debugging Options.  (line  792)
52213* fdump-rtl-split4:                      Debugging Options.  (line  792)
52214* fdump-rtl-split5:                      Debugging Options.  (line  792)
52215* fdump-rtl-stack:                       Debugging Options.  (line  801)
52216* fdump-rtl-subreg1:                     Debugging Options.  (line  807)
52217* fdump-rtl-subreg2:                     Debugging Options.  (line  807)
52218* fdump-rtl-subregs_of_mode_finish:      Debugging Options.  (line  827)
52219* fdump-rtl-subregs_of_mode_init:        Debugging Options.  (line  827)
52220* fdump-rtl-unshare:                     Debugging Options.  (line  811)
52221* fdump-rtl-vartrack:                    Debugging Options.  (line  814)
52222* fdump-rtl-vregs:                       Debugging Options.  (line  817)
52223* fdump-rtl-web:                         Debugging Options.  (line  820)
52224* fdump-statistics:                      Debugging Options.  (line  914)
52225* fdump-translation-unit:                Debugging Options.  (line  876)
52226* fdump-tree:                            Debugging Options.  (line  926)
52227* fdump-tree-alias:                      Debugging Options.  (line 1048)
52228* fdump-tree-all:                        Debugging Options.  (line 1132)
52229* fdump-tree-ccp:                        Debugging Options.  (line 1052)
52230* fdump-tree-cfg:                        Debugging Options.  (line 1036)
52231* fdump-tree-ch:                         Debugging Options.  (line 1040)
52232* fdump-tree-copyprop:                   Debugging Options.  (line 1068)
52233* fdump-tree-copyrename:                 Debugging Options.  (line 1108)
52234* fdump-tree-dce:                        Debugging Options.  (line 1076)
52235* fdump-tree-dom:                        Debugging Options.  (line 1089)
52236* fdump-tree-dse:                        Debugging Options.  (line 1094)
52237* fdump-tree-forwprop:                   Debugging Options.  (line 1103)
52238* fdump-tree-fre:                        Debugging Options.  (line 1064)
52239* fdump-tree-gimple:                     Debugging Options.  (line 1031)
52240* fdump-tree-nrv:                        Debugging Options.  (line 1113)
52241* fdump-tree-optimized:                  Debugging Options.  (line 1028)
52242* fdump-tree-original:                   Debugging Options.  (line 1025)
52243* fdump-tree-phiopt:                     Debugging Options.  (line 1098)
52244* fdump-tree-pre:                        Debugging Options.  (line 1060)
52245* fdump-tree-sink:                       Debugging Options.  (line 1085)
52246* fdump-tree-slp:                        Debugging Options.  (line 1123)
52247* fdump-tree-sra:                        Debugging Options.  (line 1080)
52248* fdump-tree-ssa:                        Debugging Options.  (line 1044)
52249* fdump-tree-storeccp:                   Debugging Options.  (line 1056)
52250* fdump-tree-store_copyprop:             Debugging Options.  (line 1072)
52251* fdump-tree-vect:                       Debugging Options.  (line 1118)
52252* fdump-tree-vrp:                        Debugging Options.  (line 1128)
52253* fdump-unnumbered:                      Debugging Options.  (line  864)
52254* fdump-unnumbered-links:                Debugging Options.  (line  870)
52255* fdwarf2-cfi-asm:                       Debugging Options.  (line  411)
52256* fearly-inlining:                       Optimize Options.   (line  268)
52257* feliminate-dwarf2-dups:                Debugging Options.  (line  326)
52258* feliminate-unused-debug-symbols:       Debugging Options.  (line   67)
52259* feliminate-unused-debug-types:         Debugging Options.  (line 1428)
52260* femit-struct-debug-baseonly:           Debugging Options.  (line  331)
52261* femit-struct-debug-reduced:            Debugging Options.  (line  344)
52262* fenable-:                              Debugging Options.  (line  558)
52263* fexceptions:                           Code Gen Options.   (line  109)
52264* fexcess-precision:                     Optimize Options.   (line 1927)
52265* fexec-charset:                         Preprocessor Options.
52266                                                             (line  554)
52267* fexpensive-optimizations:              Optimize Options.   (line  576)
52268* fext-numeric-literals:                 C++ Dialect Options.
52269                                                             (line  587)
52270* fextended-identifiers:                 Preprocessor Options.
52271                                                             (line  499)
52272* fextern-tls-init:                      C++ Dialect Options.
52273                                                             (line  120)
52274* ffast-math:                            Optimize Options.   (line 1950)
52275* ffat-lto-objects:                      Optimize Options.   (line 1818)
52276* ffinite-math-only:                     Optimize Options.   (line 2027)
52277* ffix-and-continue:                     Darwin Options.     (line  104)
52278* ffixed:                                Code Gen Options.   (line  330)
52279* ffloat-store:                          Optimize Options.   (line 1913)
52280* ffloat-store <1>:                      Disappointments.    (line   77)
52281* ffor-scope:                            C++ Dialect Options.
52282                                                             (line  141)
52283* fforward-propagate:                    Optimize Options.   (line  178)
52284* ffp-contract:                          Optimize Options.   (line  187)
52285* ffreestanding:                         Standards.          (line   92)
52286* ffreestanding <1>:                     C Dialect Options.  (line  252)
52287* ffreestanding <2>:                     Warning Options.    (line  254)
52288* ffreestanding <3>:                     Function Attributes.
52289                                                             (line  493)
52290* ffriend-injection:                     C++ Dialect Options.
52291                                                             (line   91)
52292* ffunction-sections:                    Optimize Options.   (line 2224)
52293* fgcse:                                 Optimize Options.   (line  437)
52294* fgcse-after-reload:                    Optimize Options.   (line  473)
52295* fgcse-las:                             Optimize Options.   (line  466)
52296* fgcse-lm:                              Optimize Options.   (line  448)
52297* fgcse-sm:                              Optimize Options.   (line  457)
52298* fgnu-runtime:                          Objective-C and Objective-C++ Dialect Options.
52299                                                             (line   39)
52300* fgnu-tm:                               C Dialect Options.  (line  286)
52301* fgnu89-inline:                         C Dialect Options.  (line  152)
52302* fgraphite-identity:                    Optimize Options.   (line 1069)
52303* fhosted:                               C Dialect Options.  (line  244)
52304* fif-conversion:                        Optimize Options.   (line  516)
52305* fif-conversion2:                       Optimize Options.   (line  525)
52306* filelist:                              Darwin Options.     (line  196)
52307* findirect-data:                        Darwin Options.     (line  104)
52308* findirect-inlining:                    Optimize Options.   (line  241)
52309* finhibit-size-directive:               Code Gen Options.   (line  251)
52310* finline-functions:                     Optimize Options.   (line  249)
52311* finline-functions-called-once:         Optimize Options.   (line  260)
52312* finline-limit:                         Optimize Options.   (line  284)
52313* finline-small-functions:               Optimize Options.   (line  232)
52314* finput-charset:                        Preprocessor Options.
52315                                                             (line  567)
52316* finstrument-functions:                 Code Gen Options.   (line  386)
52317* finstrument-functions <1>:             Function Attributes.
52318                                                             (line 1085)
52319* finstrument-functions-exclude-file-list: Code Gen Options. (line  421)
52320* finstrument-functions-exclude-function-list: Code Gen Options.
52321                                                             (line  442)
52322* fipa-cp:                               Optimize Options.   (line  894)
52323* fipa-cp-clone:                         Optimize Options.   (line  902)
52324* fipa-profile:                          Optimize Options.   (line  886)
52325* fipa-pta:                              Optimize Options.   (line  880)
52326* fipa-pure-const:                       Optimize Options.   (line  872)
52327* fipa-reference:                        Optimize Options.   (line  876)
52328* fipa-sra:                              Optimize Options.   (line  277)
52329* fira-hoist-pressure:                   Optimize Options.   (line  624)
52330* fira-loop-pressure:                    Optimize Options.   (line  631)
52331* fira-verbose:                          Optimize Options.   (line  651)
52332* fivopts:                               Optimize Options.   (line 1165)
52333* fkeep-inline-functions:                Optimize Options.   (line  315)
52334* fkeep-inline-functions <1>:            Inline.             (line   51)
52335* fkeep-static-consts:                   Optimize Options.   (line  322)
52336* flat_namespace:                        Darwin Options.     (line  196)
52337* flax-vector-conversions:               C Dialect Options.  (line  344)
52338* fleading-underscore:                   Code Gen Options.   (line  524)
52339* flive-range-shrinkage:                 Optimize Options.   (line  590)
52340* floop-block:                           Optimize Options.   (line 1040)
52341* floop-interchange:                     Optimize Options.   (line  995)
52342* floop-nest-optimize:                   Optimize Options.   (line 1077)
52343* floop-parallelize-all:                 Optimize Options.   (line 1083)
52344* floop-strip-mine:                      Optimize Options.   (line 1019)
52345* flto:                                  Optimize Options.   (line 1575)
52346* flto-partition:                        Optimize Options.   (line 1769)
52347* fmax-errors:                           Warning Options.    (line   18)
52348* fmem-report:                           Debugging Options.  (line  435)
52349* fmem-report-wpa:                       Debugging Options.  (line  439)
52350* fmerge-all-constants:                  Optimize Options.   (line  341)
52351* fmerge-constants:                      Optimize Options.   (line  331)
52352* fmerge-debug-strings:                  Debugging Options.  (line  400)
52353* fmessage-length:                       Language Independent Options.
52354                                                             (line   14)
52355* fmodulo-sched:                         Optimize Options.   (line  352)
52356* fmodulo-sched-allow-regmoves:          Optimize Options.   (line  357)
52357* fmove-loop-invariants:                 Optimize Options.   (line 2214)
52358* fms-extensions:                        C Dialect Options.  (line  301)
52359* fms-extensions <1>:                    C++ Dialect Options.
52360                                                             (line  175)
52361* fms-extensions <2>:                    Unnamed Fields.     (line   36)
52362* fnext-runtime:                         Objective-C and Objective-C++ Dialect Options.
52363                                                             (line   43)
52364* fno-access-control:                    C++ Dialect Options.
52365                                                             (line   50)
52366* fno-asm:                               C Dialect Options.  (line  196)
52367* fno-branch-count-reg:                  Optimize Options.   (line  364)
52368* fno-builtin:                           C Dialect Options.  (line  210)
52369* fno-builtin <1>:                       Warning Options.    (line  254)
52370* fno-builtin <2>:                       Function Attributes.
52371                                                             (line  493)
52372* fno-builtin <3>:                       Other Builtins.     (line   14)
52373* fno-canonical-system-headers:          Preprocessor Options.
52374                                                             (line  504)
52375* fno-common:                            Code Gen Options.   (line  229)
52376* fno-common <1>:                        Variable Attributes.
52377                                                             (line  104)
52378* fno-compare-debug:                     Debugging Options.  (line  287)
52379* fno-debug-types-section:               Debugging Options.  (line   79)
52380* fno-default-inline:                    Inline.             (line   71)
52381* fno-defer-pop:                         Optimize Options.   (line  170)
52382* fno-diagnostics-show-caret:            Language Independent Options.
52383                                                             (line   92)
52384* fno-diagnostics-show-option:           Language Independent Options.
52385                                                             (line   86)
52386* fno-dwarf2-cfi-asm:                    Debugging Options.  (line  411)
52387* fno-elide-constructors:                C++ Dialect Options.
52388                                                             (line  104)
52389* fno-eliminate-unused-debug-types:      Debugging Options.  (line 1428)
52390* fno-enforce-eh-specs:                  C++ Dialect Options.
52391                                                             (line  110)
52392* fno-ext-numeric-literals:              C++ Dialect Options.
52393                                                             (line  587)
52394* fno-extern-tls-init:                   C++ Dialect Options.
52395                                                             (line  120)
52396* fno-for-scope:                         C++ Dialect Options.
52397                                                             (line  141)
52398* fno-function-cse:                      Optimize Options.   (line  374)
52399* fno-gnu-keywords:                      C++ Dialect Options.
52400                                                             (line  153)
52401* fno-gnu-unique:                        Code Gen Options.   (line  152)
52402* fno-guess-branch-probability:          Optimize Options.   (line 1342)
52403* fno-ident:                             Code Gen Options.   (line  248)
52404* fno-implement-inlines:                 C++ Dialect Options.
52405                                                             (line  170)
52406* fno-implement-inlines <1>:             C++ Interface.      (line   75)
52407* fno-implicit-inline-templates:         C++ Dialect Options.
52408                                                             (line  164)
52409* fno-implicit-templates:                C++ Dialect Options.
52410                                                             (line  158)
52411* fno-implicit-templates <1>:            Template Instantiation.
52412                                                             (line   78)
52413* fno-inline:                            Optimize Options.   (line  224)
52414* fno-ira-share-save-slots:              Optimize Options.   (line  639)
52415* fno-ira-share-spill-slots:             Optimize Options.   (line  645)
52416* fno-jump-tables:                       Code Gen Options.   (line  322)
52417* fno-math-errno:                        Optimize Options.   (line 1964)
52418* fno-merge-debug-strings:               Debugging Options.  (line  400)
52419* fno-nil-receivers:                     Objective-C and Objective-C++ Dialect Options.
52420                                                             (line   49)
52421* fno-nonansi-builtins:                  C++ Dialect Options.
52422                                                             (line  180)
52423* fno-operator-names:                    C++ Dialect Options.
52424                                                             (line  196)
52425* fno-optional-diags:                    C++ Dialect Options.
52426                                                             (line  200)
52427* fno-peephole:                          Optimize Options.   (line 1333)
52428* fno-peephole2:                         Optimize Options.   (line 1333)
52429* fno-pretty-templates:                  C++ Dialect Options.
52430                                                             (line  210)
52431* fno-rtti:                              C++ Dialect Options.
52432                                                             (line  227)
52433* fno-sched-interblock:                  Optimize Options.   (line  683)
52434* fno-sched-spec:                        Optimize Options.   (line  688)
52435* fno-set-stack-executable:              i386 and x86-64 Windows Options.
52436                                                             (line   46)
52437* fno-show-column:                       Preprocessor Options.
52438                                                             (line  591)
52439* fno-signed-bitfields:                  C Dialect Options.  (line  377)
52440* fno-signed-zeros:                      Optimize Options.   (line 2039)
52441* fno-stack-limit:                       Code Gen Options.   (line  492)
52442* fno-threadsafe-statics:                C++ Dialect Options.
52443                                                             (line  264)
52444* fno-toplevel-reorder:                  Optimize Options.   (line 1541)
52445* fno-trapping-math:                     Optimize Options.   (line 2049)
52446* fno-unsigned-bitfields:                C Dialect Options.  (line  377)
52447* fno-use-cxa-get-exception-ptr:         C++ Dialect Options.
52448                                                             (line  277)
52449* fno-var-tracking-assignments:          Debugging Options.  (line 1336)
52450* fno-var-tracking-assignments-toggle:   Debugging Options.  (line 1345)
52451* fno-weak:                              C++ Dialect Options.
52452                                                             (line  389)
52453* fno-working-directory:                 Preprocessor Options.
52454                                                             (line  577)
52455* fno-writable-relocated-rdata:          i386 and x86-64 Windows Options.
52456                                                             (line   53)
52457* fno-zero-initialized-in-bss:           Optimize Options.   (line  385)
52458* fnon-call-exceptions:                  Code Gen Options.   (line  123)
52459* fnothrow-opt:                          C++ Dialect Options.
52460                                                             (line  185)
52461* fobjc-abi-version:                     Objective-C and Objective-C++ Dialect Options.
52462                                                             (line   56)
52463* fobjc-call-cxx-cdtors:                 Objective-C and Objective-C++ Dialect Options.
52464                                                             (line   67)
52465* fobjc-direct-dispatch:                 Objective-C and Objective-C++ Dialect Options.
52466                                                             (line   92)
52467* fobjc-exceptions:                      Objective-C and Objective-C++ Dialect Options.
52468                                                             (line   96)
52469* fobjc-gc:                              Objective-C and Objective-C++ Dialect Options.
52470                                                             (line  105)
52471* fobjc-nilcheck:                        Objective-C and Objective-C++ Dialect Options.
52472                                                             (line  111)
52473* fobjc-std:                             Objective-C and Objective-C++ Dialect Options.
52474                                                             (line  120)
52475* fomit-frame-pointer:                   Optimize Options.   (line  198)
52476* fopenmp:                               C Dialect Options.  (line  263)
52477* fopenmp-simd:                          C Dialect Options.  (line  272)
52478* fopt-info:                             Debugging Options.  (line 1138)
52479* foptimize-sibling-calls:               Optimize Options.   (line  219)
52480* force_cpusubtype_ALL:                  Darwin Options.     (line  135)
52481* force_flat_namespace:                  Darwin Options.     (line  196)
52482* fpack-struct:                          Code Gen Options.   (line  373)
52483* fpartial-inlining:                     Optimize Options.   (line 1308)
52484* fpcc-struct-return:                    Code Gen Options.   (line  165)
52485* fpcc-struct-return <1>:                Incompatibilities.  (line  170)
52486* fpch-deps:                             Preprocessor Options.
52487                                                             (line  296)
52488* fpch-preprocess:                       Preprocessor Options.
52489                                                             (line  304)
52490* fpeel-loops:                           Optimize Options.   (line 2206)
52491* fpermissive:                           C++ Dialect Options.
52492                                                             (line  205)
52493* fpic:                                  Code Gen Options.   (line  279)
52494* fPIC:                                  Code Gen Options.   (line  300)
52495* fpie:                                  Code Gen Options.   (line  313)
52496* fPIE:                                  Code Gen Options.   (line  313)
52497* fplan9-extensions:                     Unnamed Fields.     (line   43)
52498* fplugin:                               Overall Options.    (line  351)
52499* fplugin-arg:                           Overall Options.    (line  358)
52500* fpost-ipa-mem-report:                  Debugging Options.  (line  444)
52501* fpre-ipa-mem-report:                   Debugging Options.  (line  443)
52502* fpredictive-commoning:                 Optimize Options.   (line 1315)
52503* fprefetch-loop-arrays:                 Optimize Options.   (line 1322)
52504* fpreprocessed:                         Preprocessor Options.
52505                                                             (line  508)
52506* fprofile-arcs:                         Debugging Options.  (line  481)
52507* fprofile-arcs <1>:                     Other Builtins.     (line  253)
52508* fprofile-correction:                   Optimize Options.   (line 1861)
52509* fprofile-dir:                          Optimize Options.   (line 1868)
52510* fprofile-generate:                     Optimize Options.   (line 1879)
52511* fprofile-reorder-functions:            Optimize Options.   (line 2156)
52512* fprofile-report:                       Debugging Options.  (line  448)
52513* fprofile-use:                          Optimize Options.   (line 1893)
52514* fprofile-values:                       Optimize Options.   (line 2147)
52515* fpu:                                   RX Options.         (line   17)
52516* frandom-seed:                          Debugging Options.  (line 1230)
52517* freciprocal-math:                      Optimize Options.   (line 2017)
52518* frecord-gcc-switches:                  Code Gen Options.   (line  267)
52519* free:                                  Optimize Options.   (line  582)
52520* freg-struct-return:                    Code Gen Options.   (line  183)
52521* frename-registers:                     Optimize Options.   (line 2173)
52522* freorder-blocks:                       Optimize Options.   (line 1359)
52523* freorder-blocks-and-partition:         Optimize Options.   (line 1365)
52524* freorder-functions:                    Optimize Options.   (line 1378)
52525* freplace-objc-classes:                 Objective-C and Objective-C++ Dialect Options.
52526                                                             (line  131)
52527* frepo:                                 C++ Dialect Options.
52528                                                             (line  222)
52529* frepo <1>:                             Template Instantiation.
52530                                                             (line   54)
52531* frerun-cse-after-loop:                 Optimize Options.   (line  431)
52532* freschedule-modulo-scheduled-loops:    Optimize Options.   (line  782)
52533* frounding-math:                        Optimize Options.   (line 2064)
52534* fsanitize=address:                     Debugging Options.  (line  187)
52535* fsanitize=integer-divide-by-zero:      Debugging Options.  (line  233)
52536* fsanitize=kernel-address:              Debugging Options.  (line  197)
52537* fsanitize=leak:                        Debugging Options.  (line  211)
52538* fsanitize=null:                        Debugging Options.  (line  252)
52539* fsanitize=return:                      Debugging Options.  (line  260)
52540* fsanitize=shift:                       Debugging Options.  (line  226)
52541* fsanitize=signed-integer-overflow:     Debugging Options.  (line  267)
52542* fsanitize=thread:                      Debugging Options.  (line  202)
52543* fsanitize=undefined:                   Debugging Options.  (line  221)
52544* fsanitize=unreachable:                 Debugging Options.  (line  238)
52545* fsanitize=vla-bound:                   Debugging Options.  (line  245)
52546* fsched-critical-path-heuristic:        Optimize Options.   (line  748)
52547* fsched-dep-count-heuristic:            Optimize Options.   (line  775)
52548* fsched-group-heuristic:                Optimize Options.   (line  742)
52549* fsched-last-insn-heuristic:            Optimize Options.   (line  768)
52550* fsched-pressure:                       Optimize Options.   (line  693)
52551* fsched-rank-heuristic:                 Optimize Options.   (line  761)
52552* fsched-spec-insn-heuristic:            Optimize Options.   (line  754)
52553* fsched-spec-load:                      Optimize Options.   (line  702)
52554* fsched-spec-load-dangerous:            Optimize Options.   (line  707)
52555* fsched-stalled-insns:                  Optimize Options.   (line  713)
52556* fsched-stalled-insns-dep:              Optimize Options.   (line  723)
52557* fsched-verbose:                        Debugging Options.  (line 1240)
52558* fsched2-use-superblocks:               Optimize Options.   (line  732)
52559* fschedule-insns:                       Optimize Options.   (line  664)
52560* fschedule-insns2:                      Optimize Options.   (line  674)
52561* fsection-anchors:                      Optimize Options.   (line 2274)
52562* fsel-sched-pipelining:                 Optimize Options.   (line  795)
52563* fsel-sched-pipelining-outer-loops:     Optimize Options.   (line  800)
52564* fselective-scheduling:                 Optimize Options.   (line  787)
52565* fselective-scheduling2:                Optimize Options.   (line  791)
52566* fshort-double:                         Code Gen Options.   (line  211)
52567* fshort-enums:                          Code Gen Options.   (line  201)
52568* fshort-enums <1>:                      Structures unions enumerations and bit-fields implementation.
52569                                                             (line   48)
52570* fshort-enums <2>:                      Type Attributes.    (line  113)
52571* fshort-enums <3>:                      Non-bugs.           (line   42)
52572* fshort-wchar:                          Code Gen Options.   (line  219)
52573* fshrink-wrap:                          Optimize Options.   (line  805)
52574* fsignaling-nans:                       Optimize Options.   (line 2084)
52575* fsigned-bitfields:                     C Dialect Options.  (line  377)
52576* fsigned-bitfields <1>:                 Non-bugs.           (line   57)
52577* fsigned-char:                          C Dialect Options.  (line  367)
52578* fsigned-char <1>:                      Characters implementation.
52579                                                             (line   31)
52580* fsimd-cost-model:                      Optimize Options.   (line 1256)
52581* fsingle-precision-constant:            Optimize Options.   (line 2099)
52582* fsplit-ivs-in-unroller:                Optimize Options.   (line 1289)
52583* fsplit-stack:                          Code Gen Options.   (line  506)
52584* fsplit-stack <1>:                      Function Attributes.
52585                                                             (line 1090)
52586* fsplit-wide-types:                     Optimize Options.   (line  406)
52587* fstack-check:                          Code Gen Options.   (line  454)
52588* fstack-limit-register:                 Code Gen Options.   (line  492)
52589* fstack-limit-symbol:                   Code Gen Options.   (line  492)
52590* fstack-protector:                      Optimize Options.   (line 2257)
52591* fstack-protector-all:                  Optimize Options.   (line 2266)
52592* fstack-protector-strong:               Optimize Options.   (line 2269)
52593* fstack-usage:                          Debugging Options.  (line  452)
52594* fstack_reuse:                          Code Gen Options.   (line   21)
52595* fstats:                                C++ Dialect Options.
52596                                                             (line  237)
52597* fstrict-aliasing:                      Optimize Options.   (line 1391)
52598* fstrict-enums:                         C++ Dialect Options.
52599                                                             (line  242)
52600* fstrict-overflow:                      Optimize Options.   (line 1437)
52601* fstrict-volatile-bitfields:            Code Gen Options.   (line  612)
52602* fsync-libcalls:                        Code Gen Options.   (line  644)
52603* fsyntax-only:                          Warning Options.    (line   14)
52604* ftabstop:                              Preprocessor Options.
52605                                                             (line  521)
52606* ftemplate-backtrace-limit:             C++ Dialect Options.
52607                                                             (line  251)
52608* ftemplate-depth:                       C++ Dialect Options.
52609                                                             (line  255)
52610* ftest-coverage:                        Debugging Options.  (line  536)
52611* fthread-jumps:                         Optimize Options.   (line  397)
52612* ftime-report:                          Debugging Options.  (line  431)
52613* ftls-model:                            Code Gen Options.   (line  535)
52614* ftracer:                               Optimize Options.   (line 1272)
52615* ftracer <1>:                           Optimize Options.   (line 2183)
52616* ftrack-macro-expansion:                Preprocessor Options.
52617                                                             (line  536)
52618* ftrapv:                                Code Gen Options.   (line   97)
52619* ftree-bit-ccp:                         Optimize Options.   (line  930)
52620* ftree-builtin-call-dce:                Optimize Options.   (line  958)
52621* ftree-ccp:                             Optimize Options.   (line  936)
52622* ftree-ch:                              Optimize Options.   (line  978)
52623* ftree-coalesce-inlined-vars:           Optimize Options.   (line 1196)
52624* ftree-coalesce-vars:                   Optimize Options.   (line 1206)
52625* ftree-copy-prop:                       Optimize Options.   (line  867)
52626* ftree-copyrename:                      Optimize Options.   (line 1189)
52627* ftree-dce:                             Optimize Options.   (line  954)
52628* ftree-dominator-opts:                  Optimize Options.   (line  964)
52629* ftree-dse:                             Optimize Options.   (line  971)
52630* ftree-forwprop:                        Optimize Options.   (line  846)
52631* ftree-fre:                             Optimize Options.   (line  850)
52632* ftree-loop-im:                         Optimize Options.   (line 1150)
52633* ftree-loop-ivcanon:                    Optimize Options.   (line 1159)
52634* ftree-loop-linear:                     Optimize Options.   (line  989)
52635* ftree-loop-optimize:                   Optimize Options.   (line  985)
52636* ftree-loop-vectorize:                  Optimize Options.   (line 1234)
52637* ftree-parallelize-loops:               Optimize Options.   (line 1170)
52638* ftree-partial-pre:                     Optimize Options.   (line  842)
52639* ftree-phiprop:                         Optimize Options.   (line  857)
52640* ftree-pre:                             Optimize Options.   (line  838)
52641* ftree-pta:                             Optimize Options.   (line 1179)
52642* ftree-reassoc:                         Optimize Options.   (line  834)
52643* ftree-sink:                            Optimize Options.   (line  926)
52644* ftree-slp-vectorize:                   Optimize Options.   (line 1238)
52645* ftree-slsr:                            Optimize Options.   (line 1223)
52646* ftree-sra:                             Optimize Options.   (line 1183)
52647* ftree-ter:                             Optimize Options.   (line 1215)
52648* ftree-vectorize:                       Optimize Options.   (line 1229)
52649* ftree-vrp:                             Optimize Options.   (line 1263)
52650* funit-at-a-time:                       Optimize Options.   (line 1534)
52651* funroll-all-loops:                     Optimize Options.   (line 1283)
52652* funroll-all-loops <1>:                 Optimize Options.   (line 2200)
52653* funroll-loops:                         Optimize Options.   (line 1277)
52654* funroll-loops <1>:                     Optimize Options.   (line 2190)
52655* funsafe-loop-optimizations:            Optimize Options.   (line  487)
52656* funsafe-math-optimizations:            Optimize Options.   (line 1982)
52657* funsigned-bitfields:                   C Dialect Options.  (line  377)
52658* funsigned-bitfields <1>:               Structures unions enumerations and bit-fields implementation.
52659                                                             (line   17)
52660* funsigned-bitfields <2>:               Non-bugs.           (line   57)
52661* funsigned-char:                        C Dialect Options.  (line  349)
52662* funsigned-char <1>:                    Characters implementation.
52663                                                             (line   31)
52664* funswitch-loops:                       Optimize Options.   (line 2218)
52665* funwind-tables:                        Code Gen Options.   (line  139)
52666* fuse-cxa-atexit:                       C++ Dialect Options.
52667                                                             (line  270)
52668* fuse-ld=bfd:                           Optimize Options.   (line 1848)
52669* fuse-ld=gold:                          Optimize Options.   (line 1851)
52670* fvar-tracking:                         Debugging Options.  (line 1326)
52671* fvar-tracking-assignments:             Debugging Options.  (line 1336)
52672* fvar-tracking-assignments-toggle:      Debugging Options.  (line 1345)
52673* fvariable-expansion-in-unroller:       Optimize Options.   (line 1303)
52674* fvect-cost-model:                      Optimize Options.   (line 1242)
52675* fverbose-asm:                          Code Gen Options.   (line  258)
52676* fvisibility:                           Code Gen Options.   (line  546)
52677* fvisibility-inlines-hidden:            C++ Dialect Options.
52678                                                             (line  282)
52679* fvisibility-ms-compat:                 C++ Dialect Options.
52680                                                             (line  310)
52681* fvpt:                                  Optimize Options.   (line 2163)
52682* fvtable-verify:                        C++ Dialect Options.
52683                                                             (line  339)
52684* fvtv-counts:                           C++ Dialect Options.
52685                                                             (line  374)
52686* fweb:                                  Optimize Options.   (line 1553)
52687* fwhole-program:                        Optimize Options.   (line 1564)
52688* fwide-exec-charset:                    Preprocessor Options.
52689                                                             (line  559)
52690* fworking-directory:                    Preprocessor Options.
52691                                                             (line  577)
52692* fwrapv:                                Code Gen Options.   (line  101)
52693* fzero-link:                            Objective-C and Objective-C++ Dialect Options.
52694                                                             (line  141)
52695* g:                                     Debugging Options.  (line   10)
52696* G:                                     M32R/D Options.     (line   57)
52697* G <1>:                                 MIPS Options.       (line  393)
52698* G <2>:                                 Nios II Options.    (line    9)
52699* G <3>:                                 RS/6000 and PowerPC Options.
52700                                                             (line  739)
52701* G <4>:                                 System V Options.   (line   10)
52702* gcoff:                                 Debugging Options.  (line   94)
52703* gdwarf-VERSION:                        Debugging Options.  (line  112)
52704* gen-decls:                             Objective-C and Objective-C++ Dialect Options.
52705                                                             (line  153)
52706* gfull:                                 Darwin Options.     (line   69)
52707* ggdb:                                  Debugging Options.  (line   45)
52708* ggnu-pubnames:                         Debugging Options.  (line   54)
52709* gno-record-gcc-switches:               Debugging Options.  (line  132)
52710* gno-strict-dwarf:                      Debugging Options.  (line  142)
52711* gpubnames:                             Debugging Options.  (line   51)
52712* grecord-gcc-switches:                  Debugging Options.  (line  123)
52713* gsplit-dwarf:                          Debugging Options.  (line   38)
52714* gstabs:                                Debugging Options.  (line   59)
52715* gstabs+:                               Debugging Options.  (line   88)
52716* gstrict-dwarf:                         Debugging Options.  (line  136)
52717* gtoggle:                               Debugging Options.  (line  179)
52718* gused:                                 Darwin Options.     (line   64)
52719* gvms:                                  Debugging Options.  (line  146)
52720* gxcoff:                                Debugging Options.  (line   99)
52721* gxcoff+:                               Debugging Options.  (line  104)
52722* H:                                     Preprocessor Options.
52723                                                             (line  707)
52724* headerpad_max_install_names:           Darwin Options.     (line  196)
52725* help:                                  Overall Options.    (line  221)
52726* help <1>:                              Preprocessor Options.
52727                                                             (line  699)
52728* hoist-adjacent-loads:                  Optimize Options.   (line  861)
52729* I:                                     Preprocessor Options.
52730                                                             (line   77)
52731* I <1>:                                 Directory Options.  (line   10)
52732* I-:                                    Preprocessor Options.
52733                                                             (line  389)
52734* I- <1>:                                Directory Options.  (line  116)
52735* idirafter:                             Preprocessor Options.
52736                                                             (line  431)
52737* iframework:                            Darwin Options.     (line   57)
52738* imacros:                               Preprocessor Options.
52739                                                             (line  422)
52740* image_base:                            Darwin Options.     (line  196)
52741* imultilib:                             Preprocessor Options.
52742                                                             (line  456)
52743* include:                               Preprocessor Options.
52744                                                             (line  411)
52745* init:                                  Darwin Options.     (line  196)
52746* install_name:                          Darwin Options.     (line  196)
52747* iplugindir=:                           Directory Options.  (line   29)
52748* iprefix:                               Preprocessor Options.
52749                                                             (line  438)
52750* iquote:                                Preprocessor Options.
52751                                                             (line  468)
52752* iquote <1>:                            Directory Options.  (line   34)
52753* isysroot:                              Preprocessor Options.
52754                                                             (line  450)
52755* isystem:                               Preprocessor Options.
52756                                                             (line  460)
52757* iwithprefix:                           Preprocessor Options.
52758                                                             (line  444)
52759* iwithprefixbefore:                     Preprocessor Options.
52760                                                             (line  444)
52761* keep_private_externs:                  Darwin Options.     (line  196)
52762* l:                                     Link Options.       (line   26)
52763* L:                                     Directory Options.  (line   40)
52764* lobjc:                                 Link Options.       (line   53)
52765* M:                                     Preprocessor Options.
52766                                                             (line  185)
52767* m:                                     RS/6000 and PowerPC Options.
52768                                                             (line  581)
52769* m1:                                    SH Options.         (line    9)
52770* m10:                                   PDP-11 Options.     (line   29)
52771* m128bit-long-double:                   i386 and x86-64 Options.
52772                                                             (line  381)
52773* m16:                                   i386 and x86-64 Options.
52774                                                             (line  940)
52775* m16-bit:                               CRIS Options.       (line   64)
52776* m16-bit <1>:                           NDS32 Options.      (line   39)
52777* m1reg-:                                Adapteva Epiphany Options.
52778                                                             (line  131)
52779* m2:                                    SH Options.         (line   12)
52780* m210:                                  MCore Options.      (line   43)
52781* m2a:                                   SH Options.         (line   30)
52782* m2a-nofpu:                             SH Options.         (line   18)
52783* m2a-single:                            SH Options.         (line   26)
52784* m2a-single-only:                       SH Options.         (line   22)
52785* m3:                                    SH Options.         (line   34)
52786* m31:                                   S/390 and zSeries Options.
52787                                                             (line   86)
52788* m32:                                   i386 and x86-64 Options.
52789                                                             (line  940)
52790* m32 <1>:                               RS/6000 and PowerPC Options.
52791                                                             (line  274)
52792* m32 <2>:                               SPARC Options.      (line  256)
52793* m32 <3>:                               TILE-Gx Options.    (line   23)
52794* m32 <4>:                               TILEPro Options.    (line   13)
52795* m32-bit:                               CRIS Options.       (line   64)
52796* m32bit-doubles:                        RX Options.         (line   10)
52797* m32r:                                  M32R/D Options.     (line   15)
52798* m32r2:                                 M32R/D Options.     (line    9)
52799* m32rx:                                 M32R/D Options.     (line   12)
52800* m340:                                  MCore Options.      (line   43)
52801* m3dnow:                                i386 and x86-64 Options.
52802                                                             (line  629)
52803* m3e:                                   SH Options.         (line   37)
52804* m4:                                    SH Options.         (line   51)
52805* m4-100:                                SH Options.         (line   54)
52806* m4-100-nofpu:                          SH Options.         (line   57)
52807* m4-100-single:                         SH Options.         (line   61)
52808* m4-100-single-only:                    SH Options.         (line   65)
52809* m4-200:                                SH Options.         (line   69)
52810* m4-200-nofpu:                          SH Options.         (line   72)
52811* m4-200-single:                         SH Options.         (line   76)
52812* m4-200-single-only:                    SH Options.         (line   80)
52813* m4-300:                                SH Options.         (line   84)
52814* m4-300-nofpu:                          SH Options.         (line   87)
52815* m4-300-single:                         SH Options.         (line   91)
52816* m4-300-single-only:                    SH Options.         (line   95)
52817* m4-340:                                SH Options.         (line   99)
52818* m4-500:                                SH Options.         (line  102)
52819* m4-nofpu:                              SH Options.         (line   40)
52820* m4-single:                             SH Options.         (line   47)
52821* m4-single-only:                        SH Options.         (line   43)
52822* m40:                                   PDP-11 Options.     (line   23)
52823* m45:                                   PDP-11 Options.     (line   26)
52824* m4a:                                   SH Options.         (line  118)
52825* m4a-nofpu:                             SH Options.         (line  106)
52826* m4a-single:                            SH Options.         (line  114)
52827* m4a-single-only:                       SH Options.         (line  110)
52828* m4al:                                  SH Options.         (line  121)
52829* m4byte-functions:                      MCore Options.      (line   27)
52830* m5-32media:                            SH Options.         (line  126)
52831* m5-32media-nofpu:                      SH Options.         (line  129)
52832* m5-64media:                            SH Options.         (line  133)
52833* m5-64media-nofpu:                      SH Options.         (line  136)
52834* m5-compact:                            SH Options.         (line  140)
52835* m5-compact-nofpu:                      SH Options.         (line  143)
52836* m5200:                                 M680x0 Options.     (line  144)
52837* m5206e:                                M680x0 Options.     (line  153)
52838* m528x:                                 M680x0 Options.     (line  157)
52839* m5307:                                 M680x0 Options.     (line  161)
52840* m5407:                                 M680x0 Options.     (line  165)
52841* m64:                                   i386 and x86-64 Options.
52842                                                             (line  940)
52843* m64 <1>:                               RS/6000 and PowerPC Options.
52844                                                             (line  274)
52845* m64 <2>:                               S/390 and zSeries Options.
52846                                                             (line   86)
52847* m64 <3>:                               SPARC Options.      (line  256)
52848* m64 <4>:                               TILE-Gx Options.    (line   23)
52849* m64bit-doubles:                        RX Options.         (line   10)
52850* m68000:                                M680x0 Options.     (line   93)
52851* m68010:                                M680x0 Options.     (line  101)
52852* m68020:                                M680x0 Options.     (line  107)
52853* m68020-40:                             M680x0 Options.     (line  175)
52854* m68020-60:                             M680x0 Options.     (line  184)
52855* m68030:                                M680x0 Options.     (line  112)
52856* m68040:                                M680x0 Options.     (line  117)
52857* m68060:                                M680x0 Options.     (line  126)
52858* m68881:                                M680x0 Options.     (line  194)
52859* m8-bit:                                CRIS Options.       (line   64)
52860* m8byte-align:                          V850 Options.       (line  170)
52861* m96bit-long-double:                    i386 and x86-64 Options.
52862                                                             (line  381)
52863* mA6:                                   ARC Options.        (line   19)
52864* mA7:                                   ARC Options.        (line   26)
52865* mabi:                                  AArch64 Options.    (line    9)
52866* mabi <1>:                              ARM Options.        (line   10)
52867* mabi <2>:                              i386 and x86-64 Options.
52868                                                             (line  799)
52869* mabi <3>:                              RS/6000 and PowerPC Options.
52870                                                             (line  608)
52871* mabi=32:                               MIPS Options.       (line  138)
52872* mabi=64:                               MIPS Options.       (line  138)
52873* mabi=eabi:                             MIPS Options.       (line  138)
52874* mabi=elfv1:                            RS/6000 and PowerPC Options.
52875                                                             (line  629)
52876* mabi=elfv2:                            RS/6000 and PowerPC Options.
52877                                                             (line  635)
52878* mabi=gnu:                              MMIX Options.       (line   20)
52879* mabi=ibmlongdouble:                    RS/6000 and PowerPC Options.
52880                                                             (line  621)
52881* mabi=ieeelongdouble:                   RS/6000 and PowerPC Options.
52882                                                             (line  625)
52883* mabi=mmixware:                         MMIX Options.       (line   20)
52884* mabi=n32:                              MIPS Options.       (line  138)
52885* mabi=no-spe:                           RS/6000 and PowerPC Options.
52886                                                             (line  618)
52887* mabi=o64:                              MIPS Options.       (line  138)
52888* mabi=spe:                              RS/6000 and PowerPC Options.
52889                                                             (line  613)
52890* mabicalls:                             MIPS Options.       (line  162)
52891* mabort-on-noreturn:                    ARM Options.        (line  196)
52892* mabs=2008:                             MIPS Options.       (line  260)
52893* mabs=legacy:                           MIPS Options.       (line  260)
52894* mabsdiff:                              MeP Options.        (line    7)
52895* mabshi:                                PDP-11 Options.     (line   55)
52896* mac0:                                  PDP-11 Options.     (line   16)
52897* macc-4:                                FRV Options.        (line  139)
52898* macc-8:                                FRV Options.        (line  143)
52899* maccumulate-args:                      AVR Options.        (line  137)
52900* maccumulate-outgoing-args:             i386 and x86-64 Options.
52901                                                             (line  822)
52902* maccumulate-outgoing-args <1>:         SH Options.         (line  395)
52903* maddress-mode=long:                    i386 and x86-64 Options.
52904                                                             (line  987)
52905* maddress-mode=short:                   i386 and x86-64 Options.
52906                                                             (line  992)
52907* maddress-space-conversion:             SPU Options.        (line   68)
52908* mads:                                  RS/6000 and PowerPC Options.
52909                                                             (line  663)
52910* maix-struct-return:                    RS/6000 and PowerPC Options.
52911                                                             (line  601)
52912* maix32:                                RS/6000 and PowerPC Options.
52913                                                             (line  312)
52914* maix64:                                RS/6000 and PowerPC Options.
52915                                                             (line  312)
52916* malign-300:                            H8/300 Options.     (line   41)
52917* malign-call:                           ARC Options.        (line  192)
52918* malign-double:                         i386 and x86-64 Options.
52919                                                             (line  366)
52920* malign-int:                            M680x0 Options.     (line  263)
52921* malign-labels:                         FRV Options.        (line  128)
52922* malign-loops:                          M32R/D Options.     (line   73)
52923* malign-natural:                        RS/6000 and PowerPC Options.
52924                                                             (line  350)
52925* malign-power:                          RS/6000 and PowerPC Options.
52926                                                             (line  350)
52927* mall-opts:                             MeP Options.        (line   11)
52928* malloc-cc:                             FRV Options.        (line   31)
52929* maltivec:                              RS/6000 and PowerPC Options.
52930                                                             (line  132)
52931* maltivec=be:                           RS/6000 and PowerPC Options.
52932                                                             (line  148)
52933* maltivec=le:                           RS/6000 and PowerPC Options.
52934                                                             (line  158)
52935* mam33:                                 MN10300 Options.    (line   17)
52936* mam33-2:                               MN10300 Options.    (line   24)
52937* mam34:                                 MN10300 Options.    (line   27)
52938* mandroid:                              GNU/Linux Options.  (line   21)
52939* mannotate-align:                       ARC Options.        (line  133)
52940* mapcs:                                 ARM Options.        (line   22)
52941* mapcs-frame:                           ARM Options.        (line   14)
52942* mapp-regs:                             SPARC Options.      (line   10)
52943* mapp-regs <1>:                         V850 Options.       (line  181)
52944* mARC600:                               ARC Options.        (line   19)
52945* mARC601:                               ARC Options.        (line   23)
52946* mARC700:                               ARC Options.        (line   26)
52947* march:                                 AArch64 Options.    (line   73)
52948* march <1>:                             ARM Options.        (line   75)
52949* march <2>:                             C6X Options.        (line    7)
52950* march <3>:                             CRIS Options.       (line   10)
52951* march <4>:                             HPPA Options.       (line    9)
52952* march <5>:                             HPPA Options.       (line  156)
52953* march <6>:                             i386 and x86-64 Options.
52954                                                             (line   10)
52955* march <7>:                             M680x0 Options.     (line   12)
52956* march <8>:                             MIPS Options.       (line   14)
52957* march <9>:                             NDS32 Options.      (line   58)
52958* march <10>:                            S/390 and zSeries Options.
52959                                                             (line  114)
52960* marclinux:                             ARC Options.        (line  139)
52961* marclinux_prof:                        ARC Options.        (line  146)
52962* margonaut:                             ARC Options.        (line  341)
52963* marm:                                  ARM Options.        (line  266)
52964* mas100-syntax:                         RX Options.         (line   76)
52965* masm-hex:                              MSP430 Options.     (line    9)
52966* masm=DIALECT:                          i386 and x86-64 Options.
52967                                                             (line  322)
52968* matomic-model=MODEL:                   SH Options.         (line  214)
52969* matomic-updates:                       SPU Options.        (line   83)
52970* mauto-modify-reg:                      ARC Options.        (line  195)
52971* mauto-pic:                             IA-64 Options.      (line   50)
52972* maverage:                              MeP Options.        (line   16)
52973* mavoid-indexed-addresses:              RS/6000 and PowerPC Options.
52974                                                             (line  420)
52975* max-vect-align:                        Adapteva Epiphany Options.
52976                                                             (line  119)
52977* mb:                                    SH Options.         (line  147)
52978* mbackchain:                            S/390 and zSeries Options.
52979                                                             (line   35)
52980* mbarrel-shift-enabled:                 LM32 Options.       (line    9)
52981* mbarrel-shifter:                       ARC Options.        (line   10)
52982* mbarrel_shifter:                       ARC Options.        (line  361)
52983* mbase-addresses:                       MMIX Options.       (line   53)
52984* mbased=:                               MeP Options.        (line   20)
52985* mbbit-peephole:                        ARC Options.        (line  198)
52986* mbcopy:                                PDP-11 Options.     (line   36)
52987* mbcopy-builtin:                        PDP-11 Options.     (line   32)
52988* mbig:                                  RS/6000 and PowerPC Options.
52989                                                             (line  500)
52990* mbig-endian:                           AArch64 Options.    (line   20)
52991* mbig-endian <1>:                       ARC Options.        (line  344)
52992* mbig-endian <2>:                       ARM Options.        (line   62)
52993* mbig-endian <3>:                       C6X Options.        (line   13)
52994* mbig-endian <4>:                       IA-64 Options.      (line    9)
52995* mbig-endian <5>:                       MCore Options.      (line   39)
52996* mbig-endian <6>:                       MicroBlaze Options. (line   57)
52997* mbig-endian <7>:                       NDS32 Options.      (line    9)
52998* mbig-endian <8>:                       RS/6000 and PowerPC Options.
52999                                                             (line  500)
53000* mbig-endian <9>:                       TILE-Gx Options.    (line   29)
53001* mbig-endian-data:                      RX Options.         (line   42)
53002* mbig-switch:                           V850 Options.       (line  176)
53003* mbigtable:                             SH Options.         (line  162)
53004* mbionic:                               GNU/Linux Options.  (line   17)
53005* mbit-align:                            RS/6000 and PowerPC Options.
53006                                                             (line  452)
53007* mbit-ops:                              CR16 Options.       (line   25)
53008* mbitfield:                             M680x0 Options.     (line  231)
53009* mbitops:                               MeP Options.        (line   26)
53010* mbitops <1>:                           SH Options.         (line  166)
53011* mblock-move-inline-limit:              RS/6000 and PowerPC Options.
53012                                                             (line  733)
53013* mbranch-cheap:                         PDP-11 Options.     (line   65)
53014* mbranch-cost:                          Adapteva Epiphany Options.
53015                                                             (line   18)
53016* mbranch-cost <1>:                      AVR Options.        (line  152)
53017* mbranch-cost <2>:                      MIPS Options.       (line  701)
53018* mbranch-cost=NUM:                      SH Options.         (line  459)
53019* mbranch-cost=NUMBER:                   M32R/D Options.     (line   82)
53020* mbranch-expensive:                     PDP-11 Options.     (line   61)
53021* mbranch-hints:                         SPU Options.        (line   29)
53022* mbranch-likely:                        MIPS Options.       (line  708)
53023* mbranch-predict:                       MMIX Options.       (line   48)
53024* mbss-plt:                              RS/6000 and PowerPC Options.
53025                                                             (line  185)
53026* mbuild-constants:                      DEC Alpha Options.  (line  141)
53027* mbwx:                                  DEC Alpha Options.  (line  163)
53028* mbypass-cache:                         Nios II Options.    (line   34)
53029* mc68000:                               M680x0 Options.     (line   93)
53030* mc68020:                               M680x0 Options.     (line  107)
53031* mc=:                                   MeP Options.        (line   31)
53032* mcache-block-size:                     NDS32 Options.      (line   54)
53033* mcache-size:                           SPU Options.        (line   75)
53034* mcache-volatile:                       Nios II Options.    (line   40)
53035* mcall-eabi:                            RS/6000 and PowerPC Options.
53036                                                             (line  575)
53037* mcall-freebsd:                         RS/6000 and PowerPC Options.
53038                                                             (line  589)
53039* mcall-linux:                           RS/6000 and PowerPC Options.
53040                                                             (line  585)
53041* mcall-netbsd:                          RS/6000 and PowerPC Options.
53042                                                             (line  593)
53043* mcall-netbsd <1>:                      RS/6000 and PowerPC Options.
53044                                                             (line  597)
53045* mcall-prologues:                       AVR Options.        (line  157)
53046* mcall-sysv:                            RS/6000 and PowerPC Options.
53047                                                             (line  567)
53048* mcall-sysv-eabi:                       RS/6000 and PowerPC Options.
53049                                                             (line  575)
53050* mcall-sysv-noeabi:                     RS/6000 and PowerPC Options.
53051                                                             (line  578)
53052* mcallee-super-interworking:            ARM Options.        (line  285)
53053* mcaller-super-interworking:            ARM Options.        (line  292)
53054* mcallgraph-data:                       MCore Options.      (line   31)
53055* mcase-vector-pcrel:                    ARC Options.        (line  206)
53056* mcbcond:                               SPARC Options.      (line  223)
53057* mcc-init:                              CRIS Options.       (line   42)
53058* mcfv4e:                                M680x0 Options.     (line  169)
53059* mcheck-zero-division:                  MIPS Options.       (line  503)
53060* mcix:                                  DEC Alpha Options.  (line  163)
53061* mcld:                                  i386 and x86-64 Options.
53062                                                             (line  672)
53063* mclear-hwcap:                          Solaris 2 Options.  (line    9)
53064* mclip:                                 MeP Options.        (line   35)
53065* mcmodel:                               SPARC Options.      (line  261)
53066* mcmodel=kernel:                        i386 and x86-64 Options.
53067                                                             (line  971)
53068* mcmodel=large:                         AArch64 Options.    (line   44)
53069* mcmodel=large <1>:                     i386 and x86-64 Options.
53070                                                             (line  983)
53071* mcmodel=large <2>:                     RS/6000 and PowerPC Options.
53072                                                             (line  126)
53073* mcmodel=large <3>:                     TILE-Gx Options.    (line   14)
53074* mcmodel=medium:                        i386 and x86-64 Options.
53075                                                             (line  976)
53076* mcmodel=medium <1>:                    RS/6000 and PowerPC Options.
53077                                                             (line  122)
53078* mcmodel=small:                         AArch64 Options.    (line   38)
53079* mcmodel=small <1>:                     i386 and x86-64 Options.
53080                                                             (line  965)
53081* mcmodel=small <2>:                     RS/6000 and PowerPC Options.
53082                                                             (line  118)
53083* mcmodel=small <3>:                     TILE-Gx Options.    (line    9)
53084* mcmodel=tiny:                          AArch64 Options.    (line   31)
53085* mcmov:                                 NDS32 Options.      (line   21)
53086* mcmove:                                Adapteva Epiphany Options.
53087                                                             (line   23)
53088* mcmpb:                                 RS/6000 and PowerPC Options.
53089                                                             (line   27)
53090* mcode-readable:                        MIPS Options.       (line  463)
53091* mcompact-casesi:                       ARC Options.        (line  210)
53092* mcompat-align-parm:                    RS/6000 and PowerPC Options.
53093                                                             (line  889)
53094* mcond-exec:                            FRV Options.        (line  187)
53095* mcond-move:                            FRV Options.        (line  159)
53096* mconfig=:                              MeP Options.        (line   39)
53097* mconsole:                              i386 and x86-64 Windows Options.
53098                                                             (line    9)
53099* mconst-align:                          CRIS Options.       (line   55)
53100* mconst16:                              Xtensa Options.     (line   10)
53101* mconstant-gp:                          IA-64 Options.      (line   46)
53102* mcop:                                  MeP Options.        (line   48)
53103* mcop32:                                MeP Options.        (line   53)
53104* mcop64:                                MeP Options.        (line   56)
53105* mcorea:                                Blackfin Options.   (line  156)
53106* mcoreb:                                Blackfin Options.   (line  163)
53107* mcpu:                                  AArch64 Options.    (line  105)
53108* mcpu <1>:                              ARC Options.        (line   14)
53109* mcpu <2>:                              ARM Options.        (line  136)
53110* mcpu <3>:                              CRIS Options.       (line   10)
53111* mcpu <4>:                              DEC Alpha Options.  (line  215)
53112* mcpu <5>:                              FRV Options.        (line  258)
53113* mcpu <6>:                              i386 and x86-64 Options.
53114                                                             (line  270)
53115* mcpu <7>:                              M680x0 Options.     (line   28)
53116* mcpu <8>:                              picoChip Options.   (line    9)
53117* mcpu <9>:                              RS/6000 and PowerPC Options.
53118                                                             (line   68)
53119* mcpu <10>:                             SPARC Options.      (line  101)
53120* mcpu <11>:                             TILE-Gx Options.    (line   18)
53121* mcpu <12>:                             TILEPro Options.    (line    9)
53122* mcpu32:                                M680x0 Options.     (line  135)
53123* mcpu=:                                 Blackfin Options.   (line    7)
53124* mcpu= <1>:                             M32C Options.       (line    7)
53125* mcpu= <2>:                             MicroBlaze Options. (line   20)
53126* mcr16c:                                CR16 Options.       (line   14)
53127* mcr16cplus:                            CR16 Options.       (line   14)
53128* mcrc32:                                i386 and x86-64 Options.
53129                                                             (line  719)
53130* mcrypto:                               RS/6000 and PowerPC Options.
53131                                                             (line  220)
53132* mcsync-anomaly:                        Blackfin Options.   (line   59)
53133* mctor-dtor:                            NDS32 Options.      (line   73)
53134* mcustom-fpu-cfg:                       Nios II Options.    (line  175)
53135* mcustom-INSN:                          Nios II Options.    (line   61)
53136* mcx16:                                 i386 and x86-64 Options.
53137                                                             (line  696)
53138* MD:                                    Preprocessor Options.
53139                                                             (line  276)
53140* mdalign:                               SH Options.         (line  153)
53141* mdata-align:                           CRIS Options.       (line   55)
53142* mdata-model:                           CR16 Options.       (line   28)
53143* mdc:                                   MeP Options.        (line   62)
53144* mdebug:                                M32R/D Options.     (line   69)
53145* mdebug <1>:                            S/390 and zSeries Options.
53146                                                             (line  110)
53147* mdebug-main=PREFIX:                    VMS Options.        (line   13)
53148* mdec-asm:                              PDP-11 Options.     (line   72)
53149* mdirect-move:                          RS/6000 and PowerPC Options.
53150                                                             (line  226)
53151* mdisable-callt:                        V850 Options.       (line   92)
53152* mdisable-fpregs:                       HPPA Options.       (line   28)
53153* mdisable-indexing:                     HPPA Options.       (line   34)
53154* mdiv:                                  M680x0 Options.     (line  206)
53155* mdiv <1>:                              MCore Options.      (line   15)
53156* mdiv <2>:                              MeP Options.        (line   65)
53157* mdiv=STRATEGY:                         SH Options.         (line  306)
53158* mdivide-breaks:                        MIPS Options.       (line  509)
53159* mdivide-enabled:                       LM32 Options.       (line   12)
53160* mdivide-traps:                         MIPS Options.       (line  509)
53161* mdivsi3_libfunc=NAME:                  SH Options.         (line  401)
53162* mdll:                                  i386 and x86-64 Windows Options.
53163                                                             (line   16)
53164* mdlmzb:                                RS/6000 and PowerPC Options.
53165                                                             (line  445)
53166* mdmx:                                  MIPS Options.       (line  336)
53167* mdouble:                               FRV Options.        (line   48)
53168* mdouble-float:                         MIPS Options.       (line  255)
53169* mdouble-float <1>:                     RS/6000 and PowerPC Options.
53170                                                             (line  368)
53171* mdpfp:                                 ARC Options.        (line   30)
53172* mdpfp-compact:                         ARC Options.        (line   31)
53173* mdpfp-fast:                            ARC Options.        (line   35)
53174* mdpfp_compact:                         ARC Options.        (line  364)
53175* mdpfp_fast:                            ARC Options.        (line  367)
53176* mdsp:                                  MIPS Options.       (line  313)
53177* mdsp-packa:                            ARC Options.        (line   88)
53178* mdspr2:                                MIPS Options.       (line  319)
53179* mdsp_packa:                            ARC Options.        (line  370)
53180* mdual-nops:                            SPU Options.        (line   95)
53181* mdump-tune-features:                   i386 and x86-64 Options.
53182                                                             (line  653)
53183* mdvbf:                                 ARC Options.        (line   92)
53184* mdwarf2-asm:                           IA-64 Options.      (line   94)
53185* mdword:                                FRV Options.        (line   40)
53186* mdynamic-no-pic:                       RS/6000 and PowerPC Options.
53187                                                             (line  505)
53188* mea:                                   ARC Options.        (line   43)
53189* mEA:                                   ARC Options.        (line  373)
53190* mea32:                                 SPU Options.        (line   60)
53191* mea64:                                 SPU Options.        (line   60)
53192* meabi:                                 RS/6000 and PowerPC Options.
53193                                                             (line  682)
53194* mearly-cbranchsi:                      ARC Options.        (line  229)
53195* mearly-stop-bits:                      IA-64 Options.      (line  100)
53196* meb:                                   MeP Options.        (line   68)
53197* meb <1>:                               Moxie Options.      (line    7)
53198* meb <2>:                               Nios II Options.    (line   29)
53199* meb <3>:                               Score Options.      (line    9)
53200* mel:                                   MeP Options.        (line   71)
53201* mel <1>:                               Moxie Options.      (line   11)
53202* mel <2>:                               Nios II Options.    (line   29)
53203* mel <3>:                               Score Options.      (line   12)
53204* melf:                                  CRIS Options.       (line   87)
53205* melf <1>:                              MMIX Options.       (line   43)
53206* memb:                                  RS/6000 and PowerPC Options.
53207                                                             (line  677)
53208* membedded-data:                        MIPS Options.       (line  450)
53209* memregs=:                              M32C Options.       (line   21)
53210* mep:                                   V850 Options.       (line   16)
53211* mepilogue-cfi:                         ARC Options.        (line  155)
53212* mepsilon:                              MMIX Options.       (line   15)
53213* merror-reloc:                          SPU Options.        (line   10)
53214* mesa:                                  S/390 and zSeries Options.
53215                                                             (line   94)
53216* metrax100:                             CRIS Options.       (line   27)
53217* metrax4:                               CRIS Options.       (line   27)
53218* meva:                                  MIPS Options.       (line  363)
53219* mex9:                                  NDS32 Options.      (line   70)
53220* mexpand-adddi:                         ARC Options.        (line  232)
53221* mexplicit-relocs:                      DEC Alpha Options.  (line  176)
53222* mexplicit-relocs <1>:                  MIPS Options.       (line  494)
53223* mexr:                                  H8/300 Options.     (line   28)
53224* mextern-sdata:                         MIPS Options.       (line  413)
53225* MF:                                    Preprocessor Options.
53226                                                             (line  220)
53227* mfast-fp:                              Blackfin Options.   (line  132)
53228* mfast-indirect-calls:                  HPPA Options.       (line   46)
53229* mfast-sw-div:                          Nios II Options.    (line   46)
53230* mfaster-structs:                       SPARC Options.      (line   91)
53231* mfdpic:                                FRV Options.        (line   72)
53232* mfentry:                               i386 and x86-64 Options.
53233                                                             (line  910)
53234* mfix:                                  DEC Alpha Options.  (line  163)
53235* mfix-24k:                              MIPS Options.       (line  567)
53236* mfix-and-continue:                     Darwin Options.     (line  104)
53237* mfix-at697f:                           SPARC Options.      (line  243)
53238* mfix-cortex-m3-ldrd:                   ARM Options.        (line  325)
53239* mfix-r10000:                           MIPS Options.       (line  589)
53240* mfix-r4000:                            MIPS Options.       (line  573)
53241* mfix-r4400:                            MIPS Options.       (line  583)
53242* mfix-rm7000:                           MIPS Options.       (line  600)
53243* mfix-sb1:                              MIPS Options.       (line  625)
53244* mfix-ut699:                            SPARC Options.      (line  248)
53245* mfix-vr4120:                           MIPS Options.       (line  605)
53246* mfix-vr4130:                           MIPS Options.       (line  618)
53247* mfixed-cc:                             FRV Options.        (line   35)
53248* mfixed-range:                          HPPA Options.       (line   53)
53249* mfixed-range <1>:                      IA-64 Options.      (line  105)
53250* mfixed-range <2>:                      SH Options.         (line  408)
53251* mfixed-range <3>:                      SPU Options.        (line   52)
53252* mflat:                                 SPARC Options.      (line   22)
53253* mflip-mips16:                          MIPS Options.       (line  110)
53254* mfloat-abi:                            ARM Options.        (line   42)
53255* mfloat-gprs:                           RS/6000 and PowerPC Options.
53256                                                             (line  257)
53257* mfloat-ieee:                           DEC Alpha Options.  (line  171)
53258* mfloat-vax:                            DEC Alpha Options.  (line  171)
53259* mfloat32:                              PDP-11 Options.     (line   52)
53260* mfloat64:                              PDP-11 Options.     (line   48)
53261* mflush-func:                           MIPS Options.       (line  692)
53262* mflush-func=NAME:                      M32R/D Options.     (line   93)
53263* mflush-trap=NUMBER:                    M32R/D Options.     (line   86)
53264* mfmaf:                                 SPARC Options.      (line  237)
53265* mfmovd:                                SH Options.         (line  169)
53266* mforbid-fp-as-gp:                      NDS32 Options.      (line   65)
53267* mforce-fp-as-gp:                       NDS32 Options.      (line   61)
53268* mforce-no-pic:                         Xtensa Options.     (line   41)
53269* mfp-exceptions:                        MIPS Options.       (line  719)
53270* mfp-mode:                              Adapteva Epiphany Options.
53271                                                             (line   71)
53272* mfp-reg:                               DEC Alpha Options.  (line   25)
53273* mfp-rounding-mode:                     DEC Alpha Options.  (line   85)
53274* mfp-trap-mode:                         DEC Alpha Options.  (line   63)
53275* mfp16-format:                          ARM Options.        (line  176)
53276* mfp32:                                 MIPS Options.       (line  228)
53277* mfp64:                                 MIPS Options.       (line  231)
53278* mfpmath:                               Optimize Options.   (line 1942)
53279* mfpmath <1>:                           i386 and x86-64 Options.
53280                                                             (line  273)
53281* mfpr-32:                               FRV Options.        (line   15)
53282* mfpr-64:                               FRV Options.        (line   19)
53283* mfprnd:                                RS/6000 and PowerPC Options.
53284                                                             (line   27)
53285* mfpu:                                  ARM Options.        (line  156)
53286* mfpu <1>:                              PDP-11 Options.     (line    9)
53287* mfpu <2>:                              RS/6000 and PowerPC Options.
53288                                                             (line  376)
53289* mfpu <3>:                              SPARC Options.      (line   34)
53290* mfriz:                                 RS/6000 and PowerPC Options.
53291                                                             (line  860)
53292* mfsca:                                 SH Options.         (line  484)
53293* mfsrra:                                SH Options.         (line  493)
53294* mfull-regs:                            NDS32 Options.      (line   18)
53295* mfull-toc:                             RS/6000 and PowerPC Options.
53296                                                             (line  285)
53297* mfused-madd:                           IA-64 Options.      (line   88)
53298* mfused-madd <1>:                       MIPS Options.       (line  550)
53299* mfused-madd <2>:                       RS/6000 and PowerPC Options.
53300                                                             (line  429)
53301* mfused-madd <3>:                       S/390 and zSeries Options.
53302                                                             (line  135)
53303* mfused-madd <4>:                       SH Options.         (line  475)
53304* mfused-madd <5>:                       Xtensa Options.     (line   19)
53305* MG:                                    Preprocessor Options.
53306                                                             (line  229)
53307* mg:                                    VAX Options.        (line   17)
53308* mgas:                                  HPPA Options.       (line   69)
53309* mgcc-abi:                              V850 Options.       (line  148)
53310* mgen-cell-microcode:                   RS/6000 and PowerPC Options.
53311                                                             (line  173)
53312* mgeneral-regs-only:                    AArch64 Options.    (line   24)
53313* mgettrcost=NUMBER:                     SH Options.         (line  425)
53314* mghs:                                  V850 Options.       (line  127)
53315* mglibc:                                GNU/Linux Options.  (line    9)
53316* mgnu:                                  VAX Options.        (line   13)
53317* mgnu-as:                               IA-64 Options.      (line   18)
53318* mgnu-ld:                               HPPA Options.       (line  105)
53319* mgnu-ld <1>:                           IA-64 Options.      (line   23)
53320* mgotplt:                               CRIS Options.       (line   81)
53321* mgp-direct:                            NDS32 Options.      (line   45)
53322* mgp32:                                 MIPS Options.       (line  222)
53323* mgp64:                                 MIPS Options.       (line  225)
53324* mgpopt:                                MIPS Options.       (line  435)
53325* mgpopt <1>:                            Nios II Options.    (line   15)
53326* mgpr-32:                               FRV Options.        (line    7)
53327* mgpr-64:                               FRV Options.        (line   11)
53328* mgprel-ro:                             FRV Options.        (line   99)
53329* mh:                                    H8/300 Options.     (line   14)
53330* mhal:                                  Nios II Options.    (line  220)
53331* mhalf-reg-file:                        Adapteva Epiphany Options.
53332                                                             (line    9)
53333* mhard-dfp:                             RS/6000 and PowerPC Options.
53334                                                             (line   27)
53335* mhard-dfp <1>:                         S/390 and zSeries Options.
53336                                                             (line   20)
53337* mhard-float:                           FRV Options.        (line   23)
53338* mhard-float <1>:                       M680x0 Options.     (line  194)
53339* mhard-float <2>:                       MicroBlaze Options. (line   10)
53340* mhard-float <3>:                       MIPS Options.       (line  234)
53341* mhard-float <4>:                       RS/6000 and PowerPC Options.
53342                                                             (line  362)
53343* mhard-float <5>:                       S/390 and zSeries Options.
53344                                                             (line   11)
53345* mhard-float <6>:                       SPARC Options.      (line   34)
53346* mhard-float <7>:                       V850 Options.       (line  113)
53347* mhard-quad-float:                      SPARC Options.      (line   55)
53348* mhardlit:                              MCore Options.      (line   10)
53349* mhint-max-distance:                    SPU Options.        (line  107)
53350* mhint-max-nops:                        SPU Options.        (line  101)
53351* mhotpatch:                             S/390 and zSeries Options.
53352                                                             (line  171)
53353* mhp-ld:                                HPPA Options.       (line  117)
53354* mhw-div:                               Nios II Options.    (line   55)
53355* mhw-mul:                               Nios II Options.    (line   55)
53356* mhw-mulx:                              Nios II Options.    (line   55)
53357* mhwmult=:                              MSP430 Options.     (line   56)
53358* micplb:                                Blackfin Options.   (line  177)
53359* mid-shared-library:                    Blackfin Options.   (line   80)
53360* mieee:                                 DEC Alpha Options.  (line   39)
53361* mieee <1>:                             SH Options.         (line  186)
53362* mieee-conformant:                      DEC Alpha Options.  (line  134)
53363* mieee-fp:                              i386 and x86-64 Options.
53364                                                             (line  328)
53365* mieee-with-inexact:                    DEC Alpha Options.  (line   52)
53366* milp32:                                IA-64 Options.      (line  121)
53367* mimadd:                                MIPS Options.       (line  543)
53368* mimpure-text:                          Solaris 2 Options.  (line   15)
53369* mincoming-stack-boundary:              i386 and x86-64 Options.
53370                                                             (line  535)
53371* mindexed-addressing:                   SH Options.         (line  415)
53372* mindexed-loads:                        ARC Options.        (line  236)
53373* minline-all-stringops:                 i386 and x86-64 Options.
53374                                                             (line  842)
53375* minline-float-divide-max-throughput:   IA-64 Options.      (line   58)
53376* minline-float-divide-min-latency:      IA-64 Options.      (line   54)
53377* minline-ic_invalidate:                 SH Options.         (line  195)
53378* minline-int-divide-max-throughput:     IA-64 Options.      (line   69)
53379* minline-int-divide-min-latency:        IA-64 Options.      (line   65)
53380* minline-plt:                           Blackfin Options.   (line  137)
53381* minline-plt <1>:                       FRV Options.        (line   81)
53382* minline-sqrt-max-throughput:           IA-64 Options.      (line   80)
53383* minline-sqrt-min-latency:              IA-64 Options.      (line   76)
53384* minline-stringops-dynamically:         i386 and x86-64 Options.
53385                                                             (line  849)
53386* minrt:                                 MSP430 Options.     (line   77)
53387* minsert-sched-nops:                    RS/6000 and PowerPC Options.
53388                                                             (line  545)
53389* mint-register:                         RX Options.         (line  100)
53390* mint16:                                PDP-11 Options.     (line   40)
53391* mint32:                                CR16 Options.       (line   22)
53392* mint32 <1>:                            H8/300 Options.     (line   38)
53393* mint32 <2>:                            PDP-11 Options.     (line   44)
53394* mint8:                                 AVR Options.        (line  161)
53395* minterlink-compressed:                 MIPS Options.       (line  117)
53396* minterlink-mips16:                     MIPS Options.       (line  129)
53397* minvalid-symbols:                      SH Options.         (line  449)
53398* mio-volatile:                          MeP Options.        (line   74)
53399* mips1:                                 MIPS Options.       (line   77)
53400* mips16:                                MIPS Options.       (line  102)
53401* mips2:                                 MIPS Options.       (line   80)
53402* mips3:                                 MIPS Options.       (line   83)
53403* mips32:                                MIPS Options.       (line   89)
53404* mips32r2:                              MIPS Options.       (line   92)
53405* mips3d:                                MIPS Options.       (line  342)
53406* mips4:                                 MIPS Options.       (line   86)
53407* mips64:                                MIPS Options.       (line   95)
53408* mips64r2:                              MIPS Options.       (line   98)
53409* misel:                                 RS/6000 and PowerPC Options.
53410                                                             (line  191)
53411* misize:                                ARC Options.        (line  130)
53412* misize <1>:                            SH Options.         (line  207)
53413* misr-vector-size:                      NDS32 Options.      (line   51)
53414* missue-rate=NUMBER:                    M32R/D Options.     (line   79)
53415* mivc2:                                 MeP Options.        (line   59)
53416* mjump-in-delay:                        HPPA Options.       (line   23)
53417* mkernel:                               Darwin Options.     (line   82)
53418* mknuthdiv:                             MMIX Options.       (line   32)
53419* ml:                                    MeP Options.        (line   78)
53420* ml <1>:                                SH Options.         (line  150)
53421* mlarge:                                MSP430 Options.     (line   45)
53422* mlarge-data:                           DEC Alpha Options.  (line  187)
53423* mlarge-data-threshold:                 i386 and x86-64 Options.
53424                                                             (line  421)
53425* mlarge-mem:                            SPU Options.        (line   38)
53426* mlarge-text:                           DEC Alpha Options.  (line  205)
53427* mleadz:                                MeP Options.        (line   81)
53428* mleaf-id-shared-library:               Blackfin Options.   (line   91)
53429* mlibfuncs:                             MMIX Options.       (line   10)
53430* mlibrary-pic:                          FRV Options.        (line  135)
53431* mlinked-fp:                            FRV Options.        (line  116)
53432* mlinker-opt:                           HPPA Options.       (line   79)
53433* mlinux:                                CRIS Options.       (line   91)
53434* mlittle:                               RS/6000 and PowerPC Options.
53435                                                             (line  494)
53436* mlittle-endian:                        AArch64 Options.    (line   27)
53437* mlittle-endian <1>:                    ARC Options.        (line  353)
53438* mlittle-endian <2>:                    ARM Options.        (line   58)
53439* mlittle-endian <3>:                    C6X Options.        (line   16)
53440* mlittle-endian <4>:                    IA-64 Options.      (line   13)
53441* mlittle-endian <5>:                    MCore Options.      (line   39)
53442* mlittle-endian <6>:                    MicroBlaze Options. (line   60)
53443* mlittle-endian <7>:                    NDS32 Options.      (line   12)
53444* mlittle-endian <8>:                    RS/6000 and PowerPC Options.
53445                                                             (line  494)
53446* mlittle-endian <9>:                    TILE-Gx Options.    (line   29)
53447* mlittle-endian-data:                   RX Options.         (line   42)
53448* mliw:                                  MN10300 Options.    (line   54)
53449* mllsc:                                 MIPS Options.       (line  299)
53450* mlocal-sdata:                          MIPS Options.       (line  401)
53451* mlock:                                 ARC Options.        (line   96)
53452* mlong-calls:                           Adapteva Epiphany Options.
53453                                                             (line   55)
53454* mlong-calls <1>:                       ARC Options.        (line  161)
53455* mlong-calls <2>:                       ARM Options.        (line  201)
53456* mlong-calls <3>:                       Blackfin Options.   (line  120)
53457* mlong-calls <4>:                       FRV Options.        (line  122)
53458* mlong-calls <5>:                       MIPS Options.       (line  529)
53459* mlong-calls <6>:                       V850 Options.       (line   10)
53460* mlong-double-128:                      i386 and x86-64 Options.
53461                                                             (line  407)
53462* mlong-double-128 <1>:                  S/390 and zSeries Options.
53463                                                             (line   29)
53464* mlong-double-64:                       i386 and x86-64 Options.
53465                                                             (line  407)
53466* mlong-double-64 <1>:                   S/390 and zSeries Options.
53467                                                             (line   29)
53468* mlong-double-80:                       i386 and x86-64 Options.
53469                                                             (line  407)
53470* mlong-jumps:                           V850 Options.       (line  108)
53471* mlong-load-store:                      HPPA Options.       (line   60)
53472* mlong32:                               MIPS Options.       (line  376)
53473* mlong64:                               MIPS Options.       (line  371)
53474* mlongcall:                             RS/6000 and PowerPC Options.
53475                                                             (line  753)
53476* mlongcalls:                            Xtensa Options.     (line   72)
53477* mloop:                                 V850 Options.       (line  121)
53478* mlow-64k:                              Blackfin Options.   (line   69)
53479* mlp64:                                 IA-64 Options.      (line  121)
53480* mlra:                                  ARC Options.        (line  241)
53481* mlra-priority-compact:                 ARC Options.        (line  249)
53482* mlra-priority-noncompact:              ARC Options.        (line  252)
53483* mlra-priority-none:                    ARC Options.        (line  246)
53484* MM:                                    Preprocessor Options.
53485                                                             (line  210)
53486* mm:                                    MeP Options.        (line   84)
53487* mmac:                                  CR16 Options.       (line    9)
53488* mmac <1>:                              Score Options.      (line   21)
53489* mmac-24:                               ARC Options.        (line  105)
53490* mmac-d16:                              ARC Options.        (line  101)
53491* mmac_24:                               ARC Options.        (line  376)
53492* mmac_d16:                              ARC Options.        (line  379)
53493* mmad:                                  MIPS Options.       (line  538)
53494* mmalloc64:                             VMS Options.        (line   17)
53495* mmax:                                  DEC Alpha Options.  (line  163)
53496* mmax-constant-size:                    RX Options.         (line   82)
53497* mmax-stack-frame:                      CRIS Options.       (line   23)
53498* mmcount-ra-address:                    MIPS Options.       (line  768)
53499* mmcu:                                  AVR Options.        (line    9)
53500* mmcu <1>:                              MIPS Options.       (line  359)
53501* mmcu=:                                 MSP430 Options.     (line   14)
53502* MMD:                                   Preprocessor Options.
53503                                                             (line  292)
53504* mmedia:                                FRV Options.        (line   56)
53505* mmedium-calls:                         ARC Options.        (line  165)
53506* mmemcpy:                               MicroBlaze Options. (line   13)
53507* mmemcpy <1>:                           MIPS Options.       (line  523)
53508* mmemcpy-strategy=STRATEGY:             i386 and x86-64 Options.
53509                                                             (line  871)
53510* mmemory-latency:                       DEC Alpha Options.  (line  268)
53511* mmemory-model:                         SPARC Options.      (line  289)
53512* mmemset-strategy=STRATEGY:             i386 and x86-64 Options.
53513                                                             (line  883)
53514* mmfcrf:                                RS/6000 and PowerPC Options.
53515                                                             (line   27)
53516* mmfpgpr:                               RS/6000 and PowerPC Options.
53517                                                             (line   27)
53518* mmicromips:                            MIPS Options.       (line  347)
53519* mminimal-toc:                          RS/6000 and PowerPC Options.
53520                                                             (line  285)
53521* mminmax:                               MeP Options.        (line   87)
53522* mmixed-code:                           ARC Options.        (line  264)
53523* mmmx:                                  i386 and x86-64 Options.
53524                                                             (line  629)
53525* mmodel=large:                          M32R/D Options.     (line   33)
53526* mmodel=medium:                         M32R/D Options.     (line   27)
53527* mmodel=small:                          M32R/D Options.     (line   18)
53528* mmovbe:                                i386 and x86-64 Options.
53529                                                             (line  715)
53530* mmt:                                   MIPS Options.       (line  355)
53531* mmul:                                  RL78 Options.       (line   13)
53532* mmul-bug-workaround:                   CRIS Options.       (line   32)
53533* mmul32x16:                             ARC Options.        (line   51)
53534* mmul64:                                ARC Options.        (line   54)
53535* mmuladd:                               FRV Options.        (line   64)
53536* mmulhw:                                RS/6000 and PowerPC Options.
53537                                                             (line  438)
53538* mmult:                                 MeP Options.        (line   90)
53539* mmult-bug:                             MN10300 Options.    (line    9)
53540* mmultcost:                             ARC Options.        (line  326)
53541* mmulti-cond-exec:                      FRV Options.        (line  215)
53542* mmulticore:                            Blackfin Options.   (line  141)
53543* mmultiple:                             RS/6000 and PowerPC Options.
53544                                                             (line  388)
53545* mmvcle:                                S/390 and zSeries Options.
53546                                                             (line  104)
53547* mmvme:                                 RS/6000 and PowerPC Options.
53548                                                             (line  658)
53549* mn:                                    H8/300 Options.     (line   20)
53550* mnan=2008:                             MIPS Options.       (line  280)
53551* mnan=legacy:                           MIPS Options.       (line  280)
53552* mneon-for-64bits:                      ARM Options.        (line  345)
53553* mnested-cond-exec:                     FRV Options.        (line  230)
53554* mnhwloop:                              Score Options.      (line   15)
53555* mno-16-bit:                            NDS32 Options.      (line   42)
53556* mno-3dnow:                             i386 and x86-64 Options.
53557                                                             (line  629)
53558* mno-4byte-functions:                   MCore Options.      (line   27)
53559* mno-8byte-align:                       V850 Options.       (line  170)
53560* mno-abicalls:                          MIPS Options.       (line  162)
53561* mno-abshi:                             PDP-11 Options.     (line   58)
53562* mno-ac0:                               PDP-11 Options.     (line   20)
53563* mno-address-space-conversion:          SPU Options.        (line   68)
53564* mno-align-double:                      i386 and x86-64 Options.
53565                                                             (line  366)
53566* mno-align-int:                         M680x0 Options.     (line  263)
53567* mno-align-loops:                       M32R/D Options.     (line   76)
53568* mno-align-stringops:                   i386 and x86-64 Options.
53569                                                             (line  837)
53570* mno-altivec:                           RS/6000 and PowerPC Options.
53571                                                             (line  132)
53572* mno-am33:                              MN10300 Options.    (line   20)
53573* mno-app-regs:                          SPARC Options.      (line   10)
53574* mno-app-regs <1>:                      V850 Options.       (line  185)
53575* mno-as100-syntax:                      RX Options.         (line   76)
53576* mno-atomic-updates:                    SPU Options.        (line   83)
53577* mno-avoid-indexed-addresses:           RS/6000 and PowerPC Options.
53578                                                             (line  420)
53579* mno-backchain:                         S/390 and zSeries Options.
53580                                                             (line   35)
53581* mno-base-addresses:                    MMIX Options.       (line   53)
53582* mno-bit-align:                         RS/6000 and PowerPC Options.
53583                                                             (line  452)
53584* mno-bitfield:                          M680x0 Options.     (line  227)
53585* mno-branch-likely:                     MIPS Options.       (line  708)
53586* mno-branch-predict:                    MMIX Options.       (line   48)
53587* mno-brcc:                              ARC Options.        (line  201)
53588* mno-bwx:                               DEC Alpha Options.  (line  163)
53589* mno-bypass-cache:                      Nios II Options.    (line   34)
53590* mno-cache-volatile:                    Nios II Options.    (line   40)
53591* mno-callgraph-data:                    MCore Options.      (line   31)
53592* mno-cbcond:                            SPARC Options.      (line  223)
53593* mno-check-zero-division:               MIPS Options.       (line  503)
53594* mno-cix:                               DEC Alpha Options.  (line  163)
53595* mno-clearbss:                          MicroBlaze Options. (line   16)
53596* mno-cmov:                              NDS32 Options.      (line   24)
53597* mno-cmpb:                              RS/6000 and PowerPC Options.
53598                                                             (line   27)
53599* mno-cond-exec:                         ARC Options.        (line  213)
53600* mno-cond-exec <1>:                     FRV Options.        (line  194)
53601* mno-cond-move:                         FRV Options.        (line  166)
53602* mno-const-align:                       CRIS Options.       (line   55)
53603* mno-const16:                           Xtensa Options.     (line   10)
53604* mno-crt0:                              MN10300 Options.    (line   43)
53605* mno-crt0 <1>:                          Moxie Options.      (line   14)
53606* mno-crypto:                            RS/6000 and PowerPC Options.
53607                                                             (line  220)
53608* mno-csync-anomaly:                     Blackfin Options.   (line   65)
53609* mno-custom-INSN:                       Nios II Options.    (line   61)
53610* mno-data-align:                        CRIS Options.       (line   55)
53611* mno-debug:                             S/390 and zSeries Options.
53612                                                             (line  110)
53613* mno-default:                           i386 and x86-64 Options.
53614                                                             (line  668)
53615* mno-direct-move:                       RS/6000 and PowerPC Options.
53616                                                             (line  226)
53617* mno-disable-callt:                     V850 Options.       (line   92)
53618* mno-div:                               M680x0 Options.     (line  206)
53619* mno-div <1>:                           MCore Options.      (line   15)
53620* mno-dlmzb:                             RS/6000 and PowerPC Options.
53621                                                             (line  445)
53622* mno-double:                            FRV Options.        (line   52)
53623* mno-dpfp-lrsr:                         ARC Options.        (line   39)
53624* mno-dsp:                               MIPS Options.       (line  313)
53625* mno-dspr2:                             MIPS Options.       (line  319)
53626* mno-dwarf2-asm:                        IA-64 Options.      (line   94)
53627* mno-dword:                             FRV Options.        (line   44)
53628* mno-eabi:                              RS/6000 and PowerPC Options.
53629                                                             (line  682)
53630* mno-early-stop-bits:                   IA-64 Options.      (line  100)
53631* mno-eflags:                            FRV Options.        (line  155)
53632* mno-embedded-data:                     MIPS Options.       (line  450)
53633* mno-ep:                                V850 Options.       (line   16)
53634* mno-epilogue-cfi:                      ARC Options.        (line  158)
53635* mno-epsilon:                           MMIX Options.       (line   15)
53636* mno-eva:                               MIPS Options.       (line  363)
53637* mno-explicit-relocs:                   DEC Alpha Options.  (line  176)
53638* mno-explicit-relocs <1>:               MIPS Options.       (line  494)
53639* mno-exr:                               H8/300 Options.     (line   33)
53640* mno-extern-sdata:                      MIPS Options.       (line  413)
53641* mno-fancy-math-387:                    i386 and x86-64 Options.
53642                                                             (line  356)
53643* mno-fast-sw-div:                       Nios II Options.    (line   46)
53644* mno-faster-structs:                    SPARC Options.      (line   91)
53645* mno-fix:                               DEC Alpha Options.  (line  163)
53646* mno-fix-24k:                           MIPS Options.       (line  567)
53647* mno-fix-r10000:                        MIPS Options.       (line  589)
53648* mno-fix-r4000:                         MIPS Options.       (line  573)
53649* mno-fix-r4400:                         MIPS Options.       (line  583)
53650* mno-flat:                              SPARC Options.      (line   22)
53651* mno-float:                             MIPS Options.       (line  241)
53652* mno-float32:                           PDP-11 Options.     (line   48)
53653* mno-float64:                           PDP-11 Options.     (line   52)
53654* mno-flush-func:                        M32R/D Options.     (line   98)
53655* mno-flush-trap:                        M32R/D Options.     (line   90)
53656* mno-fmaf:                              SPARC Options.      (line  237)
53657* mno-fp-in-toc:                         RS/6000 and PowerPC Options.
53658                                                             (line  285)
53659* mno-fp-regs:                           DEC Alpha Options.  (line   25)
53660* mno-fp-ret-in-387:                     i386 and x86-64 Options.
53661                                                             (line  346)
53662* mno-fprnd:                             RS/6000 and PowerPC Options.
53663                                                             (line   27)
53664* mno-fpu:                               SPARC Options.      (line   39)
53665* mno-fsca:                              SH Options.         (line  484)
53666* mno-fsrra:                             SH Options.         (line  493)
53667* mno-fused-madd:                        IA-64 Options.      (line   88)
53668* mno-fused-madd <1>:                    MIPS Options.       (line  550)
53669* mno-fused-madd <2>:                    RS/6000 and PowerPC Options.
53670                                                             (line  429)
53671* mno-fused-madd <3>:                    S/390 and zSeries Options.
53672                                                             (line  135)
53673* mno-fused-madd <4>:                    SH Options.         (line  475)
53674* mno-fused-madd <5>:                    Xtensa Options.     (line   19)
53675* mno-gnu-as:                            IA-64 Options.      (line   18)
53676* mno-gnu-ld:                            IA-64 Options.      (line   23)
53677* mno-gotplt:                            CRIS Options.       (line   81)
53678* mno-gp-direct:                         NDS32 Options.      (line   48)
53679* mno-gpopt:                             MIPS Options.       (line  435)
53680* mno-gpopt <1>:                         Nios II Options.    (line   15)
53681* mno-hard-dfp:                          RS/6000 and PowerPC Options.
53682                                                             (line   27)
53683* mno-hard-dfp <1>:                      S/390 and zSeries Options.
53684                                                             (line   20)
53685* mno-hardlit:                           MCore Options.      (line   10)
53686* mno-hw-div:                            Nios II Options.    (line   55)
53687* mno-hw-mul:                            Nios II Options.    (line   55)
53688* mno-hw-mulx:                           Nios II Options.    (line   55)
53689* mno-id-shared-library:                 Blackfin Options.   (line   87)
53690* mno-ieee:                              SH Options.         (line  186)
53691* mno-ieee-fp:                           i386 and x86-64 Options.
53692                                                             (line  328)
53693* mno-imadd:                             MIPS Options.       (line  543)
53694* mno-inline-float-divide:               IA-64 Options.      (line   62)
53695* mno-inline-int-divide:                 IA-64 Options.      (line   73)
53696* mno-inline-sqrt:                       IA-64 Options.      (line   84)
53697* mno-int16:                             PDP-11 Options.     (line   44)
53698* mno-int32:                             PDP-11 Options.     (line   40)
53699* mno-interlink-compressed:              MIPS Options.       (line  117)
53700* mno-interlink-mips16:                  MIPS Options.       (line  129)
53701* mno-interrupts:                        AVR Options.        (line  167)
53702* mno-isel:                              RS/6000 and PowerPC Options.
53703                                                             (line  191)
53704* mno-knuthdiv:                          MMIX Options.       (line   32)
53705* mno-leaf-id-shared-library:            Blackfin Options.   (line   97)
53706* mno-libfuncs:                          MMIX Options.       (line   10)
53707* mno-llsc:                              MIPS Options.       (line  299)
53708* mno-local-sdata:                       MIPS Options.       (line  401)
53709* mno-long-calls:                        ARM Options.        (line  201)
53710* mno-long-calls <1>:                    Blackfin Options.   (line  120)
53711* mno-long-calls <2>:                    HPPA Options.       (line  130)
53712* mno-long-calls <3>:                    MIPS Options.       (line  529)
53713* mno-long-calls <4>:                    V850 Options.       (line   10)
53714* mno-long-jumps:                        V850 Options.       (line  108)
53715* mno-longcall:                          RS/6000 and PowerPC Options.
53716                                                             (line  753)
53717* mno-longcalls:                         Xtensa Options.     (line   72)
53718* mno-low-64k:                           Blackfin Options.   (line   73)
53719* mno-lsim:                              FR30 Options.       (line   14)
53720* mno-lsim <1>:                          MCore Options.      (line   46)
53721* mno-mad:                               MIPS Options.       (line  538)
53722* mno-max:                               DEC Alpha Options.  (line  163)
53723* mno-mcount-ra-address:                 MIPS Options.       (line  768)
53724* mno-mcu:                               MIPS Options.       (line  359)
53725* mno-mdmx:                              MIPS Options.       (line  336)
53726* mno-media:                             FRV Options.        (line   60)
53727* mno-memcpy:                            MIPS Options.       (line  523)
53728* mno-mfcrf:                             RS/6000 and PowerPC Options.
53729                                                             (line   27)
53730* mno-mfpgpr:                            RS/6000 and PowerPC Options.
53731                                                             (line   27)
53732* mno-millicode:                         ARC Options.        (line  255)
53733* mno-mips16:                            MIPS Options.       (line  102)
53734* mno-mips3d:                            MIPS Options.       (line  342)
53735* mno-mmicromips:                        MIPS Options.       (line  347)
53736* mno-mmx:                               i386 and x86-64 Options.
53737                                                             (line  629)
53738* mno-mpy:                               ARC Options.        (line   48)
53739* mno-mt:                                MIPS Options.       (line  355)
53740* mno-mul-bug-workaround:                CRIS Options.       (line   32)
53741* mno-muladd:                            FRV Options.        (line   68)
53742* mno-mulhw:                             RS/6000 and PowerPC Options.
53743                                                             (line  438)
53744* mno-mult-bug:                          MN10300 Options.    (line   13)
53745* mno-multi-cond-exec:                   FRV Options.        (line  223)
53746* mno-multiple:                          RS/6000 and PowerPC Options.
53747                                                             (line  388)
53748* mno-mvcle:                             S/390 and zSeries Options.
53749                                                             (line  104)
53750* mno-nested-cond-exec:                  FRV Options.        (line  237)
53751* mno-omit-leaf-frame-pointer:           AArch64 Options.    (line   54)
53752* mno-optimize-membar:                   FRV Options.        (line  249)
53753* mno-opts:                              MeP Options.        (line   93)
53754* mno-pack:                              FRV Options.        (line  151)
53755* mno-packed-stack:                      S/390 and zSeries Options.
53756                                                             (line   54)
53757* mno-paired:                            RS/6000 and PowerPC Options.
53758                                                             (line  205)
53759* mno-paired-single:                     MIPS Options.       (line  330)
53760* mno-perf-ext:                          NDS32 Options.      (line   30)
53761* mno-pic:                               IA-64 Options.      (line   26)
53762* mno-pid:                               RX Options.         (line  117)
53763* mno-plt:                               MIPS Options.       (line  189)
53764* mno-popc:                              SPARC Options.      (line  230)
53765* mno-popcntb:                           RS/6000 and PowerPC Options.
53766                                                             (line   27)
53767* mno-popcntd:                           RS/6000 and PowerPC Options.
53768                                                             (line   27)
53769* mno-postinc:                           Adapteva Epiphany Options.
53770                                                             (line  109)
53771* mno-postmodify:                        Adapteva Epiphany Options.
53772                                                             (line  109)
53773* mno-power8-fusion:                     RS/6000 and PowerPC Options.
53774                                                             (line  232)
53775* mno-power8-vector:                     RS/6000 and PowerPC Options.
53776                                                             (line  238)
53777* mno-powerpc-gfxopt:                    RS/6000 and PowerPC Options.
53778                                                             (line   27)
53779* mno-powerpc-gpopt:                     RS/6000 and PowerPC Options.
53780                                                             (line   27)
53781* mno-powerpc64:                         RS/6000 and PowerPC Options.
53782                                                             (line   27)
53783* mno-prolog-function:                   V850 Options.       (line   23)
53784* mno-prologue-epilogue:                 CRIS Options.       (line   71)
53785* mno-prototype:                         RS/6000 and PowerPC Options.
53786                                                             (line  642)
53787* mno-push-args:                         i386 and x86-64 Options.
53788                                                             (line  815)
53789* mno-quad-memory:                       RS/6000 and PowerPC Options.
53790                                                             (line  245)
53791* mno-quad-memory-atomic:                RS/6000 and PowerPC Options.
53792                                                             (line  251)
53793* mno-red-zone:                          i386 and x86-64 Options.
53794                                                             (line  957)
53795* mno-register-names:                    IA-64 Options.      (line   37)
53796* mno-regnames:                          RS/6000 and PowerPC Options.
53797                                                             (line  747)
53798* mno-relax:                             V850 Options.       (line  103)
53799* mno-relax-immediate:                   MCore Options.      (line   19)
53800* mno-relocatable:                       RS/6000 and PowerPC Options.
53801                                                             (line  468)
53802* mno-relocatable-lib:                   RS/6000 and PowerPC Options.
53803                                                             (line  479)
53804* mno-renesas:                           SH Options.         (line  176)
53805* mno-round-nearest:                     Adapteva Epiphany Options.
53806                                                             (line   51)
53807* mno-rtd:                               M680x0 Options.     (line  258)
53808* mno-scc:                               FRV Options.        (line  180)
53809* mno-sched-ar-data-spec:                IA-64 Options.      (line  134)
53810* mno-sched-ar-in-data-spec:             IA-64 Options.      (line  155)
53811* mno-sched-br-data-spec:                IA-64 Options.      (line  128)
53812* mno-sched-br-in-data-spec:             IA-64 Options.      (line  148)
53813* mno-sched-control-spec:                IA-64 Options.      (line  140)
53814* mno-sched-count-spec-in-critical-path: IA-64 Options.      (line  182)
53815* mno-sched-in-control-spec:             IA-64 Options.      (line  162)
53816* mno-sched-prefer-non-control-spec-insns: IA-64 Options.    (line  175)
53817* mno-sched-prefer-non-data-spec-insns:  IA-64 Options.      (line  168)
53818* mno-sched-prolog:                      ARM Options.        (line   33)
53819* mno-sdata:                             ARC Options.        (line  174)
53820* mno-sdata <1>:                         IA-64 Options.      (line   42)
53821* mno-sdata <2>:                         RS/6000 and PowerPC Options.
53822                                                             (line  728)
53823* mno-sep-data:                          Blackfin Options.   (line  115)
53824* mno-serialize-volatile:                Xtensa Options.     (line   35)
53825* mno-short:                             M680x0 Options.     (line  222)
53826* mno-side-effects:                      CRIS Options.       (line   46)
53827* mno-sim:                               RX Options.         (line   71)
53828* mno-single-exit:                       MMIX Options.       (line   65)
53829* mno-slow-bytes:                        MCore Options.      (line   35)
53830* mno-small-exec:                        S/390 and zSeries Options.
53831                                                             (line   79)
53832* mno-smartmips:                         MIPS Options.       (line  326)
53833* mno-soft-cmpsf:                        Adapteva Epiphany Options.
53834                                                             (line   29)
53835* mno-soft-float:                        DEC Alpha Options.  (line   10)
53836* mno-space-regs:                        HPPA Options.       (line   39)
53837* mno-spe:                               RS/6000 and PowerPC Options.
53838                                                             (line  200)
53839* mno-specld-anomaly:                    Blackfin Options.   (line   55)
53840* mno-split-addresses:                   MIPS Options.       (line  488)
53841* mno-sse:                               i386 and x86-64 Options.
53842                                                             (line  629)
53843* mno-stack-align:                       CRIS Options.       (line   55)
53844* mno-stack-bias:                        SPARC Options.      (line  313)
53845* mno-strict-align:                      M680x0 Options.     (line  283)
53846* mno-strict-align <1>:                  RS/6000 and PowerPC Options.
53847                                                             (line  463)
53848* mno-string:                            RS/6000 and PowerPC Options.
53849                                                             (line  399)
53850* mno-sum-in-toc:                        RS/6000 and PowerPC Options.
53851                                                             (line  285)
53852* mno-sym32:                             MIPS Options.       (line  386)
53853* mno-target-align:                      Xtensa Options.     (line   59)
53854* mno-text-section-literals:             Xtensa Options.     (line   47)
53855* mno-tls-markers:                       RS/6000 and PowerPC Options.
53856                                                             (line  785)
53857* mno-toc:                               RS/6000 and PowerPC Options.
53858                                                             (line  488)
53859* mno-toplevel-symbols:                  MMIX Options.       (line   39)
53860* mno-tpf-trace:                         S/390 and zSeries Options.
53861                                                             (line  129)
53862* mno-unaligned-access:                  ARM Options.        (line  332)
53863* mno-unaligned-doubles:                 SPARC Options.      (line   73)
53864* mno-uninit-const-in-rodata:            MIPS Options.       (line  458)
53865* mno-update:                            RS/6000 and PowerPC Options.
53866                                                             (line  410)
53867* mno-user-mode:                         SPARC Options.      (line   85)
53868* mno-usermode:                          SH Options.         (line  296)
53869* mno-v3push:                            NDS32 Options.      (line   36)
53870* mno-v8plus:                            SPARC Options.      (line  194)
53871* mno-vect-double:                       Adapteva Epiphany Options.
53872                                                             (line  115)
53873* mno-virt:                              MIPS Options.       (line  367)
53874* mno-vis:                               SPARC Options.      (line  201)
53875* mno-vis2:                              SPARC Options.      (line  207)
53876* mno-vis3:                              SPARC Options.      (line  215)
53877* mno-vliw-branch:                       FRV Options.        (line  208)
53878* mno-volatile-asm-stop:                 IA-64 Options.      (line   32)
53879* mno-volatile-cache:                    ARC Options.        (line  188)
53880* mno-vrsave:                            RS/6000 and PowerPC Options.
53881                                                             (line  170)
53882* mno-vsx:                               RS/6000 and PowerPC Options.
53883                                                             (line  214)
53884* mno-warn-multiple-fast-interrupts:     RX Options.         (line  143)
53885* mno-wide-bitfields:                    MCore Options.      (line   23)
53886* mno-xgot:                              M680x0 Options.     (line  315)
53887* mno-xgot <1>:                          MIPS Options.       (line  199)
53888* mno-xl-compat:                         RS/6000 and PowerPC Options.
53889                                                             (line  320)
53890* mno-zdcbranch:                         SH Options.         (line  466)
53891* mno-zero-extend:                       MMIX Options.       (line   26)
53892* mnobitfield:                           M680x0 Options.     (line  227)
53893* mnoliw:                                MN10300 Options.    (line   59)
53894* mnomacsave:                            SH Options.         (line  181)
53895* mnop-fun-dllimport:                    i386 and x86-64 Windows Options.
53896                                                             (line   22)
53897* mnops:                                 Adapteva Epiphany Options.
53898                                                             (line   26)
53899* mnorm:                                 ARC Options.        (line   58)
53900* mnosetlb:                              MN10300 Options.    (line   69)
53901* mnosplit-lohi:                         Adapteva Epiphany Options.
53902                                                             (line  109)
53903* momit-leaf-frame-pointer:              AArch64 Options.    (line   54)
53904* momit-leaf-frame-pointer <1>:          Blackfin Options.   (line   43)
53905* momit-leaf-frame-pointer <2>:          i386 and x86-64 Options.
53906                                                             (line  887)
53907* mone-byte-bool:                        Darwin Options.     (line   90)
53908* moptimize-membar:                      FRV Options.        (line  244)
53909* MP:                                    Preprocessor Options.
53910                                                             (line  239)
53911* mpa-risc-1-0:                          HPPA Options.       (line   19)
53912* mpa-risc-1-1:                          HPPA Options.       (line   19)
53913* mpa-risc-2-0:                          HPPA Options.       (line   19)
53914* mpack:                                 FRV Options.        (line  147)
53915* mpacked-stack:                         S/390 and zSeries Options.
53916                                                             (line   54)
53917* mpadstruct:                            SH Options.         (line  210)
53918* mpaired:                               RS/6000 and PowerPC Options.
53919                                                             (line  205)
53920* mpaired-single:                        MIPS Options.       (line  330)
53921* mpc32:                                 i386 and x86-64 Options.
53922                                                             (line  484)
53923* mpc64:                                 i386 and x86-64 Options.
53924                                                             (line  484)
53925* mpc80:                                 i386 and x86-64 Options.
53926                                                             (line  484)
53927* mpcrel:                                M680x0 Options.     (line  275)
53928* mpdebug:                               CRIS Options.       (line   36)
53929* mpe:                                   RS/6000 and PowerPC Options.
53930                                                             (line  339)
53931* mpe-aligned-commons:                   i386 and x86-64 Windows Options.
53932                                                             (line   59)
53933* mperf-ext:                             NDS32 Options.      (line   27)
53934* mpic-data-is-text-relative:            ARM Options.        (line  238)
53935* mpic-register:                         ARM Options.        (line  231)
53936* mpid:                                  RX Options.         (line  117)
53937* mplt:                                  MIPS Options.       (line  189)
53938* mpointers-to-nested-functions:         RS/6000 and PowerPC Options.
53939                                                             (line  868)
53940* mpoke-function-name:                   ARM Options.        (line  244)
53941* mpopc:                                 SPARC Options.      (line  230)
53942* mpopcntb:                              RS/6000 and PowerPC Options.
53943                                                             (line   27)
53944* mpopcntd:                              RS/6000 and PowerPC Options.
53945                                                             (line   27)
53946* mportable-runtime:                     HPPA Options.       (line   65)
53947* mpower8-fusion:                        RS/6000 and PowerPC Options.
53948                                                             (line  232)
53949* mpower8-vector:                        RS/6000 and PowerPC Options.
53950                                                             (line  238)
53951* mpowerpc-gfxopt:                       RS/6000 and PowerPC Options.
53952                                                             (line   27)
53953* mpowerpc-gpopt:                        RS/6000 and PowerPC Options.
53954                                                             (line   27)
53955* mpowerpc64:                            RS/6000 and PowerPC Options.
53956                                                             (line   27)
53957* mprefer-avx128:                        i386 and x86-64 Options.
53958                                                             (line  692)
53959* mprefer-short-insn-regs:               Adapteva Epiphany Options.
53960                                                             (line   13)
53961* mprefergot:                            SH Options.         (line  290)
53962* mpreferred-stack-boundary:             i386 and x86-64 Options.
53963                                                             (line  514)
53964* mpretend-cmove:                        SH Options.         (line  502)
53965* mprioritize-restricted-insns:          RS/6000 and PowerPC Options.
53966                                                             (line  517)
53967* mprolog-function:                      V850 Options.       (line   23)
53968* mprologue-epilogue:                    CRIS Options.       (line   71)
53969* mprototype:                            RS/6000 and PowerPC Options.
53970                                                             (line  642)
53971* mpt-fixed:                             SH Options.         (line  429)
53972* mpush-args:                            i386 and x86-64 Options.
53973                                                             (line  815)
53974* MQ:                                    Preprocessor Options.
53975                                                             (line  266)
53976* mq-class:                              ARC Options.        (line  269)
53977* mquad-memory:                          RS/6000 and PowerPC Options.
53978                                                             (line  245)
53979* mquad-memory-atomic:                   RS/6000 and PowerPC Options.
53980                                                             (line  251)
53981* mr10k-cache-barrier:                   MIPS Options.       (line  630)
53982* mRcq:                                  ARC Options.        (line  273)
53983* mRcw:                                  ARC Options.        (line  277)
53984* mrecip:                                i386 and x86-64 Options.
53985                                                             (line  725)
53986* mrecip <1>:                            RS/6000 and PowerPC Options.
53987                                                             (line  797)
53988* mrecip-precision:                      RS/6000 and PowerPC Options.
53989                                                             (line  832)
53990* mrecip=opt:                            i386 and x86-64 Options.
53991                                                             (line  747)
53992* mrecip=opt <1>:                        RS/6000 and PowerPC Options.
53993                                                             (line  810)
53994* mreduced-regs:                         NDS32 Options.      (line   15)
53995* mregister-names:                       IA-64 Options.      (line   37)
53996* mregnames:                             RS/6000 and PowerPC Options.
53997                                                             (line  747)
53998* mregparm:                              i386 and x86-64 Options.
53999                                                             (line  451)
54000* mrelax:                                AVR Options.        (line  171)
54001* mrelax <1>:                            H8/300 Options.     (line    9)
54002* mrelax <2>:                            MN10300 Options.    (line   46)
54003* mrelax <3>:                            MSP430 Options.     (line   51)
54004* mrelax <4>:                            NDS32 Options.      (line   76)
54005* mrelax <5>:                            RX Options.         (line   95)
54006* mrelax <6>:                            SH Options.         (line  158)
54007* mrelax <7>:                            V850 Options.       (line  103)
54008* mrelax-immediate:                      MCore Options.      (line   19)
54009* mrelax-pic-calls:                      MIPS Options.       (line  755)
54010* mrelocatable:                          RS/6000 and PowerPC Options.
54011                                                             (line  468)
54012* mrelocatable-lib:                      RS/6000 and PowerPC Options.
54013                                                             (line  479)
54014* mrenesas:                              SH Options.         (line  173)
54015* mrepeat:                               MeP Options.        (line   96)
54016* mrestrict-it:                          ARM Options.        (line  356)
54017* mreturn-pointer-on-d0:                 MN10300 Options.    (line   36)
54018* mrh850-abi:                            V850 Options.       (line  127)
54019* mrtd:                                  i386 and x86-64 Options.
54020                                                             (line  427)
54021* mrtd <1>:                              M680x0 Options.     (line  236)
54022* mrtd <2>:                              Function Attributes.
54023                                                             (line  209)
54024* mrtp:                                  VxWorks Options.    (line   11)
54025* mrtsc:                                 ARC Options.        (line  109)
54026* ms:                                    H8/300 Options.     (line   17)
54027* ms <1>:                                MeP Options.        (line  100)
54028* ms2600:                                H8/300 Options.     (line   24)
54029* msafe-dma:                             SPU Options.        (line   18)
54030* msafe-hints:                           SPU Options.        (line  112)
54031* msahf:                                 i386 and x86-64 Options.
54032                                                             (line  705)
54033* msatur:                                MeP Options.        (line  105)
54034* msave-acc-in-interrupts:               RX Options.         (line  109)
54035* msave-toc-indirect:                    RS/6000 and PowerPC Options.
54036                                                             (line  880)
54037* mscc:                                  FRV Options.        (line  173)
54038* msched-ar-data-spec:                   IA-64 Options.      (line  134)
54039* msched-ar-in-data-spec:                IA-64 Options.      (line  155)
54040* msched-br-data-spec:                   IA-64 Options.      (line  128)
54041* msched-br-in-data-spec:                IA-64 Options.      (line  148)
54042* msched-control-spec:                   IA-64 Options.      (line  140)
54043* msched-costly-dep:                     RS/6000 and PowerPC Options.
54044                                                             (line  524)
54045* msched-count-spec-in-critical-path:    IA-64 Options.      (line  182)
54046* msched-fp-mem-deps-zero-cost:          IA-64 Options.      (line  198)
54047* msched-in-control-spec:                IA-64 Options.      (line  162)
54048* msched-max-memory-insns:               IA-64 Options.      (line  207)
54049* msched-max-memory-insns-hard-limit:    IA-64 Options.      (line  213)
54050* msched-prefer-non-control-spec-insns:  IA-64 Options.      (line  175)
54051* msched-prefer-non-data-spec-insns:     IA-64 Options.      (line  168)
54052* msched-spec-ldc:                       IA-64 Options.      (line  187)
54053* msched-spec-ldc <1>:                   IA-64 Options.      (line  190)
54054* msched-stop-bits-after-every-cycle:    IA-64 Options.      (line  194)
54055* mschedule:                             HPPA Options.       (line   72)
54056* mscore5:                               Score Options.      (line   25)
54057* mscore5u:                              Score Options.      (line   28)
54058* mscore7:                               Score Options.      (line   31)
54059* mscore7d:                              Score Options.      (line   35)
54060* msda:                                  V850 Options.       (line   40)
54061* msdata:                                IA-64 Options.      (line   42)
54062* msdata <1>:                            RS/6000 and PowerPC Options.
54063                                                             (line  715)
54064* msdata=all:                            C6X Options.        (line   30)
54065* msdata=data:                           RS/6000 and PowerPC Options.
54066                                                             (line  720)
54067* msdata=default:                        C6X Options.        (line   22)
54068* msdata=default <1>:                    RS/6000 and PowerPC Options.
54069                                                             (line  715)
54070* msdata=eabi:                           RS/6000 and PowerPC Options.
54071                                                             (line  696)
54072* msdata=none:                           C6X Options.        (line   35)
54073* msdata=none <1>:                       M32R/D Options.     (line   40)
54074* msdata=none <2>:                       RS/6000 and PowerPC Options.
54075                                                             (line  728)
54076* msdata=sdata:                          M32R/D Options.     (line   49)
54077* msdata=sysv:                           RS/6000 and PowerPC Options.
54078                                                             (line  706)
54079* msdata=use:                            M32R/D Options.     (line   53)
54080* msdram:                                Blackfin Options.   (line  171)
54081* msdram <1>:                            MeP Options.        (line  110)
54082* msecure-plt:                           RS/6000 and PowerPC Options.
54083                                                             (line  180)
54084* msel-sched-dont-check-control-spec:    IA-64 Options.      (line  203)
54085* msep-data:                             Blackfin Options.   (line  109)
54086* mserialize-volatile:                   Xtensa Options.     (line   35)
54087* msetlb:                                MN10300 Options.    (line   64)
54088* mshared-library-id:                    Blackfin Options.   (line  102)
54089* mshort:                                M680x0 Options.     (line  216)
54090* msign-extend-enabled:                  LM32 Options.       (line   18)
54091* msim:                                  Blackfin Options.   (line   36)
54092* msim <1>:                              C6X Options.        (line   19)
54093* msim <2>:                              CR16 Options.       (line   18)
54094* msim <3>:                              M32C Options.       (line   13)
54095* msim <4>:                              MeP Options.        (line  114)
54096* msim <5>:                              MSP430 Options.     (line   40)
54097* msim <6>:                              RL78 Options.       (line    7)
54098* msim <7>:                              RS/6000 and PowerPC Options.
54099                                                             (line  652)
54100* msim <8>:                              RX Options.         (line   71)
54101* msim <9>:                              Xstormy16 Options.  (line    9)
54102* msimd:                                 ARC Options.        (line   71)
54103* msimnovec:                             MeP Options.        (line  117)
54104* msimple-fpu:                           RS/6000 and PowerPC Options.
54105                                                             (line  372)
54106* msingle-exit:                          MMIX Options.       (line   65)
54107* msingle-float:                         MIPS Options.       (line  251)
54108* msingle-float <1>:                     RS/6000 and PowerPC Options.
54109                                                             (line  368)
54110* msingle-pic-base:                      ARM Options.        (line  225)
54111* msingle-pic-base <1>:                  RS/6000 and PowerPC Options.
54112                                                             (line  511)
54113* msio:                                  HPPA Options.       (line   99)
54114* msize-level:                           ARC Options.        (line  281)
54115* mslow-bytes:                           MCore Options.      (line   35)
54116* mslow-flash-data:                      ARM Options.        (line  350)
54117* msmall:                                MSP430 Options.     (line   48)
54118* msmall-data:                           DEC Alpha Options.  (line  187)
54119* msmall-data-limit:                     RX Options.         (line   47)
54120* msmall-divides:                        MicroBlaze Options. (line   39)
54121* msmall-exec:                           S/390 and zSeries Options.
54122                                                             (line   79)
54123* msmall-mem:                            SPU Options.        (line   38)
54124* msmall-model:                          FR30 Options.       (line    9)
54125* msmall-text:                           DEC Alpha Options.  (line  205)
54126* msmall16:                              Adapteva Epiphany Options.
54127                                                             (line   66)
54128* msmallc:                               Nios II Options.    (line  226)
54129* msmartmips:                            MIPS Options.       (line  326)
54130* msoft-float:                           ARC Options.        (line   75)
54131* msoft-float <1>:                       DEC Alpha Options.  (line   10)
54132* msoft-float <2>:                       FRV Options.        (line   27)
54133* msoft-float <3>:                       HPPA Options.       (line   85)
54134* msoft-float <4>:                       i386 and x86-64 Options.
54135                                                             (line  333)
54136* msoft-float <5>:                       M680x0 Options.     (line  200)
54137* msoft-float <6>:                       MicroBlaze Options. (line    7)
54138* msoft-float <7>:                       MIPS Options.       (line  237)
54139* msoft-float <8>:                       PDP-11 Options.     (line   13)
54140* msoft-float <9>:                       RS/6000 and PowerPC Options.
54141                                                             (line  362)
54142* msoft-float <10>:                      S/390 and zSeries Options.
54143                                                             (line   11)
54144* msoft-float <11>:                      SPARC Options.      (line   39)
54145* msoft-float <12>:                      V850 Options.       (line  113)
54146* msoft-quad-float:                      SPARC Options.      (line   59)
54147* msp8:                                  AVR Options.        (line  185)
54148* mspace:                                V850 Options.       (line   30)
54149* mspe:                                  RS/6000 and PowerPC Options.
54150                                                             (line  200)
54151* mspecld-anomaly:                       Blackfin Options.   (line   50)
54152* mspfp:                                 ARC Options.        (line   62)
54153* mspfp-compact:                         ARC Options.        (line   63)
54154* mspfp-fast:                            ARC Options.        (line   67)
54155* mspfp_compact:                         ARC Options.        (line  382)
54156* mspfp_fast:                            ARC Options.        (line  385)
54157* msplit-addresses:                      MIPS Options.       (line  488)
54158* msplit-vecmove-early:                  Adapteva Epiphany Options.
54159                                                             (line  126)
54160* msse:                                  i386 and x86-64 Options.
54161                                                             (line  629)
54162* msse2avx:                              i386 and x86-64 Options.
54163                                                             (line  905)
54164* msseregparm:                           i386 and x86-64 Options.
54165                                                             (line  462)
54166* mstack-align:                          CRIS Options.       (line   55)
54167* mstack-bias:                           SPARC Options.      (line  313)
54168* mstack-check-l1:                       Blackfin Options.   (line   76)
54169* mstack-guard:                          S/390 and zSeries Options.
54170                                                             (line  154)
54171* mstack-increment:                      MCore Options.      (line   50)
54172* mstack-offset:                         Adapteva Epiphany Options.
54173                                                             (line   37)
54174* mstack-protector-guard=GUARD:          i386 and x86-64 Options.
54175                                                             (line  928)
54176* mstack-size:                           S/390 and zSeries Options.
54177                                                             (line  154)
54178* mstackrealign:                         i386 and x86-64 Options.
54179                                                             (line  505)
54180* mstdmain:                              SPU Options.        (line   44)
54181* mstrict-align:                         AArch64 Options.    (line   49)
54182* mstrict-align <1>:                     M680x0 Options.     (line  283)
54183* mstrict-align <2>:                     RS/6000 and PowerPC Options.
54184                                                             (line  463)
54185* mstrict-X:                             AVR Options.        (line  198)
54186* mstring:                               RS/6000 and PowerPC Options.
54187                                                             (line  399)
54188* mstringop-strategy=ALG:                i386 and x86-64 Options.
54189                                                             (line  853)
54190* mstructure-size-boundary:              ARM Options.        (line  182)
54191* msvr4-struct-return:                   RS/6000 and PowerPC Options.
54192                                                             (line  604)
54193* mswap:                                 ARC Options.        (line   82)
54194* mswape:                                ARC Options.        (line  114)
54195* msym32:                                MIPS Options.       (line  386)
54196* msynci:                                MIPS Options.       (line  740)
54197* msys-crt0:                             Nios II Options.    (line  230)
54198* msys-lib:                              Nios II Options.    (line  234)
54199* MT:                                    Preprocessor Options.
54200                                                             (line  251)
54201* mtarget-align:                         Xtensa Options.     (line   59)
54202* mtas:                                  SH Options.         (line  281)
54203* mtda:                                  V850 Options.       (line   34)
54204* mtelephony:                            ARC Options.        (line  119)
54205* mtext-section-literals:                Xtensa Options.     (line   47)
54206* mtf:                                   MeP Options.        (line  121)
54207* mthread:                               i386 and x86-64 Windows Options.
54208                                                             (line   26)
54209* mthreads:                              i386 and x86-64 Options.
54210                                                             (line  830)
54211* mthumb:                                ARM Options.        (line  266)
54212* mthumb-interwork:                      ARM Options.        (line   25)
54213* mtiny-stack:                           AVR Options.        (line  212)
54214* mtiny=:                                MeP Options.        (line  125)
54215* mTLS:                                  FRV Options.        (line   90)
54216* mtls:                                  FRV Options.        (line   94)
54217* mtls-dialect:                          ARM Options.        (line  308)
54218* mtls-dialect <1>:                      i386 and x86-64 Options.
54219                                                             (line  808)
54220* mtls-dialect=desc:                     AArch64 Options.    (line   58)
54221* mtls-dialect=traditional:              AArch64 Options.    (line   62)
54222* mtls-direct-seg-refs:                  i386 and x86-64 Options.
54223                                                             (line  895)
54224* mtls-markers:                          RS/6000 and PowerPC Options.
54225                                                             (line  785)
54226* mtls-size:                             IA-64 Options.      (line  112)
54227* mtoc:                                  RS/6000 and PowerPC Options.
54228                                                             (line  488)
54229* mtomcat-stats:                         FRV Options.        (line  254)
54230* mtoplevel-symbols:                     MMIX Options.       (line   39)
54231* mtp:                                   ARM Options.        (line  300)
54232* mtpcs-frame:                           ARM Options.        (line  273)
54233* mtpcs-leaf-frame:                      ARM Options.        (line  279)
54234* mtpf-trace:                            S/390 and zSeries Options.
54235                                                             (line  129)
54236* mtrap-precision:                       DEC Alpha Options.  (line  109)
54237* mtune:                                 AArch64 Options.    (line   90)
54238* mtune <1>:                             ARC Options.        (line  302)
54239* mtune <2>:                             ARC Options.        (line  388)
54240* mtune <3>:                             ARM Options.        (line   97)
54241* mtune <4>:                             CRIS Options.       (line   17)
54242* mtune <5>:                             DEC Alpha Options.  (line  259)
54243* mtune <6>:                             i386 and x86-64 Options.
54244                                                             (line  216)
54245* mtune <7>:                             IA-64 Options.      (line  116)
54246* mtune <8>:                             M680x0 Options.     (line   68)
54247* mtune <9>:                             MIPS Options.       (line   63)
54248* mtune <10>:                            MN10300 Options.    (line   30)
54249* mtune <11>:                            RS/6000 and PowerPC Options.
54250                                                             (line  110)
54251* mtune <12>:                            S/390 and zSeries Options.
54252                                                             (line  122)
54253* mtune <13>:                            SPARC Options.      (line  180)
54254* mtune-ctrl=FEATURE-LIST:               i386 and x86-64 Options.
54255                                                             (line  658)
54256* mucb-mcount:                           ARC Options.        (line  179)
54257* muclibc:                               GNU/Linux Options.  (line   13)
54258* muls:                                  Score Options.      (line   18)
54259* multcost:                              ARC Options.        (line  393)
54260* multcost=NUMBER:                       SH Options.         (line  303)
54261* multilib-library-pic:                  FRV Options.        (line  110)
54262* multiply-enabled:                      LM32 Options.       (line   15)
54263* multiply_defined:                      Darwin Options.     (line  196)
54264* multiply_defined_unused:               Darwin Options.     (line  196)
54265* multi_module:                          Darwin Options.     (line  196)
54266* munalign-prob-threshold:               ARC Options.        (line  330)
54267* munaligned-access:                     ARM Options.        (line  332)
54268* munaligned-doubles:                    SPARC Options.      (line   73)
54269* municode:                              i386 and x86-64 Windows Options.
54270                                                             (line   30)
54271* muninit-const-in-rodata:               MIPS Options.       (line  458)
54272* munix:                                 VAX Options.        (line    9)
54273* munix-asm:                             PDP-11 Options.     (line   68)
54274* munsafe-dma:                           SPU Options.        (line   18)
54275* mupdate:                               RS/6000 and PowerPC Options.
54276                                                             (line  410)
54277* muser-enabled:                         LM32 Options.       (line   21)
54278* muser-mode:                            SPARC Options.      (line   85)
54279* musermode:                             SH Options.         (line  296)
54280* mv3push:                               NDS32 Options.      (line   33)
54281* mv850:                                 V850 Options.       (line   49)
54282* mv850e:                                V850 Options.       (line   79)
54283* mv850e1:                               V850 Options.       (line   70)
54284* mv850e2:                               V850 Options.       (line   66)
54285* mv850e2v3:                             V850 Options.       (line   61)
54286* mv850e2v4:                             V850 Options.       (line   57)
54287* mv850e3v5:                             V850 Options.       (line   52)
54288* mv850es:                               V850 Options.       (line   75)
54289* mv8plus:                               SPARC Options.      (line  194)
54290* mveclibabi:                            i386 and x86-64 Options.
54291                                                             (line  776)
54292* mveclibabi <1>:                        RS/6000 and PowerPC Options.
54293                                                             (line  841)
54294* mvect8-ret-in-mem:                     i386 and x86-64 Options.
54295                                                             (line  472)
54296* mvirt:                                 MIPS Options.       (line  367)
54297* mvis:                                  SPARC Options.      (line  201)
54298* mvis2:                                 SPARC Options.      (line  207)
54299* mvis3:                                 SPARC Options.      (line  215)
54300* mvliw-branch:                          FRV Options.        (line  201)
54301* mvms-return-codes:                     VMS Options.        (line    9)
54302* mvolatile-asm-stop:                    IA-64 Options.      (line   32)
54303* mvolatile-cache:                       ARC Options.        (line  184)
54304* mvr4130-align:                         MIPS Options.       (line  729)
54305* mvrsave:                               RS/6000 and PowerPC Options.
54306                                                             (line  170)
54307* mvsx:                                  RS/6000 and PowerPC Options.
54308                                                             (line  214)
54309* mvxworks:                              RS/6000 and PowerPC Options.
54310                                                             (line  673)
54311* mvzeroupper:                           i386 and x86-64 Options.
54312                                                             (line  686)
54313* mwarn-cell-microcode:                  RS/6000 and PowerPC Options.
54314                                                             (line  176)
54315* mwarn-dynamicstack:                    S/390 and zSeries Options.
54316                                                             (line  148)
54317* mwarn-framesize:                       S/390 and zSeries Options.
54318                                                             (line  140)
54319* mwarn-multiple-fast-interrupts:        RX Options.         (line  143)
54320* mwarn-reloc:                           SPU Options.        (line   10)
54321* mwide-bitfields:                       MCore Options.      (line   23)
54322* mwin32:                                i386 and x86-64 Windows Options.
54323                                                             (line   35)
54324* mwindows:                              i386 and x86-64 Windows Options.
54325                                                             (line   41)
54326* mword-relocations:                     ARM Options.        (line  319)
54327* mwords-little-endian:                  ARM Options.        (line   66)
54328* mx32:                                  i386 and x86-64 Options.
54329                                                             (line  940)
54330* mxgot:                                 M680x0 Options.     (line  315)
54331* mxgot <1>:                             MIPS Options.       (line  199)
54332* mxilinx-fpu:                           RS/6000 and PowerPC Options.
54333                                                             (line  383)
54334* mxl-barrel-shift:                      MicroBlaze Options. (line   33)
54335* mxl-compat:                            RS/6000 and PowerPC Options.
54336                                                             (line  320)
54337* mxl-float-convert:                     MicroBlaze Options. (line   51)
54338* mxl-float-sqrt:                        MicroBlaze Options. (line   54)
54339* mxl-gp-opt:                            MicroBlaze Options. (line   45)
54340* mxl-multiply-high:                     MicroBlaze Options. (line   48)
54341* mxl-pattern-compare:                   MicroBlaze Options. (line   36)
54342* mxl-reorder:                           MicroBlaze Options. (line   63)
54343* mxl-soft-div:                          MicroBlaze Options. (line   30)
54344* mxl-soft-mul:                          MicroBlaze Options. (line   27)
54345* mxl-stack-check:                       MicroBlaze Options. (line   42)
54346* mxy:                                   ARC Options.        (line  124)
54347* myellowknife:                          RS/6000 and PowerPC Options.
54348                                                             (line  668)
54349* mzarch:                                S/390 and zSeries Options.
54350                                                             (line   94)
54351* mzda:                                  V850 Options.       (line   45)
54352* mzdcbranch:                            SH Options.         (line  466)
54353* mzero-extend:                          MMIX Options.       (line   26)
54354* no-canonical-prefixes:                 Overall Options.    (line  334)
54355* no-integrated-cpp:                     Preprocessor Options.
54356                                                             (line   34)
54357* no-sysroot-suffix:                     Directory Options.  (line  109)
54358* noall_load:                            Darwin Options.     (line  196)
54359* nocpp:                                 MIPS Options.       (line  562)
54360* nodefaultlibs:                         Link Options.       (line   62)
54361* nofixprebinding:                       Darwin Options.     (line  196)
54362* nofpu:                                 RX Options.         (line   17)
54363* nolibdld:                              HPPA Options.       (line  182)
54364* nomultidefs:                           Darwin Options.     (line  196)
54365* non-static:                            VxWorks Options.    (line   16)
54366* noprebind:                             Darwin Options.     (line  196)
54367* noseglinkedit:                         Darwin Options.     (line  196)
54368* nostartfiles:                          Link Options.       (line   57)
54369* nostdinc:                              Preprocessor Options.
54370                                                             (line  401)
54371* nostdinc++:                            C++ Dialect Options.
54372                                                             (line  396)
54373* nostdinc++ <1>:                        Preprocessor Options.
54374                                                             (line  406)
54375* nostdlib:                              Link Options.       (line   74)
54376* no_dead_strip_inits_and_terms:         Darwin Options.     (line  196)
54377* o:                                     Overall Options.    (line  192)
54378* O:                                     Optimize Options.   (line   39)
54379* o <1>:                                 Preprocessor Options.
54380                                                             (line   87)
54381* O0:                                    Optimize Options.   (line  129)
54382* O1:                                    Optimize Options.   (line   39)
54383* O2:                                    Optimize Options.   (line   83)
54384* O3:                                    Optimize Options.   (line  121)
54385* Ofast:                                 Optimize Options.   (line  143)
54386* Og:                                    Optimize Options.   (line  149)
54387* Os:                                    Optimize Options.   (line  133)
54388* p:                                     Debugging Options.  (line  415)
54389* P:                                     Preprocessor Options.
54390                                                             (line  647)
54391* pagezero_size:                         Darwin Options.     (line  196)
54392* param:                                 Optimize Options.   (line 2298)
54393* pass-exit-codes:                       Overall Options.    (line  150)
54394* pedantic:                              Standards.          (line   16)
54395* pedantic <1>:                          Warning Options.    (line   71)
54396* pedantic <2>:                          Preprocessor Options.
54397                                                             (line  175)
54398* pedantic <3>:                          C Extensions.       (line    6)
54399* pedantic <4>:                          Alternate Keywords. (line   30)
54400* pedantic <5>:                          Warnings and Errors.
54401                                                             (line   25)
54402* pedantic-errors:                       Standards.          (line   16)
54403* pedantic-errors <1>:                   Warning Options.    (line  112)
54404* pedantic-errors <2>:                   Preprocessor Options.
54405                                                             (line  180)
54406* pedantic-errors <3>:                   Non-bugs.           (line  216)
54407* pedantic-errors <4>:                   Warnings and Errors.
54408                                                             (line   25)
54409* pg:                                    Debugging Options.  (line  421)
54410* pie:                                   Link Options.       (line   99)
54411* pipe:                                  Overall Options.    (line  215)
54412* prebind:                               Darwin Options.     (line  196)
54413* prebind_all_twolevel_modules:          Darwin Options.     (line  196)
54414* print-file-name:                       Debugging Options.  (line 1349)
54415* print-libgcc-file-name:                Debugging Options.  (line 1383)
54416* print-multi-directory:                 Debugging Options.  (line 1355)
54417* print-multi-lib:                       Debugging Options.  (line 1360)
54418* print-multi-os-directory:              Debugging Options.  (line 1367)
54419* print-multiarch:                       Debugging Options.  (line 1376)
54420* print-objc-runtime-info:               Objective-C and Objective-C++ Dialect Options.
54421                                                             (line  203)
54422* print-prog-name:                       Debugging Options.  (line 1380)
54423* print-search-dirs:                     Debugging Options.  (line 1391)
54424* print-sysroot:                         Debugging Options.  (line 1404)
54425* print-sysroot-headers-suffix:          Debugging Options.  (line 1411)
54426* private_bundle:                        Darwin Options.     (line  196)
54427* pthread:                               RS/6000 and PowerPC Options.
54428                                                             (line  792)
54429* pthread <1>:                           Solaris 2 Options.  (line   36)
54430* pthreads:                              Solaris 2 Options.  (line   30)
54431* Q:                                     Debugging Options.  (line  427)
54432* Qn:                                    System V Options.   (line   18)
54433* Qy:                                    System V Options.   (line   14)
54434* rdynamic:                              Link Options.       (line  105)
54435* read_only_relocs:                      Darwin Options.     (line  196)
54436* remap:                                 Preprocessor Options.
54437                                                             (line  694)
54438* S:                                     Overall Options.    (line  175)
54439* S <1>:                                 Link Options.       (line   20)
54440* s:                                     Link Options.       (line  112)
54441* save-temps:                            Debugging Options.  (line 1258)
54442* save-temps=obj:                        Debugging Options.  (line 1284)
54443* sectalign:                             Darwin Options.     (line  196)
54444* sectcreate:                            Darwin Options.     (line  196)
54445* sectobjectsymbols:                     Darwin Options.     (line  196)
54446* sectobjectsymbols <1>:                 Darwin Options.     (line  196)
54447* sectorder:                             Darwin Options.     (line  196)
54448* seg1addr:                              Darwin Options.     (line  196)
54449* segaddr:                               Darwin Options.     (line  196)
54450* seglinkedit:                           Darwin Options.     (line  196)
54451* segprot:                               Darwin Options.     (line  196)
54452* segs_read_only_addr:                   Darwin Options.     (line  196)
54453* segs_read_only_addr <1>:               Darwin Options.     (line  196)
54454* segs_read_write_addr:                  Darwin Options.     (line  196)
54455* segs_read_write_addr <1>:              Darwin Options.     (line  196)
54456* seg_addr_table:                        Darwin Options.     (line  196)
54457* seg_addr_table_filename:               Darwin Options.     (line  196)
54458* shared:                                Link Options.       (line  120)
54459* shared-libgcc:                         Link Options.       (line  128)
54460* short-calls:                           Adapteva Epiphany Options.
54461                                                             (line   61)
54462* sim:                                   CRIS Options.       (line   95)
54463* sim2:                                  CRIS Options.       (line  101)
54464* single_module:                         Darwin Options.     (line  196)
54465* specs:                                 Directory Options.  (line   86)
54466* static:                                Link Options.       (line  116)
54467* static <1>:                            Darwin Options.     (line  196)
54468* static <2>:                            HPPA Options.       (line  186)
54469* static-libasan:                        Link Options.       (line  163)
54470* static-libgcc:                         Link Options.       (line  128)
54471* static-liblsan:                        Link Options.       (line  179)
54472* static-libstdc++:                      Link Options.       (line  196)
54473* static-libtsan:                        Link Options.       (line  171)
54474* static-libubsan:                       Link Options.       (line  187)
54475* std:                                   Standards.          (line   16)
54476* std <1>:                               C Dialect Options.  (line   46)
54477* std <2>:                               Other Builtins.     (line   21)
54478* std <3>:                               Non-bugs.           (line  107)
54479* std=:                                  Preprocessor Options.
54480                                                             (line  340)
54481* sub_library:                           Darwin Options.     (line  196)
54482* sub_umbrella:                          Darwin Options.     (line  196)
54483* symbolic:                              Link Options.       (line  207)
54484* sysroot:                               Directory Options.  (line   94)
54485* T:                                     Link Options.       (line  213)
54486* target-help:                           Overall Options.    (line  230)
54487* target-help <1>:                       Preprocessor Options.
54488                                                             (line  699)
54489* threads:                               HPPA Options.       (line  199)
54490* time:                                  Debugging Options.  (line 1299)
54491* tno-android-cc:                        GNU/Linux Options.  (line   31)
54492* tno-android-ld:                        GNU/Linux Options.  (line   35)
54493* traditional:                           C Dialect Options.  (line  333)
54494* traditional <1>:                       Incompatibilities.  (line    6)
54495* traditional-cpp:                       C Dialect Options.  (line  333)
54496* traditional-cpp <1>:                   Preprocessor Options.
54497                                                             (line  677)
54498* trigraphs:                             C Dialect Options.  (line  328)
54499* trigraphs <1>:                         Preprocessor Options.
54500                                                             (line  681)
54501* twolevel_namespace:                    Darwin Options.     (line  196)
54502* U:                                     Preprocessor Options.
54503                                                             (line   69)
54504* u:                                     Link Options.       (line  245)
54505* umbrella:                              Darwin Options.     (line  196)
54506* undef:                                 Preprocessor Options.
54507                                                             (line   73)
54508* undefined:                             Darwin Options.     (line  196)
54509* unexported_symbols_list:               Darwin Options.     (line  196)
54510* v:                                     Overall Options.    (line  203)
54511* v <1>:                                 Preprocessor Options.
54512                                                             (line  703)
54513* version:                               Overall Options.    (line  338)
54514* version <1>:                           Preprocessor Options.
54515                                                             (line  715)
54516* w:                                     Warning Options.    (line   25)
54517* W:                                     Warning Options.    (line  167)
54518* W <1>:                                 Warning Options.    (line 1267)
54519* W <2>:                                 Warning Options.    (line 1351)
54520* w <1>:                                 Preprocessor Options.
54521                                                             (line  171)
54522* W <3>:                                 Incompatibilities.  (line   64)
54523* Wa:                                    Assembler Options.  (line    9)
54524* Wabi:                                  C++ Dialect Options.
54525                                                             (line  404)
54526* Waddr-space-convert:                   AVR Options.        (line  215)
54527* Waddress:                              Warning Options.    (line 1184)
54528* Waggregate-return:                     Warning Options.    (line 1202)
54529* Waggressive-loop-optimizations:        Warning Options.    (line 1207)
54530* Wall:                                  Warning Options.    (line  116)
54531* Wall <1>:                              Preprocessor Options.
54532                                                             (line   93)
54533* Wall <2>:                              Standard Libraries. (line    6)
54534* Warray-bounds:                         Warning Options.    (line  826)
54535* Wassign-intercept:                     Objective-C and Objective-C++ Dialect Options.
54536                                                             (line  157)
54537* Wattributes:                           Warning Options.    (line 1212)
54538* Wbad-function-cast:                    Warning Options.    (line 1041)
54539* Wbuiltin-macro-redefined:              Warning Options.    (line 1218)
54540* Wcast-align:                           Warning Options.    (line 1072)
54541* Wcast-qual:                            Warning Options.    (line 1056)
54542* Wchar-subscripts:                      Warning Options.    (line  206)
54543* Wclobbered:                            Warning Options.    (line 1091)
54544* Wcomment:                              Warning Options.    (line  211)
54545* Wcomment <1>:                          Preprocessor Options.
54546                                                             (line  101)
54547* Wcomments:                             Preprocessor Options.
54548                                                             (line  101)
54549* Wconditionally-supported:              Warning Options.    (line 1095)
54550* Wconversion:                           Warning Options.    (line 1098)
54551* Wconversion-null:                      Warning Options.    (line 1116)
54552* Wctor-dtor-privacy:                    C++ Dialect Options.
54553                                                             (line  511)
54554* Wdate-time:                            Warning Options.    (line 1124)
54555* Wdeclaration-after-statement:          Warning Options.    (line  958)
54556* Wdelete-incomplete:                    Warning Options.    (line 1129)
54557* Wdelete-non-virtual-dtor:              C++ Dialect Options.
54558                                                             (line  518)
54559* Wdeprecated:                           Warning Options.    (line 1333)
54560* Wdeprecated-declarations:              Warning Options.    (line 1337)
54561* Wdisabled-optimization:                Warning Options.    (line 1497)
54562* Wdiv-by-zero:                          Warning Options.    (line  831)
54563* Wdouble-promotion:                     Warning Options.    (line  235)
54564* weak_reference_mismatches:             Darwin Options.     (line  196)
54565* Weffc++:                               C++ Dialect Options.
54566                                                             (line  598)
54567* Wempty-body:                           Warning Options.    (line 1136)
54568* Wendif-labels:                         Warning Options.    (line  968)
54569* Wendif-labels <1>:                     Preprocessor Options.
54570                                                             (line  148)
54571* Wenum-compare:                         Warning Options.    (line 1140)
54572* Werror:                                Warning Options.    (line   28)
54573* Werror <1>:                            Preprocessor Options.
54574                                                             (line  161)
54575* Werror=:                               Warning Options.    (line   31)
54576* Wextra:                                Warning Options.    (line  167)
54577* Wextra <1>:                            Warning Options.    (line 1267)
54578* Wextra <2>:                            Warning Options.    (line 1351)
54579* Wfatal-errors:                         Warning Options.    (line   48)
54580* Wfloat-conversion:                     Warning Options.    (line 1170)
54581* Wfloat-equal:                          Warning Options.    (line  858)
54582* Wformat:                               Warning Options.    (line  254)
54583* Wformat <1>:                           Warning Options.    (line  279)
54584* Wformat <2>:                           Warning Options.    (line  805)
54585* Wformat <3>:                           Function Attributes.
54586                                                             (line  453)
54587* Wformat-contains-nul:                  Warning Options.    (line  288)
54588* Wformat-extra-args:                    Warning Options.    (line  292)
54589* Wformat-nonliteral:                    Warning Options.    (line  316)
54590* Wformat-nonliteral <1>:                Function Attributes.
54591                                                             (line  518)
54592* Wformat-security:                      Warning Options.    (line  321)
54593* Wformat-y2k:                           Warning Options.    (line  333)
54594* Wformat-zero-length:                   Warning Options.    (line  306)
54595* Wformat=:                              Warning Options.    (line  254)
54596* Wformat=1:                             Warning Options.    (line  279)
54597* Wformat=2:                             Warning Options.    (line  311)
54598* Wframe-larger-than:                    Warning Options.    (line  982)
54599* Wfree-nonheap-object:                  Warning Options.    (line  991)
54600* whatsloaded:                           Darwin Options.     (line  196)
54601* whyload:                               Darwin Options.     (line  196)
54602* Wignored-qualifiers:                   Warning Options.    (line  373)
54603* Wimplicit:                             Warning Options.    (line  369)
54604* Wimplicit-function-declaration:        Warning Options.    (line  363)
54605* Wimplicit-int:                         Warning Options.    (line  359)
54606* Winherited-variadic-ctor:              Warning Options.    (line 1407)
54607* Winit-self:                            Warning Options.    (line  344)
54608* Winline:                               Warning Options.    (line 1412)
54609* Winline <1>:                           Inline.             (line   63)
54610* Wint-to-pointer-cast:                  Warning Options.    (line 1439)
54611* Winvalid-offsetof:                     Warning Options.    (line 1425)
54612* Winvalid-pch:                          Warning Options.    (line 1448)
54613* Wjump-misses-init:                     Warning Options.    (line 1146)
54614* Wl:                                    Link Options.       (line  237)
54615* Wlarger-than-LEN:                      Warning Options.    (line  979)
54616* Wlarger-than=LEN:                      Warning Options.    (line  979)
54617* Wliteral-suffix:                       C++ Dialect Options.
54618                                                             (line  525)
54619* Wlogical-op:                           Warning Options.    (line 1197)
54620* Wlong-long:                            Warning Options.    (line 1452)
54621* Wmain:                                 Warning Options.    (line  384)
54622* Wmaybe-uninitialized:                  Warning Options.    (line  642)
54623* Wmissing-braces:                       Warning Options.    (line  391)
54624* Wmissing-declarations:                 Warning Options.    (line 1257)
54625* Wmissing-field-initializers:           Warning Options.    (line 1267)
54626* Wmissing-format-attribute:             Warning Options.    (line  805)
54627* Wmissing-include-dirs:                 Warning Options.    (line  402)
54628* Wmissing-parameter-type:               Warning Options.    (line 1239)
54629* Wmissing-prototypes:                   Warning Options.    (line 1247)
54630* Wmultichar:                            Warning Options.    (line 1285)
54631* Wnarrowing:                            C++ Dialect Options.
54632                                                             (line  546)
54633* Wnested-externs:                       Warning Options.    (line 1404)
54634* Wno-abi:                               C++ Dialect Options.
54635                                                             (line  404)
54636* Wno-address:                           Warning Options.    (line 1184)
54637* Wno-aggregate-return:                  Warning Options.    (line 1202)
54638* Wno-aggressive-loop-optimizations:     Warning Options.    (line 1207)
54639* Wno-all:                               Warning Options.    (line  116)
54640* Wno-array-bounds:                      Warning Options.    (line  826)
54641* Wno-assign-intercept:                  Objective-C and Objective-C++ Dialect Options.
54642                                                             (line  157)
54643* Wno-attributes:                        Warning Options.    (line 1212)
54644* Wno-bad-function-cast:                 Warning Options.    (line 1041)
54645* Wno-builtin-macro-redefined:           Warning Options.    (line 1218)
54646* Wno-cast-align:                        Warning Options.    (line 1072)
54647* Wno-cast-qual:                         Warning Options.    (line 1056)
54648* Wno-char-subscripts:                   Warning Options.    (line  206)
54649* Wno-clobbered:                         Warning Options.    (line 1091)
54650* Wno-comment:                           Warning Options.    (line  211)
54651* Wno-conditionally-supported:           Warning Options.    (line 1095)
54652* Wno-conversion:                        Warning Options.    (line 1098)
54653* Wno-conversion-null:                   Warning Options.    (line 1116)
54654* Wno-coverage-mismatch:                 Warning Options.    (line  216)
54655* Wno-ctor-dtor-privacy:                 C++ Dialect Options.
54656                                                             (line  511)
54657* Wno-date-time:                         Warning Options.    (line 1124)
54658* Wno-declaration-after-statement:       Warning Options.    (line  958)
54659* Wno-delete-incomplete:                 Warning Options.    (line 1129)
54660* Wno-delete-non-virtual-dtor:           C++ Dialect Options.
54661                                                             (line  518)
54662* Wno-deprecated:                        Warning Options.    (line 1333)
54663* Wno-deprecated-declarations:           Warning Options.    (line 1337)
54664* Wno-disabled-optimization:             Warning Options.    (line 1497)
54665* Wno-div-by-zero:                       Warning Options.    (line  831)
54666* Wno-double-promotion:                  Warning Options.    (line  235)
54667* Wno-effc++:                            C++ Dialect Options.
54668                                                             (line  598)
54669* Wno-empty-body:                        Warning Options.    (line 1136)
54670* Wno-endif-labels:                      Warning Options.    (line  968)
54671* Wno-enum-compare:                      Warning Options.    (line 1140)
54672* Wno-error:                             Warning Options.    (line   28)
54673* Wno-error=:                            Warning Options.    (line   31)
54674* Wno-extra:                             Warning Options.    (line  167)
54675* Wno-extra <1>:                         Warning Options.    (line 1267)
54676* Wno-extra <2>:                         Warning Options.    (line 1351)
54677* Wno-fatal-errors:                      Warning Options.    (line   48)
54678* Wno-float-conversion:                  Warning Options.    (line 1170)
54679* Wno-float-equal:                       Warning Options.    (line  858)
54680* Wno-format:                            Warning Options.    (line  254)
54681* Wno-format <1>:                        Warning Options.    (line  805)
54682* Wno-format-contains-nul:               Warning Options.    (line  288)
54683* Wno-format-extra-args:                 Warning Options.    (line  292)
54684* Wno-format-nonliteral:                 Warning Options.    (line  316)
54685* Wno-format-security:                   Warning Options.    (line  321)
54686* Wno-format-y2k:                        Warning Options.    (line  333)
54687* Wno-format-zero-length:                Warning Options.    (line  306)
54688* Wno-free-nonheap-object:               Warning Options.    (line  991)
54689* Wno-ignored-qualifiers:                Warning Options.    (line  373)
54690* Wno-implicit:                          Warning Options.    (line  369)
54691* Wno-implicit-function-declaration:     Warning Options.    (line  363)
54692* Wno-implicit-int:                      Warning Options.    (line  359)
54693* Wno-inherited-variadic-ctor:           Warning Options.    (line 1407)
54694* Wno-init-self:                         Warning Options.    (line  344)
54695* Wno-inline:                            Warning Options.    (line 1412)
54696* Wno-int-to-pointer-cast:               Warning Options.    (line 1439)
54697* Wno-invalid-offsetof:                  Warning Options.    (line 1425)
54698* Wno-invalid-pch:                       Warning Options.    (line 1448)
54699* Wno-jump-misses-init:                  Warning Options.    (line 1146)
54700* Wno-literal-suffix:                    C++ Dialect Options.
54701                                                             (line  525)
54702* Wno-logical-op:                        Warning Options.    (line 1197)
54703* Wno-long-long:                         Warning Options.    (line 1452)
54704* Wno-main:                              Warning Options.    (line  384)
54705* Wno-maybe-uninitialized:               Warning Options.    (line  642)
54706* Wno-missing-braces:                    Warning Options.    (line  391)
54707* Wno-missing-declarations:              Warning Options.    (line 1257)
54708* Wno-missing-field-initializers:        Warning Options.    (line 1267)
54709* Wno-missing-format-attribute:          Warning Options.    (line  805)
54710* Wno-missing-include-dirs:              Warning Options.    (line  402)
54711* Wno-missing-parameter-type:            Warning Options.    (line 1239)
54712* Wno-missing-prototypes:                Warning Options.    (line 1247)
54713* Wno-multichar:                         Warning Options.    (line 1285)
54714* Wno-narrowing:                         C++ Dialect Options.
54715                                                             (line  546)
54716* Wno-nested-externs:                    Warning Options.    (line 1404)
54717* Wno-noexcept:                          C++ Dialect Options.
54718                                                             (line  559)
54719* Wno-non-template-friend:               C++ Dialect Options.
54720                                                             (line  633)
54721* Wno-non-virtual-dtor:                  C++ Dialect Options.
54722                                                             (line  565)
54723* Wno-nonnull:                           Warning Options.    (line  337)
54724* Wno-old-style-cast:                    C++ Dialect Options.
54725                                                             (line  649)
54726* Wno-old-style-declaration:             Warning Options.    (line 1229)
54727* Wno-old-style-definition:              Warning Options.    (line 1235)
54728* Wno-overflow:                          Warning Options.    (line 1343)
54729* Wno-overlength-strings:                Warning Options.    (line 1517)
54730* Wno-overloaded-virtual:                C++ Dialect Options.
54731                                                             (line  655)
54732* Wno-override-init:                     Warning Options.    (line 1351)
54733* Wno-packed:                            Warning Options.    (line 1359)
54734* Wno-packed-bitfield-compat:            Warning Options.    (line 1376)
54735* Wno-padded:                            Warning Options.    (line 1393)
54736* Wno-parentheses:                       Warning Options.    (line  405)
54737* Wno-pedantic-ms-format:                Warning Options.    (line 1021)
54738* Wno-pmf-conversions:                   C++ Dialect Options.
54739                                                             (line  674)
54740* Wno-pmf-conversions <1>:               Bound member functions.
54741                                                             (line   35)
54742* Wno-pointer-arith:                     Warning Options.    (line 1027)
54743* Wno-pointer-sign:                      Warning Options.    (line 1506)
54744* Wno-pointer-to-int-cast:               Warning Options.    (line 1444)
54745* Wno-pragmas:                           Warning Options.    (line  692)
54746* Wno-protocol:                          Objective-C and Objective-C++ Dialect Options.
54747                                                             (line  161)
54748* Wno-redundant-decls:                   Warning Options.    (line 1400)
54749* Wno-reorder:                           C++ Dialect Options.
54750                                                             (line  573)
54751* Wno-return-local-addr:                 Warning Options.    (line  500)
54752* Wno-return-type:                       Warning Options.    (line  504)
54753* Wno-selector:                          Objective-C and Objective-C++ Dialect Options.
54754                                                             (line  171)
54755* Wno-sequence-point:                    Warning Options.    (line  454)
54756* Wno-shadow:                            Warning Options.    (line  972)
54757* Wno-sign-compare:                      Warning Options.    (line 1157)
54758* Wno-sign-conversion:                   Warning Options.    (line 1164)
54759* Wno-sign-promo:                        C++ Dialect Options.
54760                                                             (line  678)
54761* Wno-sizeof-pointer-memaccess:          Warning Options.    (line 1176)
54762* Wno-stack-protector:                   Warning Options.    (line 1512)
54763* Wno-strict-aliasing:                   Warning Options.    (line  697)
54764* Wno-strict-null-sentinel:              C++ Dialect Options.
54765                                                             (line  626)
54766* Wno-strict-overflow:                   Warning Options.    (line  736)
54767* Wno-strict-prototypes:                 Warning Options.    (line 1223)
54768* Wno-strict-selector-match:             Objective-C and Objective-C++ Dialect Options.
54769                                                             (line  183)
54770* Wno-suggest-attribute=:                Warning Options.    (line  785)
54771* Wno-suggest-attribute=const:           Warning Options.    (line  791)
54772* Wno-suggest-attribute=format:          Warning Options.    (line  805)
54773* Wno-suggest-attribute=noreturn:        Warning Options.    (line  791)
54774* Wno-suggest-attribute=pure:            Warning Options.    (line  791)
54775* Wno-switch:                            Warning Options.    (line  518)
54776* Wno-switch-default:                    Warning Options.    (line  526)
54777* Wno-switch-enum:                       Warning Options.    (line  529)
54778* Wno-sync-nand:                         Warning Options.    (line  538)
54779* Wno-system-headers:                    Warning Options.    (line  836)
54780* Wno-traditional:                       Warning Options.    (line  873)
54781* Wno-traditional-conversion:            Warning Options.    (line  950)
54782* Wno-trampolines:                       Warning Options.    (line  847)
54783* Wno-trigraphs:                         Warning Options.    (line  543)
54784* Wno-type-limits:                       Warning Options.    (line 1034)
54785* Wno-undeclared-selector:               Objective-C and Objective-C++ Dialect Options.
54786                                                             (line  191)
54787* Wno-undef:                             Warning Options.    (line  965)
54788* Wno-uninitialized:                     Warning Options.    (line  620)
54789* Wno-unknown-pragmas:                   Warning Options.    (line  685)
54790* Wno-unsafe-loop-optimizations:         Warning Options.    (line 1015)
54791* Wno-unused:                            Warning Options.    (line  613)
54792* Wno-unused-but-set-parameter:          Warning Options.    (line  548)
54793* Wno-unused-but-set-variable:           Warning Options.    (line  557)
54794* Wno-unused-function:                   Warning Options.    (line  567)
54795* Wno-unused-label:                      Warning Options.    (line  572)
54796* Wno-unused-parameter:                  Warning Options.    (line  583)
54797* Wno-unused-result:                     Warning Options.    (line  590)
54798* Wno-unused-value:                      Warning Options.    (line  603)
54799* Wno-unused-variable:                   Warning Options.    (line  595)
54800* Wno-useless-cast:                      Warning Options.    (line 1133)
54801* Wno-varargs:                           Warning Options.    (line 1463)
54802* Wno-variadic-macros:                   Warning Options.    (line 1457)
54803* Wno-vector-operation-performance:      Warning Options.    (line 1468)
54804* Wno-virtual-move-assign:               Warning Options.    (line 1478)
54805* Wno-vla:                               Warning Options.    (line 1487)
54806* Wno-volatile-register-var:             Warning Options.    (line 1491)
54807* Wno-write-strings:                     Warning Options.    (line 1078)
54808* Wno-zero-as-null-pointer-constant:     Warning Options.    (line 1120)
54809* Wnoexcept:                             C++ Dialect Options.
54810                                                             (line  559)
54811* Wnon-template-friend:                  C++ Dialect Options.
54812                                                             (line  633)
54813* Wnon-virtual-dtor:                     C++ Dialect Options.
54814                                                             (line  565)
54815* Wnonnull:                              Warning Options.    (line  337)
54816* Wnormalized=:                          Warning Options.    (line 1291)
54817* Wold-style-cast:                       C++ Dialect Options.
54818                                                             (line  649)
54819* Wold-style-declaration:                Warning Options.    (line 1229)
54820* Wold-style-definition:                 Warning Options.    (line 1235)
54821* Wopenm-simd:                           Warning Options.    (line 1346)
54822* Woverflow:                             Warning Options.    (line 1343)
54823* Woverlength-strings:                   Warning Options.    (line 1517)
54824* Woverloaded-virtual:                   C++ Dialect Options.
54825                                                             (line  655)
54826* Woverride-init:                        Warning Options.    (line 1351)
54827* Wp:                                    Preprocessor Options.
54828                                                             (line   14)
54829* Wpacked:                               Warning Options.    (line 1359)
54830* Wpacked-bitfield-compat:               Warning Options.    (line 1376)
54831* Wpadded:                               Warning Options.    (line 1393)
54832* Wparentheses:                          Warning Options.    (line  405)
54833* Wpedantic:                             Warning Options.    (line   71)
54834* Wpedantic-ms-format:                   Warning Options.    (line 1021)
54835* Wpmf-conversions:                      C++ Dialect Options.
54836                                                             (line  674)
54837* Wpointer-arith:                        Warning Options.    (line 1027)
54838* Wpointer-arith <1>:                    Pointer Arith.      (line   13)
54839* Wpointer-sign:                         Warning Options.    (line 1506)
54840* Wpointer-to-int-cast:                  Warning Options.    (line 1444)
54841* Wpragmas:                              Warning Options.    (line  692)
54842* Wprotocol:                             Objective-C and Objective-C++ Dialect Options.
54843                                                             (line  161)
54844* wrapper:                               Overall Options.    (line  341)
54845* Wredundant-decls:                      Warning Options.    (line 1400)
54846* Wreorder:                              C++ Dialect Options.
54847                                                             (line  573)
54848* Wreturn-local-addr:                    Warning Options.    (line  500)
54849* Wreturn-type:                          Warning Options.    (line  504)
54850* Wselector:                             Objective-C and Objective-C++ Dialect Options.
54851                                                             (line  171)
54852* Wsequence-point:                       Warning Options.    (line  454)
54853* Wshadow:                               Warning Options.    (line  972)
54854* Wsign-compare:                         Warning Options.    (line 1157)
54855* Wsign-conversion:                      Warning Options.    (line 1164)
54856* Wsign-promo:                           C++ Dialect Options.
54857                                                             (line  678)
54858* Wsizeof-pointer-memaccess:             Warning Options.    (line 1176)
54859* Wstack-protector:                      Warning Options.    (line 1512)
54860* Wstack-usage:                          Warning Options.    (line  995)
54861* Wstrict-aliasing:                      Warning Options.    (line  697)
54862* Wstrict-aliasing=n:                    Warning Options.    (line  704)
54863* Wstrict-null-sentinel:                 C++ Dialect Options.
54864                                                             (line  626)
54865* Wstrict-overflow:                      Warning Options.    (line  736)
54866* Wstrict-prototypes:                    Warning Options.    (line 1223)
54867* Wstrict-selector-match:                Objective-C and Objective-C++ Dialect Options.
54868                                                             (line  183)
54869* Wsuggest-attribute=:                   Warning Options.    (line  785)
54870* Wsuggest-attribute=const:              Warning Options.    (line  791)
54871* Wsuggest-attribute=format:             Warning Options.    (line  805)
54872* Wsuggest-attribute=noreturn:           Warning Options.    (line  791)
54873* Wsuggest-attribute=pure:               Warning Options.    (line  791)
54874* Wswitch:                               Warning Options.    (line  518)
54875* Wswitch-default:                       Warning Options.    (line  526)
54876* Wswitch-enum:                          Warning Options.    (line  529)
54877* Wsync-nand:                            Warning Options.    (line  538)
54878* Wsystem-headers:                       Warning Options.    (line  836)
54879* Wsystem-headers <1>:                   Preprocessor Options.
54880                                                             (line  165)
54881* Wtraditional:                          Warning Options.    (line  873)
54882* Wtraditional <1>:                      Preprocessor Options.
54883                                                             (line  118)
54884* Wtraditional-conversion:               Warning Options.    (line  950)
54885* Wtrampolines:                          Warning Options.    (line  847)
54886* Wtrigraphs:                            Warning Options.    (line  543)
54887* Wtrigraphs <1>:                        Preprocessor Options.
54888                                                             (line  106)
54889* Wtype-limits:                          Warning Options.    (line 1034)
54890* Wundeclared-selector:                  Objective-C and Objective-C++ Dialect Options.
54891                                                             (line  191)
54892* Wundef:                                Warning Options.    (line  965)
54893* Wundef <1>:                            Preprocessor Options.
54894                                                             (line  124)
54895* Wuninitialized:                        Warning Options.    (line  620)
54896* Wunknown-pragmas:                      Warning Options.    (line  685)
54897* Wunsafe-loop-optimizations:            Warning Options.    (line 1015)
54898* Wunsuffixed-float-constants:           Warning Options.    (line 1532)
54899* Wunused:                               Warning Options.    (line  613)
54900* Wunused-but-set-parameter:             Warning Options.    (line  548)
54901* Wunused-but-set-variable:              Warning Options.    (line  557)
54902* Wunused-function:                      Warning Options.    (line  567)
54903* Wunused-label:                         Warning Options.    (line  572)
54904* Wunused-local-typedefs:                Warning Options.    (line  579)
54905* Wunused-macros:                        Preprocessor Options.
54906                                                             (line  129)
54907* Wunused-parameter:                     Warning Options.    (line  583)
54908* Wunused-result:                        Warning Options.    (line  590)
54909* Wunused-value:                         Warning Options.    (line  603)
54910* Wunused-variable:                      Warning Options.    (line  595)
54911* Wuseless-cast:                         Warning Options.    (line 1133)
54912* Wvarargs:                              Warning Options.    (line 1463)
54913* Wvariadic-macros:                      Warning Options.    (line 1457)
54914* Wvector-operation-performance:         Warning Options.    (line 1468)
54915* Wvirtual-move-assign:                  Warning Options.    (line 1478)
54916* Wvla:                                  Warning Options.    (line 1487)
54917* Wvolatile-register-var:                Warning Options.    (line 1491)
54918* Wwrite-strings:                        Warning Options.    (line 1078)
54919* Wzero-as-null-pointer-constant:        Warning Options.    (line 1120)
54920* x:                                     Overall Options.    (line  126)
54921* x <1>:                                 Preprocessor Options.
54922                                                             (line  324)
54923* Xassembler:                            Assembler Options.  (line   13)
54924* Xbind-lazy:                            VxWorks Options.    (line   26)
54925* Xbind-now:                             VxWorks Options.    (line   30)
54926* Xlinker:                               Link Options.       (line  219)
54927* Xpreprocessor:                         Preprocessor Options.
54928                                                             (line   25)
54929* Ym:                                    System V Options.   (line   26)
54930* YP:                                    System V Options.   (line   22)
54931
54932
54933File: gcc.info,  Node: Keyword Index,  Prev: Option Index,  Up: Top
54934
54935Keyword Index
54936*************
54937
54938�[index�]
54939* Menu:
54940
54941* '!' in constraint:                     Multi-Alternative.  (line   33)
54942* '#' in constraint:                     Modifiers.          (line   57)
54943* '#pragma':                             Pragmas.            (line    6)
54944* #pragma implementation:                C++ Interface.      (line   39)
54945* '#pragma implementation', implied:     C++ Interface.      (line   46)
54946* #pragma interface:                     C++ Interface.      (line   20)
54947* '#pragma', reason for not using:       Function Attributes.
54948                                                             (line 2055)
54949* $:                                     Dollar Signs.       (line    6)
54950* '%' in constraint:                     Modifiers.          (line   45)
54951* '%include':                            Spec Files.         (line   26)
54952* '%include_noerr':                      Spec Files.         (line   30)
54953* '%rename':                             Spec Files.         (line   34)
54954* '&' in constraint:                     Modifiers.          (line   25)
54955* ''':                                   Incompatibilities.  (line  116)
54956* '*' in constraint:                     Modifiers.          (line   62)
54957* *__builtin_assume_aligned:             Other Builtins.     (line  332)
54958* '+' in constraint:                     Modifiers.          (line   12)
54959* '-lgcc', use with '-nodefaultlibs':    Link Options.       (line   85)
54960* '-lgcc', use with '-nostdlib':         Link Options.       (line   85)
54961* '-march' feature modifiers:            AArch64 Options.    (line  126)
54962* '-mcpu' feature modifiers:             AArch64 Options.    (line  126)
54963* '-nodefaultlibs' and unresolved references: Link Options.  (line   85)
54964* '-nostdlib' and unresolved references: Link Options.       (line   85)
54965* .sdata/.sdata2 references (PowerPC):   RS/6000 and PowerPC Options.
54966                                                             (line  739)
54967* '//':                                  C++ Comments.       (line    6)
54968* '0' in constraint:                     Simple Constraints. (line  125)
54969* '<' in constraint:                     Simple Constraints. (line   47)
54970* '=' in constraint:                     Modifiers.          (line    8)
54971* '>' in constraint:                     Simple Constraints. (line   59)
54972* '?' in constraint:                     Multi-Alternative.  (line   27)
54973* '?:' extensions:                       Conditionals.       (line    6)
54974* '?:' side effect:                      Conditionals.       (line   20)
54975* '_' in variables in macros:            Typeof.             (line   46)
54976* '_Accum' data type:                    Fixed-Point.        (line    6)
54977* '_Complex' keyword:                    Complex.            (line    6)
54978* '_Decimal128' data type:               Decimal Float.      (line    6)
54979* '_Decimal32' data type:                Decimal Float.      (line    6)
54980* '_Decimal64' data type:                Decimal Float.      (line    6)
54981* _Exit:                                 Other Builtins.     (line    6)
54982* _exit:                                 Other Builtins.     (line    6)
54983* '_Fract' data type:                    Fixed-Point.        (line    6)
54984* _HTM_FIRST_USER_ABORT_CODE:            S/390 System z Built-in Functions.
54985                                                             (line   44)
54986* '_Sat' data type:                      Fixed-Point.        (line    6)
54987* _xabort:                               X86 transactional memory intrinsics.
54988                                                             (line   61)
54989* _xbegin:                               X86 transactional memory intrinsics.
54990                                                             (line   19)
54991* _xend:                                 X86 transactional memory intrinsics.
54992                                                             (line   52)
54993* _xtest:                                X86 transactional memory intrinsics.
54994                                                             (line   57)
54995* __atomic_add_fetch:                    __atomic Builtins.  (line  153)
54996* __atomic_always_lock_free:             __atomic Builtins.  (line  230)
54997* __atomic_and_fetch:                    __atomic Builtins.  (line  157)
54998* __atomic_clear:                        __atomic Builtins.  (line  204)
54999* __atomic_compare_exchange:             __atomic Builtins.  (line  145)
55000* __atomic_compare_exchange_n:           __atomic Builtins.  (line  124)
55001* __atomic_exchange:                     __atomic Builtins.  (line  118)
55002* __atomic_exchange_n:                   __atomic Builtins.  (line  108)
55003* __atomic_fetch_add:                    __atomic Builtins.  (line  172)
55004* __atomic_fetch_and:                    __atomic Builtins.  (line  176)
55005* __atomic_fetch_nand:                   __atomic Builtins.  (line  182)
55006* __atomic_fetch_or:                     __atomic Builtins.  (line  180)
55007* __atomic_fetch_sub:                    __atomic Builtins.  (line  174)
55008* __atomic_fetch_xor:                    __atomic Builtins.  (line  178)
55009* __atomic_is_lock_free:                 __atomic Builtins.  (line  244)
55010* __atomic_load:                         __atomic Builtins.  (line   90)
55011* __atomic_load_n:                       __atomic Builtins.  (line   83)
55012* __atomic_nand_fetch:                   __atomic Builtins.  (line  163)
55013* __atomic_or_fetch:                     __atomic Builtins.  (line  161)
55014* __atomic_signal_fence:                 __atomic Builtins.  (line  223)
55015* __atomic_store:                        __atomic Builtins.  (line  103)
55016* __atomic_store_n:                      __atomic Builtins.  (line   95)
55017* __atomic_sub_fetch:                    __atomic Builtins.  (line  155)
55018* __atomic_test_and_set:                 __atomic Builtins.  (line  192)
55019* __atomic_thread_fence:                 __atomic Builtins.  (line  216)
55020* __atomic_xor_fetch:                    __atomic Builtins.  (line  159)
55021* __builtin_apply:                       Constructing Calls. (line   29)
55022* __builtin_apply_args:                  Constructing Calls. (line   19)
55023* __builtin_arc_aligned:                 ARC Built-in Functions.
55024                                                             (line   18)
55025* __builtin_arc_brk:                     ARC Built-in Functions.
55026                                                             (line   28)
55027* __builtin_arc_core_read:               ARC Built-in Functions.
55028                                                             (line   32)
55029* __builtin_arc_core_write:              ARC Built-in Functions.
55030                                                             (line   39)
55031* __builtin_arc_divaw:                   ARC Built-in Functions.
55032                                                             (line   46)
55033* __builtin_arc_flag:                    ARC Built-in Functions.
55034                                                             (line   53)
55035* __builtin_arc_lr:                      ARC Built-in Functions.
55036                                                             (line   57)
55037* __builtin_arc_mul64:                   ARC Built-in Functions.
55038                                                             (line   64)
55039* __builtin_arc_mulu64:                  ARC Built-in Functions.
55040                                                             (line   68)
55041* __builtin_arc_nop:                     ARC Built-in Functions.
55042                                                             (line   73)
55043* __builtin_arc_norm:                    ARC Built-in Functions.
55044                                                             (line   77)
55045* __builtin_arc_normw:                   ARC Built-in Functions.
55046                                                             (line   84)
55047* __builtin_arc_rtie:                    ARC Built-in Functions.
55048                                                             (line   91)
55049* __builtin_arc_sleep:                   ARC Built-in Functions.
55050                                                             (line   95)
55051* __builtin_arc_sr:                      ARC Built-in Functions.
55052                                                             (line   99)
55053* __builtin_arc_swap:                    ARC Built-in Functions.
55054                                                             (line  106)
55055* __builtin_arc_swi:                     ARC Built-in Functions.
55056                                                             (line  112)
55057* __builtin_arc_sync:                    ARC Built-in Functions.
55058                                                             (line  116)
55059* __builtin_arc_trap_s:                  ARC Built-in Functions.
55060                                                             (line  120)
55061* __builtin_arc_unimp_s:                 ARC Built-in Functions.
55062                                                             (line  124)
55063* __builtin_bswap16:                     Other Builtins.     (line  599)
55064* __builtin_bswap32:                     Other Builtins.     (line  603)
55065* __builtin_bswap64:                     Other Builtins.     (line  607)
55066* __builtin_choose_expr:                 Other Builtins.     (line  154)
55067* __builtin_clrsb:                       Other Builtins.     (line  529)
55068* __builtin_clrsbl:                      Other Builtins.     (line  551)
55069* __builtin_clrsbll:                     Other Builtins.     (line  574)
55070* __builtin_clz:                         Other Builtins.     (line  521)
55071* __builtin_clzl:                        Other Builtins.     (line  543)
55072* __builtin_clzll:                       Other Builtins.     (line  566)
55073* __builtin_complex:                     Other Builtins.     (line  194)
55074* __builtin_constant_p:                  Other Builtins.     (line  203)
55075* __builtin_cpu_init:                    X86 Built-in Functions.
55076                                                             (line   62)
55077* __builtin_cpu_is:                      X86 Built-in Functions.
55078                                                             (line   90)
55079* __builtin_cpu_supports:                X86 Built-in Functions.
55080                                                             (line  162)
55081* __builtin_ctz:                         Other Builtins.     (line  525)
55082* __builtin_ctzl:                        Other Builtins.     (line  547)
55083* __builtin_ctzll:                       Other Builtins.     (line  570)
55084* __builtin_expect:                      Other Builtins.     (line  252)
55085* __builtin_extract_return_addr:         Return Address.     (line   35)
55086* __builtin_ffs:                         Other Builtins.     (line  517)
55087* __builtin_ffsl:                        Other Builtins.     (line  540)
55088* __builtin_ffsll:                       Other Builtins.     (line  562)
55089* __builtin_FILE:                        Other Builtins.     (line  361)
55090* __builtin_fpclassify:                  Other Builtins.     (line    6)
55091* __builtin_fpclassify <1>:              Other Builtins.     (line  431)
55092* __builtin_frame_address:               Return Address.     (line   47)
55093* __builtin_frob_return_address:         Return Address.     (line   44)
55094* __builtin_FUNCTION:                    Other Builtins.     (line  356)
55095* __builtin_huge_val:                    Other Builtins.     (line  419)
55096* __builtin_huge_valf:                   Other Builtins.     (line  424)
55097* __builtin_huge_vall:                   Other Builtins.     (line  427)
55098* __builtin_huge_valq:                   X86 Built-in Functions.
55099                                                             (line   57)
55100* __builtin_inf:                         Other Builtins.     (line  442)
55101* __builtin_infd128:                     Other Builtins.     (line  452)
55102* __builtin_infd32:                      Other Builtins.     (line  446)
55103* __builtin_infd64:                      Other Builtins.     (line  449)
55104* __builtin_inff:                        Other Builtins.     (line  456)
55105* __builtin_infl:                        Other Builtins.     (line  461)
55106* __builtin_infq:                        X86 Built-in Functions.
55107                                                             (line   54)
55108* __builtin_isfinite:                    Other Builtins.     (line    6)
55109* __builtin_isgreater:                   Other Builtins.     (line    6)
55110* __builtin_isgreaterequal:              Other Builtins.     (line    6)
55111* __builtin_isinf_sign:                  Other Builtins.     (line    6)
55112* __builtin_isinf_sign <1>:              Other Builtins.     (line  465)
55113* __builtin_isless:                      Other Builtins.     (line    6)
55114* __builtin_islessequal:                 Other Builtins.     (line    6)
55115* __builtin_islessgreater:               Other Builtins.     (line    6)
55116* __builtin_isnormal:                    Other Builtins.     (line    6)
55117* __builtin_isunordered:                 Other Builtins.     (line    6)
55118* __builtin_LINE:                        Other Builtins.     (line  350)
55119* __builtin_nan:                         Other Builtins.     (line  473)
55120* __builtin_nand128:                     Other Builtins.     (line  495)
55121* __builtin_nand32:                      Other Builtins.     (line  489)
55122* __builtin_nand64:                      Other Builtins.     (line  492)
55123* __builtin_nanf:                        Other Builtins.     (line  499)
55124* __builtin_nanl:                        Other Builtins.     (line  502)
55125* __builtin_nans:                        Other Builtins.     (line  506)
55126* __builtin_nansf:                       Other Builtins.     (line  510)
55127* __builtin_nansl:                       Other Builtins.     (line  513)
55128* __builtin_nds32_isb:                   NDS32 Built-in Functions.
55129                                                             (line   12)
55130* __builtin_nds32_isync:                 NDS32 Built-in Functions.
55131                                                             (line    8)
55132* __builtin_nds32_mfsr:                  NDS32 Built-in Functions.
55133                                                             (line   15)
55134* __builtin_nds32_mfusr:                 NDS32 Built-in Functions.
55135                                                             (line   18)
55136* __builtin_nds32_mtsr:                  NDS32 Built-in Functions.
55137                                                             (line   21)
55138* __builtin_nds32_mtusr:                 NDS32 Built-in Functions.
55139                                                             (line   24)
55140* __builtin_nds32_setgie_dis:            NDS32 Built-in Functions.
55141                                                             (line   30)
55142* __builtin_nds32_setgie_en:             NDS32 Built-in Functions.
55143                                                             (line   27)
55144* __builtin_non_tx_store:                S/390 System z Built-in Functions.
55145                                                             (line   98)
55146* __builtin_object_size:                 Object Size Checking.
55147                                                             (line    6)
55148* __builtin_object_size <1>:             Object Size Checking.
55149                                                             (line    9)
55150* __builtin_offsetof:                    Offsetof.           (line    6)
55151* __builtin_parity:                      Other Builtins.     (line  537)
55152* __builtin_parityl:                     Other Builtins.     (line  558)
55153* __builtin_parityll:                    Other Builtins.     (line  582)
55154* __builtin_popcount:                    Other Builtins.     (line  534)
55155* __builtin_popcountl:                   Other Builtins.     (line  554)
55156* __builtin_popcountll:                  Other Builtins.     (line  578)
55157* __builtin_powi:                        Other Builtins.     (line    6)
55158* __builtin_powi <1>:                    Other Builtins.     (line  586)
55159* __builtin_powif:                       Other Builtins.     (line    6)
55160* __builtin_powif <1>:                   Other Builtins.     (line  591)
55161* __builtin_powil:                       Other Builtins.     (line    6)
55162* __builtin_powil <1>:                   Other Builtins.     (line  595)
55163* __builtin_prefetch:                    Other Builtins.     (line  380)
55164* __builtin_return:                      Constructing Calls. (line   47)
55165* __builtin_return_address:              Return Address.     (line    9)
55166* __builtin_rx_brk:                      RX Built-in Functions.
55167                                                             (line   10)
55168* __builtin_rx_clrpsw:                   RX Built-in Functions.
55169                                                             (line   13)
55170* __builtin_rx_int:                      RX Built-in Functions.
55171                                                             (line   17)
55172* __builtin_rx_machi:                    RX Built-in Functions.
55173                                                             (line   21)
55174* __builtin_rx_maclo:                    RX Built-in Functions.
55175                                                             (line   26)
55176* __builtin_rx_mulhi:                    RX Built-in Functions.
55177                                                             (line   31)
55178* __builtin_rx_mullo:                    RX Built-in Functions.
55179                                                             (line   36)
55180* __builtin_rx_mvfachi:                  RX Built-in Functions.
55181                                                             (line   41)
55182* __builtin_rx_mvfacmi:                  RX Built-in Functions.
55183                                                             (line   45)
55184* __builtin_rx_mvfc:                     RX Built-in Functions.
55185                                                             (line   49)
55186* __builtin_rx_mvtachi:                  RX Built-in Functions.
55187                                                             (line   53)
55188* __builtin_rx_mvtaclo:                  RX Built-in Functions.
55189                                                             (line   57)
55190* __builtin_rx_mvtc:                     RX Built-in Functions.
55191                                                             (line   61)
55192* __builtin_rx_mvtipl:                   RX Built-in Functions.
55193                                                             (line   65)
55194* __builtin_rx_racw:                     RX Built-in Functions.
55195                                                             (line   69)
55196* __builtin_rx_revw:                     RX Built-in Functions.
55197                                                             (line   73)
55198* __builtin_rx_rmpa:                     RX Built-in Functions.
55199                                                             (line   78)
55200* __builtin_rx_round:                    RX Built-in Functions.
55201                                                             (line   82)
55202* __builtin_rx_sat:                      RX Built-in Functions.
55203                                                             (line   87)
55204* __builtin_rx_setpsw:                   RX Built-in Functions.
55205                                                             (line   91)
55206* __builtin_rx_wait:                     RX Built-in Functions.
55207                                                             (line   95)
55208* __builtin_set_thread_pointer:          SH Built-in Functions.
55209                                                             (line    9)
55210* __builtin_tabort:                      S/390 System z Built-in Functions.
55211                                                             (line   82)
55212* __builtin_tbegin:                      S/390 System z Built-in Functions.
55213                                                             (line    6)
55214* __builtin_tbeginc:                     S/390 System z Built-in Functions.
55215                                                             (line   73)
55216* __builtin_tbegin_nofloat:              S/390 System z Built-in Functions.
55217                                                             (line   54)
55218* __builtin_tbegin_retry:                S/390 System z Built-in Functions.
55219                                                             (line   60)
55220* __builtin_tbegin_retry_nofloat:        S/390 System z Built-in Functions.
55221                                                             (line   67)
55222* __builtin_tend:                        S/390 System z Built-in Functions.
55223                                                             (line   77)
55224* __builtin_thread_pointer:              SH Built-in Functions.
55225                                                             (line   18)
55226* __builtin_trap:                        Other Builtins.     (line  276)
55227* __builtin_tx_assist:                   S/390 System z Built-in Functions.
55228                                                             (line   87)
55229* __builtin_tx_nesting_depth:            S/390 System z Built-in Functions.
55230                                                             (line   93)
55231* __builtin_types_compatible_p:          Other Builtins.     (line  109)
55232* __builtin_unreachable:                 Other Builtins.     (line  283)
55233* __builtin_va_arg_pack:                 Constructing Calls. (line   52)
55234* __builtin_va_arg_pack_len:             Constructing Calls. (line   75)
55235* __builtin___clear_cache:               Other Builtins.     (line  367)
55236* __builtin___fprintf_chk:               Object Size Checking.
55237                                                             (line    6)
55238* __builtin___memcpy_chk:                Object Size Checking.
55239                                                             (line    6)
55240* __builtin___memmove_chk:               Object Size Checking.
55241                                                             (line    6)
55242* __builtin___mempcpy_chk:               Object Size Checking.
55243                                                             (line    6)
55244* __builtin___memset_chk:                Object Size Checking.
55245                                                             (line    6)
55246* __builtin___printf_chk:                Object Size Checking.
55247                                                             (line    6)
55248* __builtin___snprintf_chk:              Object Size Checking.
55249                                                             (line    6)
55250* __builtin___sprintf_chk:               Object Size Checking.
55251                                                             (line    6)
55252* __builtin___stpcpy_chk:                Object Size Checking.
55253                                                             (line    6)
55254* __builtin___strcat_chk:                Object Size Checking.
55255                                                             (line    6)
55256* __builtin___strcpy_chk:                Object Size Checking.
55257                                                             (line    6)
55258* __builtin___strncat_chk:               Object Size Checking.
55259                                                             (line    6)
55260* __builtin___strncpy_chk:               Object Size Checking.
55261                                                             (line    6)
55262* __builtin___vfprintf_chk:              Object Size Checking.
55263                                                             (line    6)
55264* __builtin___vprintf_chk:               Object Size Checking.
55265                                                             (line    6)
55266* __builtin___vsnprintf_chk:             Object Size Checking.
55267                                                             (line    6)
55268* __builtin___vsprintf_chk:              Object Size Checking.
55269                                                             (line    6)
55270* '__complex__' keyword:                 Complex.            (line    6)
55271* '__declspec(dllexport)':               Function Attributes.
55272                                                             (line  290)
55273* '__declspec(dllimport)':               Function Attributes.
55274                                                             (line  323)
55275* '__ea' SPU Named Address Spaces:       Named Address Spaces.
55276                                                             (line  155)
55277* __extension__:                         Alternate Keywords. (line   30)
55278* '__far' M32C Named Address Spaces:     Named Address Spaces.
55279                                                             (line  138)
55280* '__far' RL78 Named Address Spaces:     Named Address Spaces.
55281                                                             (line  147)
55282* '__flash' AVR Named Address Spaces:    Named Address Spaces.
55283                                                             (line   31)
55284* '__flash1' AVR Named Address Spaces:   Named Address Spaces.
55285                                                             (line   40)
55286* '__flash2' AVR Named Address Spaces:   Named Address Spaces.
55287                                                             (line   40)
55288* '__flash3' AVR Named Address Spaces:   Named Address Spaces.
55289                                                             (line   40)
55290* '__flash4' AVR Named Address Spaces:   Named Address Spaces.
55291                                                             (line   40)
55292* '__flash5' AVR Named Address Spaces:   Named Address Spaces.
55293                                                             (line   40)
55294* '__float128' data type:                Floating Types.     (line    6)
55295* '__float80' data type:                 Floating Types.     (line    6)
55296* '__fp16' data type:                    Half-Precision.     (line    6)
55297* '__FUNCTION__' identifier:             Function Names.     (line    6)
55298* '__func__' identifier:                 Function Names.     (line    6)
55299* '__imag__' keyword:                    Complex.            (line   27)
55300* '__int128' data types:                 __int128.           (line    6)
55301* '__memx' AVR Named Address Spaces:     Named Address Spaces.
55302                                                             (line   46)
55303* '__PRETTY_FUNCTION__' identifier:      Function Names.     (line    6)
55304* '__real__' keyword:                    Complex.            (line   27)
55305* __STDC_HOSTED__:                       Standards.          (line   13)
55306* __sync_add_and_fetch:                  __sync Builtins.    (line   60)
55307* __sync_and_and_fetch:                  __sync Builtins.    (line   60)
55308* __sync_bool_compare_and_swap:          __sync Builtins.    (line   71)
55309* __sync_fetch_and_add:                  __sync Builtins.    (line   44)
55310* __sync_fetch_and_and:                  __sync Builtins.    (line   44)
55311* __sync_fetch_and_nand:                 __sync Builtins.    (line   44)
55312* __sync_fetch_and_or:                   __sync Builtins.    (line   44)
55313* __sync_fetch_and_sub:                  __sync Builtins.    (line   44)
55314* __sync_fetch_and_xor:                  __sync Builtins.    (line   44)
55315* __sync_lock_release:                   __sync Builtins.    (line  101)
55316* __sync_lock_test_and_set:              __sync Builtins.    (line   83)
55317* __sync_nand_and_fetch:                 __sync Builtins.    (line   60)
55318* __sync_or_and_fetch:                   __sync Builtins.    (line   60)
55319* __sync_sub_and_fetch:                  __sync Builtins.    (line   60)
55320* __sync_synchronize:                    __sync Builtins.    (line   80)
55321* __sync_val_compare_and_swap:           __sync Builtins.    (line   71)
55322* __sync_xor_and_fetch:                  __sync Builtins.    (line   60)
55323* '__thread':                            Thread-Local.       (line    6)
55324* AArch64 Options:                       AArch64 Options.    (line    6)
55325* ABI:                                   Compatibility.      (line    6)
55326* 'abi_tag' attribute:                   C++ Attributes.     (line    9)
55327* abort:                                 Other Builtins.     (line    6)
55328* abs:                                   Other Builtins.     (line    6)
55329* accessing volatiles:                   Volatiles.          (line    6)
55330* accessing volatiles <1>:               C++ Volatiles.      (line    6)
55331* acos:                                  Other Builtins.     (line    6)
55332* acosf:                                 Other Builtins.     (line    6)
55333* acosh:                                 Other Builtins.     (line    6)
55334* acoshf:                                Other Builtins.     (line    6)
55335* acoshl:                                Other Builtins.     (line    6)
55336* acosl:                                 Other Builtins.     (line    6)
55337* Ada:                                   G++ and GCC.        (line    6)
55338* Ada <1>:                               G++ and GCC.        (line   30)
55339* additional floating types:             Floating Types.     (line    6)
55340* address constraints:                   Simple Constraints. (line  152)
55341* address of a label:                    Labels as Values.   (line    6)
55342* address_operand:                       Simple Constraints. (line  156)
55343* 'alias' attribute:                     Function Attributes.
55344                                                             (line   39)
55345* 'aligned' attribute:                   Function Attributes.
55346                                                             (line   52)
55347* 'aligned' attribute <1>:               Variable Attributes.
55348                                                             (line   23)
55349* 'aligned' attribute <2>:               Type Attributes.    (line   31)
55350* alignment:                             Alignment.          (line    6)
55351* alloca:                                Other Builtins.     (line    6)
55352* 'alloca' vs variable-length arrays:    Variable Length.    (line   35)
55353* 'alloc_align' attribute:               Function Attributes.
55354                                                             (line   93)
55355* 'alloc_size' attribute:                Function Attributes.
55356                                                             (line   72)
55357* Allow nesting in an interrupt handler on the Blackfin processor.: Function Attributes.
55358                                                             (line 1068)
55359* Altera Nios II options:                Nios II Options.    (line    6)
55360* alternate keywords:                    Alternate Keywords. (line    6)
55361* 'always_inline' function attribute:    Function Attributes.
55362                                                             (line  125)
55363* AMD x86-64 Options:                    i386 and x86-64 Options.
55364                                                             (line    6)
55365* AMD1:                                  Standards.          (line   13)
55366* ANSI C:                                Standards.          (line   13)
55367* ANSI C standard:                       Standards.          (line   13)
55368* ANSI C89:                              Standards.          (line   13)
55369* ANSI support:                          C Dialect Options.  (line   10)
55370* ANSI X3.159-1989:                      Standards.          (line   13)
55371* apostrophes:                           Incompatibilities.  (line  116)
55372* application binary interface:          Compatibility.      (line    6)
55373* ARC options:                           ARC Options.        (line    6)
55374* ARM options:                           ARM Options.        (line    6)
55375* ARM [Annotated C++ Reference Manual]:  Backwards Compatibility.
55376                                                             (line    6)
55377* arrays of length zero:                 Zero Length.        (line    6)
55378* arrays of variable length:             Variable Length.    (line    6)
55379* arrays, non-lvalue:                    Subscripting.       (line    6)
55380* 'artificial' function attribute:       Function Attributes.
55381                                                             (line  166)
55382* asin:                                  Other Builtins.     (line    6)
55383* asinf:                                 Other Builtins.     (line    6)
55384* asinh:                                 Other Builtins.     (line    6)
55385* asinhf:                                Other Builtins.     (line    6)
55386* asinhl:                                Other Builtins.     (line    6)
55387* asinl:                                 Other Builtins.     (line    6)
55388* 'asm' constraints:                     Constraints.        (line    6)
55389* 'asm' expressions:                     Extended Asm.       (line    6)
55390* assembler instructions:                Extended Asm.       (line    6)
55391* assembler names for identifiers:       Asm Labels.         (line    6)
55392* assembly code, invalid:                Bug Criteria.       (line   12)
55393* 'assume_aligned' attribute:            Function Attributes.
55394                                                             (line  110)
55395* atan:                                  Other Builtins.     (line    6)
55396* atan2:                                 Other Builtins.     (line    6)
55397* atan2f:                                Other Builtins.     (line    6)
55398* atan2l:                                Other Builtins.     (line    6)
55399* atanf:                                 Other Builtins.     (line    6)
55400* atanh:                                 Other Builtins.     (line    6)
55401* atanhf:                                Other Builtins.     (line    6)
55402* atanhl:                                Other Builtins.     (line    6)
55403* atanl:                                 Other Builtins.     (line    6)
55404* attribute of types:                    Type Attributes.    (line    6)
55405* attribute of variables:                Variable Attributes.
55406                                                             (line    6)
55407* attribute syntax:                      Attribute Syntax.   (line    6)
55408* autoincrement/decrement addressing:    Simple Constraints. (line   30)
55409* automatic 'inline' for C++ member fns: Inline.             (line   71)
55410* AVR Options:                           AVR Options.        (line    6)
55411* Backwards Compatibility:               Backwards Compatibility.
55412                                                             (line    6)
55413* base class members:                    Name lookup.        (line    6)
55414* bcmp:                                  Other Builtins.     (line    6)
55415* 'below100' attribute:                  Variable Attributes.
55416                                                             (line  578)
55417* binary compatibility:                  Compatibility.      (line    6)
55418* Binary constants using the '0b' prefix: Binary constants.  (line    6)
55419* Blackfin Options:                      Blackfin Options.   (line    6)
55420* bound pointer to member function:      Bound member functions.
55421                                                             (line    6)
55422* bug criteria:                          Bug Criteria.       (line    6)
55423* bugs:                                  Bugs.               (line    6)
55424* bugs, known:                           Trouble.            (line    6)
55425* built-in functions:                    C Dialect Options.  (line  210)
55426* built-in functions <1>:                Other Builtins.     (line    6)
55427* bzero:                                 Other Builtins.     (line    6)
55428* C compilation options:                 Invoking GCC.       (line   17)
55429* C intermediate output, nonexistent:    G++ and GCC.        (line   35)
55430* C language extensions:                 C Extensions.       (line    6)
55431* C language, traditional:               C Dialect Options.  (line  331)
55432* C standard:                            Standards.          (line   13)
55433* C standards:                           Standards.          (line   13)
55434* c++:                                   Invoking G++.       (line   14)
55435* C++:                                   G++ and GCC.        (line   30)
55436* C++ comments:                          C++ Comments.       (line    6)
55437* C++ compilation options:               Invoking GCC.       (line   23)
55438* C++ interface and implementation headers: C++ Interface.   (line    6)
55439* C++ language extensions:               C++ Extensions.     (line    6)
55440* C++ member fns, automatically 'inline': Inline.            (line   71)
55441* C++ misunderstandings:                 C++ Misunderstandings.
55442                                                             (line    6)
55443* C++ options, command-line:             C++ Dialect Options.
55444                                                             (line    6)
55445* C++ pragmas, effect on inlining:       C++ Interface.      (line   66)
55446* C++ source file suffixes:              Invoking G++.       (line    6)
55447* C++ static data, declaring and defining: Static Definitions.
55448                                                             (line    6)
55449* C11:                                   Standards.          (line   13)
55450* C1X:                                   Standards.          (line   13)
55451* C6X Options:                           C6X Options.        (line    6)
55452* C89:                                   Standards.          (line   13)
55453* C90:                                   Standards.          (line   13)
55454* C94:                                   Standards.          (line   13)
55455* C95:                                   Standards.          (line   13)
55456* C99:                                   Standards.          (line   13)
55457* C9X:                                   Standards.          (line   13)
55458* cabs:                                  Other Builtins.     (line    6)
55459* cabsf:                                 Other Builtins.     (line    6)
55460* cabsl:                                 Other Builtins.     (line    6)
55461* cacos:                                 Other Builtins.     (line    6)
55462* cacosf:                                Other Builtins.     (line    6)
55463* cacosh:                                Other Builtins.     (line    6)
55464* cacoshf:                               Other Builtins.     (line    6)
55465* cacoshl:                               Other Builtins.     (line    6)
55466* cacosl:                                Other Builtins.     (line    6)
55467* 'callee_pop_aggregate_return' attribute: Function Attributes.
55468                                                             (line 1016)
55469* calling functions through the function vector on H8/300, M16C, M32C and SH2A processors: Function Attributes.
55470                                                             (line  564)
55471* calloc:                                Other Builtins.     (line    6)
55472* caret GCC_COLORS capability:           Language Independent Options.
55473                                                             (line   76)
55474* carg:                                  Other Builtins.     (line    6)
55475* cargf:                                 Other Builtins.     (line    6)
55476* cargl:                                 Other Builtins.     (line    6)
55477* case labels in initializers:           Designated Inits.   (line    6)
55478* case ranges:                           Case Ranges.        (line    6)
55479* casin:                                 Other Builtins.     (line    6)
55480* casinf:                                Other Builtins.     (line    6)
55481* casinh:                                Other Builtins.     (line    6)
55482* casinhf:                               Other Builtins.     (line    6)
55483* casinhl:                               Other Builtins.     (line    6)
55484* casinl:                                Other Builtins.     (line    6)
55485* cast to a union:                       Cast to Union.      (line    6)
55486* catan:                                 Other Builtins.     (line    6)
55487* catanf:                                Other Builtins.     (line    6)
55488* catanh:                                Other Builtins.     (line    6)
55489* catanhf:                               Other Builtins.     (line    6)
55490* catanhl:                               Other Builtins.     (line    6)
55491* catanl:                                Other Builtins.     (line    6)
55492* cbrt:                                  Other Builtins.     (line    6)
55493* cbrtf:                                 Other Builtins.     (line    6)
55494* cbrtl:                                 Other Builtins.     (line    6)
55495* ccos:                                  Other Builtins.     (line    6)
55496* ccosf:                                 Other Builtins.     (line    6)
55497* ccosh:                                 Other Builtins.     (line    6)
55498* ccoshf:                                Other Builtins.     (line    6)
55499* ccoshl:                                Other Builtins.     (line    6)
55500* ccosl:                                 Other Builtins.     (line    6)
55501* ceil:                                  Other Builtins.     (line    6)
55502* ceilf:                                 Other Builtins.     (line    6)
55503* ceill:                                 Other Builtins.     (line    6)
55504* cexp:                                  Other Builtins.     (line    6)
55505* cexpf:                                 Other Builtins.     (line    6)
55506* cexpl:                                 Other Builtins.     (line    6)
55507* character set, execution:              Preprocessor Options.
55508                                                             (line  554)
55509* character set, input:                  Preprocessor Options.
55510                                                             (line  567)
55511* character set, input normalization:    Warning Options.    (line 1291)
55512* character set, wide execution:         Preprocessor Options.
55513                                                             (line  559)
55514* cimag:                                 Other Builtins.     (line    6)
55515* cimagf:                                Other Builtins.     (line    6)
55516* cimagl:                                Other Builtins.     (line    6)
55517* 'cleanup' attribute:                   Variable Attributes.
55518                                                             (line   89)
55519* clog:                                  Other Builtins.     (line    6)
55520* clogf:                                 Other Builtins.     (line    6)
55521* clogl:                                 Other Builtins.     (line    6)
55522* COBOL:                                 G++ and GCC.        (line   23)
55523* code generation conventions:           Code Gen Options.   (line    6)
55524* code, mixed with declarations:         Mixed Declarations. (line    6)
55525* 'cold' function attribute:             Function Attributes.
55526                                                             (line 1307)
55527* 'cold' label attribute:                Function Attributes.
55528                                                             (line 1325)
55529* command options:                       Invoking GCC.       (line    6)
55530* comments, C++ style:                   C++ Comments.       (line    6)
55531* 'common' attribute:                    Variable Attributes.
55532                                                             (line  104)
55533* comparison of signed and unsigned values, warning: Warning Options.
55534                                                             (line 1157)
55535* compiler bugs, reporting:              Bug Reporting.      (line    6)
55536* compiler compared to C++ preprocessor: G++ and GCC.        (line   35)
55537* compiler options, C++:                 C++ Dialect Options.
55538                                                             (line    6)
55539* compiler options, Objective-C and Objective-C++: Objective-C and Objective-C++ Dialect Options.
55540                                                             (line    6)
55541* compiler version, specifying:          Target Options.     (line    6)
55542* COMPILER_PATH:                         Environment Variables.
55543                                                             (line   91)
55544* complex conjugation:                   Complex.            (line   34)
55545* complex numbers:                       Complex.            (line    6)
55546* compound literals:                     Compound Literals.  (line    6)
55547* computed gotos:                        Labels as Values.   (line    6)
55548* conditional expressions, extensions:   Conditionals.       (line    6)
55549* conflicting types:                     Disappointments.    (line   21)
55550* conj:                                  Other Builtins.     (line    6)
55551* conjf:                                 Other Builtins.     (line    6)
55552* conjl:                                 Other Builtins.     (line    6)
55553* 'const' applied to function:           Function Attributes.
55554                                                             (line    6)
55555* 'const' function attribute:            Function Attributes.
55556                                                             (line  215)
55557* constants in constraints:              Simple Constraints. (line   68)
55558* constraint modifier characters:        Modifiers.          (line    6)
55559* constraint, matching:                  Simple Constraints. (line  137)
55560* constraints, 'asm':                    Constraints.        (line    6)
55561* constraints, machine specific:         Machine Constraints.
55562                                                             (line    6)
55563* constructing calls:                    Constructing Calls. (line    6)
55564* constructor expressions:               Compound Literals.  (line    6)
55565* 'constructor' function attribute:      Function Attributes.
55566                                                             (line  243)
55567* contributors:                          Contributors.       (line    6)
55568* copysign:                              Other Builtins.     (line    6)
55569* copysignf:                             Other Builtins.     (line    6)
55570* copysignl:                             Other Builtins.     (line    6)
55571* core dump:                             Bug Criteria.       (line    9)
55572* cos:                                   Other Builtins.     (line    6)
55573* cosf:                                  Other Builtins.     (line    6)
55574* cosh:                                  Other Builtins.     (line    6)
55575* coshf:                                 Other Builtins.     (line    6)
55576* coshl:                                 Other Builtins.     (line    6)
55577* cosl:                                  Other Builtins.     (line    6)
55578* CPATH:                                 Environment Variables.
55579                                                             (line  127)
55580* CPLUS_INCLUDE_PATH:                    Environment Variables.
55581                                                             (line  129)
55582* cpow:                                  Other Builtins.     (line    6)
55583* cpowf:                                 Other Builtins.     (line    6)
55584* cpowl:                                 Other Builtins.     (line    6)
55585* cproj:                                 Other Builtins.     (line    6)
55586* cprojf:                                Other Builtins.     (line    6)
55587* cprojl:                                Other Builtins.     (line    6)
55588* CR16 Options:                          CR16 Options.       (line    6)
55589* creal:                                 Other Builtins.     (line    6)
55590* crealf:                                Other Builtins.     (line    6)
55591* creall:                                Other Builtins.     (line    6)
55592* CRIS Options:                          CRIS Options.       (line    6)
55593* 'critical' attribute:                  Function Attributes.
55594                                                             (line  717)
55595* cross compiling:                       Target Options.     (line    6)
55596* csin:                                  Other Builtins.     (line    6)
55597* csinf:                                 Other Builtins.     (line    6)
55598* csinh:                                 Other Builtins.     (line    6)
55599* csinhf:                                Other Builtins.     (line    6)
55600* csinhl:                                Other Builtins.     (line    6)
55601* csinl:                                 Other Builtins.     (line    6)
55602* csqrt:                                 Other Builtins.     (line    6)
55603* csqrtf:                                Other Builtins.     (line    6)
55604* csqrtl:                                Other Builtins.     (line    6)
55605* ctan:                                  Other Builtins.     (line    6)
55606* ctanf:                                 Other Builtins.     (line    6)
55607* ctanh:                                 Other Builtins.     (line    6)
55608* ctanhf:                                Other Builtins.     (line    6)
55609* ctanhl:                                Other Builtins.     (line    6)
55610* ctanl:                                 Other Builtins.     (line    6)
55611* C_INCLUDE_PATH:                        Environment Variables.
55612                                                             (line  128)
55613* Darwin options:                        Darwin Options.     (line    6)
55614* dcgettext:                             Other Builtins.     (line    6)
55615* 'dd' integer suffix:                   Decimal Float.      (line    6)
55616* 'DD' integer suffix:                   Decimal Float.      (line    6)
55617* deallocating variable length arrays:   Variable Length.    (line   22)
55618* debugging information options:         Debugging Options.  (line    6)
55619* decimal floating types:                Decimal Float.      (line    6)
55620* declaration scope:                     Incompatibilities.  (line   80)
55621* declarations inside expressions:       Statement Exprs.    (line    6)
55622* declarations, mixed with code:         Mixed Declarations. (line    6)
55623* declaring attributes of functions:     Function Attributes.
55624                                                             (line    6)
55625* declaring static data in C++:          Static Definitions. (line    6)
55626* defining static data in C++:           Static Definitions. (line    6)
55627* dependencies for make as output:       Environment Variables.
55628                                                             (line  155)
55629* dependencies for make as output <1>:   Environment Variables.
55630                                                             (line  171)
55631* dependencies, 'make':                  Preprocessor Options.
55632                                                             (line  185)
55633* DEPENDENCIES_OUTPUT:                   Environment Variables.
55634                                                             (line  154)
55635* dependent name lookup:                 Name lookup.        (line    6)
55636* 'deprecated' attribute:                Variable Attributes.
55637                                                             (line  113)
55638* 'deprecated' attribute.:               Function Attributes.
55639                                                             (line  265)
55640* designated initializers:               Designated Inits.   (line    6)
55641* designator lists:                      Designated Inits.   (line   96)
55642* designators:                           Designated Inits.   (line   64)
55643* 'destructor' function attribute:       Function Attributes.
55644                                                             (line  243)
55645* 'df' integer suffix:                   Decimal Float.      (line    6)
55646* 'DF' integer suffix:                   Decimal Float.      (line    6)
55647* dgettext:                              Other Builtins.     (line    6)
55648* diagnostic messages:                   Language Independent Options.
55649                                                             (line    6)
55650* dialect options:                       C Dialect Options.  (line    6)
55651* digits in constraint:                  Simple Constraints. (line  125)
55652* directory options:                     Directory Options.  (line    6)
55653* 'disinterrupt' attribute:              Function Attributes.
55654                                                             (line  285)
55655* 'dl' integer suffix:                   Decimal Float.      (line    6)
55656* 'DL' integer suffix:                   Decimal Float.      (line    6)
55657* dollar signs in identifier names:      Dollar Signs.       (line    6)
55658* double-word arithmetic:                Long Long.          (line    6)
55659* downward funargs:                      Nested Functions.   (line    6)
55660* drem:                                  Other Builtins.     (line    6)
55661* dremf:                                 Other Builtins.     (line    6)
55662* dreml:                                 Other Builtins.     (line    6)
55663* 'E' in constraint:                     Simple Constraints. (line   87)
55664* earlyclobber operand:                  Modifiers.          (line   25)
55665* eight-bit data on the H8/300, H8/300H, and H8S: Function Attributes.
55666                                                             (line  375)
55667* 'EIND':                                AVR Options.        (line  222)
55668* empty structures:                      Empty Structures.   (line    6)
55669* Enable Cilk Plus:                      C Dialect Options.  (line  276)
55670* environment variables:                 Environment Variables.
55671                                                             (line    6)
55672* erf:                                   Other Builtins.     (line    6)
55673* erfc:                                  Other Builtins.     (line    6)
55674* erfcf:                                 Other Builtins.     (line    6)
55675* erfcl:                                 Other Builtins.     (line    6)
55676* erff:                                  Other Builtins.     (line    6)
55677* erfl:                                  Other Builtins.     (line    6)
55678* 'error' function attribute:            Function Attributes.
55679                                                             (line  185)
55680* error GCC_COLORS capability:           Language Independent Options.
55681                                                             (line   67)
55682* error messages:                        Warnings and Errors.
55683                                                             (line    6)
55684* escaped newlines:                      Escaped Newlines.   (line    6)
55685* exception handler functions:           Function Attributes.
55686                                                             (line  385)
55687* exception handler functions on the Blackfin processor: Function Attributes.
55688                                                             (line  390)
55689* exclamation point:                     Multi-Alternative.  (line   33)
55690* exit:                                  Other Builtins.     (line    6)
55691* exp:                                   Other Builtins.     (line    6)
55692* exp10:                                 Other Builtins.     (line    6)
55693* exp10f:                                Other Builtins.     (line    6)
55694* exp10l:                                Other Builtins.     (line    6)
55695* exp2:                                  Other Builtins.     (line    6)
55696* exp2f:                                 Other Builtins.     (line    6)
55697* exp2l:                                 Other Builtins.     (line    6)
55698* expf:                                  Other Builtins.     (line    6)
55699* expl:                                  Other Builtins.     (line    6)
55700* explicit register variables:           Explicit Reg Vars.  (line    6)
55701* expm1:                                 Other Builtins.     (line    6)
55702* expm1f:                                Other Builtins.     (line    6)
55703* expm1l:                                Other Builtins.     (line    6)
55704* expressions containing statements:     Statement Exprs.    (line    6)
55705* expressions, constructor:              Compound Literals.  (line    6)
55706* extended 'asm':                        Extended Asm.       (line    6)
55707* extensible constraints:                Simple Constraints. (line  161)
55708* extensions, '?:':                      Conditionals.       (line    6)
55709* extensions, C language:                C Extensions.       (line    6)
55710* extensions, C++ language:              C++ Extensions.     (line    6)
55711* external declaration scope:            Incompatibilities.  (line   80)
55712* 'externally_visible' attribute.:       Function Attributes.
55713                                                             (line  396)
55714* 'F' in constraint:                     Simple Constraints. (line   92)
55715* fabs:                                  Other Builtins.     (line    6)
55716* fabsf:                                 Other Builtins.     (line    6)
55717* fabsl:                                 Other Builtins.     (line    6)
55718* fatal signal:                          Bug Criteria.       (line    9)
55719* fdim:                                  Other Builtins.     (line    6)
55720* fdimf:                                 Other Builtins.     (line    6)
55721* fdiml:                                 Other Builtins.     (line    6)
55722* FDL, GNU Free Documentation License:   GNU Free Documentation License.
55723                                                             (line    6)
55724* ffs:                                   Other Builtins.     (line    6)
55725* file name suffix:                      Overall Options.    (line   14)
55726* file names:                            Link Options.       (line   10)
55727* fixed-point types:                     Fixed-Point.        (line    6)
55728* 'flatten' function attribute:          Function Attributes.
55729                                                             (line  178)
55730* flexible array members:                Zero Length.        (line    6)
55731* 'float' as function value type:        Incompatibilities.  (line  141)
55732* floating point precision:              Disappointments.    (line   68)
55733* floating-point precision:              Optimize Options.   (line 1917)
55734* floor:                                 Other Builtins.     (line    6)
55735* floorf:                                Other Builtins.     (line    6)
55736* floorl:                                Other Builtins.     (line    6)
55737* fma:                                   Other Builtins.     (line    6)
55738* fmaf:                                  Other Builtins.     (line    6)
55739* fmal:                                  Other Builtins.     (line    6)
55740* fmax:                                  Other Builtins.     (line    6)
55741* fmaxf:                                 Other Builtins.     (line    6)
55742* fmaxl:                                 Other Builtins.     (line    6)
55743* fmin:                                  Other Builtins.     (line    6)
55744* fminf:                                 Other Builtins.     (line    6)
55745* fminl:                                 Other Builtins.     (line    6)
55746* fmod:                                  Other Builtins.     (line    6)
55747* fmodf:                                 Other Builtins.     (line    6)
55748* fmodl:                                 Other Builtins.     (line    6)
55749* 'force_align_arg_pointer' attribute:   Function Attributes.
55750                                                             (line 1384)
55751* 'format' function attribute:           Function Attributes.
55752                                                             (line  453)
55753* 'format_arg' function attribute:       Function Attributes.
55754                                                             (line  518)
55755* Fortran:                               G++ and GCC.        (line    6)
55756* 'forwarder_section' attribute:         Function Attributes.
55757                                                             (line  756)
55758* forwarding calls:                      Constructing Calls. (line    6)
55759* fprintf:                               Other Builtins.     (line    6)
55760* fprintf_unlocked:                      Other Builtins.     (line    6)
55761* fputs:                                 Other Builtins.     (line    6)
55762* fputs_unlocked:                        Other Builtins.     (line    6)
55763* FR30 Options:                          FR30 Options.       (line    6)
55764* freestanding environment:              Standards.          (line   13)
55765* freestanding implementation:           Standards.          (line   13)
55766* frexp:                                 Other Builtins.     (line    6)
55767* frexpf:                                Other Builtins.     (line    6)
55768* frexpl:                                Other Builtins.     (line    6)
55769* FRV Options:                           FRV Options.        (line    6)
55770* fscanf:                                Other Builtins.     (line    6)
55771* 'fscanf', and constant strings:        Incompatibilities.  (line   17)
55772* function addressability on the M32R/D: Function Attributes.
55773                                                             (line  974)
55774* function attributes:                   Function Attributes.
55775                                                             (line    6)
55776* function pointers, arithmetic:         Pointer Arith.      (line    6)
55777* function prototype declarations:       Function Prototypes.
55778                                                             (line    6)
55779* function versions:                     Function Multiversioning.
55780                                                             (line    6)
55781* function without a prologue/epilogue code: Function Attributes.
55782                                                             (line 1046)
55783* function, size of pointer to:          Pointer Arith.      (line    6)
55784* functions called via pointer on the RS/6000 and PowerPC: Function Attributes.
55785                                                             (line  911)
55786* functions in arbitrary sections:       Function Attributes.
55787                                                             (line    6)
55788* functions that are dynamically resolved: Function Attributes.
55789                                                             (line    6)
55790* functions that are passed arguments in registers on the 386: Function Attributes.
55791                                                             (line    6)
55792* functions that are passed arguments in registers on the 386 <1>: Function Attributes.
55793                                                             (line 1349)
55794* functions that behave like malloc:     Function Attributes.
55795                                                             (line    6)
55796* functions that do not handle memory bank switching on 68HC11/68HC12: Function Attributes.
55797                                                             (line 1058)
55798* functions that do not pop the argument stack on the 386: Function Attributes.
55799                                                             (line    6)
55800* functions that do pop the argument stack on the 386: Function Attributes.
55801                                                             (line  209)
55802* functions that handle memory bank switching: Function Attributes.
55803                                                             (line  409)
55804* functions that have different compilation options on the 386: Function Attributes.
55805                                                             (line    6)
55806* functions that have different optimization options: Function Attributes.
55807                                                             (line    6)
55808* functions that have no side effects:   Function Attributes.
55809                                                             (line    6)
55810* functions that never return:           Function Attributes.
55811                                                             (line    6)
55812* functions that pop the argument stack on the 386: Function Attributes.
55813                                                             (line    6)
55814* functions that pop the argument stack on the 386 <1>: Function Attributes.
55815                                                             (line  435)
55816* functions that pop the argument stack on the 386 <2>: Function Attributes.
55817                                                             (line  443)
55818* functions that pop the argument stack on the 386 <3>: Function Attributes.
55819                                                             (line 1507)
55820* functions that return more than once:  Function Attributes.
55821                                                             (line    6)
55822* functions with non-null pointer arguments: Function Attributes.
55823                                                             (line    6)
55824* functions with 'printf', 'scanf', 'strftime' or 'strfmon' style arguments: Function Attributes.
55825                                                             (line    6)
55826* 'G' in constraint:                     Simple Constraints. (line   96)
55827* 'g' in constraint:                     Simple Constraints. (line  118)
55828* g++:                                   Invoking G++.       (line   14)
55829* G++:                                   G++ and GCC.        (line   30)
55830* gamma:                                 Other Builtins.     (line    6)
55831* gammaf:                                Other Builtins.     (line    6)
55832* gammaf_r:                              Other Builtins.     (line    6)
55833* gammal:                                Other Builtins.     (line    6)
55834* gammal_r:                              Other Builtins.     (line    6)
55835* gamma_r:                               Other Builtins.     (line    6)
55836* GCC:                                   G++ and GCC.        (line    6)
55837* GCC command options:                   Invoking GCC.       (line    6)
55838* GCC_COLORS environment variable:       Language Independent Options.
55839                                                             (line   35)
55840* GCC_COMPARE_DEBUG:                     Environment Variables.
55841                                                             (line   52)
55842* GCC_EXEC_PREFIX:                       Environment Variables.
55843                                                             (line   57)
55844* 'gcc_struct':                          Type Attributes.    (line  323)
55845* 'gcc_struct' attribute:                Variable Attributes.
55846                                                             (line  438)
55847* 'gcov':                                Debugging Options.  (line  495)
55848* gettext:                               Other Builtins.     (line    6)
55849* global offset table:                   Code Gen Options.   (line  279)
55850* global register after 'longjmp':       Global Reg Vars.    (line   65)
55851* global register variables:             Global Reg Vars.    (line    6)
55852* GNAT:                                  G++ and GCC.        (line   30)
55853* GNU C Compiler:                        G++ and GCC.        (line    6)
55854* GNU Compiler Collection:               G++ and GCC.        (line    6)
55855* 'gnu_inline' function attribute:       Function Attributes.
55856                                                             (line  130)
55857* Go:                                    G++ and GCC.        (line    6)
55858* goto with computed label:              Labels as Values.   (line    6)
55859* 'gprof':                               Debugging Options.  (line  420)
55860* grouping options:                      Invoking GCC.       (line   26)
55861* 'H' in constraint:                     Simple Constraints. (line   96)
55862* half-precision floating point:         Half-Precision.     (line    6)
55863* hardware models and configurations, specifying: Submodel Options.
55864                                                             (line    6)
55865* hex floats:                            Hex Floats.         (line    6)
55866* highlight, color, colour:              Language Independent Options.
55867                                                             (line   35)
55868* 'hk' fixed-suffix:                     Fixed-Point.        (line    6)
55869* 'HK' fixed-suffix:                     Fixed-Point.        (line    6)
55870* hosted environment:                    Standards.          (line   13)
55871* hosted environment <1>:                C Dialect Options.  (line  244)
55872* hosted environment <2>:                C Dialect Options.  (line  252)
55873* hosted implementation:                 Standards.          (line   13)
55874* 'hot' function attribute:              Function Attributes.
55875                                                             (line 1285)
55876* 'hot' label attribute:                 Function Attributes.
55877                                                             (line 1297)
55878* 'hotpatch' attribute:                  Function Attributes.
55879                                                             (line 1037)
55880* HPPA Options:                          HPPA Options.       (line    6)
55881* 'hr' fixed-suffix:                     Fixed-Point.        (line    6)
55882* 'HR' fixed-suffix:                     Fixed-Point.        (line    6)
55883* hypot:                                 Other Builtins.     (line    6)
55884* hypotf:                                Other Builtins.     (line    6)
55885* hypotl:                                Other Builtins.     (line    6)
55886* 'i' in constraint:                     Simple Constraints. (line   68)
55887* 'I' in constraint:                     Simple Constraints. (line   79)
55888* i386 and x86-64 Windows Options:       i386 and x86-64 Windows Options.
55889                                                             (line    6)
55890* i386 Options:                          i386 and x86-64 Options.
55891                                                             (line    6)
55892* IA-64 Options:                         IA-64 Options.      (line    6)
55893* IBM RS/6000 and PowerPC Options:       RS/6000 and PowerPC Options.
55894                                                             (line    6)
55895* identifier names, dollar signs in:     Dollar Signs.       (line    6)
55896* identifiers, names in assembler code:  Asm Labels.         (line    6)
55897* 'ifunc' attribute:                     Function Attributes.
55898                                                             (line  625)
55899* ilogb:                                 Other Builtins.     (line    6)
55900* ilogbf:                                Other Builtins.     (line    6)
55901* ilogbl:                                Other Builtins.     (line    6)
55902* imaxabs:                               Other Builtins.     (line    6)
55903* implementation-defined behavior, C language: C Implementation.
55904                                                             (line    6)
55905* implementation-defined behavior, C++ language: C++ Implementation.
55906                                                             (line    6)
55907* implied '#pragma implementation':      C++ Interface.      (line   46)
55908* incompatibilities of GCC:              Incompatibilities.  (line    6)
55909* increment operators:                   Bug Criteria.       (line   17)
55910* index:                                 Other Builtins.     (line    6)
55911* indirect calls on ARC:                 Function Attributes.
55912                                                             (line  888)
55913* indirect calls on ARM:                 Function Attributes.
55914                                                             (line  888)
55915* indirect calls on Epiphany:            Function Attributes.
55916                                                             (line  888)
55917* indirect calls on MIPS:                Function Attributes.
55918                                                             (line  923)
55919* initializations in expressions:        Compound Literals.  (line    6)
55920* initializers with labeled elements:    Designated Inits.   (line    6)
55921* initializers, non-constant:            Initializers.       (line    6)
55922* 'init_priority' attribute:             C++ Attributes.     (line   35)
55923* 'inline' automatic for C++ member fns: Inline.             (line   71)
55924* inline functions:                      Inline.             (line    6)
55925* inline functions, omission of:         Inline.             (line   51)
55926* inlining and C++ pragmas:              C++ Interface.      (line   66)
55927* installation trouble:                  Trouble.            (line    6)
55928* integrating function code:             Inline.             (line    6)
55929* Intel 386 Options:                     i386 and x86-64 Options.
55930                                                             (line    6)
55931* interface and implementation headers, C++: C++ Interface.  (line    6)
55932* intermediate C version, nonexistent:   G++ and GCC.        (line   35)
55933* interrupt handler functions:           Function Attributes.
55934                                                             (line  173)
55935* interrupt handler functions <1>:       Function Attributes.
55936                                                             (line  429)
55937* interrupt handler functions <2>:       Function Attributes.
55938                                                             (line  665)
55939* interrupt handler functions on the AVR processors: Function Attributes.
55940                                                             (line 1479)
55941* interrupt handler functions on the Blackfin, m68k, H8/300 and SH processors: Function Attributes.
55942                                                             (line  826)
55943* interrupt service routines on ARM:     Function Attributes.
55944                                                             (line  840)
55945* interrupt thread functions on fido:    Function Attributes.
55946                                                             (line  832)
55947* introduction:                          Top.                (line    6)
55948* invalid assembly code:                 Bug Criteria.       (line   12)
55949* invalid input:                         Bug Criteria.       (line   42)
55950* invoking 'g++':                        Invoking G++.       (line   22)
55951* isalnum:                               Other Builtins.     (line    6)
55952* isalpha:                               Other Builtins.     (line    6)
55953* isascii:                               Other Builtins.     (line    6)
55954* isblank:                               Other Builtins.     (line    6)
55955* iscntrl:                               Other Builtins.     (line    6)
55956* isdigit:                               Other Builtins.     (line    6)
55957* isgraph:                               Other Builtins.     (line    6)
55958* islower:                               Other Builtins.     (line    6)
55959* ISO 9899:                              Standards.          (line   13)
55960* ISO C:                                 Standards.          (line   13)
55961* ISO C standard:                        Standards.          (line   13)
55962* ISO C11:                               Standards.          (line   13)
55963* ISO C1X:                               Standards.          (line   13)
55964* ISO C90:                               Standards.          (line   13)
55965* ISO C94:                               Standards.          (line   13)
55966* ISO C95:                               Standards.          (line   13)
55967* ISO C99:                               Standards.          (line   13)
55968* ISO C9X:                               Standards.          (line   13)
55969* ISO support:                           C Dialect Options.  (line   10)
55970* ISO/IEC 9899:                          Standards.          (line   13)
55971* isprint:                               Other Builtins.     (line    6)
55972* ispunct:                               Other Builtins.     (line    6)
55973* isspace:                               Other Builtins.     (line    6)
55974* isupper:                               Other Builtins.     (line    6)
55975* iswalnum:                              Other Builtins.     (line    6)
55976* iswalpha:                              Other Builtins.     (line    6)
55977* iswblank:                              Other Builtins.     (line    6)
55978* iswcntrl:                              Other Builtins.     (line    6)
55979* iswdigit:                              Other Builtins.     (line    6)
55980* iswgraph:                              Other Builtins.     (line    6)
55981* iswlower:                              Other Builtins.     (line    6)
55982* iswprint:                              Other Builtins.     (line    6)
55983* iswpunct:                              Other Builtins.     (line    6)
55984* iswspace:                              Other Builtins.     (line    6)
55985* iswupper:                              Other Builtins.     (line    6)
55986* iswxdigit:                             Other Builtins.     (line    6)
55987* isxdigit:                              Other Builtins.     (line    6)
55988* j0:                                    Other Builtins.     (line    6)
55989* j0f:                                   Other Builtins.     (line    6)
55990* j0l:                                   Other Builtins.     (line    6)
55991* j1:                                    Other Builtins.     (line    6)
55992* j1f:                                   Other Builtins.     (line    6)
55993* j1l:                                   Other Builtins.     (line    6)
55994* Java:                                  G++ and GCC.        (line    6)
55995* 'java_interface' attribute:            C++ Attributes.     (line   56)
55996* jn:                                    Other Builtins.     (line    6)
55997* jnf:                                   Other Builtins.     (line    6)
55998* jnl:                                   Other Builtins.     (line    6)
55999* 'k' fixed-suffix:                      Fixed-Point.        (line    6)
56000* 'K' fixed-suffix:                      Fixed-Point.        (line    6)
56001* 'keep_interrupts_masked' attribute:    Function Attributes.
56002                                                             (line  778)
56003* keywords, alternate:                   Alternate Keywords. (line    6)
56004* known causes of trouble:               Trouble.            (line    6)
56005* 'l1_data' variable attribute:          Variable Attributes.
56006                                                             (line  352)
56007* 'l1_data_A' variable attribute:        Variable Attributes.
56008                                                             (line  352)
56009* 'l1_data_B' variable attribute:        Variable Attributes.
56010                                                             (line  352)
56011* 'l1_text' function attribute:          Function Attributes.
56012                                                             (line  849)
56013* 'l2' function attribute:               Function Attributes.
56014                                                             (line  855)
56015* 'l2' variable attribute:               Variable Attributes.
56016                                                             (line  360)
56017* labeled elements in initializers:      Designated Inits.   (line    6)
56018* labels as values:                      Labels as Values.   (line    6)
56019* labs:                                  Other Builtins.     (line    6)
56020* LANG:                                  Environment Variables.
56021                                                             (line   21)
56022* LANG <1>:                              Environment Variables.
56023                                                             (line  106)
56024* language dialect options:              C Dialect Options.  (line    6)
56025* LC_ALL:                                Environment Variables.
56026                                                             (line   21)
56027* LC_CTYPE:                              Environment Variables.
56028                                                             (line   21)
56029* LC_MESSAGES:                           Environment Variables.
56030                                                             (line   21)
56031* ldexp:                                 Other Builtins.     (line    6)
56032* ldexpf:                                Other Builtins.     (line    6)
56033* ldexpl:                                Other Builtins.     (line    6)
56034* 'leaf' function attribute:             Function Attributes.
56035                                                             (line  861)
56036* length-zero arrays:                    Zero Length.        (line    6)
56037* lgamma:                                Other Builtins.     (line    6)
56038* lgammaf:                               Other Builtins.     (line    6)
56039* lgammaf_r:                             Other Builtins.     (line    6)
56040* lgammal:                               Other Builtins.     (line    6)
56041* lgammal_r:                             Other Builtins.     (line    6)
56042* lgamma_r:                              Other Builtins.     (line    6)
56043* Libraries:                             Link Options.       (line   24)
56044* LIBRARY_PATH:                          Environment Variables.
56045                                                             (line   97)
56046* link options:                          Link Options.       (line    6)
56047* linker script:                         Link Options.       (line  213)
56048* 'lk' fixed-suffix:                     Fixed-Point.        (line    6)
56049* 'LK' fixed-suffix:                     Fixed-Point.        (line    6)
56050* 'LL' integer suffix:                   Long Long.          (line    6)
56051* llabs:                                 Other Builtins.     (line    6)
56052* 'llk' fixed-suffix:                    Fixed-Point.        (line    6)
56053* 'LLK' fixed-suffix:                    Fixed-Point.        (line    6)
56054* 'llr' fixed-suffix:                    Fixed-Point.        (line    6)
56055* 'LLR' fixed-suffix:                    Fixed-Point.        (line    6)
56056* llrint:                                Other Builtins.     (line    6)
56057* llrintf:                               Other Builtins.     (line    6)
56058* llrintl:                               Other Builtins.     (line    6)
56059* llround:                               Other Builtins.     (line    6)
56060* llroundf:                              Other Builtins.     (line    6)
56061* llroundl:                              Other Builtins.     (line    6)
56062* LM32 options:                          LM32 Options.       (line    6)
56063* load address instruction:              Simple Constraints. (line  152)
56064* local labels:                          Local Labels.       (line    6)
56065* local variables in macros:             Typeof.             (line   46)
56066* local variables, specifying registers: Local Reg Vars.     (line    6)
56067* locale:                                Environment Variables.
56068                                                             (line   21)
56069* locale definition:                     Environment Variables.
56070                                                             (line  106)
56071* locus GCC_COLORS capability:           Language Independent Options.
56072                                                             (line   79)
56073* log:                                   Other Builtins.     (line    6)
56074* log10:                                 Other Builtins.     (line    6)
56075* log10f:                                Other Builtins.     (line    6)
56076* log10l:                                Other Builtins.     (line    6)
56077* log1p:                                 Other Builtins.     (line    6)
56078* log1pf:                                Other Builtins.     (line    6)
56079* log1pl:                                Other Builtins.     (line    6)
56080* log2:                                  Other Builtins.     (line    6)
56081* log2f:                                 Other Builtins.     (line    6)
56082* log2l:                                 Other Builtins.     (line    6)
56083* logb:                                  Other Builtins.     (line    6)
56084* logbf:                                 Other Builtins.     (line    6)
56085* logbl:                                 Other Builtins.     (line    6)
56086* logf:                                  Other Builtins.     (line    6)
56087* logl:                                  Other Builtins.     (line    6)
56088* 'long long' data types:                Long Long.          (line    6)
56089* longjmp:                               Global Reg Vars.    (line   65)
56090* 'longjmp' incompatibilities:           Incompatibilities.  (line   39)
56091* 'longjmp' warnings:                    Warning Options.    (line  668)
56092* 'lr' fixed-suffix:                     Fixed-Point.        (line    6)
56093* 'LR' fixed-suffix:                     Fixed-Point.        (line    6)
56094* lrint:                                 Other Builtins.     (line    6)
56095* lrintf:                                Other Builtins.     (line    6)
56096* lrintl:                                Other Builtins.     (line    6)
56097* lround:                                Other Builtins.     (line    6)
56098* lroundf:                               Other Builtins.     (line    6)
56099* lroundl:                               Other Builtins.     (line    6)
56100* 'm' in constraint:                     Simple Constraints. (line   17)
56101* M32C options:                          M32C Options.       (line    6)
56102* M32R/D options:                        M32R/D Options.     (line    6)
56103* M680x0 options:                        M680x0 Options.     (line    6)
56104* machine dependent options:             Submodel Options.   (line    6)
56105* machine specific constraints:          Machine Constraints.
56106                                                             (line    6)
56107* macro with variable arguments:         Variadic Macros.    (line    6)
56108* macros containing 'asm':               Extended Asm.       (line  237)
56109* macros, inline alternative:            Inline.             (line    6)
56110* macros, local labels:                  Local Labels.       (line    6)
56111* macros, local variables in:            Typeof.             (line   46)
56112* macros, statements in expressions:     Statement Exprs.    (line    6)
56113* macros, types of arguments:            Typeof.             (line    6)
56114* 'make':                                Preprocessor Options.
56115                                                             (line  185)
56116* malloc:                                Other Builtins.     (line    6)
56117* 'malloc' attribute:                    Function Attributes.
56118                                                             (line  933)
56119* matching constraint:                   Simple Constraints. (line  137)
56120* MCore options:                         MCore Options.      (line    6)
56121* member fns, automatically 'inline':    Inline.             (line   71)
56122* memchr:                                Other Builtins.     (line    6)
56123* memcmp:                                Other Builtins.     (line    6)
56124* memcpy:                                Other Builtins.     (line    6)
56125* memory references in constraints:      Simple Constraints. (line   17)
56126* mempcpy:                               Other Builtins.     (line    6)
56127* memset:                                Other Builtins.     (line    6)
56128* MeP options:                           MeP Options.        (line    6)
56129* Mercury:                               G++ and GCC.        (line   23)
56130* message formatting:                    Language Independent Options.
56131                                                             (line    6)
56132* messages, warning:                     Warning Options.    (line    6)
56133* messages, warning and error:           Warnings and Errors.
56134                                                             (line    6)
56135* MicroBlaze Options:                    MicroBlaze Options. (line    6)
56136* 'micromips' attribute:                 Function Attributes.
56137                                                             (line  957)
56138* middle-operands, omitted:              Conditionals.       (line    6)
56139* MIPS options:                          MIPS Options.       (line    6)
56140* 'mips16' attribute:                    Function Attributes.
56141                                                             (line  942)
56142* misunderstandings in C++:              C++ Misunderstandings.
56143                                                             (line    6)
56144* mixed declarations and code:           Mixed Declarations. (line    6)
56145* 'mktemp', and constant strings:        Incompatibilities.  (line   13)
56146* MMIX Options:                          MMIX Options.       (line    6)
56147* MN10300 options:                       MN10300 Options.    (line    6)
56148* 'mode' attribute:                      Variable Attributes.
56149                                                             (line  133)
56150* modf:                                  Other Builtins.     (line    6)
56151* modff:                                 Other Builtins.     (line    6)
56152* modfl:                                 Other Builtins.     (line    6)
56153* modifiers in constraints:              Modifiers.          (line    6)
56154* Moxie Options:                         Moxie Options.      (line    6)
56155* MSP430 Options:                        MSP430 Options.     (line    6)
56156* 'ms_abi' attribute:                    Function Attributes.
56157                                                             (line 1003)
56158* 'ms_hook_prologue' attribute:          Function Attributes.
56159                                                             (line 1030)
56160* 'ms_struct':                           Type Attributes.    (line  323)
56161* 'ms_struct' attribute:                 Variable Attributes.
56162                                                             (line  438)
56163* multiple alternative constraints:      Multi-Alternative.  (line    6)
56164* multiprecision arithmetic:             Long Long.          (line    6)
56165* 'n' in constraint:                     Simple Constraints. (line   73)
56166* Named Address Spaces:                  Named Address Spaces.
56167                                                             (line    6)
56168* names used in assembler code:          Asm Labels.         (line    6)
56169* naming convention, implementation headers: C++ Interface.  (line   46)
56170* NDS32 Options:                         NDS32 Options.      (line    6)
56171* nearbyint:                             Other Builtins.     (line    6)
56172* nearbyintf:                            Other Builtins.     (line    6)
56173* nearbyintl:                            Other Builtins.     (line    6)
56174* 'nested' attribute:                    Function Attributes.
56175                                                             (line  806)
56176* nested functions:                      Nested Functions.   (line    6)
56177* 'nested_ready' attribute:              Function Attributes.
56178                                                             (line  810)
56179* newlines (escaped):                    Escaped Newlines.   (line    6)
56180* nextafter:                             Other Builtins.     (line    6)
56181* nextafterf:                            Other Builtins.     (line    6)
56182* nextafterl:                            Other Builtins.     (line    6)
56183* nexttoward:                            Other Builtins.     (line    6)
56184* nexttowardf:                           Other Builtins.     (line    6)
56185* nexttowardl:                           Other Builtins.     (line    6)
56186* NFC:                                   Warning Options.    (line 1291)
56187* NFKC:                                  Warning Options.    (line 1291)
56188* Nios II options:                       Nios II Options.    (line    6)
56189* 'nmi' attribute:                       Function Attributes.
56190                                                             (line 1371)
56191* NMI handler functions on the Blackfin processor: Function Attributes.
56192                                                             (line 1073)
56193* 'noclone' function attribute:          Function Attributes.
56194                                                             (line 1107)
56195* 'nocommon' attribute:                  Variable Attributes.
56196                                                             (line  104)
56197* 'nocompression' attribute:             Function Attributes.
56198                                                             (line 1079)
56199* 'noinline' function attribute:         Function Attributes.
56200                                                             (line 1096)
56201* 'nomicromips' attribute:               Function Attributes.
56202                                                             (line  957)
56203* 'nomips16' attribute:                  Function Attributes.
56204                                                             (line  942)
56205* non-constant initializers:             Initializers.       (line    6)
56206* non-static inline function:            Inline.             (line   85)
56207* 'nonnull' function attribute:          Function Attributes.
56208                                                             (line 1113)
56209* 'noreturn' function attribute:         Function Attributes.
56210                                                             (line 1147)
56211* 'nosave_low_regs' attribute:           Function Attributes.
56212                                                             (line 1197)
56213* note GCC_COLORS capability:            Language Independent Options.
56214                                                             (line   73)
56215* 'nothrow' function attribute:          Function Attributes.
56216                                                             (line 1189)
56217* 'not_nested' attribute:                Function Attributes.
56218                                                             (line  808)
56219* 'no_instrument_function' function attribute: Function Attributes.
56220                                                             (line 1085)
56221* 'no_sanitize_address' function attribute: Function Attributes.
56222                                                             (line 1335)
56223* 'no_sanitize_undefined' function attribute: Function Attributes.
56224                                                             (line 1343)
56225* 'no_split_stack' function attribute:   Function Attributes.
56226                                                             (line 1090)
56227* 'o' in constraint:                     Simple Constraints. (line   23)
56228* OBJC_INCLUDE_PATH:                     Environment Variables.
56229                                                             (line  130)
56230* Objective-C:                           G++ and GCC.        (line    6)
56231* Objective-C <1>:                       Standards.          (line  162)
56232* Objective-C and Objective-C++ options, command-line: Objective-C and Objective-C++ Dialect Options.
56233                                                             (line    6)
56234* Objective-C++:                         G++ and GCC.        (line    6)
56235* Objective-C++ <1>:                     Standards.          (line  162)
56236* offsettable address:                   Simple Constraints. (line   23)
56237* old-style function definitions:        Function Prototypes.
56238                                                             (line    6)
56239* omitted middle-operands:               Conditionals.       (line    6)
56240* open coding:                           Inline.             (line    6)
56241* OpenMP parallel:                       C Dialect Options.  (line  263)
56242* OpenMP SIMD:                           C Dialect Options.  (line  272)
56243* operand constraints, 'asm':            Constraints.        (line    6)
56244* 'optimize' function attribute:         Function Attributes.
56245                                                             (line 1203)
56246* optimize options:                      Optimize Options.   (line    6)
56247* options to control diagnostics formatting: Language Independent Options.
56248                                                             (line    6)
56249* options to control warnings:           Warning Options.    (line    6)
56250* options, C++:                          C++ Dialect Options.
56251                                                             (line    6)
56252* options, code generation:              Code Gen Options.   (line    6)
56253* options, debugging:                    Debugging Options.  (line    6)
56254* options, dialect:                      C Dialect Options.  (line    6)
56255* options, directory search:             Directory Options.  (line    6)
56256* options, GCC command:                  Invoking GCC.       (line    6)
56257* options, grouping:                     Invoking GCC.       (line   26)
56258* options, linking:                      Link Options.       (line    6)
56259* options, Objective-C and Objective-C++: Objective-C and Objective-C++ Dialect Options.
56260                                                             (line    6)
56261* options, optimization:                 Optimize Options.   (line    6)
56262* options, order:                        Invoking GCC.       (line   30)
56263* options, preprocessor:                 Preprocessor Options.
56264                                                             (line    6)
56265* order of evaluation, side effects:     Non-bugs.           (line  196)
56266* order of options:                      Invoking GCC.       (line   30)
56267* 'OS_main' AVR function attribute:      Function Attributes.
56268                                                             (line 1220)
56269* 'OS_task' AVR function attribute:      Function Attributes.
56270                                                             (line 1220)
56271* other register constraints:            Simple Constraints. (line  161)
56272* output file option:                    Overall Options.    (line  191)
56273* overloaded virtual function, warning:  C++ Dialect Options.
56274                                                             (line  655)
56275* 'p' in constraint:                     Simple Constraints. (line  152)
56276* 'packed' attribute:                    Variable Attributes.
56277                                                             (line  144)
56278* parameter forward declaration:         Variable Length.    (line   68)
56279* 'partial_save' attribute:              Function Attributes.
56280                                                             (line  818)
56281* Pascal:                                G++ and GCC.        (line   23)
56282* 'pcs' function attribute:              Function Attributes.
56283                                                             (line 1244)
56284* PDP-11 Options:                        PDP-11 Options.     (line    6)
56285* PIC:                                   Code Gen Options.   (line  279)
56286* picoChip options:                      picoChip Options.   (line    6)
56287* pmf:                                   Bound member functions.
56288                                                             (line    6)
56289* pointer arguments:                     Function Attributes.
56290                                                             (line  220)
56291* pointer to member function:            Bound member functions.
56292                                                             (line    6)
56293* portions of temporary objects, pointers to: Temporaries.   (line    6)
56294* pow:                                   Other Builtins.     (line    6)
56295* pow10:                                 Other Builtins.     (line    6)
56296* pow10f:                                Other Builtins.     (line    6)
56297* pow10l:                                Other Builtins.     (line    6)
56298* PowerPC options:                       PowerPC Options.    (line    6)
56299* powf:                                  Other Builtins.     (line    6)
56300* powl:                                  Other Builtins.     (line    6)
56301* pragma GCC ivdep:                      Loop-Specific Pragmas.
56302                                                             (line    7)
56303* pragma GCC optimize:                   Function Specific Option Pragmas.
56304                                                             (line   20)
56305* pragma GCC pop_options:                Function Specific Option Pragmas.
56306                                                             (line   34)
56307* pragma GCC push_options:               Function Specific Option Pragmas.
56308                                                             (line   34)
56309* pragma GCC reset_options:              Function Specific Option Pragmas.
56310                                                             (line   45)
56311* pragma GCC target:                     Function Specific Option Pragmas.
56312                                                             (line    7)
56313* pragma, address:                       M32C Pragmas.       (line   15)
56314* pragma, align:                         Solaris Pragmas.    (line   11)
56315* pragma, call:                          MeP Pragmas.        (line   48)
56316* pragma, coprocessor available:         MeP Pragmas.        (line   13)
56317* pragma, coprocessor call_saved:        MeP Pragmas.        (line   20)
56318* pragma, coprocessor subclass:          MeP Pragmas.        (line   28)
56319* pragma, custom io_volatile:            MeP Pragmas.        (line    7)
56320* pragma, diagnostic:                    Diagnostic Pragmas. (line   14)
56321* pragma, diagnostic <1>:                Diagnostic Pragmas. (line   57)
56322* pragma, disinterrupt:                  MeP Pragmas.        (line   38)
56323* pragma, fini:                          Solaris Pragmas.    (line   20)
56324* pragma, init:                          Solaris Pragmas.    (line   26)
56325* pragma, longcall:                      RS/6000 and PowerPC Pragmas.
56326                                                             (line   14)
56327* pragma, long_calls:                    ARM Pragmas.        (line   11)
56328* pragma, long_calls_off:                ARM Pragmas.        (line   17)
56329* pragma, mark:                          Darwin Pragmas.     (line   11)
56330* pragma, memregs:                       M32C Pragmas.       (line    7)
56331* pragma, no_long_calls:                 ARM Pragmas.        (line   14)
56332* pragma, options align:                 Darwin Pragmas.     (line   14)
56333* pragma, pop_macro:                     Push/Pop Macro Pragmas.
56334                                                             (line   15)
56335* pragma, push_macro:                    Push/Pop Macro Pragmas.
56336                                                             (line   11)
56337* pragma, reason for not using:          Function Attributes.
56338                                                             (line 2055)
56339* pragma, redefine_extname:              Symbol-Renaming Pragmas.
56340                                                             (line   12)
56341* pragma, segment:                       Darwin Pragmas.     (line   21)
56342* pragma, unused:                        Darwin Pragmas.     (line   24)
56343* pragma, visibility:                    Visibility Pragmas. (line    8)
56344* pragma, weak:                          Weak Pragmas.       (line   10)
56345* pragmas:                               Pragmas.            (line    6)
56346* pragmas in C++, effect on inlining:    C++ Interface.      (line   66)
56347* pragmas, interface and implementation: C++ Interface.      (line    6)
56348* pragmas, warning of unknown:           Warning Options.    (line  685)
56349* precompiled headers:                   Precompiled Headers.
56350                                                             (line    6)
56351* preprocessing numbers:                 Incompatibilities.  (line  173)
56352* preprocessing tokens:                  Incompatibilities.  (line  173)
56353* preprocessor options:                  Preprocessor Options.
56354                                                             (line    6)
56355* printf:                                Other Builtins.     (line    6)
56356* printf_unlocked:                       Other Builtins.     (line    6)
56357* 'prof':                                Debugging Options.  (line  414)
56358* 'progmem' AVR variable attribute:      Variable Attributes.
56359                                                             (line  314)
56360* promotion of formal parameters:        Function Prototypes.
56361                                                             (line    6)
56362* 'pure' function attribute:             Function Attributes.
56363                                                             (line 1263)
56364* push address instruction:              Simple Constraints. (line  152)
56365* putchar:                               Other Builtins.     (line    6)
56366* puts:                                  Other Builtins.     (line    6)
56367* 'q' floating point suffix:             Floating Types.     (line    6)
56368* 'Q' floating point suffix:             Floating Types.     (line    6)
56369* 'qsort', and global register variables: Global Reg Vars.   (line   41)
56370* question mark:                         Multi-Alternative.  (line   27)
56371* quote GCC_COLORS capability:           Language Independent Options.
56372                                                             (line   83)
56373* 'r' fixed-suffix:                      Fixed-Point.        (line    6)
56374* 'R' fixed-suffix:                      Fixed-Point.        (line    6)
56375* 'r' in constraint:                     Simple Constraints. (line   64)
56376* 'RAMPD':                               AVR Options.        (line  333)
56377* 'RAMPX':                               AVR Options.        (line  333)
56378* 'RAMPY':                               AVR Options.        (line  333)
56379* 'RAMPZ':                               AVR Options.        (line  333)
56380* ranges in case statements:             Case Ranges.        (line    6)
56381* read-only strings:                     Incompatibilities.  (line    9)
56382* 'reentrant' attribute:                 Function Attributes.
56383                                                             (line  723)
56384* register variable after 'longjmp':     Global Reg Vars.    (line   65)
56385* registers:                             Extended Asm.       (line    6)
56386* registers for local variables:         Local Reg Vars.     (line    6)
56387* registers in constraints:              Simple Constraints. (line   64)
56388* registers, global allocation:          Explicit Reg Vars.  (line    6)
56389* registers, global variables in:        Global Reg Vars.    (line    6)
56390* 'regparm' attribute:                   Function Attributes.
56391                                                             (line 1349)
56392* relocation truncated to fit (ColdFire): M680x0 Options.    (line  325)
56393* relocation truncated to fit (MIPS):    MIPS Options.       (line  207)
56394* remainder:                             Other Builtins.     (line    6)
56395* remainderf:                            Other Builtins.     (line    6)
56396* remainderl:                            Other Builtins.     (line    6)
56397* remquo:                                Other Builtins.     (line    6)
56398* remquof:                               Other Builtins.     (line    6)
56399* remquol:                               Other Builtins.     (line    6)
56400* 'renesas' attribute:                   Function Attributes.
56401                                                             (line 1392)
56402* reordering, warning:                   C++ Dialect Options.
56403                                                             (line  573)
56404* reporting bugs:                        Bugs.               (line    6)
56405* 'resbank' attribute:                   Function Attributes.
56406                                                             (line 1396)
56407* reset handler functions:               Function Attributes.
56408                                                             (line 1366)
56409* rest argument (in macro):              Variadic Macros.    (line    6)
56410* restricted pointers:                   Restricted Pointers.
56411                                                             (line    6)
56412* restricted references:                 Restricted Pointers.
56413                                                             (line    6)
56414* restricted this pointer:               Restricted Pointers.
56415                                                             (line    6)
56416* 'returns_nonnull' function attribute:  Function Attributes.
56417                                                             (line 1137)
56418* 'returns_twice' attribute:             Function Attributes.
56419                                                             (line 1410)
56420* rindex:                                Other Builtins.     (line    6)
56421* rint:                                  Other Builtins.     (line    6)
56422* rintf:                                 Other Builtins.     (line    6)
56423* rintl:                                 Other Builtins.     (line    6)
56424* RL78 Options:                          RL78 Options.       (line    6)
56425* round:                                 Other Builtins.     (line    6)
56426* roundf:                                Other Builtins.     (line    6)
56427* roundl:                                Other Builtins.     (line    6)
56428* RS/6000 and PowerPC Options:           RS/6000 and PowerPC Options.
56429                                                             (line    6)
56430* RTTI:                                  Vague Linkage.      (line   42)
56431* run-time options:                      Code Gen Options.   (line    6)
56432* RX Options:                            RX Options.         (line    6)
56433* 's' in constraint:                     Simple Constraints. (line  100)
56434* S/390 and zSeries Options:             S/390 and zSeries Options.
56435                                                             (line    6)
56436* save all registers on the Blackfin, H8/300, H8/300H, and H8S: Function Attributes.
56437                                                             (line 1419)
56438* save volatile registers on the MicroBlaze: Function Attributes.
56439                                                             (line 1424)
56440* 'save_all' attribute:                  Function Attributes.
56441                                                             (line  815)
56442* scalb:                                 Other Builtins.     (line    6)
56443* scalbf:                                Other Builtins.     (line    6)
56444* scalbl:                                Other Builtins.     (line    6)
56445* scalbln:                               Other Builtins.     (line    6)
56446* scalblnf:                              Other Builtins.     (line    6)
56447* scalblnf <1>:                          Other Builtins.     (line    6)
56448* scalbn:                                Other Builtins.     (line    6)
56449* scalbnf:                               Other Builtins.     (line    6)
56450* 'scanf', and constant strings:         Incompatibilities.  (line   17)
56451* scanfnl:                               Other Builtins.     (line    6)
56452* scope of a variable length array:      Variable Length.    (line   22)
56453* scope of declaration:                  Disappointments.    (line   21)
56454* scope of external declarations:        Incompatibilities.  (line   80)
56455* Score Options:                         Score Options.      (line    6)
56456* search path:                           Directory Options.  (line    6)
56457* 'section' function attribute:          Function Attributes.
56458                                                             (line 1432)
56459* 'section' variable attribute:          Variable Attributes.
56460                                                             (line  165)
56461* 'sentinel' function attribute:         Function Attributes.
56462                                                             (line 1448)
56463* setjmp:                                Global Reg Vars.    (line   65)
56464* 'setjmp' incompatibilities:            Incompatibilities.  (line   39)
56465* shared strings:                        Incompatibilities.  (line    9)
56466* 'shared' variable attribute:           Variable Attributes.
56467                                                             (line  210)
56468* side effect in '?:':                   Conditionals.       (line   20)
56469* side effects, macro argument:          Statement Exprs.    (line   35)
56470* side effects, order of evaluation:     Non-bugs.           (line  196)
56471* signbit:                               Other Builtins.     (line    6)
56472* signbitd128:                           Other Builtins.     (line    6)
56473* signbitd32:                            Other Builtins.     (line    6)
56474* signbitd64:                            Other Builtins.     (line    6)
56475* signbitf:                              Other Builtins.     (line    6)
56476* signbitl:                              Other Builtins.     (line    6)
56477* signed and unsigned values, comparison warning: Warning Options.
56478                                                             (line 1157)
56479* significand:                           Other Builtins.     (line    6)
56480* significandf:                          Other Builtins.     (line    6)
56481* significandl:                          Other Builtins.     (line    6)
56482* SIMD:                                  C Dialect Options.  (line  272)
56483* simple constraints:                    Simple Constraints. (line    6)
56484* sin:                                   Other Builtins.     (line    6)
56485* sincos:                                Other Builtins.     (line    6)
56486* sincosf:                               Other Builtins.     (line    6)
56487* sincosl:                               Other Builtins.     (line    6)
56488* sinf:                                  Other Builtins.     (line    6)
56489* sinh:                                  Other Builtins.     (line    6)
56490* sinhf:                                 Other Builtins.     (line    6)
56491* sinhl:                                 Other Builtins.     (line    6)
56492* sinl:                                  Other Builtins.     (line    6)
56493* sizeof:                                Typeof.             (line    6)
56494* smaller data references:               M32R/D Options.     (line   57)
56495* smaller data references <1>:           Nios II Options.    (line    9)
56496* smaller data references (PowerPC):     RS/6000 and PowerPC Options.
56497                                                             (line  739)
56498* snprintf:                              Other Builtins.     (line    6)
56499* Solaris 2 options:                     Solaris 2 Options.  (line    6)
56500* SPARC options:                         SPARC Options.      (line    6)
56501* Spec Files:                            Spec Files.         (line    6)
56502* specified registers:                   Explicit Reg Vars.  (line    6)
56503* specifying compiler version and target machine: Target Options.
56504                                                             (line    6)
56505* specifying hardware config:            Submodel Options.   (line    6)
56506* specifying machine version:            Target Options.     (line    6)
56507* specifying registers for local variables: Local Reg Vars.  (line    6)
56508* speed of compilation:                  Precompiled Headers.
56509                                                             (line    6)
56510* sprintf:                               Other Builtins.     (line    6)
56511* SPU options:                           SPU Options.        (line    6)
56512* 'sp_switch' attribute:                 Function Attributes.
56513                                                             (line 1497)
56514* sqrt:                                  Other Builtins.     (line    6)
56515* sqrtf:                                 Other Builtins.     (line    6)
56516* sqrtl:                                 Other Builtins.     (line    6)
56517* sscanf:                                Other Builtins.     (line    6)
56518* 'sscanf', and constant strings:        Incompatibilities.  (line   17)
56519* 'sseregparm' attribute:                Function Attributes.
56520                                                             (line 1377)
56521* statements inside expressions:         Statement Exprs.    (line    6)
56522* static data in C++, declaring and defining: Static Definitions.
56523                                                             (line    6)
56524* stpcpy:                                Other Builtins.     (line    6)
56525* stpncpy:                               Other Builtins.     (line    6)
56526* strcasecmp:                            Other Builtins.     (line    6)
56527* strcat:                                Other Builtins.     (line    6)
56528* strchr:                                Other Builtins.     (line    6)
56529* strcmp:                                Other Builtins.     (line    6)
56530* strcpy:                                Other Builtins.     (line    6)
56531* strcspn:                               Other Builtins.     (line    6)
56532* strdup:                                Other Builtins.     (line    6)
56533* strfmon:                               Other Builtins.     (line    6)
56534* strftime:                              Other Builtins.     (line    6)
56535* string constants:                      Incompatibilities.  (line    9)
56536* strlen:                                Other Builtins.     (line    6)
56537* strncasecmp:                           Other Builtins.     (line    6)
56538* strncat:                               Other Builtins.     (line    6)
56539* strncmp:                               Other Builtins.     (line    6)
56540* strncpy:                               Other Builtins.     (line    6)
56541* strndup:                               Other Builtins.     (line    6)
56542* strpbrk:                               Other Builtins.     (line    6)
56543* strrchr:                               Other Builtins.     (line    6)
56544* strspn:                                Other Builtins.     (line    6)
56545* strstr:                                Other Builtins.     (line    6)
56546* 'struct':                              Unnamed Fields.     (line    6)
56547* struct __htm_tdb:                      S/390 System z Built-in Functions.
56548                                                             (line   49)
56549* structures:                            Incompatibilities.  (line  146)
56550* structures, constructor expression:    Compound Literals.  (line    6)
56551* submodel options:                      Submodel Options.   (line    6)
56552* subscripting:                          Subscripting.       (line    6)
56553* subscripting and function values:      Subscripting.       (line    6)
56554* suffixes for C++ source:               Invoking G++.       (line    6)
56555* SUNPRO_DEPENDENCIES:                   Environment Variables.
56556                                                             (line  170)
56557* suppressing warnings:                  Warning Options.    (line    6)
56558* surprises in C++:                      C++ Misunderstandings.
56559                                                             (line    6)
56560* syntax checking:                       Warning Options.    (line   13)
56561* 'syscall_linkage' attribute:           Function Attributes.
56562                                                             (line 1512)
56563* system headers, warnings from:         Warning Options.    (line  836)
56564* 'sysv_abi' attribute:                  Function Attributes.
56565                                                             (line 1003)
56566* tan:                                   Other Builtins.     (line    6)
56567* tanf:                                  Other Builtins.     (line    6)
56568* tanh:                                  Other Builtins.     (line    6)
56569* tanhf:                                 Other Builtins.     (line    6)
56570* tanhl:                                 Other Builtins.     (line    6)
56571* tanl:                                  Other Builtins.     (line    6)
56572* 'target' function attribute:           Function Attributes.
56573                                                             (line 1519)
56574* target machine, specifying:            Target Options.     (line    6)
56575* target options:                        Target Options.     (line    6)
56576* 'target("abm")' attribute:             Function Attributes.
56577                                                             (line 1552)
56578* 'target("aes")' attribute:             Function Attributes.
56579                                                             (line 1557)
56580* 'target("align-stringops")' attribute: Function Attributes.
56581                                                             (line 1651)
56582* 'target("altivec")' attribute:         Function Attributes.
56583                                                             (line 1677)
56584* 'target("arch=ARCH")' attribute:       Function Attributes.
56585                                                             (line 1660)
56586* 'target("avoid-indexed-addresses")' attribute: Function Attributes.
56587                                                             (line 1798)
56588* 'target("cld")' attribute:             Function Attributes.
56589                                                             (line 1622)
56590* 'target("cmpb")' attribute:            Function Attributes.
56591                                                             (line 1683)
56592* 'target("cpu=CPU")' attribute:         Function Attributes.
56593                                                             (line 1813)
56594* 'target("custom-fpu-cfg=NAME")' attribute: Function Attributes.
56595                                                             (line 1839)
56596* 'target("custom-INSN=N")' attribute:   Function Attributes.
56597                                                             (line 1830)
56598* 'target("default")' attribute:         Function Attributes.
56599                                                             (line 1560)
56600* 'target("dlmzb")' attribute:           Function Attributes.
56601                                                             (line 1689)
56602* 'target("fancy-math-387")' attribute:  Function Attributes.
56603                                                             (line 1626)
56604* 'target("fma4")' attribute:            Function Attributes.
56605                                                             (line 1606)
56606* 'target("fpmath=FPMATH")' attribute:   Function Attributes.
56607                                                             (line 1668)
56608* 'target("fprnd")' attribute:           Function Attributes.
56609                                                             (line 1696)
56610* 'target("friz")' attribute:            Function Attributes.
56611                                                             (line 1789)
56612* 'target("fused-madd")' attribute:      Function Attributes.
56613                                                             (line 1631)
56614* 'target("hard-dfp")' attribute:        Function Attributes.
56615                                                             (line 1702)
56616* 'target("ieee-fp")' attribute:         Function Attributes.
56617                                                             (line 1636)
56618* 'target("inline-all-stringops")' attribute: Function Attributes.
56619                                                             (line 1641)
56620* 'target("inline-stringops-dynamically")' attribute: Function Attributes.
56621                                                             (line 1645)
56622* 'target("isel")' attribute:            Function Attributes.
56623                                                             (line 1708)
56624* 'target("longcall")' attribute:        Function Attributes.
56625                                                             (line 1808)
56626* 'target("lwp")' attribute:             Function Attributes.
56627                                                             (line 1614)
56628* 'target("mfcrf")' attribute:           Function Attributes.
56629                                                             (line 1712)
56630* 'target("mfpgpr")' attribute:          Function Attributes.
56631                                                             (line 1719)
56632* 'target("mmx")' attribute:             Function Attributes.
56633                                                             (line 1565)
56634* 'target("mulhw")' attribute:           Function Attributes.
56635                                                             (line 1726)
56636* 'target("multiple")' attribute:        Function Attributes.
56637                                                             (line 1733)
56638* 'target("no-custom-INSN")' attribute:  Function Attributes.
56639                                                             (line 1830)
56640* 'target("paired")' attribute:          Function Attributes.
56641                                                             (line 1803)
56642* 'target("pclmul")' attribute:          Function Attributes.
56643                                                             (line 1569)
56644* 'target("popcnt")' attribute:          Function Attributes.
56645                                                             (line 1573)
56646* 'target("popcntb")' attribute:         Function Attributes.
56647                                                             (line 1744)
56648* 'target("popcntd")' attribute:         Function Attributes.
56649                                                             (line 1751)
56650* 'target("powerpc-gfxopt")' attribute:  Function Attributes.
56651                                                             (line 1757)
56652* 'target("powerpc-gpopt")' attribute:   Function Attributes.
56653                                                             (line 1763)
56654* 'target("recip")' attribute:           Function Attributes.
56655                                                             (line 1655)
56656* 'target("recip-precision")' attribute: Function Attributes.
56657                                                             (line 1769)
56658* 'target("sse")' attribute:             Function Attributes.
56659                                                             (line 1577)
56660* 'target("sse2")' attribute:            Function Attributes.
56661                                                             (line 1581)
56662* 'target("sse3")' attribute:            Function Attributes.
56663                                                             (line 1585)
56664* 'target("sse4")' attribute:            Function Attributes.
56665                                                             (line 1589)
56666* 'target("sse4.1")' attribute:          Function Attributes.
56667                                                             (line 1594)
56668* 'target("sse4.2")' attribute:          Function Attributes.
56669                                                             (line 1598)
56670* 'target("sse4a")' attribute:           Function Attributes.
56671                                                             (line 1602)
56672* 'target("ssse3")' attribute:           Function Attributes.
56673                                                             (line 1618)
56674* 'target("string")' attribute:          Function Attributes.
56675                                                             (line 1775)
56676* 'target("tune=TUNE")' attribute:       Function Attributes.
56677                                                             (line 1664)
56678* 'target("tune=TUNE")' attribute <1>:   Function Attributes.
56679                                                             (line 1820)
56680* 'target("update")' attribute:          Function Attributes.
56681                                                             (line 1738)
56682* 'target("vsx")' attribute:             Function Attributes.
56683                                                             (line 1781)
56684* 'target("xop")' attribute:             Function Attributes.
56685                                                             (line 1610)
56686* TC1:                                   Standards.          (line   13)
56687* TC2:                                   Standards.          (line   13)
56688* TC3:                                   Standards.          (line   13)
56689* Technical Corrigenda:                  Standards.          (line   13)
56690* Technical Corrigendum 1:               Standards.          (line   13)
56691* Technical Corrigendum 2:               Standards.          (line   13)
56692* Technical Corrigendum 3:               Standards.          (line   13)
56693* template instantiation:                Template Instantiation.
56694                                                             (line    6)
56695* temporaries, lifetime of:              Temporaries.        (line    6)
56696* tgamma:                                Other Builtins.     (line    6)
56697* tgammaf:                               Other Builtins.     (line    6)
56698* tgammal:                               Other Builtins.     (line    6)
56699* Thread-Local Storage:                  Thread-Local.       (line    6)
56700* thunks:                                Nested Functions.   (line    6)
56701* TILE-Gx options:                       TILE-Gx Options.    (line    6)
56702* TILEPro options:                       TILEPro Options.    (line    6)
56703* tiny data section on the H8/300H and H8S: Function Attributes.
56704                                                             (line 1852)
56705* TLS:                                   Thread-Local.       (line    6)
56706* 'tls_model' attribute:                 Variable Attributes.
56707                                                             (line  233)
56708* TMPDIR:                                Environment Variables.
56709                                                             (line   45)
56710* toascii:                               Other Builtins.     (line    6)
56711* tolower:                               Other Builtins.     (line    6)
56712* toupper:                               Other Builtins.     (line    6)
56713* towlower:                              Other Builtins.     (line    6)
56714* towupper:                              Other Builtins.     (line    6)
56715* traditional C language:                C Dialect Options.  (line  331)
56716* 'trapa_handler' attribute:             Function Attributes.
56717                                                             (line 1864)
56718* 'trap_exit' attribute:                 Function Attributes.
56719                                                             (line 1859)
56720* trunc:                                 Other Builtins.     (line    6)
56721* truncf:                                Other Builtins.     (line    6)
56722* truncl:                                Other Builtins.     (line    6)
56723* two-stage name lookup:                 Name lookup.        (line    6)
56724* type alignment:                        Alignment.          (line    6)
56725* type attributes:                       Type Attributes.    (line    6)
56726* typedef names as function parameters:  Incompatibilities.  (line   97)
56727* typeof:                                Typeof.             (line    6)
56728* 'type_info':                           Vague Linkage.      (line   42)
56729* 'uhk' fixed-suffix:                    Fixed-Point.        (line    6)
56730* 'UHK' fixed-suffix:                    Fixed-Point.        (line    6)
56731* 'uhr' fixed-suffix:                    Fixed-Point.        (line    6)
56732* 'UHR' fixed-suffix:                    Fixed-Point.        (line    6)
56733* 'uk' fixed-suffix:                     Fixed-Point.        (line    6)
56734* 'UK' fixed-suffix:                     Fixed-Point.        (line    6)
56735* 'ulk' fixed-suffix:                    Fixed-Point.        (line    6)
56736* 'ULK' fixed-suffix:                    Fixed-Point.        (line    6)
56737* 'ULL' integer suffix:                  Long Long.          (line    6)
56738* 'ullk' fixed-suffix:                   Fixed-Point.        (line    6)
56739* 'ULLK' fixed-suffix:                   Fixed-Point.        (line    6)
56740* 'ullr' fixed-suffix:                   Fixed-Point.        (line    6)
56741* 'ULLR' fixed-suffix:                   Fixed-Point.        (line    6)
56742* 'ulr' fixed-suffix:                    Fixed-Point.        (line    6)
56743* 'ULR' fixed-suffix:                    Fixed-Point.        (line    6)
56744* undefined behavior:                    Bug Criteria.       (line   17)
56745* undefined function value:              Bug Criteria.       (line   17)
56746* underscores in variables in macros:    Typeof.             (line   46)
56747* 'union':                               Unnamed Fields.     (line    6)
56748* union, casting to a:                   Cast to Union.      (line    6)
56749* unions:                                Incompatibilities.  (line  146)
56750* unknown pragmas, warning:              Warning Options.    (line  685)
56751* unresolved references and '-nodefaultlibs': Link Options.  (line   85)
56752* unresolved references and '-nostdlib': Link Options.       (line   85)
56753* 'unused' attribute.:                   Function Attributes.
56754                                                             (line 1868)
56755* 'ur' fixed-suffix:                     Fixed-Point.        (line    6)
56756* 'UR' fixed-suffix:                     Fixed-Point.        (line    6)
56757* 'used' attribute.:                     Function Attributes.
56758                                                             (line 1873)
56759* User stack pointer in interrupts on the Blackfin: Function Attributes.
56760                                                             (line  844)
56761* 'use_debug_exception_return' attribute: Function Attributes.
56762                                                             (line  783)
56763* 'use_shadow_register_set' attribute:   Function Attributes.
56764                                                             (line  774)
56765* 'V' in constraint:                     Simple Constraints. (line   43)
56766* V850 Options:                          V850 Options.       (line    6)
56767* vague linkage:                         Vague Linkage.      (line    6)
56768* value after 'longjmp':                 Global Reg Vars.    (line   65)
56769* variable addressability on the IA-64:  Function Attributes.
56770                                                             (line  974)
56771* variable addressability on the M32R/D: Variable Attributes.
56772                                                             (line  370)
56773* variable alignment:                    Alignment.          (line    6)
56774* variable attributes:                   Variable Attributes.
56775                                                             (line    6)
56776* variable number of arguments:          Variadic Macros.    (line    6)
56777* variable-length array in a structure:  Variable Length.    (line   26)
56778* variable-length array scope:           Variable Length.    (line   22)
56779* variable-length arrays:                Variable Length.    (line    6)
56780* variables in specified registers:      Explicit Reg Vars.  (line    6)
56781* variables, local, in macros:           Typeof.             (line   46)
56782* variadic macros:                       Variadic Macros.    (line    6)
56783* VAX options:                           VAX Options.        (line    6)
56784* 'version_id' attribute:                Function Attributes.
56785                                                             (line 1883)
56786* vfprintf:                              Other Builtins.     (line    6)
56787* vfscanf:                               Other Builtins.     (line    6)
56788* 'visibility' attribute:                Function Attributes.
56789                                                             (line 1893)
56790* VLAs:                                  Variable Length.    (line    6)
56791* 'vliw' attribute:                      Function Attributes.
56792                                                             (line 1989)
56793* void pointers, arithmetic:             Pointer Arith.      (line    6)
56794* void, size of pointer to:              Pointer Arith.      (line    6)
56795* volatile access:                       Volatiles.          (line    6)
56796* volatile access <1>:                   C++ Volatiles.      (line    6)
56797* 'volatile' applied to function:        Function Attributes.
56798                                                             (line    6)
56799* volatile read:                         Volatiles.          (line    6)
56800* volatile read <1>:                     C++ Volatiles.      (line    6)
56801* volatile write:                        Volatiles.          (line    6)
56802* volatile write <1>:                    C++ Volatiles.      (line    6)
56803* vprintf:                               Other Builtins.     (line    6)
56804* vscanf:                                Other Builtins.     (line    6)
56805* vsnprintf:                             Other Builtins.     (line    6)
56806* vsprintf:                              Other Builtins.     (line    6)
56807* vsscanf:                               Other Builtins.     (line    6)
56808* vtable:                                Vague Linkage.      (line   27)
56809* VxWorks Options:                       VxWorks Options.    (line    6)
56810* 'w' floating point suffix:             Floating Types.     (line    6)
56811* 'W' floating point suffix:             Floating Types.     (line    6)
56812* 'wakeup' attribute:                    Function Attributes.
56813                                                             (line  729)
56814* 'warm' attribute:                      Function Attributes.
56815                                                             (line 1373)
56816* warning for comparison of signed and unsigned values: Warning Options.
56817                                                             (line 1157)
56818* warning for overloaded virtual function: C++ Dialect Options.
56819                                                             (line  655)
56820* warning for reordering of member initializers: C++ Dialect Options.
56821                                                             (line  573)
56822* warning for unknown pragmas:           Warning Options.    (line  685)
56823* 'warning' function attribute:          Function Attributes.
56824                                                             (line  198)
56825* warning GCC_COLORS capability:         Language Independent Options.
56826                                                             (line   70)
56827* warning messages:                      Warning Options.    (line    6)
56828* warnings from system headers:          Warning Options.    (line  836)
56829* warnings vs errors:                    Warnings and Errors.
56830                                                             (line    6)
56831* 'warn_unused' attribute:               C++ Attributes.     (line   64)
56832* 'warn_unused_result' attribute:        Function Attributes.
56833                                                             (line 1995)
56834* 'weak' attribute:                      Function Attributes.
56835                                                             (line 2012)
56836* 'weakref' attribute:                   Function Attributes.
56837                                                             (line 2021)
56838* whitespace:                            Incompatibilities.  (line  112)
56839* 'X' in constraint:                     Simple Constraints. (line  122)
56840* X3.159-1989:                           Standards.          (line   13)
56841* x86-64 Options:                        i386 and x86-64 Options.
56842                                                             (line    6)
56843* x86-64 options:                        x86-64 Options.     (line    6)
56844* Xstormy16 Options:                     Xstormy16 Options.  (line    6)
56845* Xtensa Options:                        Xtensa Options.     (line    6)
56846* y0:                                    Other Builtins.     (line    6)
56847* y0f:                                   Other Builtins.     (line    6)
56848* y0l:                                   Other Builtins.     (line    6)
56849* y1:                                    Other Builtins.     (line    6)
56850* y1f:                                   Other Builtins.     (line    6)
56851* y1l:                                   Other Builtins.     (line    6)
56852* yn:                                    Other Builtins.     (line    6)
56853* ynf:                                   Other Builtins.     (line    6)
56854* ynl:                                   Other Builtins.     (line    6)
56855* zero-length arrays:                    Zero Length.        (line    6)
56856* zero-size structures:                  Empty Structures.   (line    6)
56857* zSeries options:                       zSeries Options.    (line    6)
56858
56859
56860
56861Tag Table:
56862Node: Top1881
56863Node: G++ and GCC3629
56864Node: Standards5686
56865Node: Invoking GCC17845
56866Node: Option Summary21590
56867Node: Overall Options63434
56868Node: Invoking G++77621
56869Node: C Dialect Options79144
56870Node: C++ Dialect Options96142
56871Node: Objective-C and Objective-C++ Dialect Options126687
56872Node: Language Independent Options137194
56873Node: Warning Options141694
56874Node: Debugging Options211735
56875Node: Optimize Options271982
56876Ref: Type-punning331542
56877Node: Preprocessor Options415592
56878Ref: Wtrigraphs420375
56879Ref: dashMF425125
56880Ref: fdollars-in-identifiers436006
56881Node: Assembler Options446231
56882Node: Link Options446922
56883Ref: Link Options-Footnote-1459062
56884Node: Directory Options459398
56885Node: Spec Files465942
56886Node: Target Options487771
56887Node: Submodel Options488170
56888Node: AArch64 Options489936
56889Node: Adapteva Epiphany Options495344
56890Node: ARC Options501292
56891Node: ARM Options513736
56892Node: AVR Options531046
56893Node: Blackfin Options551271
56894Node: C6X Options559289
56895Node: CRIS Options560832
56896Node: CR16 Options564571
56897Node: Darwin Options565482
56898Node: DEC Alpha Options572920
56899Node: FR30 Options584536
56900Node: FRV Options585100
56901Node: GNU/Linux Options591864
56902Node: H8/300 Options593124
56903Node: HPPA Options594576
56904Node: i386 and x86-64 Options603878
56905Node: i386 and x86-64 Windows Options645949
56906Node: IA-64 Options648802
56907Node: LM32 Options656868
56908Node: M32C Options657391
56909Node: M32R/D Options658664
56910Node: M680x0 Options662209
56911Node: MCore Options676244
56912Node: MeP Options677746
56913Node: MicroBlaze Options681706
56914Node: MIPS Options684508
56915Node: MMIX Options716393
56916Node: MN10300 Options718870
56917Node: Moxie Options721411
56918Node: MSP430 Options721781
56919Node: NDS32 Options725306
56920Node: Nios II Options727186
56921Node: PDP-11 Options735651
56922Node: picoChip Options737345
56923Node: PowerPC Options739483
56924Node: RL78 Options739704
56925Node: RS/6000 and PowerPC Options740365
56926Node: RX Options779295
56927Node: S/390 and zSeries Options786627
56928Node: Score Options795174
56929Node: SH Options796023
56930Node: Solaris 2 Options816642
56931Node: SPARC Options818164
56932Node: SPU Options831422
56933Node: System V Options836361
56934Node: TILE-Gx Options837187
56935Node: TILEPro Options838205
56936Node: V850 Options838709
56937Node: VAX Options845417
56938Node: VMS Options845952
56939Node: VxWorks Options846765
56940Node: x86-64 Options847920
56941Node: Xstormy16 Options848138
56942Node: Xtensa Options848427
56943Node: zSeries Options852738
56944Node: Code Gen Options852934
56945Node: Environment Variables883803
56946Node: Precompiled Headers891806
56947Node: C Implementation897809
56948Node: Translation implementation899499
56949Node: Environment implementation900090
56950Node: Identifiers implementation900644
56951Node: Characters implementation901730
56952Node: Integers implementation905380
56953Node: Floating point implementation907265
56954Node: Arrays and pointers implementation910328
56955Ref: Arrays and pointers implementation-Footnote-1911788
56956Node: Hints implementation911914
56957Node: Structures unions enumerations and bit-fields implementation913399
56958Node: Qualifiers implementation915623
56959Node: Declarators implementation917403
56960Node: Statements implementation917744
56961Node: Preprocessing directives implementation918070
56962Node: Library functions implementation920391
56963Node: Architecture implementation921040
56964Node: Locale-specific behavior implementation922685
56965Node: C++ Implementation922990
56966Node: Conditionally-supported behavior924273
56967Node: Exception handling924782
56968Node: C Extensions925190
56969Node: Statement Exprs930260
56970Node: Local Labels934737
56971Node: Labels as Values937710
56972Ref: Labels as Values-Footnote-1940237
56973Node: Nested Functions940422
56974Node: Constructing Calls944380
56975Node: Typeof949097
56976Node: Conditionals953479
56977Node: __int128954368
56978Node: Long Long954893
56979Node: Complex956369
56980Node: Floating Types958957
56981Node: Half-Precision960085
56982Node: Decimal Float962270
56983Node: Hex Floats964126
56984Node: Fixed-Point965163
56985Node: Named Address Spaces968423
56986Ref: AVR Named Address Spaces969104
56987Node: Zero Length974312
56988Node: Empty Structures977599
56989Node: Variable Length978005
56990Node: Variadic Macros980861
56991Node: Escaped Newlines983239
56992Node: Subscripting984078
56993Node: Pointer Arith984803
56994Node: Initializers985371
56995Node: Compound Literals985867
56996Node: Designated Inits989228
56997Node: Case Ranges992966
56998Node: Cast to Union993647
56999Node: Mixed Declarations994737
57000Node: Function Attributes995247
57001Node: Attribute Syntax1089830
57002Node: Function Prototypes1100220
57003Node: C++ Comments1102000
57004Node: Dollar Signs1102519
57005Node: Character Escapes1102984
57006Node: Variable Attributes1103278
57007Ref: AVR Variable Attributes1116953
57008Ref: MeP Variable Attributes1119615
57009Ref: i386 Variable Attributes1121551
57010Node: Type Attributes1127212
57011Ref: MeP Type Attributes1141100
57012Ref: i386 Type Attributes1141374
57013Ref: PowerPC Type Attributes1142066
57014Ref: SPU Type Attributes1142928
57015Node: Alignment1143219
57016Node: Inline1144589
57017Node: Volatiles1149565
57018Node: Extended Asm1152446
57019Ref: Example of asm with clobbered asm reg1158350
57020Ref: Extended asm with goto1168063
57021Node: Constraints1175913
57022Node: Simple Constraints1176997
57023Node: Multi-Alternative1184307
57024Node: Modifiers1186024
57025Node: Machine Constraints1189037
57026Node: Asm Labels1246395
57027Node: Explicit Reg Vars1248071
57028Node: Global Reg Vars1249669
57029Node: Local Reg Vars1254165
57030Node: Alternate Keywords1256581
57031Node: Incomplete Enums1258067
57032Node: Function Names1258823
57033Node: Return Address1260984
57034Node: Vector Extensions1264491
57035Node: Offsetof1271420
57036Node: __sync Builtins1272225
57037Node: __atomic Builtins1277694
57038Node: x86 specific memory model extensions for transactional memory1289328
57039Node: Object Size Checking1290590
57040Node: Cilk Plus Builtins1296083
57041Node: Other Builtins1296952
57042Node: Target Builtins1326259
57043Node: Alpha Built-in Functions1327678
57044Node: Altera Nios II Built-in Functions1330691
57045Node: ARC Built-in Functions1334678
57046Node: ARC SIMD Built-in Functions1339890
57047Node: ARM iWMMXt Built-in Functions1348786
57048Node: ARM NEON Intrinsics1355769
57049Node: ARM ACLE Intrinsics1573263
57050Node: AVR Built-in Functions1574591
57051Node: Blackfin Built-in Functions1577669
57052Node: FR-V Built-in Functions1578286
57053Node: Argument Types1579149
57054Node: Directly-mapped Integer Functions1580903
57055Node: Directly-mapped Media Functions1581987
57056Node: Raw read/write Functions1590193
57057Node: Other Built-in Functions1591101
57058Node: X86 Built-in Functions1592287
57059Node: X86 transactional memory intrinsics1651480
57060Node: MIPS DSP Built-in Functions1654156
57061Node: MIPS Paired-Single Support1666665
57062Node: MIPS Loongson Built-in Functions1668164
57063Node: Paired-Single Arithmetic1674679
57064Node: Paired-Single Built-in Functions1675627
57065Node: MIPS-3D Built-in Functions1678294
57066Node: Other MIPS Built-in Functions1683672
57067Node: MSP430 Built-in Functions1684677
57068Node: NDS32 Built-in Functions1685581
57069Node: picoChip Built-in Functions1686874
57070Node: PowerPC Built-in Functions1688217
57071Node: PowerPC AltiVec/VSX Built-in Functions1691926
57072Node: PowerPC Hardware Transactional Memory Built-in Functions1824824
57073Node: RX Built-in Functions1831365
57074Node: S/390 System z Built-in Functions1835398
57075Node: SH Built-in Functions1840627
57076Node: SPARC VIS Built-in Functions1842020
57077Node: SPU Built-in Functions1847623
57078Node: TI C6X Built-in Functions1849440
57079Node: TILE-Gx Built-in Functions1850465
57080Node: TILEPro Built-in Functions1851584
57081Node: Target Format Checks1852653
57082Node: Solaris Format Checks1853085
57083Node: Darwin Format Checks1853511
57084Node: Pragmas1854329
57085Node: ARM Pragmas1855065
57086Node: M32C Pragmas1855668
57087Node: MeP Pragmas1856740
57088Node: RS/6000 and PowerPC Pragmas1858808
57089Node: Darwin Pragmas1859549
57090Node: Solaris Pragmas1860616
57091Node: Symbol-Renaming Pragmas1861780
57092Node: Structure-Packing Pragmas1863336
57093Node: Weak Pragmas1864981
57094Node: Diagnostic Pragmas1865715
57095Node: Visibility Pragmas1868824
57096Node: Push/Pop Macro Pragmas1869576
57097Node: Function Specific Option Pragmas1870549
57098Node: Loop-Specific Pragmas1872740
57099Node: Unnamed Fields1873839
57100Node: Thread-Local1876066
57101Node: C99 Thread-Local Edits1878171
57102Node: C++98 Thread-Local Edits1880169
57103Node: Binary constants1883614
57104Node: C++ Extensions1884285
57105Node: C++ Volatiles1885996
57106Node: Restricted Pointers1888344
57107Node: Vague Linkage1889935
57108Node: C++ Interface1893558
57109Ref: C++ Interface-Footnote-11897846
57110Node: Template Instantiation1897984
57111Node: Bound member functions1904570
57112Node: C++ Attributes1906102
57113Node: Function Multiversioning1909681
57114Node: Namespace Association1911498
57115Node: Type Traits1912878
57116Node: Java Exceptions1919361
57117Node: Deprecated Features1920751
57118Node: Backwards Compatibility1923718
57119Node: Objective-C1925065
57120Node: GNU Objective-C runtime API1925672
57121Node: Modern GNU Objective-C runtime API1926679
57122Node: Traditional GNU Objective-C runtime API1929115
57123Node: Executing code before main1929842
57124Node: What you can and what you cannot do in +load1932582
57125Node: Type encoding1934970
57126Node: Legacy type encoding1939997
57127Node: @encode1941087
57128Node: Method signatures1941628
57129Node: Garbage Collection1943620
57130Node: Constant string objects1946310
57131Node: compatibility_alias1948819
57132Node: Exceptions1949540
57133Node: Synchronization1952250
57134Node: Fast enumeration1953434
57135Node: Using fast enumeration1953746
57136Node: c99-like fast enumeration syntax1954957
57137Node: Fast enumeration details1955660
57138Node: Fast enumeration protocol1958000
57139Node: Messaging with the GNU Objective-C runtime1961152
57140Node: Dynamically registering methods1962524
57141Node: Forwarding hook1964215
57142Node: Compatibility1967255
57143Node: Gcov1973811
57144Node: Gcov Intro1974344
57145Node: Invoking Gcov1977062
57146Node: Gcov and Optimization1991302
57147Node: Gcov Data Files1994304
57148Node: Cross-profiling1995699
57149Node: Trouble1997553
57150Node: Actual Bugs1998965
57151Node: Interoperation1999412
57152Node: Incompatibilities2006303
57153Node: Fixed Headers2014455
57154Node: Standard Libraries2016113
57155Node: Disappointments2017485
57156Node: C++ Misunderstandings2021844
57157Node: Static Definitions2022655
57158Node: Name lookup2023708
57159Ref: Name lookup-Footnote-12028488
57160Node: Temporaries2028677
57161Node: Copy Assignment2030653
57162Node: Non-bugs2032460
57163Node: Warnings and Errors2042966
57164Node: Bugs2044728
57165Node: Bug Criteria2045195
57166Node: Bug Reporting2047405
57167Node: Service2047626
57168Node: Contributing2048445
57169Node: Funding2049185
57170Node: GNU Project2051675
57171Node: Copying2052321
57172Node: GNU Free Documentation License2089830
57173Node: Contributors2114948
57174Node: Option Index2152817
57175Node: Keyword Index2364855
57176
57177End Tag Table
57178