1This is gcc.info, produced by makeinfo version 6.5 from gcc.texi.
2
3Copyright (C) 1988-2020 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.
27* gcov-tool: (gcc) Gcov-tool.  'gcov-tool'--an offline gcda profile processing program.
28* gcov-dump: (gcc) Gcov-dump.  'gcov-dump'--an offline gcda and gcno profile dump tool.
29* lto-dump: (gcc) lto-dump.    'lto-dump'--Tool for
30dumping LTO object files.
31END-INFO-DIR-ENTRY
32
33 This file documents the use of the GNU compilers.
34
35 Copyright (C) 1988-2020 Free Software Foundation, Inc.
36
37 Permission is granted to copy, distribute and/or modify this document
38under the terms of the GNU Free Documentation License, Version 1.3 or
39any later version published by the Free Software Foundation; with the
40Invariant Sections being "Funding Free Software", the Front-Cover Texts
41being (a) (see below), and with the Back-Cover Texts being (b) (see
42below).  A copy of the license is included in the section entitled "GNU
43Free Documentation License".
44
45 (a) The FSF's Front-Cover Text is:
46
47 A GNU Manual
48
49 (b) The FSF's Back-Cover Text is:
50
51 You have freedom to copy and modify this GNU Manual, like GNU software.
52Copies published by the Free Software Foundation raise funds for GNU
53development.
54
55
56File: gcc.info,  Node: Top,  Next: G++ and GCC
57
58Introduction
59************
60
61This manual documents how to use the GNU compilers, as well as their
62features and incompatibilities, and how to report bugs.  It corresponds
63to the compilers (GCC) version 10.2.0.  The internals of the GNU
64compilers, including how to port them to new targets and some
65information about how to write front ends for new languages, are
66documented in a separate manual.  *Note Introduction: (gccint)Top.
67
68* Menu:
69
70* G++ and GCC::     You can compile C or C++ programs.
71* Standards::       Language standards supported by GCC.
72* Invoking GCC::    Command options supported by 'gcc'.
73* C Implementation:: How GCC implements the ISO C specification.
74* C++ Implementation:: How GCC implements the ISO C++ specification.
75* C Extensions::    GNU extensions to the C language family.
76* C++ Extensions::  GNU extensions to the C++ language.
77* Objective-C::     GNU Objective-C runtime features.
78* Compatibility::   Binary Compatibility
79* Gcov::            'gcov'--a test coverage program.
80* Gcov-tool::       'gcov-tool'--an offline gcda profile processing program.
81* Gcov-dump::       'gcov-dump'--an offline gcda and gcno profile dump tool.
82* lto-dump::        'lto-dump'--Tool for dumping LTO
83object files.
84* Trouble::         If you have trouble using GCC.
85* Bugs::            How, why and where to report bugs.
86* Service::         How To Get Help with GCC
87* Contributing::    How to contribute to testing and developing GCC.
88
89* Funding::         How to help assure funding for free software.
90* GNU Project::     The GNU Project and GNU/Linux.
91
92* Copying::         GNU General Public License says
93                    how you can copy and share GCC.
94* GNU Free Documentation License:: How you can copy and share this manual.
95* Contributors::    People who have contributed to GCC.
96
97* Option Index::    Index to command line options.
98* Keyword Index::   Index of concepts and symbol names.
99
100
101File: gcc.info,  Node: G++ and GCC,  Next: Standards,  Up: Top
102
1031 Programming Languages Supported by GCC
104****************************************
105
106GCC stands for "GNU Compiler Collection".  GCC is an integrated
107distribution of compilers for several major programming languages.
108These languages currently include C, C++, Objective-C, Objective-C++,
109Fortran, Ada, D, Go, and BRIG (HSAIL).
110
111 The abbreviation "GCC" has multiple meanings in common use.  The
112current official meaning is "GNU Compiler Collection", which refers
113generically to the complete suite of tools.  The name historically stood
114for "GNU C Compiler", and this usage is still common when the emphasis
115is on compiling C programs.  Finally, the name is also used when
116speaking of the "language-independent" component of GCC: code shared
117among the compilers for all supported languages.
118
119 The language-independent component of GCC includes the majority of the
120optimizers, as well as the "back ends" that generate machine code for
121various processors.
122
123 The part of a compiler that is specific to a particular language is
124called the "front end".  In addition to the front ends that are
125integrated components of GCC, there are several other front ends that
126are maintained separately.  These support languages such as Mercury, and
127COBOL.  To use these, they must be built together with GCC proper.
128
129 Most of the compilers for languages other than C have their own names.
130The C++ compiler is G++, the Ada compiler is GNAT, and so on.  When we
131talk about compiling one of those languages, we might refer to that
132compiler by its own name, or as GCC.  Either is correct.
133
134 Historically, compilers for many languages, including C++ and Fortran,
135have been implemented as "preprocessors" which emit another high level
136language such as C.  None of the compilers included in GCC are
137implemented this way; they all generate machine code directly.  This
138sort of preprocessor should not be confused with the "C preprocessor",
139which is an integral feature of the C, C++, Objective-C and
140Objective-C++ languages.
141
142
143File: gcc.info,  Node: Standards,  Next: Invoking GCC,  Prev: G++ and GCC,  Up: Top
144
1452 Language Standards Supported by GCC
146*************************************
147
148For each language compiled by GCC for which there is a standard, GCC
149attempts to follow one or more versions of that standard, possibly with
150some exceptions, and possibly with some extensions.
151
1522.1 C Language
153==============
154
155The original ANSI C standard (X3.159-1989) was ratified in 1989 and
156published in 1990.  This standard was ratified as an ISO standard
157(ISO/IEC 9899:1990) later in 1990.  There were no technical differences
158between these publications, although the sections of the ANSI standard
159were renumbered and became clauses in the ISO standard.  The ANSI
160standard, but not the ISO standard, also came with a Rationale document.
161This standard, in both its forms, is commonly known as "C89", or
162occasionally as "C90", from the dates of ratification.  To select this
163standard in GCC, use one of the options '-ansi', '-std=c90' or
164'-std=iso9899:1990'; to obtain all the diagnostics required by the
165standard, you should also specify '-pedantic' (or '-pedantic-errors' if
166you want them to be errors rather than warnings).  *Note Options
167Controlling C Dialect: C Dialect Options.
168
169 Errors in the 1990 ISO C standard were corrected in two Technical
170Corrigenda published in 1994 and 1996.  GCC does not support the
171uncorrected version.
172
173 An amendment to the 1990 standard was published in 1995.  This
174amendment added digraphs and '__STDC_VERSION__' to the language, but
175otherwise concerned the library.  This amendment is commonly known as
176"AMD1"; the amended standard is sometimes known as "C94" or "C95".  To
177select this standard in GCC, use the option '-std=iso9899:199409' (with,
178as for other standard versions, '-pedantic' to receive all required
179diagnostics).
180
181 A new edition of the ISO C standard was published in 1999 as ISO/IEC
1829899:1999, and is commonly known as "C99".  (While in development,
183drafts of this standard version were referred to as "C9X".) GCC has
184substantially complete support for this standard version; see
185<http://gcc.gnu.org/c99status.html> for details.  To select this
186standard, use '-std=c99' or '-std=iso9899:1999'.
187
188 Errors in the 1999 ISO C standard were corrected in three Technical
189Corrigenda published in 2001, 2004 and 2007.  GCC does not support the
190uncorrected version.
191
192 A fourth version of the C standard, known as "C11", was published in
1932011 as ISO/IEC 9899:2011.  (While in development, drafts of this
194standard version were referred to as "C1X".) GCC has substantially
195complete support for this standard, enabled with '-std=c11' or
196'-std=iso9899:2011'.  A version with corrections integrated was prepared
197in 2017 and published in 2018 as ISO/IEC 9899:2018; it is known as "C17"
198and is supported with '-std=c17' or '-std=iso9899:2017'; the corrections
199are also applied with '-std=c11', and the only difference between the
200options is the value of '__STDC_VERSION__'.
201
202 A further version of the C standard, known as "C2X", is under
203development; experimental and incomplete support for this is enabled
204with '-std=c2x'.
205
206 By default, GCC provides some extensions to the C language that, on
207rare occasions conflict with the C standard.  *Note Extensions to the C
208Language Family: C Extensions.  Some features that are part of the C99
209standard are accepted as extensions in C90 mode, and some features that
210are part of the C11 standard are accepted as extensions in C90 and C99
211modes.  Use of the '-std' options listed above disables these extensions
212where they conflict with the C standard version selected.  You may also
213select an extended version of the C language explicitly with
214'-std=gnu90' (for C90 with GNU extensions), '-std=gnu99' (for C99 with
215GNU extensions) or '-std=gnu11' (for C11 with GNU extensions).
216
217 The default, if no C language dialect options are given, is
218'-std=gnu11'.
219
220 The ISO C standard defines (in clause 4) two classes of conforming
221implementation.  A "conforming hosted implementation" supports the whole
222standard including all the library facilities; a "conforming
223freestanding implementation" is only required to provide certain library
224facilities: those in '<float.h>', '<limits.h>', '<stdarg.h>', and
225'<stddef.h>'; since AMD1, also those in '<iso646.h>'; since C99, also
226those in '<stdbool.h>' and '<stdint.h>'; and since C11, also those in
227'<stdalign.h>' and '<stdnoreturn.h>'.  In addition, complex types, added
228in C99, are not required for freestanding implementations.
229
230 The standard also defines two environments for programs, a
231"freestanding environment", required of all implementations and which
232may not have library facilities beyond those required of freestanding
233implementations, where the handling of program startup and termination
234are implementation-defined; and a "hosted environment", which is not
235required, in which all the library facilities are provided and startup
236is through a function 'int main (void)' or 'int main (int, char *[])'.
237An OS kernel is an example of a program running in a freestanding
238environment; a program using the facilities of an operating system is an
239example of a program running in a hosted environment.
240
241 GCC aims towards being usable as a conforming freestanding
242implementation, or as the compiler for a conforming hosted
243implementation.  By default, it acts as the compiler for a hosted
244implementation, defining '__STDC_HOSTED__' as '1' and presuming that
245when the names of ISO C functions are used, they have the semantics
246defined in the standard.  To make it act as a conforming freestanding
247implementation for a freestanding environment, use the option
248'-ffreestanding'; it then defines '__STDC_HOSTED__' to '0' and does not
249make assumptions about the meanings of function names from the standard
250library, with exceptions noted below.  To build an OS kernel, you may
251well still need to make your own arrangements for linking and startup.
252*Note Options Controlling C Dialect: C Dialect Options.
253
254 GCC does not provide the library facilities required only of hosted
255implementations, nor yet all the facilities required by C99 of
256freestanding implementations on all platforms.  To use the facilities of
257a hosted environment, you need to find them elsewhere (for example, in
258the GNU C library).  *Note Standard Libraries: Standard Libraries.
259
260 Most of the compiler support routines used by GCC are present in
261'libgcc', but there are a few exceptions.  GCC requires the freestanding
262environment provide 'memcpy', 'memmove', 'memset' and 'memcmp'.
263Finally, if '__builtin_trap' is used, and the target does not implement
264the 'trap' pattern, then GCC emits a call to 'abort'.
265
266 For references to Technical Corrigenda, Rationale documents and
267information concerning the history of C that is available online, see
268<http://gcc.gnu.org/readings.html>
269
2702.2 C++ Language
271================
272
273GCC supports the original ISO C++ standard published in 1998, and the
2742011 and 2014 revisions.
275
276 The original ISO C++ standard was published as the ISO standard
277(ISO/IEC 14882:1998) and amended by a Technical Corrigenda published in
2782003 (ISO/IEC 14882:2003).  These standards are referred to as C++98 and
279C++03, respectively.  GCC implements the majority of C++98 ('export' is
280a notable exception) and most of the changes in C++03.  To select this
281standard in GCC, use one of the options '-ansi', '-std=c++98', or
282'-std=c++03'; to obtain all the diagnostics required by the standard,
283you should also specify '-pedantic' (or '-pedantic-errors' if you want
284them to be errors rather than warnings).
285
286 A revised ISO C++ standard was published in 2011 as ISO/IEC 14882:2011,
287and is referred to as C++11; before its publication it was commonly
288referred to as C++0x.  C++11 contains several changes to the C++
289language, all of which have been implemented in GCC.  For details see
290<https://gcc.gnu.org/projects/cxx-status.html#cxx11>.  To select this
291standard in GCC, use the option '-std=c++11'.
292
293 Another revised ISO C++ standard was published in 2014 as ISO/IEC
29414882:2014, and is referred to as C++14; before its publication it was
295sometimes referred to as C++1y.  C++14 contains several further changes
296to the C++ language, all of which have been implemented in GCC.  For
297details see <https://gcc.gnu.org/projects/cxx-status.html#cxx14>.  To
298select this standard in GCC, use the option '-std=c++14'.
299
300 The C++ language was further revised in 2017 and ISO/IEC 14882:2017 was
301published.  This is referred to as C++17, and before publication was
302often referred to as C++1z.  GCC supports all the changes in the new
303specification.  For further details see
304<https://gcc.gnu.org/projects/cxx-status.html#cxx1z>.  Use the option
305'-std=c++17' to select this variant of C++.
306
307 More information about the C++ standards is available on the ISO C++
308committee's web site at <http://www.open-std.org/jtc1/sc22/wg21/>.
309
310 To obtain all the diagnostics required by any of the standard versions
311described above you should specify '-pedantic' or '-pedantic-errors',
312otherwise GCC will allow some non-ISO C++ features as extensions.  *Note
313Warning Options::.
314
315 By default, GCC also provides some additional extensions to the C++
316language that on rare occasions conflict with the C++ standard.  *Note
317Options Controlling C++ Dialect: C++ Dialect Options.  Use of the '-std'
318options listed above disables these extensions where they they conflict
319with the C++ standard version selected.  You may also select an extended
320version of the C++ language explicitly with '-std=gnu++98' (for C++98
321with GNU extensions), or '-std=gnu++11' (for C++11 with GNU extensions),
322or '-std=gnu++14' (for C++14 with GNU extensions), or '-std=gnu++17'
323(for C++17 with GNU extensions).
324
325 The default, if no C++ language dialect options are given, is
326'-std=gnu++14'.
327
3282.3 Objective-C and Objective-C++ Languages
329===========================================
330
331GCC supports "traditional" Objective-C (also known as "Objective-C 1.0")
332and contains support for the Objective-C exception and synchronization
333syntax.  It has also support for a number of "Objective-C 2.0" language
334extensions, including properties, fast enumeration (only for
335Objective-C), method attributes and the @optional and @required keywords
336in protocols.  GCC supports Objective-C++ and features available in
337Objective-C are also available in Objective-C++.
338
339 GCC by default uses the GNU Objective-C runtime library, which is part
340of GCC and is not the same as the Apple/NeXT Objective-C runtime library
341used on Apple systems.  There are a number of differences documented in
342this manual.  The options '-fgnu-runtime' and '-fnext-runtime' allow you
343to switch between producing output that works with the GNU Objective-C
344runtime library and output that works with the Apple/NeXT Objective-C
345runtime library.
346
347 There is no formal written standard for Objective-C or Objective-C++.
348The authoritative manual on traditional Objective-C (1.0) is
349"Object-Oriented Programming and the Objective-C Language":
350<http://www.gnustep.org/resources/documentation/ObjectivCBook.pdf> is
351the original NeXTstep document.
352
353 The Objective-C exception and synchronization syntax (that is, the
354keywords '@try', '@throw', '@catch', '@finally' and '@synchronized') is
355supported by GCC and is enabled with the option '-fobjc-exceptions'.
356The syntax is briefly documented in this manual and in the Objective-C
3572.0 manuals from Apple.
358
359 The Objective-C 2.0 language extensions and features are automatically
360enabled; they include properties (via the '@property', '@synthesize' and
361'@dynamic keywords'), fast enumeration (not available in Objective-C++),
362attributes for methods (such as 'deprecated', 'noreturn', 'sentinel',
363'format'), the 'unused' attribute for method arguments, the '@package'
364keyword for instance variables and the '@optional' and '@required'
365keywords in protocols.  You can disable all these Objective-C 2.0
366language extensions with the option '-fobjc-std=objc1', which causes the
367compiler to recognize the same Objective-C language syntax recognized by
368GCC 4.0, and to produce an error if one of the new features is used.
369
370 GCC has currently no support for non-fragile instance variables.
371
372 The authoritative manual on Objective-C 2.0 is available from Apple:
373   *
374     <https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/Introduction/Introduction.html>
375
376 For more information concerning the history of Objective-C that is
377available online, see <http://gcc.gnu.org/readings.html>
378
3792.4 Go Language
380===============
381
382As of the GCC 4.7.1 release, GCC supports the Go 1 language standard,
383described at <https://golang.org/doc/go1>.
384
3852.5 HSA Intermediate Language (HSAIL)
386=====================================
387
388GCC can compile the binary representation (BRIG) of the HSAIL text
389format as described in HSA Programmer's Reference Manual version 1.0.1.
390This capability is typically utilized to implement the HSA runtime API's
391HSAIL finalization extension for a gcc supported processor.  HSA
392standards are freely available at
393<http://www.hsafoundation.com/standards/>.
394
3952.6 D language
396==============
397
398GCC supports the D 2.0 programming language.  The D language itself is
399currently defined by its reference implementation and supporting
400language specification, described at <https://dlang.org/spec/spec.html>.
401
4022.7 References for Other Languages
403==================================
404
405*Note GNAT Reference Manual: (gnat_rm)Top, for information on standard
406conformance and compatibility of the Ada compiler.
407
408 *Note Standards: (gfortran)Standards, for details of standards
409supported by GNU Fortran.
410
411
412File: gcc.info,  Node: Invoking GCC,  Next: C Implementation,  Prev: Standards,  Up: Top
413
4143 GCC Command Options
415*********************
416
417When you invoke GCC, it normally does preprocessing, compilation,
418assembly and linking.  The "overall options" allow you to stop this
419process at an intermediate stage.  For example, the '-c' option says not
420to run the linker.  Then the output consists of object files output by
421the assembler.  *Note Options Controlling the Kind of Output: Overall
422Options.
423
424 Other options are passed on to one or more stages of processing.  Some
425options control the preprocessor and others the compiler itself.  Yet
426other options control the assembler and linker; most of these are not
427documented here, since you rarely need to use any of them.
428
429 Most of the command-line options that you can use with GCC are useful
430for C programs; when an option is only useful with another language
431(usually C++), the explanation says so explicitly.  If the description
432for a particular option does not mention a source language, you can use
433that option with all supported languages.
434
435 The usual way to run GCC is to run the executable called 'gcc', or
436'MACHINE-gcc' when cross-compiling, or 'MACHINE-gcc-VERSION' to run a
437specific version of GCC. When you compile C++ programs, you should
438invoke GCC as 'g++' instead.  *Note Compiling C++ Programs: Invoking
439G++, for information about the differences in behavior between 'gcc' and
440'g++' when compiling C++ programs.
441
442 The 'gcc' program accepts options and file names as operands.  Many
443options have multi-letter names; therefore multiple single-letter
444options may _not_ be grouped: '-dv' is very different from '-d -v'.
445
446 You can mix options and other arguments.  For the most part, the order
447you use doesn't matter.  Order does matter when you use several options
448of the same kind; for example, if you specify '-L' more than once, the
449directories are searched in the order specified.  Also, the placement of
450the '-l' option is significant.
451
452 Many options have long names starting with '-f' or with '-W'--for
453example, '-fmove-loop-invariants', '-Wformat' and so on.  Most of these
454have both positive and negative forms; the negative form of '-ffoo' is
455'-fno-foo'.  This manual documents only one of these two forms,
456whichever one is not the default.
457
458 Some options take one or more arguments typically separated either by a
459space or by the equals sign ('=') from the option name.  Unless
460documented otherwise, an argument can be either numeric or a string.
461Numeric arguments must typically be small unsigned decimal or
462hexadecimal integers.  Hexadecimal arguments must begin with the '0x'
463prefix.  Arguments to options that specify a size threshold of some sort
464may be arbitrarily large decimal or hexadecimal integers followed by a
465byte size suffix designating a multiple of bytes such as 'kB' and 'KiB'
466for kilobyte and kibibyte, respectively, 'MB' and 'MiB' for megabyte and
467mebibyte, 'GB' and 'GiB' for gigabyte and gigibyte, and so on.  Such
468arguments are designated by BYTE-SIZE in the following text.  Refer to
469the NIST, IEC, and other relevant national and international standards
470for the full listing and explanation of the binary and decimal byte size
471prefixes.
472
473 *Note Option Index::, for an index to GCC's options.
474
475* Menu:
476
477* Option Summary::      Brief list of all options, without explanations.
478* Overall Options::     Controlling the kind of output:
479                        an executable, object files, assembler files,
480                        or preprocessed source.
481* Invoking G++::        Compiling C++ programs.
482* C Dialect Options::   Controlling the variant of C language compiled.
483* C++ Dialect Options:: Variations on C++.
484* Objective-C and Objective-C++ Dialect Options:: Variations on Objective-C
485                        and Objective-C++.
486* Diagnostic Message Formatting Options:: Controlling how diagnostics should
487                        be formatted.
488* Warning Options::     How picky should the compiler be?
489* Static Analyzer Options:: More expensive warnings.
490* Debugging Options::   Producing debuggable code.
491* Optimize Options::    How much optimization?
492* Instrumentation Options:: Enabling profiling and extra run-time error checking.
493* Preprocessor Options:: Controlling header files and macro definitions.
494                         Also, getting dependency information for Make.
495* Assembler Options::   Passing options to the assembler.
496* Link Options::        Specifying libraries and so on.
497* Directory Options::   Where to find header files and libraries.
498                        Where to find the compiler executable files.
499* Code Gen Options::    Specifying conventions for function calls, data layout
500                        and register usage.
501* Developer Options::   Printing GCC configuration info, statistics, and
502                        debugging dumps.
503* Submodel Options::    Target-specific options, such as compiling for a
504                        specific processor variant.
505* Spec Files::          How to pass switches to sub-processes.
506* Environment Variables:: Env vars that affect GCC.
507* Precompiled Headers:: Compiling a header once, and using it many times.
508
509
510File: gcc.info,  Node: Option Summary,  Next: Overall Options,  Up: Invoking GCC
511
5123.1 Option Summary
513==================
514
515Here is a summary of all the options, grouped by type.  Explanations are
516in the following sections.
517
518_Overall Options_
519     *Note Options Controlling the Kind of Output: Overall Options.
520          -c  -S  -E  -o FILE  -x LANGUAGE
521          -v  -###  --help[=CLASS[,...]]  --target-help  --version
522          -pass-exit-codes  -pipe  -specs=FILE  -wrapper
523          @FILE  -ffile-prefix-map=OLD=NEW
524          -fplugin=FILE  -fplugin-arg-NAME=ARG
525          -fdump-ada-spec[-slim]  -fada-spec-parent=UNIT  -fdump-go-spec=FILE
526
527_C Language Options_
528     *Note Options Controlling C Dialect: C Dialect Options.
529          -ansi  -std=STANDARD  -fgnu89-inline
530          -fpermitted-flt-eval-methods=STANDARD
531          -aux-info FILENAME  -fallow-parameterless-variadic-functions
532          -fno-asm  -fno-builtin  -fno-builtin-FUNCTION  -fgimple
533          -fhosted  -ffreestanding
534          -fopenacc  -fopenacc-dim=GEOM
535          -fopenmp  -fopenmp-simd
536          -fms-extensions  -fplan9-extensions  -fsso-struct=ENDIANNESS
537          -fallow-single-precision  -fcond-mismatch  -flax-vector-conversions
538          -fsigned-bitfields  -fsigned-char
539          -funsigned-bitfields  -funsigned-char
540
541_C++ Language Options_
542     *Note Options Controlling C++ Dialect: C++ Dialect Options.
543          -fabi-version=N  -fno-access-control
544          -faligned-new=N  -fargs-in-order=N  -fchar8_t  -fcheck-new
545          -fconstexpr-depth=N  -fconstexpr-cache-depth=N
546          -fconstexpr-loop-limit=N  -fconstexpr-ops-limit=N
547          -fno-elide-constructors
548          -fno-enforce-eh-specs
549          -fno-gnu-keywords
550          -fno-implicit-templates
551          -fno-implicit-inline-templates
552          -fno-implement-inlines  -fms-extensions
553          -fnew-inheriting-ctors
554          -fnew-ttp-matching
555          -fno-nonansi-builtins  -fnothrow-opt  -fno-operator-names
556          -fno-optional-diags  -fpermissive
557          -fno-pretty-templates
558          -fno-rtti  -fsized-deallocation
559          -ftemplate-backtrace-limit=N
560          -ftemplate-depth=N
561          -fno-threadsafe-statics  -fuse-cxa-atexit
562          -fno-weak  -nostdinc++
563          -fvisibility-inlines-hidden
564          -fvisibility-ms-compat
565          -fext-numeric-literals
566          -Wabi-tag  -Wcatch-value  -Wcatch-value=N
567          -Wno-class-conversion  -Wclass-memaccess
568          -Wcomma-subscript  -Wconditionally-supported
569          -Wno-conversion-null  -Wctor-dtor-privacy  -Wno-delete-incomplete
570          -Wdelete-non-virtual-dtor  -Wdeprecated-copy  -Wdeprecated-copy-dtor
571          -Weffc++  -Wextra-semi  -Wno-inaccessible-base
572          -Wno-inherited-variadic-ctor  -Wno-init-list-lifetime
573          -Wno-invalid-offsetof  -Wno-literal-suffix  -Wmismatched-tags
574          -Wmultiple-inheritance  -Wnamespaces  -Wnarrowing
575          -Wnoexcept  -Wnoexcept-type  -Wnon-virtual-dtor
576          -Wpessimizing-move  -Wno-placement-new  -Wplacement-new=N
577          -Wredundant-move -Wredundant-tags
578          -Wreorder  -Wregister
579          -Wstrict-null-sentinel  -Wno-subobject-linkage  -Wtemplates
580          -Wno-non-template-friend  -Wold-style-cast
581          -Woverloaded-virtual  -Wno-pmf-conversions -Wsign-promo
582          -Wsized-deallocation  -Wsuggest-final-methods
583          -Wsuggest-final-types  -Wsuggest-override
584          -Wno-terminate  -Wuseless-cast  -Wvirtual-inheritance
585          -Wno-virtual-move-assign  -Wvolatile  -Wzero-as-null-pointer-constant
586
587_Objective-C and Objective-C++ Language Options_
588     *Note Options Controlling Objective-C and Objective-C++ Dialects:
589     Objective-C and Objective-C++ Dialect Options.
590          -fconstant-string-class=CLASS-NAME
591          -fgnu-runtime  -fnext-runtime
592          -fno-nil-receivers
593          -fobjc-abi-version=N
594          -fobjc-call-cxx-cdtors
595          -fobjc-direct-dispatch
596          -fobjc-exceptions
597          -fobjc-gc
598          -fobjc-nilcheck
599          -fobjc-std=objc1
600          -fno-local-ivars
601          -fivar-visibility=[public|protected|private|package]
602          -freplace-objc-classes
603          -fzero-link
604          -gen-decls
605          -Wassign-intercept  -Wno-property-assign-default
606          -Wno-protocol  -Wselector
607          -Wstrict-selector-match
608          -Wundeclared-selector
609
610_Diagnostic Message Formatting Options_
611     *Note Options to Control Diagnostic Messages Formatting: Diagnostic
612     Message Formatting Options.
613          -fmessage-length=N
614          -fdiagnostics-show-location=[once|every-line]
615          -fdiagnostics-color=[auto|never|always]
616          -fdiagnostics-urls=[auto|never|always]
617          -fdiagnostics-format=[text|json]
618          -fno-diagnostics-show-option  -fno-diagnostics-show-caret
619          -fno-diagnostics-show-labels  -fno-diagnostics-show-line-numbers
620          -fno-diagnostics-show-cwe
621          -fdiagnostics-minimum-margin-width=WIDTH
622          -fdiagnostics-parseable-fixits  -fdiagnostics-generate-patch
623          -fdiagnostics-show-template-tree  -fno-elide-type
624          -fdiagnostics-path-format=[none|separate-events|inline-events]
625          -fdiagnostics-show-path-depths
626          -fno-show-column
627
628_Warning Options_
629     *Note Options to Request or Suppress Warnings: Warning Options.
630          -fsyntax-only  -fmax-errors=N  -Wpedantic
631          -pedantic-errors
632          -w  -Wextra  -Wall  -Wabi=N
633          -Waddress  -Wno-address-of-packed-member  -Waggregate-return
634          -Walloc-size-larger-than=BYTE-SIZE  -Walloc-zero
635          -Walloca  -Walloca-larger-than=BYTE-SIZE
636          -Wno-aggressive-loop-optimizations
637          -Warith-conversion
638          -Warray-bounds  -Warray-bounds=N
639          -Wno-attributes  -Wattribute-alias=N -Wno-attribute-alias
640          -Wno-attribute-warning  -Wbool-compare  -Wbool-operation
641          -Wno-builtin-declaration-mismatch
642          -Wno-builtin-macro-redefined  -Wc90-c99-compat  -Wc99-c11-compat
643          -Wc11-c2x-compat
644          -Wc++-compat  -Wc++11-compat  -Wc++14-compat  -Wc++17-compat
645          -Wc++20-compat
646          -Wcast-align  -Wcast-align=strict  -Wcast-function-type  -Wcast-qual
647          -Wchar-subscripts
648          -Wclobbered  -Wcomment
649          -Wconversion  -Wno-coverage-mismatch  -Wno-cpp
650          -Wdangling-else  -Wdate-time
651          -Wno-deprecated  -Wno-deprecated-declarations  -Wno-designated-init
652          -Wdisabled-optimization
653          -Wno-discarded-array-qualifiers  -Wno-discarded-qualifiers
654          -Wno-div-by-zero  -Wdouble-promotion
655          -Wduplicated-branches  -Wduplicated-cond
656          -Wempty-body  -Wno-endif-labels  -Wenum-compare  -Wenum-conversion
657          -Werror  -Werror=*  -Wexpansion-to-defined  -Wfatal-errors
658          -Wfloat-conversion  -Wfloat-equal  -Wformat  -Wformat=2
659          -Wno-format-contains-nul  -Wno-format-extra-args
660          -Wformat-nonliteral  -Wformat-overflow=N
661          -Wformat-security  -Wformat-signedness  -Wformat-truncation=N
662          -Wformat-y2k  -Wframe-address
663          -Wframe-larger-than=BYTE-SIZE  -Wno-free-nonheap-object
664          -Wno-hsa  -Wno-if-not-aligned  -Wno-ignored-attributes
665          -Wignored-qualifiers  -Wno-incompatible-pointer-types
666          -Wimplicit  -Wimplicit-fallthrough  -Wimplicit-fallthrough=N
667          -Wno-implicit-function-declaration  -Wno-implicit-int
668          -Winit-self  -Winline  -Wno-int-conversion  -Wint-in-bool-context
669          -Wno-int-to-pointer-cast  -Wno-invalid-memory-model
670          -Winvalid-pch  -Wjump-misses-init  -Wlarger-than=BYTE-SIZE
671          -Wlogical-not-parentheses  -Wlogical-op  -Wlong-long
672          -Wno-lto-type-mismatch -Wmain  -Wmaybe-uninitialized
673          -Wmemset-elt-size  -Wmemset-transposed-args
674          -Wmisleading-indentation  -Wmissing-attributes  -Wmissing-braces
675          -Wmissing-field-initializers  -Wmissing-format-attribute
676          -Wmissing-include-dirs  -Wmissing-noreturn  -Wno-missing-profile
677          -Wno-multichar  -Wmultistatement-macros  -Wnonnull  -Wnonnull-compare
678          -Wnormalized=[none|id|nfc|nfkc]
679          -Wnull-dereference  -Wno-odr  -Wopenmp-simd
680          -Wno-overflow  -Woverlength-strings  -Wno-override-init-side-effects
681          -Wpacked  -Wno-packed-bitfield-compat  -Wpacked-not-aligned  -Wpadded
682          -Wparentheses  -Wno-pedantic-ms-format
683          -Wpointer-arith  -Wno-pointer-compare  -Wno-pointer-to-int-cast
684          -Wno-pragmas  -Wno-prio-ctor-dtor  -Wredundant-decls
685          -Wrestrict  -Wno-return-local-addr  -Wreturn-type
686          -Wno-scalar-storage-order  -Wsequence-point
687          -Wshadow  -Wshadow=global  -Wshadow=local  -Wshadow=compatible-local
688          -Wno-shadow-ivar
689          -Wno-shift-count-negative  -Wno-shift-count-overflow  -Wshift-negative-value
690          -Wno-shift-overflow  -Wshift-overflow=N
691          -Wsign-compare  -Wsign-conversion
692          -Wno-sizeof-array-argument
693          -Wsizeof-pointer-div  -Wsizeof-pointer-memaccess
694          -Wstack-protector  -Wstack-usage=BYTE-SIZE  -Wstrict-aliasing
695          -Wstrict-aliasing=n  -Wstrict-overflow  -Wstrict-overflow=N
696          -Wstring-compare
697          -Wstringop-overflow=N  -Wno-stringop-truncation
698          -Wsuggest-attribute=[pure|const|noreturn|format|malloc]
699          -Wswitch  -Wno-switch-bool  -Wswitch-default  -Wswitch-enum
700          -Wno-switch-outside-range  -Wno-switch-unreachable  -Wsync-nand
701          -Wsystem-headers  -Wtautological-compare  -Wtrampolines  -Wtrigraphs
702          -Wtype-limits  -Wundef
703          -Wuninitialized  -Wunknown-pragmas
704          -Wunsuffixed-float-constants  -Wunused
705          -Wunused-but-set-parameter  -Wunused-but-set-variable
706          -Wunused-const-variable  -Wunused-const-variable=N
707          -Wunused-function  -Wunused-label  -Wunused-local-typedefs
708          -Wunused-macros
709          -Wunused-parameter  -Wno-unused-result
710          -Wunused-value  -Wunused-variable
711          -Wno-varargs  -Wvariadic-macros
712          -Wvector-operation-performance
713          -Wvla  -Wvla-larger-than=BYTE-SIZE  -Wno-vla-larger-than
714          -Wvolatile-register-var  -Wwrite-strings
715          -Wzero-length-bounds
716
717_Static Analyzer Options_
718          -fanalyzer
719          -fanalyzer-call-summaries
720          -fanalyzer-checker=NAME
721          -fanalyzer-fine-grained
722          -fanalyzer-state-merge
723          -fanalyzer-state-purge
724          -fanalyzer-transitivity
725          -fanalyzer-verbose-edges
726          -fanalyzer-verbose-state-changes
727          -fanalyzer-verbosity=LEVEL
728          -fdump-analyzer
729          -fdump-analyzer-stderr
730          -fdump-analyzer-callgraph
731          -fdump-analyzer-exploded-graph
732          -fdump-analyzer-exploded-nodes
733          -fdump-analyzer-exploded-nodes-2
734          -fdump-analyzer-exploded-nodes-3
735          -fdump-analyzer-state-purge
736          -fdump-analyzer-supergraph
737          -Wno-analyzer-double-fclose
738          -Wno-analyzer-double-free
739          -Wno-analyzer-exposure-through-output-file
740          -Wno-analyzer-file-leak
741          -Wno-analyzer-free-of-non-heap
742          -Wno-analyzer-malloc-leak
743          -Wno-analyzer-null-argument
744          -Wno-analyzer-null-dereference
745          -Wno-analyzer-possible-null-argument
746          -Wno-analyzer-possible-null-dereference
747          -Wno-analyzer-stale-setjmp-buffer
748          -Wno-analyzer-tainted-array-index
749          -Wanalyzer-too-complex
750          -Wno-analyzer-unsafe-call-within-signal-handler
751          -Wno-analyzer-use-after-free
752          -Wno-analyzer-use-of-pointer-in-stale-stack-frame
753          -Wno-analyzer-use-of-uninitialized-value
754
755
756_C and Objective-C-only Warning Options_
757          -Wbad-function-cast  -Wmissing-declarations
758          -Wmissing-parameter-type  -Wmissing-prototypes  -Wnested-externs
759          -Wold-style-declaration  -Wold-style-definition
760          -Wstrict-prototypes  -Wtraditional  -Wtraditional-conversion
761          -Wdeclaration-after-statement  -Wpointer-sign
762
763_Debugging Options_
764     *Note Options for Debugging Your Program: Debugging Options.
765          -g  -gLEVEL  -gdwarf  -gdwarf-VERSION
766          -ggdb  -grecord-gcc-switches  -gno-record-gcc-switches
767          -gstabs  -gstabs+  -gstrict-dwarf  -gno-strict-dwarf
768          -gas-loc-support  -gno-as-loc-support
769          -gas-locview-support  -gno-as-locview-support
770          -gcolumn-info  -gno-column-info
771          -gstatement-frontiers  -gno-statement-frontiers
772          -gvariable-location-views  -gno-variable-location-views
773          -ginternal-reset-location-views  -gno-internal-reset-location-views
774          -ginline-points  -gno-inline-points
775          -gvms  -gxcoff  -gxcoff+  -gz[=TYPE]
776          -gsplit-dwarf  -gdescribe-dies  -gno-describe-dies
777          -fdebug-prefix-map=OLD=NEW  -fdebug-types-section
778          -fno-eliminate-unused-debug-types
779          -femit-struct-debug-baseonly  -femit-struct-debug-reduced
780          -femit-struct-debug-detailed[=SPEC-LIST]
781          -fno-eliminate-unused-debug-symbols  -femit-class-debug-always
782          -fno-merge-debug-strings  -fno-dwarf2-cfi-asm
783          -fvar-tracking  -fvar-tracking-assignments
784
785_Optimization Options_
786     *Note Options that Control Optimization: Optimize Options.
787          -faggressive-loop-optimizations
788          -falign-functions[=N[:M:[N2[:M2]]]]
789          -falign-jumps[=N[:M:[N2[:M2]]]]
790          -falign-labels[=N[:M:[N2[:M2]]]]
791          -falign-loops[=N[:M:[N2[:M2]]]]
792          -fno-allocation-dce -fallow-store-data-races
793          -fassociative-math  -fauto-profile  -fauto-profile[=PATH]
794          -fauto-inc-dec  -fbranch-probabilities
795          -fcaller-saves
796          -fcombine-stack-adjustments  -fconserve-stack
797          -fcompare-elim  -fcprop-registers  -fcrossjumping
798          -fcse-follow-jumps  -fcse-skip-blocks  -fcx-fortran-rules
799          -fcx-limited-range
800          -fdata-sections  -fdce  -fdelayed-branch
801          -fdelete-null-pointer-checks  -fdevirtualize  -fdevirtualize-speculatively
802          -fdevirtualize-at-ltrans  -fdse
803          -fearly-inlining  -fipa-sra  -fexpensive-optimizations  -ffat-lto-objects
804          -ffast-math  -ffinite-math-only  -ffloat-store  -fexcess-precision=STYLE
805          -ffinite-loops
806          -fforward-propagate  -ffp-contract=STYLE  -ffunction-sections
807          -fgcse  -fgcse-after-reload  -fgcse-las  -fgcse-lm  -fgraphite-identity
808          -fgcse-sm  -fhoist-adjacent-loads  -fif-conversion
809          -fif-conversion2  -findirect-inlining
810          -finline-functions  -finline-functions-called-once  -finline-limit=N
811          -finline-small-functions  -fipa-cp  -fipa-cp-clone
812          -fipa-bit-cp  -fipa-vrp  -fipa-pta  -fipa-profile  -fipa-pure-const
813          -fipa-reference  -fipa-reference-addressable
814          -fipa-stack-alignment  -fipa-icf  -fira-algorithm=ALGORITHM
815          -flive-patching=LEVEL
816          -fira-region=REGION  -fira-hoist-pressure
817          -fira-loop-pressure  -fno-ira-share-save-slots
818          -fno-ira-share-spill-slots
819          -fisolate-erroneous-paths-dereference  -fisolate-erroneous-paths-attribute
820          -fivopts  -fkeep-inline-functions  -fkeep-static-functions
821          -fkeep-static-consts  -flimit-function-alignment  -flive-range-shrinkage
822          -floop-block  -floop-interchange  -floop-strip-mine
823          -floop-unroll-and-jam  -floop-nest-optimize
824          -floop-parallelize-all  -flra-remat  -flto  -flto-compression-level
825          -flto-partition=ALG  -fmerge-all-constants
826          -fmerge-constants  -fmodulo-sched  -fmodulo-sched-allow-regmoves
827          -fmove-loop-invariants  -fno-branch-count-reg
828          -fno-defer-pop  -fno-fp-int-builtin-inexact  -fno-function-cse
829          -fno-guess-branch-probability  -fno-inline  -fno-math-errno  -fno-peephole
830          -fno-peephole2  -fno-printf-return-value  -fno-sched-interblock
831          -fno-sched-spec  -fno-signed-zeros
832          -fno-toplevel-reorder  -fno-trapping-math  -fno-zero-initialized-in-bss
833          -fomit-frame-pointer  -foptimize-sibling-calls
834          -fpartial-inlining  -fpeel-loops  -fpredictive-commoning
835          -fprefetch-loop-arrays
836          -fprofile-correction
837          -fprofile-use  -fprofile-use=PATH -fprofile-partial-training
838          -fprofile-values -fprofile-reorder-functions
839          -freciprocal-math  -free  -frename-registers  -freorder-blocks
840          -freorder-blocks-algorithm=ALGORITHM
841          -freorder-blocks-and-partition  -freorder-functions
842          -frerun-cse-after-loop  -freschedule-modulo-scheduled-loops
843          -frounding-math  -fsave-optimization-record
844          -fsched2-use-superblocks  -fsched-pressure
845          -fsched-spec-load  -fsched-spec-load-dangerous
846          -fsched-stalled-insns-dep[=N]  -fsched-stalled-insns[=N]
847          -fsched-group-heuristic  -fsched-critical-path-heuristic
848          -fsched-spec-insn-heuristic  -fsched-rank-heuristic
849          -fsched-last-insn-heuristic  -fsched-dep-count-heuristic
850          -fschedule-fusion
851          -fschedule-insns  -fschedule-insns2  -fsection-anchors
852          -fselective-scheduling  -fselective-scheduling2
853          -fsel-sched-pipelining  -fsel-sched-pipelining-outer-loops
854          -fsemantic-interposition  -fshrink-wrap  -fshrink-wrap-separate
855          -fsignaling-nans
856          -fsingle-precision-constant  -fsplit-ivs-in-unroller  -fsplit-loops
857          -fsplit-paths
858          -fsplit-wide-types  -fsplit-wide-types-early  -fssa-backprop  -fssa-phiopt
859          -fstdarg-opt  -fstore-merging  -fstrict-aliasing
860          -fthread-jumps  -ftracer  -ftree-bit-ccp
861          -ftree-builtin-call-dce  -ftree-ccp  -ftree-ch
862          -ftree-coalesce-vars  -ftree-copy-prop  -ftree-dce  -ftree-dominator-opts
863          -ftree-dse  -ftree-forwprop  -ftree-fre  -fcode-hoisting
864          -ftree-loop-if-convert  -ftree-loop-im
865          -ftree-phiprop  -ftree-loop-distribution  -ftree-loop-distribute-patterns
866          -ftree-loop-ivcanon  -ftree-loop-linear  -ftree-loop-optimize
867          -ftree-loop-vectorize
868          -ftree-parallelize-loops=N  -ftree-pre  -ftree-partial-pre  -ftree-pta
869          -ftree-reassoc  -ftree-scev-cprop  -ftree-sink  -ftree-slsr  -ftree-sra
870          -ftree-switch-conversion  -ftree-tail-merge
871          -ftree-ter  -ftree-vectorize  -ftree-vrp  -funconstrained-commons
872          -funit-at-a-time  -funroll-all-loops  -funroll-loops
873          -funsafe-math-optimizations  -funswitch-loops
874          -fipa-ra  -fvariable-expansion-in-unroller  -fvect-cost-model  -fvpt
875          -fweb  -fwhole-program  -fwpa  -fuse-linker-plugin
876          --param NAME=VALUE
877          -O  -O0  -O1  -O2  -O3  -Os  -Ofast  -Og
878
879_Program Instrumentation Options_
880     *Note Program Instrumentation Options: Instrumentation Options.
881          -p  -pg  -fprofile-arcs  --coverage  -ftest-coverage
882          -fprofile-abs-path
883          -fprofile-dir=PATH  -fprofile-generate  -fprofile-generate=PATH
884          -fprofile-note=PATH -fprofile-prefix-path=PATH
885          -fprofile-update=METHOD -fprofile-filter-files=REGEX
886          -fprofile-exclude-files=REGEX -fprofile-reproducibility
887          -fsanitize=STYLE  -fsanitize-recover  -fsanitize-recover=STYLE
888          -fasan-shadow-offset=NUMBER  -fsanitize-sections=S1,S2,...
889          -fsanitize-undefined-trap-on-error  -fbounds-check
890          -fcf-protection=[full|branch|return|none]
891          -fstack-protector  -fstack-protector-all  -fstack-protector-strong
892          -fstack-protector-explicit  -fstack-check
893          -fstack-limit-register=REG  -fstack-limit-symbol=SYM
894          -fno-stack-limit  -fsplit-stack
895          -fvtable-verify=[std|preinit|none]
896          -fvtv-counts  -fvtv-debug
897          -finstrument-functions
898          -finstrument-functions-exclude-function-list=SYM,SYM,...
899          -finstrument-functions-exclude-file-list=FILE,FILE,...
900
901_Preprocessor Options_
902     *Note Options Controlling the Preprocessor: Preprocessor Options.
903          -AQUESTION=ANSWER
904          -A-QUESTION[=ANSWER]
905          -C  -CC  -DMACRO[=DEFN]
906          -dD  -dI  -dM  -dN  -dU
907          -fdebug-cpp  -fdirectives-only  -fdollars-in-identifiers
908          -fexec-charset=CHARSET  -fextended-identifiers
909          -finput-charset=CHARSET  -fmacro-prefix-map=OLD=NEW
910          -fmax-include-depth=DEPTH
911          -fno-canonical-system-headers  -fpch-deps  -fpch-preprocess
912          -fpreprocessed  -ftabstop=WIDTH  -ftrack-macro-expansion
913          -fwide-exec-charset=CHARSET  -fworking-directory
914          -H  -imacros FILE  -include FILE
915          -M  -MD  -MF  -MG  -MM  -MMD  -MP  -MQ  -MT
916          -no-integrated-cpp  -P  -pthread  -remap
917          -traditional  -traditional-cpp  -trigraphs
918          -UMACRO  -undef
919          -Wp,OPTION  -Xpreprocessor OPTION
920
921_Assembler Options_
922     *Note Passing Options to the Assembler: Assembler Options.
923          -Wa,OPTION  -Xassembler OPTION
924
925_Linker Options_
926     *Note Options for Linking: Link Options.
927          OBJECT-FILE-NAME  -fuse-ld=LINKER  -lLIBRARY
928          -nostartfiles  -nodefaultlibs  -nolibc  -nostdlib
929          -e ENTRY  --entry=ENTRY
930          -pie  -pthread  -r  -rdynamic
931          -s  -static  -static-pie  -static-libgcc  -static-libstdc++
932          -static-libasan  -static-libtsan  -static-liblsan  -static-libubsan
933          -shared  -shared-libgcc  -symbolic
934          -T SCRIPT  -Wl,OPTION  -Xlinker OPTION
935          -u SYMBOL  -z KEYWORD
936
937_Directory Options_
938     *Note Options for Directory Search: Directory Options.
939          -BPREFIX  -IDIR  -I-
940          -idirafter DIR
941          -imacros FILE  -imultilib DIR
942          -iplugindir=DIR  -iprefix FILE
943          -iquote DIR  -isysroot DIR  -isystem DIR
944          -iwithprefix DIR  -iwithprefixbefore DIR
945          -LDIR  -no-canonical-prefixes  --no-sysroot-suffix
946          -nostdinc  -nostdinc++  --sysroot=DIR
947
948_Code Generation Options_
949     *Note Options for Code Generation Conventions: Code Gen Options.
950          -fcall-saved-REG  -fcall-used-REG
951          -ffixed-REG  -fexceptions
952          -fnon-call-exceptions  -fdelete-dead-exceptions  -funwind-tables
953          -fasynchronous-unwind-tables
954          -fno-gnu-unique
955          -finhibit-size-directive  -fcommon  -fno-ident
956          -fpcc-struct-return  -fpic  -fPIC  -fpie  -fPIE  -fno-plt
957          -fno-jump-tables
958          -frecord-gcc-switches
959          -freg-struct-return  -fshort-enums  -fshort-wchar
960          -fverbose-asm  -fpack-struct[=N]
961          -fleading-underscore  -ftls-model=MODEL
962          -fstack-reuse=REUSE_LEVEL
963          -ftrampolines  -ftrapv  -fwrapv
964          -fvisibility=[default|internal|hidden|protected]
965          -fstrict-volatile-bitfields  -fsync-libcalls
966
967_Developer Options_
968     *Note GCC Developer Options: Developer Options.
969          -dLETTERS  -dumpspecs  -dumpmachine  -dumpversion
970          -dumpfullversion  -fcallgraph-info[=su,da]
971          -fchecking  -fchecking=N
972          -fdbg-cnt-list   -fdbg-cnt=COUNTER-VALUE-LIST
973          -fdisable-ipa-PASS_NAME
974          -fdisable-rtl-PASS_NAME
975          -fdisable-rtl-PASS-NAME=RANGE-LIST
976          -fdisable-tree-PASS_NAME
977          -fdisable-tree-PASS-NAME=RANGE-LIST
978          -fdump-debug  -fdump-earlydebug
979          -fdump-noaddr  -fdump-unnumbered  -fdump-unnumbered-links
980          -fdump-final-insns[=FILE]
981          -fdump-ipa-all  -fdump-ipa-cgraph  -fdump-ipa-inline
982          -fdump-lang-all
983          -fdump-lang-SWITCH
984          -fdump-lang-SWITCH-OPTIONS
985          -fdump-lang-SWITCH-OPTIONS=FILENAME
986          -fdump-passes
987          -fdump-rtl-PASS  -fdump-rtl-PASS=FILENAME
988          -fdump-statistics
989          -fdump-tree-all
990          -fdump-tree-SWITCH
991          -fdump-tree-SWITCH-OPTIONS
992          -fdump-tree-SWITCH-OPTIONS=FILENAME
993          -fcompare-debug[=OPTS]  -fcompare-debug-second
994          -fenable-KIND-PASS
995          -fenable-KIND-PASS=RANGE-LIST
996          -fira-verbose=N
997          -flto-report  -flto-report-wpa  -fmem-report-wpa
998          -fmem-report  -fpre-ipa-mem-report  -fpost-ipa-mem-report
999          -fopt-info  -fopt-info-OPTIONS[=FILE]
1000          -fprofile-report
1001          -frandom-seed=STRING  -fsched-verbose=N
1002          -fsel-sched-verbose  -fsel-sched-dump-cfg  -fsel-sched-pipelining-verbose
1003          -fstats  -fstack-usage  -ftime-report  -ftime-report-details
1004          -fvar-tracking-assignments-toggle  -gtoggle
1005          -print-file-name=LIBRARY  -print-libgcc-file-name
1006          -print-multi-directory  -print-multi-lib  -print-multi-os-directory
1007          -print-prog-name=PROGRAM  -print-search-dirs  -Q
1008          -print-sysroot  -print-sysroot-headers-suffix
1009          -save-temps  -save-temps=cwd  -save-temps=obj  -time[=FILE]
1010
1011_Machine-Dependent Options_
1012     *Note Machine-Dependent Options: Submodel Options.
1013
1014     _AArch64 Options_
1015          -mabi=NAME  -mbig-endian  -mlittle-endian
1016          -mgeneral-regs-only
1017          -mcmodel=tiny  -mcmodel=small  -mcmodel=large
1018          -mstrict-align  -mno-strict-align
1019          -momit-leaf-frame-pointer
1020          -mtls-dialect=desc  -mtls-dialect=traditional
1021          -mtls-size=SIZE
1022          -mfix-cortex-a53-835769  -mfix-cortex-a53-843419
1023          -mlow-precision-recip-sqrt  -mlow-precision-sqrt  -mlow-precision-div
1024          -mpc-relative-literal-loads
1025          -msign-return-address=SCOPE
1026          -mbranch-protection=NONE|STANDARD|PAC-RET[+LEAF
1027          +B-KEY]|BTI
1028          -march=NAME  -mcpu=NAME  -mtune=NAME
1029          -moverride=STRING  -mverbose-cost-dump
1030          -mstack-protector-guard=GUARD -mstack-protector-guard-reg=SYSREG
1031          -mstack-protector-guard-offset=OFFSET -mtrack-speculation
1032          -moutline-atomics
1033
1034     _Adapteva Epiphany Options_
1035          -mhalf-reg-file  -mprefer-short-insn-regs
1036          -mbranch-cost=NUM  -mcmove  -mnops=NUM  -msoft-cmpsf
1037          -msplit-lohi  -mpost-inc  -mpost-modify  -mstack-offset=NUM
1038          -mround-nearest  -mlong-calls  -mshort-calls  -msmall16
1039          -mfp-mode=MODE  -mvect-double  -max-vect-align=NUM
1040          -msplit-vecmove-early  -m1reg-REG
1041
1042     _AMD GCN Options_
1043          -march=GPU -mtune=GPU -mstack-size=BYTES
1044
1045     _ARC Options_
1046          -mbarrel-shifter  -mjli-always
1047          -mcpu=CPU  -mA6  -mARC600  -mA7  -mARC700
1048          -mdpfp  -mdpfp-compact  -mdpfp-fast  -mno-dpfp-lrsr
1049          -mea  -mno-mpy  -mmul32x16  -mmul64  -matomic
1050          -mnorm  -mspfp  -mspfp-compact  -mspfp-fast  -msimd  -msoft-float  -mswap
1051          -mcrc  -mdsp-packa  -mdvbf  -mlock  -mmac-d16  -mmac-24  -mrtsc  -mswape
1052          -mtelephony  -mxy  -misize  -mannotate-align  -marclinux  -marclinux_prof
1053          -mlong-calls  -mmedium-calls  -msdata  -mirq-ctrl-saved
1054          -mrgf-banked-regs  -mlpc-width=WIDTH  -G NUM
1055          -mvolatile-cache  -mtp-regno=REGNO
1056          -malign-call  -mauto-modify-reg  -mbbit-peephole  -mno-brcc
1057          -mcase-vector-pcrel  -mcompact-casesi  -mno-cond-exec  -mearly-cbranchsi
1058          -mexpand-adddi  -mindexed-loads  -mlra  -mlra-priority-none
1059          -mlra-priority-compact mlra-priority-noncompact  -mmillicode
1060          -mmixed-code  -mq-class  -mRcq  -mRcw  -msize-level=LEVEL
1061          -mtune=CPU  -mmultcost=NUM  -mcode-density-frame
1062          -munalign-prob-threshold=PROBABILITY  -mmpy-option=MULTO
1063          -mdiv-rem  -mcode-density  -mll64  -mfpu=FPU  -mrf16  -mbranch-index
1064
1065     _ARM Options_
1066          -mapcs-frame  -mno-apcs-frame
1067          -mabi=NAME
1068          -mapcs-stack-check  -mno-apcs-stack-check
1069          -mapcs-reentrant  -mno-apcs-reentrant
1070          -mgeneral-regs-only
1071          -msched-prolog  -mno-sched-prolog
1072          -mlittle-endian  -mbig-endian
1073          -mbe8  -mbe32
1074          -mfloat-abi=NAME
1075          -mfp16-format=NAME
1076          -mthumb-interwork  -mno-thumb-interwork
1077          -mcpu=NAME  -march=NAME  -mfpu=NAME
1078          -mtune=NAME  -mprint-tune-info
1079          -mstructure-size-boundary=N
1080          -mabort-on-noreturn
1081          -mlong-calls  -mno-long-calls
1082          -msingle-pic-base  -mno-single-pic-base
1083          -mpic-register=REG
1084          -mnop-fun-dllimport
1085          -mpoke-function-name
1086          -mthumb  -marm  -mflip-thumb
1087          -mtpcs-frame  -mtpcs-leaf-frame
1088          -mcaller-super-interworking  -mcallee-super-interworking
1089          -mtp=NAME  -mtls-dialect=DIALECT
1090          -mword-relocations
1091          -mfix-cortex-m3-ldrd
1092          -munaligned-access
1093          -mneon-for-64bits
1094          -mslow-flash-data
1095          -masm-syntax-unified
1096          -mrestrict-it
1097          -mverbose-cost-dump
1098          -mpure-code
1099          -mcmse
1100          -mfdpic
1101
1102     _AVR Options_
1103          -mmcu=MCU  -mabsdata  -maccumulate-args
1104          -mbranch-cost=COST
1105          -mcall-prologues  -mgas-isr-prologues  -mint8
1106          -mdouble=BITS -mlong-double=BITS
1107          -mn_flash=SIZE  -mno-interrupts
1108          -mmain-is-OS_task  -mrelax  -mrmw  -mstrict-X  -mtiny-stack
1109          -mfract-convert-truncate
1110          -mshort-calls  -nodevicelib  -nodevicespecs
1111          -Waddr-space-convert  -Wmisspelled-isr
1112
1113     _Blackfin Options_
1114          -mcpu=CPU[-SIREVISION]
1115          -msim  -momit-leaf-frame-pointer  -mno-omit-leaf-frame-pointer
1116          -mspecld-anomaly  -mno-specld-anomaly  -mcsync-anomaly  -mno-csync-anomaly
1117          -mlow-64k  -mno-low64k  -mstack-check-l1  -mid-shared-library
1118          -mno-id-shared-library  -mshared-library-id=N
1119          -mleaf-id-shared-library  -mno-leaf-id-shared-library
1120          -msep-data  -mno-sep-data  -mlong-calls  -mno-long-calls
1121          -mfast-fp  -minline-plt  -mmulticore  -mcorea  -mcoreb  -msdram
1122          -micplb
1123
1124     _C6X Options_
1125          -mbig-endian  -mlittle-endian  -march=CPU
1126          -msim  -msdata=SDATA-TYPE
1127
1128     _CRIS Options_
1129          -mcpu=CPU  -march=CPU  -mtune=CPU
1130          -mmax-stack-frame=N  -melinux-stacksize=N
1131          -metrax4  -metrax100  -mpdebug  -mcc-init  -mno-side-effects
1132          -mstack-align  -mdata-align  -mconst-align
1133          -m32-bit  -m16-bit  -m8-bit  -mno-prologue-epilogue  -mno-gotplt
1134          -melf  -maout  -melinux  -mlinux  -sim  -sim2
1135          -mmul-bug-workaround  -mno-mul-bug-workaround
1136
1137     _CR16 Options_
1138          -mmac
1139          -mcr16cplus  -mcr16c
1140          -msim  -mint32  -mbit-ops
1141          -mdata-model=MODEL
1142
1143     _C-SKY Options_
1144          -march=ARCH  -mcpu=CPU
1145          -mbig-endian  -EB  -mlittle-endian  -EL
1146          -mhard-float  -msoft-float  -mfpu=FPU  -mdouble-float  -mfdivdu
1147          -melrw  -mistack  -mmp  -mcp  -mcache  -msecurity  -mtrust
1148          -mdsp  -medsp  -mvdsp
1149          -mdiv  -msmart  -mhigh-registers  -manchor
1150          -mpushpop  -mmultiple-stld  -mconstpool  -mstack-size  -mccrt
1151          -mbranch-cost=N  -mcse-cc  -msched-prolog
1152
1153     _Darwin Options_
1154          -all_load  -allowable_client  -arch  -arch_errors_fatal
1155          -arch_only  -bind_at_load  -bundle  -bundle_loader
1156          -client_name  -compatibility_version  -current_version
1157          -dead_strip
1158          -dependency-file  -dylib_file  -dylinker_install_name
1159          -dynamic  -dynamiclib  -exported_symbols_list
1160          -filelist  -flat_namespace  -force_cpusubtype_ALL
1161          -force_flat_namespace  -headerpad_max_install_names
1162          -iframework
1163          -image_base  -init  -install_name  -keep_private_externs
1164          -multi_module  -multiply_defined  -multiply_defined_unused
1165          -noall_load   -no_dead_strip_inits_and_terms
1166          -nofixprebinding  -nomultidefs  -noprebind  -noseglinkedit
1167          -pagezero_size  -prebind  -prebind_all_twolevel_modules
1168          -private_bundle  -read_only_relocs  -sectalign
1169          -sectobjectsymbols  -whyload  -seg1addr
1170          -sectcreate  -sectobjectsymbols  -sectorder
1171          -segaddr  -segs_read_only_addr  -segs_read_write_addr
1172          -seg_addr_table  -seg_addr_table_filename  -seglinkedit
1173          -segprot  -segs_read_only_addr  -segs_read_write_addr
1174          -single_module  -static  -sub_library  -sub_umbrella
1175          -twolevel_namespace  -umbrella  -undefined
1176          -unexported_symbols_list  -weak_reference_mismatches
1177          -whatsloaded  -F  -gused  -gfull  -mmacosx-version-min=VERSION
1178          -mkernel  -mone-byte-bool
1179
1180     _DEC Alpha Options_
1181          -mno-fp-regs  -msoft-float
1182          -mieee  -mieee-with-inexact  -mieee-conformant
1183          -mfp-trap-mode=MODE  -mfp-rounding-mode=MODE
1184          -mtrap-precision=MODE  -mbuild-constants
1185          -mcpu=CPU-TYPE  -mtune=CPU-TYPE
1186          -mbwx  -mmax  -mfix  -mcix
1187          -mfloat-vax  -mfloat-ieee
1188          -mexplicit-relocs  -msmall-data  -mlarge-data
1189          -msmall-text  -mlarge-text
1190          -mmemory-latency=TIME
1191
1192     _eBPF Options_
1193          -mbig-endian -mlittle-endian -mkernel=VERSION
1194          -mframe-limit=BYTES
1195
1196     _FR30 Options_
1197          -msmall-model  -mno-lsim
1198
1199     _FT32 Options_
1200          -msim  -mlra  -mnodiv  -mft32b  -mcompress  -mnopm
1201
1202     _FRV Options_
1203          -mgpr-32  -mgpr-64  -mfpr-32  -mfpr-64
1204          -mhard-float  -msoft-float
1205          -malloc-cc  -mfixed-cc  -mdword  -mno-dword
1206          -mdouble  -mno-double
1207          -mmedia  -mno-media  -mmuladd  -mno-muladd
1208          -mfdpic  -minline-plt  -mgprel-ro  -multilib-library-pic
1209          -mlinked-fp  -mlong-calls  -malign-labels
1210          -mlibrary-pic  -macc-4  -macc-8
1211          -mpack  -mno-pack  -mno-eflags  -mcond-move  -mno-cond-move
1212          -moptimize-membar  -mno-optimize-membar
1213          -mscc  -mno-scc  -mcond-exec  -mno-cond-exec
1214          -mvliw-branch  -mno-vliw-branch
1215          -mmulti-cond-exec  -mno-multi-cond-exec  -mnested-cond-exec
1216          -mno-nested-cond-exec  -mtomcat-stats
1217          -mTLS  -mtls
1218          -mcpu=CPU
1219
1220     _GNU/Linux Options_
1221          -mglibc  -muclibc  -mmusl  -mbionic  -mandroid
1222          -tno-android-cc  -tno-android-ld
1223
1224     _H8/300 Options_
1225          -mrelax  -mh  -ms  -mn  -mexr  -mno-exr  -mint32  -malign-300
1226
1227     _HPPA Options_
1228          -march=ARCHITECTURE-TYPE
1229          -mcaller-copies  -mdisable-fpregs  -mdisable-indexing
1230          -mfast-indirect-calls  -mgas  -mgnu-ld   -mhp-ld
1231          -mfixed-range=REGISTER-RANGE
1232          -mjump-in-delay  -mlinker-opt  -mlong-calls
1233          -mlong-load-store  -mno-disable-fpregs
1234          -mno-disable-indexing  -mno-fast-indirect-calls  -mno-gas
1235          -mno-jump-in-delay  -mno-long-load-store
1236          -mno-portable-runtime  -mno-soft-float
1237          -mno-space-regs  -msoft-float  -mpa-risc-1-0
1238          -mpa-risc-1-1  -mpa-risc-2-0  -mportable-runtime
1239          -mschedule=CPU-TYPE  -mspace-regs  -msio  -mwsio
1240          -munix=UNIX-STD  -nolibdld  -static  -threads
1241
1242     _IA-64 Options_
1243          -mbig-endian  -mlittle-endian  -mgnu-as  -mgnu-ld  -mno-pic
1244          -mvolatile-asm-stop  -mregister-names  -msdata  -mno-sdata
1245          -mconstant-gp  -mauto-pic  -mfused-madd
1246          -minline-float-divide-min-latency
1247          -minline-float-divide-max-throughput
1248          -mno-inline-float-divide
1249          -minline-int-divide-min-latency
1250          -minline-int-divide-max-throughput
1251          -mno-inline-int-divide
1252          -minline-sqrt-min-latency  -minline-sqrt-max-throughput
1253          -mno-inline-sqrt
1254          -mdwarf2-asm  -mearly-stop-bits
1255          -mfixed-range=REGISTER-RANGE  -mtls-size=TLS-SIZE
1256          -mtune=CPU-TYPE  -milp32  -mlp64
1257          -msched-br-data-spec  -msched-ar-data-spec  -msched-control-spec
1258          -msched-br-in-data-spec  -msched-ar-in-data-spec  -msched-in-control-spec
1259          -msched-spec-ldc  -msched-spec-control-ldc
1260          -msched-prefer-non-data-spec-insns  -msched-prefer-non-control-spec-insns
1261          -msched-stop-bits-after-every-cycle  -msched-count-spec-in-critical-path
1262          -msel-sched-dont-check-control-spec  -msched-fp-mem-deps-zero-cost
1263          -msched-max-memory-insns-hard-limit  -msched-max-memory-insns=MAX-INSNS
1264
1265     _LM32 Options_
1266          -mbarrel-shift-enabled  -mdivide-enabled  -mmultiply-enabled
1267          -msign-extend-enabled  -muser-enabled
1268
1269     _M32R/D Options_
1270          -m32r2  -m32rx  -m32r
1271          -mdebug
1272          -malign-loops  -mno-align-loops
1273          -missue-rate=NUMBER
1274          -mbranch-cost=NUMBER
1275          -mmodel=CODE-SIZE-MODEL-TYPE
1276          -msdata=SDATA-TYPE
1277          -mno-flush-func  -mflush-func=NAME
1278          -mno-flush-trap  -mflush-trap=NUMBER
1279          -G NUM
1280
1281     _M32C Options_
1282          -mcpu=CPU  -msim  -memregs=NUMBER
1283
1284     _M680x0 Options_
1285          -march=ARCH  -mcpu=CPU  -mtune=TUNE
1286          -m68000  -m68020  -m68020-40  -m68020-60  -m68030  -m68040
1287          -m68060  -mcpu32  -m5200  -m5206e  -m528x  -m5307  -m5407
1288          -mcfv4e  -mbitfield  -mno-bitfield  -mc68000  -mc68020
1289          -mnobitfield  -mrtd  -mno-rtd  -mdiv  -mno-div  -mshort
1290          -mno-short  -mhard-float  -m68881  -msoft-float  -mpcrel
1291          -malign-int  -mstrict-align  -msep-data  -mno-sep-data
1292          -mshared-library-id=n  -mid-shared-library  -mno-id-shared-library
1293          -mxgot  -mno-xgot  -mlong-jump-table-offsets
1294
1295     _MCore Options_
1296          -mhardlit  -mno-hardlit  -mdiv  -mno-div  -mrelax-immediates
1297          -mno-relax-immediates  -mwide-bitfields  -mno-wide-bitfields
1298          -m4byte-functions  -mno-4byte-functions  -mcallgraph-data
1299          -mno-callgraph-data  -mslow-bytes  -mno-slow-bytes  -mno-lsim
1300          -mlittle-endian  -mbig-endian  -m210  -m340  -mstack-increment
1301
1302     _MeP Options_
1303          -mabsdiff  -mall-opts  -maverage  -mbased=N  -mbitops
1304          -mc=N  -mclip  -mconfig=NAME  -mcop  -mcop32  -mcop64  -mivc2
1305          -mdc  -mdiv  -meb  -mel  -mio-volatile  -ml  -mleadz  -mm  -mminmax
1306          -mmult  -mno-opts  -mrepeat  -ms  -msatur  -msdram  -msim  -msimnovec  -mtf
1307          -mtiny=N
1308
1309     _MicroBlaze Options_
1310          -msoft-float  -mhard-float  -msmall-divides  -mcpu=CPU
1311          -mmemcpy  -mxl-soft-mul  -mxl-soft-div  -mxl-barrel-shift
1312          -mxl-pattern-compare  -mxl-stack-check  -mxl-gp-opt  -mno-clearbss
1313          -mxl-multiply-high  -mxl-float-convert  -mxl-float-sqrt
1314          -mbig-endian  -mlittle-endian  -mxl-reorder  -mxl-mode-APP-MODEL
1315          -mpic-data-is-text-relative
1316
1317     _MIPS Options_
1318          -EL  -EB  -march=ARCH  -mtune=ARCH
1319          -mips1  -mips2  -mips3  -mips4  -mips32  -mips32r2  -mips32r3  -mips32r5
1320          -mips32r6  -mips64  -mips64r2  -mips64r3  -mips64r5  -mips64r6
1321          -mips16  -mno-mips16  -mflip-mips16
1322          -minterlink-compressed  -mno-interlink-compressed
1323          -minterlink-mips16  -mno-interlink-mips16
1324          -mabi=ABI  -mabicalls  -mno-abicalls
1325          -mshared  -mno-shared  -mplt  -mno-plt  -mxgot  -mno-xgot
1326          -mgp32  -mgp64  -mfp32  -mfpxx  -mfp64  -mhard-float  -msoft-float
1327          -mno-float  -msingle-float  -mdouble-float
1328          -modd-spreg  -mno-odd-spreg
1329          -mabs=MODE  -mnan=ENCODING
1330          -mdsp  -mno-dsp  -mdspr2  -mno-dspr2
1331          -mmcu  -mmno-mcu
1332          -meva  -mno-eva
1333          -mvirt  -mno-virt
1334          -mxpa  -mno-xpa
1335          -mcrc  -mno-crc
1336          -mginv  -mno-ginv
1337          -mmicromips  -mno-micromips
1338          -mmsa  -mno-msa
1339          -mloongson-mmi  -mno-loongson-mmi
1340          -mloongson-ext  -mno-loongson-ext
1341          -mloongson-ext2  -mno-loongson-ext2
1342          -mfpu=FPU-TYPE
1343          -msmartmips  -mno-smartmips
1344          -mpaired-single  -mno-paired-single  -mdmx  -mno-mdmx
1345          -mips3d  -mno-mips3d  -mmt  -mno-mt  -mllsc  -mno-llsc
1346          -mlong64  -mlong32  -msym32  -mno-sym32
1347          -GNUM  -mlocal-sdata  -mno-local-sdata
1348          -mextern-sdata  -mno-extern-sdata  -mgpopt  -mno-gopt
1349          -membedded-data  -mno-embedded-data
1350          -muninit-const-in-rodata  -mno-uninit-const-in-rodata
1351          -mcode-readable=SETTING
1352          -msplit-addresses  -mno-split-addresses
1353          -mexplicit-relocs  -mno-explicit-relocs
1354          -mcheck-zero-division  -mno-check-zero-division
1355          -mdivide-traps  -mdivide-breaks
1356          -mload-store-pairs  -mno-load-store-pairs
1357          -mmemcpy  -mno-memcpy  -mlong-calls  -mno-long-calls
1358          -mmad  -mno-mad  -mimadd  -mno-imadd  -mfused-madd  -mno-fused-madd  -nocpp
1359          -mfix-24k  -mno-fix-24k
1360          -mfix-r4000  -mno-fix-r4000  -mfix-r4400  -mno-fix-r4400
1361          -mfix-r5900  -mno-fix-r5900
1362          -mfix-r10000  -mno-fix-r10000  -mfix-rm7000  -mno-fix-rm7000
1363          -mfix-vr4120  -mno-fix-vr4120
1364          -mfix-vr4130  -mno-fix-vr4130  -mfix-sb1  -mno-fix-sb1
1365          -mflush-func=FUNC  -mno-flush-func
1366          -mbranch-cost=NUM  -mbranch-likely  -mno-branch-likely
1367          -mcompact-branches=POLICY
1368          -mfp-exceptions  -mno-fp-exceptions
1369          -mvr4130-align  -mno-vr4130-align  -msynci  -mno-synci
1370          -mlxc1-sxc1  -mno-lxc1-sxc1  -mmadd4  -mno-madd4
1371          -mrelax-pic-calls  -mno-relax-pic-calls  -mmcount-ra-address
1372          -mframe-header-opt  -mno-frame-header-opt
1373
1374     _MMIX Options_
1375          -mlibfuncs  -mno-libfuncs  -mepsilon  -mno-epsilon  -mabi=gnu
1376          -mabi=mmixware  -mzero-extend  -mknuthdiv  -mtoplevel-symbols
1377          -melf  -mbranch-predict  -mno-branch-predict  -mbase-addresses
1378          -mno-base-addresses  -msingle-exit  -mno-single-exit
1379
1380     _MN10300 Options_
1381          -mmult-bug  -mno-mult-bug
1382          -mno-am33  -mam33  -mam33-2  -mam34
1383          -mtune=CPU-TYPE
1384          -mreturn-pointer-on-d0
1385          -mno-crt0  -mrelax  -mliw  -msetlb
1386
1387     _Moxie Options_
1388          -meb  -mel  -mmul.x  -mno-crt0
1389
1390     _MSP430 Options_
1391          -msim  -masm-hex  -mmcu=  -mcpu=  -mlarge  -msmall  -mrelax
1392          -mwarn-mcu
1393          -mcode-region=  -mdata-region=
1394          -msilicon-errata=  -msilicon-errata-warn=
1395          -mhwmult=  -minrt  -mtiny-printf
1396
1397     _NDS32 Options_
1398          -mbig-endian  -mlittle-endian
1399          -mreduced-regs  -mfull-regs
1400          -mcmov  -mno-cmov
1401          -mext-perf  -mno-ext-perf
1402          -mext-perf2  -mno-ext-perf2
1403          -mext-string  -mno-ext-string
1404          -mv3push  -mno-v3push
1405          -m16bit  -mno-16bit
1406          -misr-vector-size=NUM
1407          -mcache-block-size=NUM
1408          -march=ARCH
1409          -mcmodel=CODE-MODEL
1410          -mctor-dtor  -mrelax
1411
1412     _Nios II Options_
1413          -G NUM  -mgpopt=OPTION  -mgpopt  -mno-gpopt
1414          -mgprel-sec=REGEXP  -mr0rel-sec=REGEXP
1415          -mel  -meb
1416          -mno-bypass-cache  -mbypass-cache
1417          -mno-cache-volatile  -mcache-volatile
1418          -mno-fast-sw-div  -mfast-sw-div
1419          -mhw-mul  -mno-hw-mul  -mhw-mulx  -mno-hw-mulx  -mno-hw-div  -mhw-div
1420          -mcustom-INSN=N  -mno-custom-INSN
1421          -mcustom-fpu-cfg=NAME
1422          -mhal  -msmallc  -msys-crt0=NAME  -msys-lib=NAME
1423          -march=ARCH  -mbmx  -mno-bmx  -mcdx  -mno-cdx
1424
1425     _Nvidia PTX Options_
1426          -m32  -m64  -mmainkernel  -moptimize
1427
1428     _OpenRISC Options_
1429          -mboard=NAME  -mnewlib  -mhard-mul  -mhard-div
1430          -msoft-mul  -msoft-div
1431          -msoft-float  -mhard-float  -mdouble-float -munordered-float
1432          -mcmov  -mror  -mrori  -msext  -msfimm  -mshftimm
1433
1434     _PDP-11 Options_
1435          -mfpu  -msoft-float  -mac0  -mno-ac0  -m40  -m45  -m10
1436          -mint32  -mno-int16  -mint16  -mno-int32
1437          -msplit  -munix-asm  -mdec-asm  -mgnu-asm  -mlra
1438
1439     _picoChip Options_
1440          -mae=AE_TYPE  -mvliw-lookahead=N
1441          -msymbol-as-address  -mno-inefficient-warnings
1442
1443     _PowerPC Options_ See RS/6000 and PowerPC Options.
1444
1445     _PRU Options_
1446          -mmcu=MCU  -minrt  -mno-relax  -mloop
1447          -mabi=VARIANT
1448
1449     _RISC-V Options_
1450          -mbranch-cost=N-INSTRUCTION
1451          -mplt  -mno-plt
1452          -mabi=ABI-STRING
1453          -mfdiv  -mno-fdiv
1454          -mdiv  -mno-div
1455          -march=ISA-STRING
1456          -mtune=PROCESSOR-STRING
1457          -mpreferred-stack-boundary=NUM
1458          -msmall-data-limit=N-BYTES
1459          -msave-restore  -mno-save-restore
1460          -mstrict-align  -mno-strict-align
1461          -mcmodel=medlow  -mcmodel=medany
1462          -mexplicit-relocs  -mno-explicit-relocs
1463          -mrelax  -mno-relax
1464          -mriscv-attribute  -mmo-riscv-attribute
1465          -malign-data=TYPE
1466
1467     _RL78 Options_
1468          -msim  -mmul=none  -mmul=g13  -mmul=g14  -mallregs
1469          -mcpu=g10  -mcpu=g13  -mcpu=g14  -mg10  -mg13  -mg14
1470          -m64bit-doubles  -m32bit-doubles  -msave-mduc-in-interrupts
1471
1472     _RS/6000 and PowerPC Options_
1473          -mcpu=CPU-TYPE
1474          -mtune=CPU-TYPE
1475          -mcmodel=CODE-MODEL
1476          -mpowerpc64
1477          -maltivec  -mno-altivec
1478          -mpowerpc-gpopt  -mno-powerpc-gpopt
1479          -mpowerpc-gfxopt  -mno-powerpc-gfxopt
1480          -mmfcrf  -mno-mfcrf  -mpopcntb  -mno-popcntb  -mpopcntd  -mno-popcntd
1481          -mfprnd  -mno-fprnd
1482          -mcmpb  -mno-cmpb  -mhard-dfp  -mno-hard-dfp
1483          -mfull-toc   -mminimal-toc  -mno-fp-in-toc  -mno-sum-in-toc
1484          -m64  -m32  -mxl-compat  -mno-xl-compat  -mpe
1485          -malign-power  -malign-natural
1486          -msoft-float  -mhard-float  -mmultiple  -mno-multiple
1487          -mupdate  -mno-update
1488          -mavoid-indexed-addresses  -mno-avoid-indexed-addresses
1489          -mfused-madd  -mno-fused-madd  -mbit-align  -mno-bit-align
1490          -mstrict-align  -mno-strict-align  -mrelocatable
1491          -mno-relocatable  -mrelocatable-lib  -mno-relocatable-lib
1492          -mtoc  -mno-toc  -mlittle  -mlittle-endian  -mbig  -mbig-endian
1493          -mdynamic-no-pic  -mswdiv  -msingle-pic-base
1494          -mprioritize-restricted-insns=PRIORITY
1495          -msched-costly-dep=DEPENDENCE_TYPE
1496          -minsert-sched-nops=SCHEME
1497          -mcall-aixdesc  -mcall-eabi  -mcall-freebsd
1498          -mcall-linux  -mcall-netbsd  -mcall-openbsd
1499          -mcall-sysv  -mcall-sysv-eabi  -mcall-sysv-noeabi
1500          -mtraceback=TRACEBACK_TYPE
1501          -maix-struct-return  -msvr4-struct-return
1502          -mabi=ABI-TYPE  -msecure-plt  -mbss-plt
1503          -mlongcall  -mno-longcall  -mpltseq  -mno-pltseq
1504          -mblock-move-inline-limit=NUM
1505          -mblock-compare-inline-limit=NUM
1506          -mblock-compare-inline-loop-limit=NUM
1507          -mstring-compare-inline-limit=NUM
1508          -misel  -mno-isel
1509          -mvrsave  -mno-vrsave
1510          -mmulhw  -mno-mulhw
1511          -mdlmzb  -mno-dlmzb
1512          -mprototype  -mno-prototype
1513          -msim  -mmvme  -mads  -myellowknife  -memb  -msdata
1514          -msdata=OPT  -mreadonly-in-sdata  -mvxworks  -G NUM
1515          -mrecip  -mrecip=OPT  -mno-recip  -mrecip-precision
1516          -mno-recip-precision
1517          -mveclibabi=TYPE  -mfriz  -mno-friz
1518          -mpointers-to-nested-functions  -mno-pointers-to-nested-functions
1519          -msave-toc-indirect  -mno-save-toc-indirect
1520          -mpower8-fusion  -mno-mpower8-fusion  -mpower8-vector  -mno-power8-vector
1521          -mcrypto  -mno-crypto  -mhtm  -mno-htm
1522          -mquad-memory  -mno-quad-memory
1523          -mquad-memory-atomic  -mno-quad-memory-atomic
1524          -mcompat-align-parm  -mno-compat-align-parm
1525          -mfloat128  -mno-float128  -mfloat128-hardware  -mno-float128-hardware
1526          -mgnu-attribute  -mno-gnu-attribute
1527          -mstack-protector-guard=GUARD -mstack-protector-guard-reg=REG
1528          -mstack-protector-guard-offset=OFFSET -mprefixed -mno-prefixed
1529          -mpcrel -mno-pcrel -mmma -mno-mmma
1530
1531     _RX Options_
1532          -m64bit-doubles  -m32bit-doubles  -fpu  -nofpu
1533          -mcpu=
1534          -mbig-endian-data  -mlittle-endian-data
1535          -msmall-data
1536          -msim  -mno-sim
1537          -mas100-syntax  -mno-as100-syntax
1538          -mrelax
1539          -mmax-constant-size=
1540          -mint-register=
1541          -mpid
1542          -mallow-string-insns  -mno-allow-string-insns
1543          -mjsr
1544          -mno-warn-multiple-fast-interrupts
1545          -msave-acc-in-interrupts
1546
1547     _S/390 and zSeries Options_
1548          -mtune=CPU-TYPE  -march=CPU-TYPE
1549          -mhard-float  -msoft-float  -mhard-dfp  -mno-hard-dfp
1550          -mlong-double-64  -mlong-double-128
1551          -mbackchain  -mno-backchain  -mpacked-stack  -mno-packed-stack
1552          -msmall-exec  -mno-small-exec  -mmvcle  -mno-mvcle
1553          -m64  -m31  -mdebug  -mno-debug  -mesa  -mzarch
1554          -mhtm  -mvx  -mzvector
1555          -mtpf-trace  -mno-tpf-trace  -mtpf-trace-skip  -mno-tpf-trace-skip
1556          -mfused-madd  -mno-fused-madd
1557          -mwarn-framesize  -mwarn-dynamicstack  -mstack-size  -mstack-guard
1558          -mhotpatch=HALFWORDS,HALFWORDS
1559
1560     _Score Options_
1561          -meb  -mel
1562          -mnhwloop
1563          -muls
1564          -mmac
1565          -mscore5  -mscore5u  -mscore7  -mscore7d
1566
1567     _SH Options_
1568          -m1  -m2  -m2e
1569          -m2a-nofpu  -m2a-single-only  -m2a-single  -m2a
1570          -m3  -m3e
1571          -m4-nofpu  -m4-single-only  -m4-single  -m4
1572          -m4a-nofpu  -m4a-single-only  -m4a-single  -m4a  -m4al
1573          -mb  -ml  -mdalign  -mrelax
1574          -mbigtable  -mfmovd  -mrenesas  -mno-renesas  -mnomacsave
1575          -mieee  -mno-ieee  -mbitops  -misize  -minline-ic_invalidate  -mpadstruct
1576          -mprefergot  -musermode  -multcost=NUMBER  -mdiv=STRATEGY
1577          -mdivsi3_libfunc=NAME  -mfixed-range=REGISTER-RANGE
1578          -maccumulate-outgoing-args
1579          -matomic-model=ATOMIC-MODEL
1580          -mbranch-cost=NUM  -mzdcbranch  -mno-zdcbranch
1581          -mcbranch-force-delay-slot
1582          -mfused-madd  -mno-fused-madd  -mfsca  -mno-fsca  -mfsrra  -mno-fsrra
1583          -mpretend-cmove  -mtas
1584
1585     _Solaris 2 Options_
1586          -mclear-hwcap  -mno-clear-hwcap  -mimpure-text  -mno-impure-text
1587          -pthreads
1588
1589     _SPARC Options_
1590          -mcpu=CPU-TYPE
1591          -mtune=CPU-TYPE
1592          -mcmodel=CODE-MODEL
1593          -mmemory-model=MEM-MODEL
1594          -m32  -m64  -mapp-regs  -mno-app-regs
1595          -mfaster-structs  -mno-faster-structs  -mflat  -mno-flat
1596          -mfpu  -mno-fpu  -mhard-float  -msoft-float
1597          -mhard-quad-float  -msoft-quad-float
1598          -mstack-bias  -mno-stack-bias
1599          -mstd-struct-return  -mno-std-struct-return
1600          -munaligned-doubles  -mno-unaligned-doubles
1601          -muser-mode  -mno-user-mode
1602          -mv8plus  -mno-v8plus  -mvis  -mno-vis
1603          -mvis2  -mno-vis2  -mvis3  -mno-vis3
1604          -mvis4  -mno-vis4  -mvis4b  -mno-vis4b
1605          -mcbcond  -mno-cbcond  -mfmaf  -mno-fmaf  -mfsmuld  -mno-fsmuld
1606          -mpopc  -mno-popc  -msubxc  -mno-subxc
1607          -mfix-at697f  -mfix-ut699  -mfix-ut700  -mfix-gr712rc
1608          -mlra  -mno-lra
1609
1610     _System V Options_
1611          -Qy  -Qn  -YP,PATHS  -Ym,DIR
1612
1613     _TILE-Gx Options_
1614          -mcpu=CPU  -m32  -m64  -mbig-endian  -mlittle-endian
1615          -mcmodel=CODE-MODEL
1616
1617     _TILEPro Options_
1618          -mcpu=CPU  -m32
1619
1620     _V850 Options_
1621          -mlong-calls  -mno-long-calls  -mep  -mno-ep
1622          -mprolog-function  -mno-prolog-function  -mspace
1623          -mtda=N  -msda=N  -mzda=N
1624          -mapp-regs  -mno-app-regs
1625          -mdisable-callt  -mno-disable-callt
1626          -mv850e2v3  -mv850e2  -mv850e1  -mv850es
1627          -mv850e  -mv850  -mv850e3v5
1628          -mloop
1629          -mrelax
1630          -mlong-jumps
1631          -msoft-float
1632          -mhard-float
1633          -mgcc-abi
1634          -mrh850-abi
1635          -mbig-switch
1636
1637     _VAX Options_
1638          -mg  -mgnu  -munix
1639
1640     _Visium Options_
1641          -mdebug  -msim  -mfpu  -mno-fpu  -mhard-float  -msoft-float
1642          -mcpu=CPU-TYPE  -mtune=CPU-TYPE  -msv-mode  -muser-mode
1643
1644     _VMS Options_
1645          -mvms-return-codes  -mdebug-main=PREFIX  -mmalloc64
1646          -mpointer-size=SIZE
1647
1648     _VxWorks Options_
1649          -mrtp  -non-static  -Bstatic  -Bdynamic
1650          -Xbind-lazy  -Xbind-now
1651
1652     _x86 Options_
1653          -mtune=CPU-TYPE  -march=CPU-TYPE
1654          -mtune-ctrl=FEATURE-LIST  -mdump-tune-features  -mno-default
1655          -mfpmath=UNIT
1656          -masm=DIALECT  -mno-fancy-math-387
1657          -mno-fp-ret-in-387  -m80387  -mhard-float  -msoft-float
1658          -mno-wide-multiply  -mrtd  -malign-double
1659          -mpreferred-stack-boundary=NUM
1660          -mincoming-stack-boundary=NUM
1661          -mcld  -mcx16  -msahf  -mmovbe  -mcrc32
1662          -mrecip  -mrecip=OPT
1663          -mvzeroupper  -mprefer-avx128  -mprefer-vector-width=OPT
1664          -mmmx  -msse  -msse2  -msse3  -mssse3  -msse4.1  -msse4.2  -msse4  -mavx
1665          -mavx2  -mavx512f  -mavx512pf  -mavx512er  -mavx512cd  -mavx512vl
1666          -mavx512bw  -mavx512dq  -mavx512ifma  -mavx512vbmi  -msha  -maes
1667          -mpclmul  -mfsgsbase  -mrdrnd  -mf16c  -mfma  -mpconfig  -mwbnoinvd
1668          -mptwrite  -mprefetchwt1  -mclflushopt  -mclwb  -mxsavec  -mxsaves
1669          -msse4a  -m3dnow  -m3dnowa  -mpopcnt  -mabm  -mbmi  -mtbm  -mfma4  -mxop
1670          -madx  -mlzcnt  -mbmi2  -mfxsr  -mxsave  -mxsaveopt  -mrtm  -mhle  -mlwp
1671          -mmwaitx  -mclzero  -mpku  -mthreads  -mgfni  -mvaes  -mwaitpkg
1672          -mshstk -mmanual-endbr -mforce-indirect-call  -mavx512vbmi2 -mavx512bf16 -menqcmd
1673          -mvpclmulqdq  -mavx512bitalg  -mmovdiri  -mmovdir64b  -mavx512vpopcntdq
1674          -mavx5124fmaps  -mavx512vnni  -mavx5124vnniw  -mprfchw  -mrdpid
1675          -mrdseed  -msgx -mavx512vp2intersect
1676          -mcldemote  -mms-bitfields  -mno-align-stringops  -minline-all-stringops
1677          -minline-stringops-dynamically  -mstringop-strategy=ALG
1678          -mmemcpy-strategy=STRATEGY  -mmemset-strategy=STRATEGY
1679          -mpush-args  -maccumulate-outgoing-args  -m128bit-long-double
1680          -m96bit-long-double  -mlong-double-64  -mlong-double-80  -mlong-double-128
1681          -mregparm=NUM  -msseregparm
1682          -mveclibabi=TYPE  -mvect8-ret-in-mem
1683          -mpc32  -mpc64  -mpc80  -mstackrealign
1684          -momit-leaf-frame-pointer  -mno-red-zone  -mno-tls-direct-seg-refs
1685          -mcmodel=CODE-MODEL  -mabi=NAME  -maddress-mode=MODE
1686          -m32  -m64  -mx32  -m16  -miamcu  -mlarge-data-threshold=NUM
1687          -msse2avx  -mfentry  -mrecord-mcount  -mnop-mcount  -m8bit-idiv
1688          -minstrument-return=TYPE -mfentry-name=NAME -mfentry-section=NAME
1689          -mavx256-split-unaligned-load  -mavx256-split-unaligned-store
1690          -malign-data=TYPE  -mstack-protector-guard=GUARD
1691          -mstack-protector-guard-reg=REG
1692          -mstack-protector-guard-offset=OFFSET
1693          -mstack-protector-guard-symbol=SYMBOL
1694          -mgeneral-regs-only  -mcall-ms2sysv-xlogues
1695          -mindirect-branch=CHOICE  -mfunction-return=CHOICE
1696          -mindirect-branch-register
1697
1698     _x86 Windows Options_
1699          -mconsole  -mcygwin  -mno-cygwin  -mdll
1700          -mnop-fun-dllimport  -mthread
1701          -municode  -mwin32  -mwindows  -fno-set-stack-executable
1702
1703     _Xstormy16 Options_
1704          -msim
1705
1706     _Xtensa Options_
1707          -mconst16  -mno-const16
1708          -mfused-madd  -mno-fused-madd
1709          -mforce-no-pic
1710          -mserialize-volatile  -mno-serialize-volatile
1711          -mtext-section-literals  -mno-text-section-literals
1712          -mauto-litpools  -mno-auto-litpools
1713          -mtarget-align  -mno-target-align
1714          -mlongcalls  -mno-longcalls
1715
1716     _zSeries Options_ See S/390 and zSeries Options.
1717
1718
1719File: gcc.info,  Node: Overall Options,  Next: Invoking G++,  Prev: Option Summary,  Up: Invoking GCC
1720
17213.2 Options Controlling the Kind of Output
1722==========================================
1723
1724Compilation can involve up to four stages: preprocessing, compilation
1725proper, assembly and linking, always in that order.  GCC is capable of
1726preprocessing and compiling several files either into several assembler
1727input files, or into one assembler input file; then each assembler input
1728file produces an object file, and linking combines all the object files
1729(those newly compiled, and those specified as input) into an executable
1730file.
1731
1732 For any given input file, the file name suffix determines what kind of
1733compilation is done:
1734
1735'FILE.c'
1736     C source code that must be preprocessed.
1737
1738'FILE.i'
1739     C source code that should not be preprocessed.
1740
1741'FILE.ii'
1742     C++ source code that should not be preprocessed.
1743
1744'FILE.m'
1745     Objective-C source code.  Note that you must link with the
1746     'libobjc' library to make an Objective-C program work.
1747
1748'FILE.mi'
1749     Objective-C source code that should not be preprocessed.
1750
1751'FILE.mm'
1752'FILE.M'
1753     Objective-C++ source code.  Note that you must link with the
1754     'libobjc' library to make an Objective-C++ program work.  Note that
1755     '.M' refers to a literal capital M.
1756
1757'FILE.mii'
1758     Objective-C++ source code that should not be preprocessed.
1759
1760'FILE.h'
1761     C, C++, Objective-C or Objective-C++ header file to be turned into
1762     a precompiled header (default), or C, C++ header file to be turned
1763     into an Ada spec (via the '-fdump-ada-spec' switch).
1764
1765'FILE.cc'
1766'FILE.cp'
1767'FILE.cxx'
1768'FILE.cpp'
1769'FILE.CPP'
1770'FILE.c++'
1771'FILE.C'
1772     C++ source code that must be preprocessed.  Note that in '.cxx',
1773     the last two letters must both be literally 'x'.  Likewise, '.C'
1774     refers to a literal capital C.
1775
1776'FILE.mm'
1777'FILE.M'
1778     Objective-C++ source code that must be preprocessed.
1779
1780'FILE.mii'
1781     Objective-C++ source code that should not be preprocessed.
1782
1783'FILE.hh'
1784'FILE.H'
1785'FILE.hp'
1786'FILE.hxx'
1787'FILE.hpp'
1788'FILE.HPP'
1789'FILE.h++'
1790'FILE.tcc'
1791     C++ header file to be turned into a precompiled header or Ada spec.
1792
1793'FILE.f'
1794'FILE.for'
1795'FILE.ftn'
1796     Fixed form Fortran source code that should not be preprocessed.
1797
1798'FILE.F'
1799'FILE.FOR'
1800'FILE.fpp'
1801'FILE.FPP'
1802'FILE.FTN'
1803     Fixed form Fortran source code that must be preprocessed (with the
1804     traditional preprocessor).
1805
1806'FILE.f90'
1807'FILE.f95'
1808'FILE.f03'
1809'FILE.f08'
1810     Free form Fortran source code that should not be preprocessed.
1811
1812'FILE.F90'
1813'FILE.F95'
1814'FILE.F03'
1815'FILE.F08'
1816     Free form Fortran source code that must be preprocessed (with the
1817     traditional preprocessor).
1818
1819'FILE.go'
1820     Go source code.
1821
1822'FILE.brig'
1823     BRIG files (binary representation of HSAIL).
1824
1825'FILE.d'
1826     D source code.
1827
1828'FILE.di'
1829     D interface file.
1830
1831'FILE.dd'
1832     D documentation code (Ddoc).
1833
1834'FILE.ads'
1835     Ada source code file that contains a library unit declaration (a
1836     declaration of a package, subprogram, or generic, or a generic
1837     instantiation), or a library unit renaming declaration (a package,
1838     generic, or subprogram renaming declaration).  Such files are also
1839     called "specs".
1840
1841'FILE.adb'
1842     Ada source code file containing a library unit body (a subprogram
1843     or package body).  Such files are also called "bodies".
1844
1845'FILE.s'
1846     Assembler code.
1847
1848'FILE.S'
1849'FILE.sx'
1850     Assembler code that must be preprocessed.
1851
1852'OTHER'
1853     An object file to be fed straight into linking.  Any file name with
1854     no recognized suffix is treated this way.
1855
1856 You can specify the input language explicitly with the '-x' option:
1857
1858'-x LANGUAGE'
1859     Specify explicitly the LANGUAGE for the following input files
1860     (rather than letting the compiler choose a default based on the
1861     file name suffix).  This option applies to all following input
1862     files until the next '-x' option.  Possible values for LANGUAGE
1863     are:
1864          c  c-header  cpp-output
1865          c++  c++-header  c++-cpp-output
1866          objective-c  objective-c-header  objective-c-cpp-output
1867          objective-c++ objective-c++-header objective-c++-cpp-output
1868          assembler  assembler-with-cpp
1869          ada
1870          d
1871          f77  f77-cpp-input f95  f95-cpp-input
1872          go
1873          brig
1874
1875'-x none'
1876     Turn off any specification of a language, so that subsequent files
1877     are handled according to their file name suffixes (as they are if
1878     '-x' has not been used at all).
1879
1880 If you only want some of the stages of compilation, you can use '-x'
1881(or filename suffixes) to tell 'gcc' where to start, and one of the
1882options '-c', '-S', or '-E' to say where 'gcc' is to stop.  Note that
1883some combinations (for example, '-x cpp-output -E') instruct 'gcc' to do
1884nothing at all.
1885
1886'-c'
1887     Compile or assemble the source files, but do not link.  The linking
1888     stage simply is not done.  The ultimate output is in the form of an
1889     object file for each source file.
1890
1891     By default, the object file name for a source file is made by
1892     replacing the suffix '.c', '.i', '.s', etc., with '.o'.
1893
1894     Unrecognized input files, not requiring compilation or assembly,
1895     are ignored.
1896
1897'-S'
1898     Stop after the stage of compilation proper; do not assemble.  The
1899     output is in the form of an assembler code file for each
1900     non-assembler input file specified.
1901
1902     By default, the assembler file name for a source file is made by
1903     replacing the suffix '.c', '.i', etc., with '.s'.
1904
1905     Input files that don't require compilation are ignored.
1906
1907'-E'
1908     Stop after the preprocessing stage; do not run the compiler proper.
1909     The output is in the form of preprocessed source code, which is
1910     sent to the standard output.
1911
1912     Input files that don't require preprocessing are ignored.
1913
1914'-o FILE'
1915     Place output in file FILE.  This applies to whatever sort of output
1916     is being produced, whether it be an executable file, an object
1917     file, an assembler file or preprocessed C code.
1918
1919     If '-o' is not specified, the default is to put an executable file
1920     in 'a.out', the object file for 'SOURCE.SUFFIX' in 'SOURCE.o', its
1921     assembler file in 'SOURCE.s', a precompiled header file in
1922     'SOURCE.SUFFIX.gch', and all preprocessed C source on standard
1923     output.
1924
1925'-v'
1926     Print (on standard error output) the commands executed to run the
1927     stages of compilation.  Also print the version number of the
1928     compiler driver program and of the preprocessor and the compiler
1929     proper.
1930
1931'-###'
1932     Like '-v' except the commands are not executed and arguments are
1933     quoted unless they contain only alphanumeric characters or './-_'.
1934     This is useful for shell scripts to capture the driver-generated
1935     command lines.
1936
1937'--help'
1938     Print (on the standard output) a description of the command-line
1939     options understood by 'gcc'.  If the '-v' option is also specified
1940     then '--help' is also passed on to the various processes invoked by
1941     'gcc', so that they can display the command-line options they
1942     accept.  If the '-Wextra' option has also been specified (prior to
1943     the '--help' option), then command-line options that have no
1944     documentation associated with them are also displayed.
1945
1946'--target-help'
1947     Print (on the standard output) a description of target-specific
1948     command-line options for each tool.  For some targets extra
1949     target-specific information may also be printed.
1950
1951'--help={CLASS|[^]QUALIFIER}[,...]'
1952     Print (on the standard output) a description of the command-line
1953     options understood by the compiler that fit into all specified
1954     classes and qualifiers.  These are the supported classes:
1955
1956     'optimizers'
1957          Display all of the optimization options supported by the
1958          compiler.
1959
1960     'warnings'
1961          Display all of the options controlling warning messages
1962          produced by the compiler.
1963
1964     'target'
1965          Display target-specific options.  Unlike the '--target-help'
1966          option however, target-specific options of the linker and
1967          assembler are not displayed.  This is because those tools do
1968          not currently support the extended '--help=' syntax.
1969
1970     'params'
1971          Display the values recognized by the '--param' option.
1972
1973     LANGUAGE
1974          Display the options supported for LANGUAGE, where LANGUAGE is
1975          the name of one of the languages supported in this version of
1976          GCC.  If an option is supported by all languages, one needs to
1977          select 'common' class.
1978
1979     'common'
1980          Display the options that are common to all languages.
1981
1982     These are the supported qualifiers:
1983
1984     'undocumented'
1985          Display only those options that are undocumented.
1986
1987     'joined'
1988          Display options taking an argument that appears after an equal
1989          sign in the same continuous piece of text, such as:
1990          '--help=target'.
1991
1992     'separate'
1993          Display options taking an argument that appears as a separate
1994          word following the original option, such as: '-o output-file'.
1995
1996     Thus for example to display all the undocumented target-specific
1997     switches supported by the compiler, use:
1998
1999          --help=target,undocumented
2000
2001     The sense of a qualifier can be inverted by prefixing it with the
2002     '^' character, so for example to display all binary warning options
2003     (i.e., ones that are either on or off and that do not take an
2004     argument) that have a description, use:
2005
2006          --help=warnings,^joined,^undocumented
2007
2008     The argument to '--help=' should not consist solely of inverted
2009     qualifiers.
2010
2011     Combining several classes is possible, although this usually
2012     restricts the output so much that there is nothing to display.  One
2013     case where it does work, however, is when one of the classes is
2014     TARGET.  For example, to display all the target-specific
2015     optimization options, use:
2016
2017          --help=target,optimizers
2018
2019     The '--help=' option can be repeated on the command line.  Each
2020     successive use displays its requested class of options, skipping
2021     those that have already been displayed.  If '--help' is also
2022     specified anywhere on the command line then this takes precedence
2023     over any '--help=' option.
2024
2025     If the '-Q' option appears on the command line before the '--help='
2026     option, then the descriptive text displayed by '--help=' is
2027     changed.  Instead of describing the displayed options, an
2028     indication is given as to whether the option is enabled, disabled
2029     or set to a specific value (assuming that the compiler knows this
2030     at the point where the '--help=' option is used).
2031
2032     Here is a truncated example from the ARM port of 'gcc':
2033
2034            % gcc -Q -mabi=2 --help=target -c
2035            The following options are target specific:
2036            -mabi=                                2
2037            -mabort-on-noreturn                   [disabled]
2038            -mapcs                                [disabled]
2039
2040     The output is sensitive to the effects of previous command-line
2041     options, so for example it is possible to find out which
2042     optimizations are enabled at '-O2' by using:
2043
2044          -Q -O2 --help=optimizers
2045
2046     Alternatively you can discover which binary optimizations are
2047     enabled by '-O3' by using:
2048
2049          gcc -c -Q -O3 --help=optimizers > /tmp/O3-opts
2050          gcc -c -Q -O2 --help=optimizers > /tmp/O2-opts
2051          diff /tmp/O2-opts /tmp/O3-opts | grep enabled
2052
2053'--version'
2054     Display the version number and copyrights of the invoked GCC.
2055
2056'-pass-exit-codes'
2057     Normally the 'gcc' program exits with the code of 1 if any phase of
2058     the compiler returns a non-success return code.  If you specify
2059     '-pass-exit-codes', the 'gcc' program instead returns with the
2060     numerically highest error produced by any phase returning an error
2061     indication.  The C, C++, and Fortran front ends return 4 if an
2062     internal compiler error is encountered.
2063
2064'-pipe'
2065     Use pipes rather than temporary files for communication between the
2066     various stages of compilation.  This fails to work on some systems
2067     where the assembler is unable to read from a pipe; but the GNU
2068     assembler has no trouble.
2069
2070'-specs=FILE'
2071     Process FILE after the compiler reads in the standard 'specs' file,
2072     in order to override the defaults which the 'gcc' driver program
2073     uses when determining what switches to pass to 'cc1', 'cc1plus',
2074     'as', 'ld', etc.  More than one '-specs=FILE' can be specified on
2075     the command line, and they are processed in order, from left to
2076     right.  *Note Spec Files::, for information about the format of the
2077     FILE.
2078
2079'-wrapper'
2080     Invoke all subcommands under a wrapper program.  The name of the
2081     wrapper program and its parameters are passed as a comma separated
2082     list.
2083
2084          gcc -c t.c -wrapper gdb,--args
2085
2086     This invokes all subprograms of 'gcc' under 'gdb --args', thus the
2087     invocation of 'cc1' is 'gdb --args cc1 ...'.
2088
2089'-ffile-prefix-map=OLD=NEW'
2090     When compiling files residing in directory 'OLD', record any
2091     references to them in the result of the compilation as if the files
2092     resided in directory 'NEW' instead.  Specifying this option is
2093     equivalent to specifying all the individual '-f*-prefix-map'
2094     options.  This can be used to make reproducible builds that are
2095     location independent.  See also '-fmacro-prefix-map' and
2096     '-fdebug-prefix-map'.
2097
2098'-fplugin=NAME.so'
2099     Load the plugin code in file NAME.so, assumed to be a shared object
2100     to be dlopen'd by the compiler.  The base name of the shared object
2101     file is used to identify the plugin for the purposes of argument
2102     parsing (See '-fplugin-arg-NAME-KEY=VALUE' below).  Each plugin
2103     should define the callback functions specified in the Plugins API.
2104
2105'-fplugin-arg-NAME-KEY=VALUE'
2106     Define an argument called KEY with a value of VALUE for the plugin
2107     called NAME.
2108
2109'-fdump-ada-spec[-slim]'
2110     For C and C++ source and include files, generate corresponding Ada
2111     specs.  *Note (gnat_ugn)Generating Ada Bindings for C and C++
2112     headers::, which provides detailed documentation on this feature.
2113
2114'-fada-spec-parent=UNIT'
2115     In conjunction with '-fdump-ada-spec[-slim]' above, generate Ada
2116     specs as child units of parent UNIT.
2117
2118'-fdump-go-spec=FILE'
2119     For input files in any language, generate corresponding Go
2120     declarations in FILE.  This generates Go 'const', 'type', 'var',
2121     and 'func' declarations which may be a useful way to start writing
2122     a Go interface to code written in some other language.
2123
2124'@FILE'
2125     Read command-line options from FILE.  The options read are inserted
2126     in place of the original @FILE option.  If FILE does not exist, or
2127     cannot be read, then the option will be treated literally, and not
2128     removed.
2129
2130     Options in FILE are separated by whitespace.  A whitespace
2131     character may be included in an option by surrounding the entire
2132     option in either single or double quotes.  Any character (including
2133     a backslash) may be included by prefixing the character to be
2134     included with a backslash.  The FILE may itself contain additional
2135     @FILE options; any such options will be processed recursively.
2136
2137
2138File: gcc.info,  Node: Invoking G++,  Next: C Dialect Options,  Prev: Overall Options,  Up: Invoking GCC
2139
21403.3 Compiling C++ Programs
2141==========================
2142
2143C++ source files conventionally use one of the suffixes '.C', '.cc',
2144'.cpp', '.CPP', '.c++', '.cp', or '.cxx'; C++ header files often use
2145'.hh', '.hpp', '.H', or (for shared template code) '.tcc'; and
2146preprocessed C++ files use the suffix '.ii'.  GCC recognizes files with
2147these names and compiles them as C++ programs even if you call the
2148compiler the same way as for compiling C programs (usually with the name
2149'gcc').
2150
2151 However, the use of 'gcc' does not add the C++ library.  'g++' is a
2152program that calls GCC and automatically specifies linking against the
2153C++ library.  It treats '.c', '.h' and '.i' files as C++ source files
2154instead of C source files unless '-x' is used.  This program is also
2155useful when precompiling a C header file with a '.h' extension for use
2156in C++ compilations.  On many systems, 'g++' is also installed with the
2157name 'c++'.
2158
2159 When you compile C++ programs, you may specify many of the same
2160command-line options that you use for compiling programs in any
2161language; or command-line options meaningful for C and related
2162languages; or options that are meaningful only for C++ programs.  *Note
2163Options Controlling C Dialect: C Dialect Options, for explanations of
2164options for languages related to C.  *Note Options Controlling C++
2165Dialect: C++ Dialect Options, for explanations of options that are
2166meaningful only for C++ programs.
2167
2168
2169File: gcc.info,  Node: C Dialect Options,  Next: C++ Dialect Options,  Prev: Invoking G++,  Up: Invoking GCC
2170
21713.4 Options Controlling C Dialect
2172=================================
2173
2174The following options control the dialect of C (or languages derived
2175from C, such as C++, Objective-C and Objective-C++) that the compiler
2176accepts:
2177
2178'-ansi'
2179     In C mode, this is equivalent to '-std=c90'.  In C++ mode, it is
2180     equivalent to '-std=c++98'.
2181
2182     This turns off certain features of GCC that are incompatible with
2183     ISO C90 (when compiling C code), or of standard C++ (when compiling
2184     C++ code), such as the 'asm' and 'typeof' keywords, and predefined
2185     macros such as 'unix' and 'vax' that identify the type of system
2186     you are using.  It also enables the undesirable and rarely used ISO
2187     trigraph feature.  For the C compiler, it disables recognition of
2188     C++ style '//' comments as well as the 'inline' keyword.
2189
2190     The alternate keywords '__asm__', '__extension__', '__inline__' and
2191     '__typeof__' continue to work despite '-ansi'.  You would not want
2192     to use them in an ISO C program, of course, but it is useful to put
2193     them in header files that might be included in compilations done
2194     with '-ansi'.  Alternate predefined macros such as '__unix__' and
2195     '__vax__' are also available, with or without '-ansi'.
2196
2197     The '-ansi' option does not cause non-ISO programs to be rejected
2198     gratuitously.  For that, '-Wpedantic' is required in addition to
2199     '-ansi'.  *Note Warning Options::.
2200
2201     The macro '__STRICT_ANSI__' is predefined when the '-ansi' option
2202     is used.  Some header files may notice this macro and refrain from
2203     declaring certain functions or defining certain macros that the ISO
2204     standard doesn't call for; this is to avoid interfering with any
2205     programs that might use these names for other things.
2206
2207     Functions that are normally built in but do not have semantics
2208     defined by ISO C (such as 'alloca' and 'ffs') are not built-in
2209     functions when '-ansi' is used.  *Note Other built-in functions
2210     provided by GCC: Other Builtins, for details of the functions
2211     affected.
2212
2213'-std='
2214     Determine the language standard.  *Note Language Standards
2215     Supported by GCC: Standards, for details of these standard
2216     versions.  This option is currently only supported when compiling C
2217     or C++.
2218
2219     The compiler can accept several base standards, such as 'c90' or
2220     'c++98', and GNU dialects of those standards, such as 'gnu90' or
2221     'gnu++98'.  When a base standard is specified, the compiler accepts
2222     all programs following that standard plus those using GNU
2223     extensions that do not contradict it.  For example, '-std=c90'
2224     turns off certain features of GCC that are incompatible with ISO
2225     C90, such as the 'asm' and 'typeof' keywords, but not other GNU
2226     extensions that do not have a meaning in ISO C90, such as omitting
2227     the middle term of a '?:' expression.  On the other hand, when a
2228     GNU dialect of a standard is specified, all features supported by
2229     the compiler are enabled, even when those features change the
2230     meaning of the base standard.  As a result, some strict-conforming
2231     programs may be rejected.  The particular standard is used by
2232     '-Wpedantic' to identify which features are GNU extensions given
2233     that version of the standard.  For example '-std=gnu90 -Wpedantic'
2234     warns about C++ style '//' comments, while '-std=gnu99 -Wpedantic'
2235     does not.
2236
2237     A value for this option must be provided; possible values are
2238
2239     'c90'
2240     'c89'
2241     'iso9899:1990'
2242          Support all ISO C90 programs (certain GNU extensions that
2243          conflict with ISO C90 are disabled).  Same as '-ansi' for C
2244          code.
2245
2246     'iso9899:199409'
2247          ISO C90 as modified in amendment 1.
2248
2249     'c99'
2250     'c9x'
2251     'iso9899:1999'
2252     'iso9899:199x'
2253          ISO C99.  This standard is substantially completely supported,
2254          modulo bugs and floating-point issues (mainly but not entirely
2255          relating to optional C99 features from Annexes F and G). See
2256          <http://gcc.gnu.org/c99status.html> for more information.  The
2257          names 'c9x' and 'iso9899:199x' are deprecated.
2258
2259     'c11'
2260     'c1x'
2261     'iso9899:2011'
2262          ISO C11, the 2011 revision of the ISO C standard.  This
2263          standard is substantially completely supported, modulo bugs,
2264          floating-point issues (mainly but not entirely relating to
2265          optional C11 features from Annexes F and G) and the optional
2266          Annexes K (Bounds-checking interfaces) and L (Analyzability).
2267          The name 'c1x' is deprecated.
2268
2269     'c17'
2270     'c18'
2271     'iso9899:2017'
2272     'iso9899:2018'
2273          ISO C17, the 2017 revision of the ISO C standard (published in
2274          2018).  This standard is same as C11 except for corrections of
2275          defects (all of which are also applied with '-std=c11') and a
2276          new value of '__STDC_VERSION__', and so is supported to the
2277          same extent as C11.
2278
2279     'c2x'
2280          The next version of the ISO C standard, still under
2281          development.  The support for this version is experimental and
2282          incomplete.
2283
2284     'gnu90'
2285     'gnu89'
2286          GNU dialect of ISO C90 (including some C99 features).
2287
2288     'gnu99'
2289     'gnu9x'
2290          GNU dialect of ISO C99.  The name 'gnu9x' is deprecated.
2291
2292     'gnu11'
2293     'gnu1x'
2294          GNU dialect of ISO C11.  The name 'gnu1x' is deprecated.
2295
2296     'gnu17'
2297     'gnu18'
2298          GNU dialect of ISO C17.  This is the default for C code.
2299
2300     'gnu2x'
2301          The next version of the ISO C standard, still under
2302          development, plus GNU extensions.  The support for this
2303          version is experimental and incomplete.
2304
2305     'c++98'
2306     'c++03'
2307          The 1998 ISO C++ standard plus the 2003 technical corrigendum
2308          and some additional defect reports.  Same as '-ansi' for C++
2309          code.
2310
2311     'gnu++98'
2312     'gnu++03'
2313          GNU dialect of '-std=c++98'.
2314
2315     'c++11'
2316     'c++0x'
2317          The 2011 ISO C++ standard plus amendments.  The name 'c++0x'
2318          is deprecated.
2319
2320     'gnu++11'
2321     'gnu++0x'
2322          GNU dialect of '-std=c++11'.  The name 'gnu++0x' is
2323          deprecated.
2324
2325     'c++14'
2326     'c++1y'
2327          The 2014 ISO C++ standard plus amendments.  The name 'c++1y'
2328          is deprecated.
2329
2330     'gnu++14'
2331     'gnu++1y'
2332          GNU dialect of '-std=c++14'.  This is the default for C++
2333          code.  The name 'gnu++1y' is deprecated.
2334
2335     'c++17'
2336     'c++1z'
2337          The 2017 ISO C++ standard plus amendments.  The name 'c++1z'
2338          is deprecated.
2339
2340     'gnu++17'
2341     'gnu++1z'
2342          GNU dialect of '-std=c++17'.  The name 'gnu++1z' is
2343          deprecated.
2344
2345     'c++20'
2346     'c++2a'
2347          The next revision of the ISO C++ standard, planned for 2020.
2348          Support is highly experimental, and will almost certainly
2349          change in incompatible ways in future releases.
2350
2351     'gnu++20'
2352     'gnu++2a'
2353          GNU dialect of '-std=c++20'.  Support is highly experimental,
2354          and will almost certainly change in incompatible ways in
2355          future releases.
2356
2357'-fgnu89-inline'
2358     The option '-fgnu89-inline' tells GCC to use the traditional GNU
2359     semantics for 'inline' functions when in C99 mode.  *Note An Inline
2360     Function is As Fast As a Macro: Inline.  Using this option is
2361     roughly equivalent to adding the 'gnu_inline' function attribute to
2362     all inline functions (*note Function Attributes::).
2363
2364     The option '-fno-gnu89-inline' explicitly tells GCC to use the C99
2365     semantics for 'inline' when in C99 or gnu99 mode (i.e., it
2366     specifies the default behavior).  This option is not supported in
2367     '-std=c90' or '-std=gnu90' mode.
2368
2369     The preprocessor macros '__GNUC_GNU_INLINE__' and
2370     '__GNUC_STDC_INLINE__' may be used to check which semantics are in
2371     effect for 'inline' functions.  *Note (cpp)Common Predefined
2372     Macros::.
2373
2374'-fpermitted-flt-eval-methods=STYLE'
2375     ISO/IEC TS 18661-3 defines new permissible values for
2376     'FLT_EVAL_METHOD' that indicate that operations and constants with
2377     a semantic type that is an interchange or extended format should be
2378     evaluated to the precision and range of that type.  These new
2379     values are a superset of those permitted under C99/C11, which does
2380     not specify the meaning of other positive values of
2381     'FLT_EVAL_METHOD'.  As such, code conforming to C11 may not have
2382     been written expecting the possibility of the new values.
2383
2384     '-fpermitted-flt-eval-methods' specifies whether the compiler
2385     should allow only the values of 'FLT_EVAL_METHOD' specified in
2386     C99/C11, or the extended set of values specified in ISO/IEC TS
2387     18661-3.
2388
2389     STYLE is either 'c11' or 'ts-18661-3' as appropriate.
2390
2391     The default when in a standards compliant mode ('-std=c11' or
2392     similar) is '-fpermitted-flt-eval-methods=c11'.  The default when
2393     in a GNU dialect ('-std=gnu11' or similar) is
2394     '-fpermitted-flt-eval-methods=ts-18661-3'.
2395
2396'-aux-info FILENAME'
2397     Output to the given filename prototyped declarations for all
2398     functions declared and/or defined in a translation unit, including
2399     those in header files.  This option is silently ignored in any
2400     language other than C.
2401
2402     Besides declarations, the file indicates, in comments, the origin
2403     of each declaration (source file and line), whether the declaration
2404     was implicit, prototyped or unprototyped ('I', 'N' for new or 'O'
2405     for old, respectively, in the first character after the line number
2406     and the colon), and whether it came from a declaration or a
2407     definition ('C' or 'F', respectively, in the following character).
2408     In the case of function definitions, a K&R-style list of arguments
2409     followed by their declarations is also provided, inside comments,
2410     after the declaration.
2411
2412'-fallow-parameterless-variadic-functions'
2413     Accept variadic functions without named parameters.
2414
2415     Although it is possible to define such a function, this is not very
2416     useful as it is not possible to read the arguments.  This is only
2417     supported for C as this construct is allowed by C++.
2418
2419'-fno-asm'
2420     Do not recognize 'asm', 'inline' or 'typeof' as a keyword, so that
2421     code can use these words as identifiers.  You can use the keywords
2422     '__asm__', '__inline__' and '__typeof__' instead.  '-ansi' implies
2423     '-fno-asm'.
2424
2425     In C++, this switch only affects the 'typeof' keyword, since 'asm'
2426     and 'inline' are standard keywords.  You may want to use the
2427     '-fno-gnu-keywords' flag instead, which has the same effect.  In
2428     C99 mode ('-std=c99' or '-std=gnu99'), this switch only affects the
2429     'asm' and 'typeof' keywords, since 'inline' is a standard keyword
2430     in ISO C99.
2431
2432'-fno-builtin'
2433'-fno-builtin-FUNCTION'
2434     Don't recognize built-in functions that do not begin with
2435     '__builtin_' as prefix.  *Note Other built-in functions provided by
2436     GCC: Other Builtins, for details of the functions affected,
2437     including those which are not built-in functions when '-ansi' or
2438     '-std' options for strict ISO C conformance are used because they
2439     do not have an ISO standard meaning.
2440
2441     GCC normally generates special code to handle certain built-in
2442     functions more efficiently; for instance, calls to 'alloca' may
2443     become single instructions which adjust the stack directly, and
2444     calls to 'memcpy' may become inline copy loops.  The resulting code
2445     is often both smaller and faster, but since the function calls no
2446     longer appear as such, you cannot set a breakpoint on those calls,
2447     nor can you change the behavior of the functions by linking with a
2448     different library.  In addition, when a function is recognized as a
2449     built-in function, GCC may use information about that function to
2450     warn about problems with calls to that function, or to generate
2451     more efficient code, even if the resulting code still contains
2452     calls to that function.  For example, warnings are given with
2453     '-Wformat' for bad calls to 'printf' when 'printf' is built in and
2454     'strlen' is known not to modify global memory.
2455
2456     With the '-fno-builtin-FUNCTION' option only the built-in function
2457     FUNCTION is disabled.  FUNCTION must not begin with '__builtin_'.
2458     If a function is named that is not built-in in this version of GCC,
2459     this option is ignored.  There is no corresponding
2460     '-fbuiltin-FUNCTION' option; if you wish to enable built-in
2461     functions selectively when using '-fno-builtin' or
2462     '-ffreestanding', you may define macros such as:
2463
2464          #define abs(n)          __builtin_abs ((n))
2465          #define strcpy(d, s)    __builtin_strcpy ((d), (s))
2466
2467'-fgimple'
2468
2469     Enable parsing of function definitions marked with '__GIMPLE'.
2470     This is an experimental feature that allows unit testing of GIMPLE
2471     passes.
2472
2473'-fhosted'
2474
2475     Assert that compilation targets a hosted environment.  This implies
2476     '-fbuiltin'.  A hosted environment is one in which the entire
2477     standard library is available, and in which 'main' has a return
2478     type of 'int'.  Examples are nearly everything except a kernel.
2479     This is equivalent to '-fno-freestanding'.
2480
2481'-ffreestanding'
2482
2483     Assert that compilation targets a freestanding environment.  This
2484     implies '-fno-builtin'.  A freestanding environment is one in which
2485     the standard library may not exist, and program startup may not
2486     necessarily be at 'main'.  The most obvious example is an OS
2487     kernel.  This is equivalent to '-fno-hosted'.
2488
2489     *Note Language Standards Supported by GCC: Standards, for details
2490     of freestanding and hosted environments.
2491
2492'-fopenacc'
2493     Enable handling of OpenACC directives '#pragma acc' in C/C++ and
2494     '!$acc' in Fortran.  When '-fopenacc' is specified, the compiler
2495     generates accelerated code according to the OpenACC Application
2496     Programming Interface v2.6 <https://www.openacc.org>.  This option
2497     implies '-pthread', and thus is only supported on targets that have
2498     support for '-pthread'.
2499
2500'-fopenacc-dim=GEOM'
2501     Specify default compute dimensions for parallel offload regions
2502     that do not explicitly specify.  The GEOM value is a triple of
2503     ':'-separated sizes, in order 'gang', 'worker' and, 'vector'.  A
2504     size can be omitted, to use a target-specific default value.
2505
2506'-fopenmp'
2507     Enable handling of OpenMP directives '#pragma omp' in C/C++ and
2508     '!$omp' in Fortran.  When '-fopenmp' is specified, the compiler
2509     generates parallel code according to the OpenMP Application Program
2510     Interface v4.5 <https://www.openmp.org>.  This option implies
2511     '-pthread', and thus is only supported on targets that have support
2512     for '-pthread'.  '-fopenmp' implies '-fopenmp-simd'.
2513
2514'-fopenmp-simd'
2515     Enable handling of OpenMP's SIMD directives with '#pragma omp' in
2516     C/C++ and '!$omp' in Fortran.  Other OpenMP directives are ignored.
2517
2518'-fgnu-tm'
2519     When the option '-fgnu-tm' is specified, the compiler generates
2520     code for the Linux variant of Intel's current Transactional Memory
2521     ABI specification document (Revision 1.1, May 6 2009).  This is an
2522     experimental feature whose interface may change in future versions
2523     of GCC, as the official specification changes.  Please note that
2524     not all architectures are supported for this feature.
2525
2526     For more information on GCC's support for transactional memory,
2527     *Note The GNU Transactional Memory Library: (libitm)Enabling
2528     libitm.
2529
2530     Note that the transactional memory feature is not supported with
2531     non-call exceptions ('-fnon-call-exceptions').
2532
2533'-fms-extensions'
2534     Accept some non-standard constructs used in Microsoft header files.
2535
2536     In C++ code, this allows member names in structures to be similar
2537     to previous types declarations.
2538
2539          typedef int UOW;
2540          struct ABC {
2541            UOW UOW;
2542          };
2543
2544     Some cases of unnamed fields in structures and unions are only
2545     accepted with this option.  *Note Unnamed struct/union fields
2546     within structs/unions: Unnamed Fields, for details.
2547
2548     Note that this option is off for all targets except for x86 targets
2549     using ms-abi.
2550
2551'-fplan9-extensions'
2552     Accept some non-standard constructs used in Plan 9 code.
2553
2554     This enables '-fms-extensions', permits passing pointers to
2555     structures with anonymous fields to functions that expect pointers
2556     to elements of the type of the field, and permits referring to
2557     anonymous fields declared using a typedef.  *Note Unnamed
2558     struct/union fields within structs/unions: Unnamed Fields, for
2559     details.  This is only supported for C, not C++.
2560
2561'-fcond-mismatch'
2562     Allow conditional expressions with mismatched types in the second
2563     and third arguments.  The value of such an expression is void.
2564     This option is not supported for C++.
2565
2566'-flax-vector-conversions'
2567     Allow implicit conversions between vectors with differing numbers
2568     of elements and/or incompatible element types.  This option should
2569     not be used for new code.
2570
2571'-funsigned-char'
2572     Let the type 'char' be unsigned, like 'unsigned char'.
2573
2574     Each kind of machine has a default for what 'char' should be.  It
2575     is either like 'unsigned char' by default or like 'signed char' by
2576     default.
2577
2578     Ideally, a portable program should always use 'signed char' or
2579     'unsigned char' when it depends on the signedness of an object.
2580     But many programs have been written to use plain 'char' and expect
2581     it to be signed, or expect it to be unsigned, depending on the
2582     machines they were written for.  This option, and its inverse, let
2583     you make such a program work with the opposite default.
2584
2585     The type 'char' is always a distinct type from each of 'signed
2586     char' or 'unsigned char', even though its behavior is always just
2587     like one of those two.
2588
2589'-fsigned-char'
2590     Let the type 'char' be signed, like 'signed char'.
2591
2592     Note that this is equivalent to '-fno-unsigned-char', which is the
2593     negative form of '-funsigned-char'.  Likewise, the option
2594     '-fno-signed-char' is equivalent to '-funsigned-char'.
2595
2596'-fsigned-bitfields'
2597'-funsigned-bitfields'
2598'-fno-signed-bitfields'
2599'-fno-unsigned-bitfields'
2600     These options control whether a bit-field is signed or unsigned,
2601     when the declaration does not use either 'signed' or 'unsigned'.
2602     By default, such a bit-field is signed, because this is consistent:
2603     the basic integer types such as 'int' are signed types.
2604
2605'-fsso-struct=ENDIANNESS'
2606     Set the default scalar storage order of structures and unions to
2607     the specified endianness.  The accepted values are 'big-endian',
2608     'little-endian' and 'native' for the native endianness of the
2609     target (the default).  This option is not supported for C++.
2610
2611     *Warning:* the '-fsso-struct' switch causes GCC to generate code
2612     that is not binary compatible with code generated without it if the
2613     specified endianness is not the native endianness of the target.
2614
2615
2616File: gcc.info,  Node: C++ Dialect Options,  Next: Objective-C and Objective-C++ Dialect Options,  Prev: C Dialect Options,  Up: Invoking GCC
2617
26183.5 Options Controlling C++ Dialect
2619===================================
2620
2621This section describes the command-line options that are only meaningful
2622for C++ programs.  You can also use most of the GNU compiler options
2623regardless of what language your program is in.  For example, you might
2624compile a file 'firstClass.C' like this:
2625
2626     g++ -g -fstrict-enums -O -c firstClass.C
2627
2628In this example, only '-fstrict-enums' is an option meant only for C++
2629programs; you can use the other options with any language supported by
2630GCC.
2631
2632 Some options for compiling C programs, such as '-std', are also
2633relevant for C++ programs.  *Note Options Controlling C Dialect: C
2634Dialect Options.
2635
2636 Here is a list of options that are _only_ for compiling C++ programs:
2637
2638'-fabi-version=N'
2639     Use version N of the C++ ABI.  The default is version 0.
2640
2641     Version 0 refers to the version conforming most closely to the C++
2642     ABI specification.  Therefore, the ABI obtained using version 0
2643     will change in different versions of G++ as ABI bugs are fixed.
2644
2645     Version 1 is the version of the C++ ABI that first appeared in G++
2646     3.2.
2647
2648     Version 2 is the version of the C++ ABI that first appeared in G++
2649     3.4, and was the default through G++ 4.9.
2650
2651     Version 3 corrects an error in mangling a constant address as a
2652     template argument.
2653
2654     Version 4, which first appeared in G++ 4.5, implements a standard
2655     mangling for vector types.
2656
2657     Version 5, which first appeared in G++ 4.6, corrects the mangling
2658     of attribute const/volatile on function pointer types, decltype of
2659     a plain decl, and use of a function parameter in the declaration of
2660     another parameter.
2661
2662     Version 6, which first appeared in G++ 4.7, corrects the promotion
2663     behavior of C++11 scoped enums and the mangling of template
2664     argument packs, const/static_cast, prefix ++ and -, and a class
2665     scope function used as a template argument.
2666
2667     Version 7, which first appeared in G++ 4.8, that treats nullptr_t
2668     as a builtin type and corrects the mangling of lambdas in default
2669     argument scope.
2670
2671     Version 8, which first appeared in G++ 4.9, corrects the
2672     substitution behavior of function types with
2673     function-cv-qualifiers.
2674
2675     Version 9, which first appeared in G++ 5.2, corrects the alignment
2676     of 'nullptr_t'.
2677
2678     Version 10, which first appeared in G++ 6.1, adds mangling of
2679     attributes that affect type identity, such as ia32 calling
2680     convention attributes (e.g. 'stdcall').
2681
2682     Version 11, which first appeared in G++ 7, corrects the mangling of
2683     sizeof...  expressions and operator names.  For multiple entities
2684     with the same name within a function, that are declared in
2685     different scopes, the mangling now changes starting with the
2686     twelfth occurrence.  It also implies '-fnew-inheriting-ctors'.
2687
2688     Version 12, which first appeared in G++ 8, corrects the calling
2689     conventions for empty classes on the x86_64 target and for classes
2690     with only deleted copy/move constructors.  It accidentally changes
2691     the calling convention for classes with a deleted copy constructor
2692     and a trivial move constructor.
2693
2694     Version 13, which first appeared in G++ 8.2, fixes the accidental
2695     change in version 12.
2696
2697     Version 14, which first appeared in G++ 10, corrects the mangling
2698     of the nullptr expression.
2699
2700     See also '-Wabi'.
2701
2702'-fabi-compat-version=N'
2703     On targets that support strong aliases, G++ works around mangling
2704     changes by creating an alias with the correct mangled name when
2705     defining a symbol with an incorrect mangled name.  This switch
2706     specifies which ABI version to use for the alias.
2707
2708     With '-fabi-version=0' (the default), this defaults to 11 (GCC 7
2709     compatibility).  If another ABI version is explicitly selected,
2710     this defaults to 0.  For compatibility with GCC versions 3.2
2711     through 4.9, use '-fabi-compat-version=2'.
2712
2713     If this option is not provided but '-Wabi=N' is, that version is
2714     used for compatibility aliases.  If this option is provided along
2715     with '-Wabi' (without the version), the version from this option is
2716     used for the warning.
2717
2718'-fno-access-control'
2719     Turn off all access checking.  This switch is mainly useful for
2720     working around bugs in the access control code.
2721
2722'-faligned-new'
2723     Enable support for C++17 'new' of types that require more alignment
2724     than 'void* ::operator new(std::size_t)' provides.  A numeric
2725     argument such as '-faligned-new=32' can be used to specify how much
2726     alignment (in bytes) is provided by that function, but few users
2727     will need to override the default of 'alignof(std::max_align_t)'.
2728
2729     This flag is enabled by default for '-std=c++17'.
2730
2731'-fchar8_t'
2732'-fno-char8_t'
2733     Enable support for 'char8_t' as adopted for C++2a.  This includes
2734     the addition of a new 'char8_t' fundamental type, changes to the
2735     types of UTF-8 string and character literals, new signatures for
2736     user-defined literals, associated standard library updates, and new
2737     '__cpp_char8_t' and '__cpp_lib_char8_t' feature test macros.
2738
2739     This option enables functions to be overloaded for ordinary and
2740     UTF-8 strings:
2741
2742          int f(const char *);    // #1
2743          int f(const char8_t *); // #2
2744          int v1 = f("text");     // Calls #1
2745          int v2 = f(u8"text");   // Calls #2
2746
2747     and introduces new signatures for user-defined literals:
2748
2749          int operator""_udl1(char8_t);
2750          int v3 = u8'x'_udl1;
2751          int operator""_udl2(const char8_t*, std::size_t);
2752          int v4 = u8"text"_udl2;
2753          template<typename T, T...> int operator""_udl3();
2754          int v5 = u8"text"_udl3;
2755
2756     The change to the types of UTF-8 string and character literals
2757     introduces incompatibilities with ISO C++11 and later standards.
2758     For example, the following code is well-formed under ISO C++11, but
2759     is ill-formed when '-fchar8_t' is specified.
2760
2761          char ca[] = u8"xx";     // error: char-array initialized from wide
2762                                  //        string
2763          const char *cp = u8"xx";// error: invalid conversion from
2764                                  //        `const char8_t*' to `const char*'
2765          int f(const char*);
2766          auto v = f(u8"xx");     // error: invalid conversion from
2767                                  //        `const char8_t*' to `const char*'
2768          std::string s{u8"xx"};  // error: no matching function for call to
2769                                  //        `std::basic_string<char>::basic_string()'
2770          using namespace std::literals;
2771          s = u8"xx"s;            // error: conversion from
2772                                  //        `basic_string<char8_t>' to non-scalar
2773                                  //        type `basic_string<char>' requested
2774
2775'-fcheck-new'
2776     Check that the pointer returned by 'operator new' is non-null
2777     before attempting to modify the storage allocated.  This check is
2778     normally unnecessary because the C++ standard specifies that
2779     'operator new' only returns '0' if it is declared 'throw()', in
2780     which case the compiler always checks the return value even without
2781     this option.  In all other cases, when 'operator new' has a
2782     non-empty exception specification, memory exhaustion is signalled
2783     by throwing 'std::bad_alloc'.  See also 'new (nothrow)'.
2784
2785'-fconcepts'
2786'-fconcepts-ts'
2787     Below '-std=c++2a', '-fconcepts' enables support for the C++
2788     Extensions for Concepts Technical Specification, ISO 19217 (2015).
2789
2790     With '-std=c++2a' and above, Concepts are part of the language
2791     standard, so '-fconcepts' defaults to on.  But the standard
2792     specification of Concepts differs significantly from the TS, so
2793     some constructs that were allowed in the TS but didn't make it into
2794     the standard can still be enabled by '-fconcepts-ts'.
2795
2796'-fconstexpr-depth=N'
2797     Set the maximum nested evaluation depth for C++11 constexpr
2798     functions to N.  A limit is needed to detect endless recursion
2799     during constant expression evaluation.  The minimum specified by
2800     the standard is 512.
2801
2802'-fconstexpr-cache-depth=N'
2803     Set the maximum level of nested evaluation depth for C++11
2804     constexpr functions that will be cached to N.  This is a heuristic
2805     that trades off compilation speed (when the cache avoids repeated
2806     calculations) against memory consumption (when the cache grows very
2807     large from highly recursive evaluations).  The default is 8.  Very
2808     few users are likely to want to adjust it, but if your code does
2809     heavy constexpr calculations you might want to experiment to find
2810     which value works best for you.
2811
2812'-fconstexpr-loop-limit=N'
2813     Set the maximum number of iterations for a loop in C++14 constexpr
2814     functions to N.  A limit is needed to detect infinite loops during
2815     constant expression evaluation.  The default is 262144 (1<<18).
2816
2817'-fconstexpr-ops-limit=N'
2818     Set the maximum number of operations during a single constexpr
2819     evaluation.  Even when number of iterations of a single loop is
2820     limited with the above limit, if there are several nested loops and
2821     each of them has many iterations but still smaller than the above
2822     limit, or if in a body of some loop or even outside of a loop too
2823     many expressions need to be evaluated, the resulting constexpr
2824     evaluation might take too long.  The default is 33554432 (1<<25).
2825
2826'-fcoroutines'
2827     Enable support for the C++ coroutines extension (experimental).
2828
2829'-fno-elide-constructors'
2830     The C++ standard allows an implementation to omit creating a
2831     temporary that is only used to initialize another object of the
2832     same type.  Specifying this option disables that optimization, and
2833     forces G++ to call the copy constructor in all cases.  This option
2834     also causes G++ to call trivial member functions which otherwise
2835     would be expanded inline.
2836
2837     In C++17, the compiler is required to omit these temporaries, but
2838     this option still affects trivial member functions.
2839
2840'-fno-enforce-eh-specs'
2841     Don't generate code to check for violation of exception
2842     specifications at run time.  This option violates the C++ standard,
2843     but may be useful for reducing code size in production builds, much
2844     like defining 'NDEBUG'.  This does not give user code permission to
2845     throw exceptions in violation of the exception specifications; the
2846     compiler still optimizes based on the specifications, so throwing
2847     an unexpected exception results in undefined behavior at run time.
2848
2849'-fextern-tls-init'
2850'-fno-extern-tls-init'
2851     The C++11 and OpenMP standards allow 'thread_local' and
2852     'threadprivate' variables to have dynamic (runtime) initialization.
2853     To support this, any use of such a variable goes through a wrapper
2854     function that performs any necessary initialization.  When the use
2855     and definition of the variable are in the same translation unit,
2856     this overhead can be optimized away, but when the use is in a
2857     different translation unit there is significant overhead even if
2858     the variable doesn't actually need dynamic initialization.  If the
2859     programmer can be sure that no use of the variable in a
2860     non-defining TU needs to trigger dynamic initialization (either
2861     because the variable is statically initialized, or a use of the
2862     variable in the defining TU will be executed before any uses in
2863     another TU), they can avoid this overhead with the
2864     '-fno-extern-tls-init' option.
2865
2866     On targets that support symbol aliases, the default is
2867     '-fextern-tls-init'.  On targets that do not support symbol
2868     aliases, the default is '-fno-extern-tls-init'.
2869
2870'-fno-gnu-keywords'
2871     Do not recognize 'typeof' as a keyword, so that code can use this
2872     word as an identifier.  You can use the keyword '__typeof__'
2873     instead.  This option is implied by the strict ISO C++ dialects:
2874     '-ansi', '-std=c++98', '-std=c++11', etc.
2875
2876'-fno-implicit-templates'
2877     Never emit code for non-inline templates that are instantiated
2878     implicitly (i.e. by use); only emit code for explicit
2879     instantiations.  If you use this option, you must take care to
2880     structure your code to include all the necessary explicit
2881     instantiations to avoid getting undefined symbols at link time.
2882     *Note Template Instantiation::, for more information.
2883
2884'-fno-implicit-inline-templates'
2885     Don't emit code for implicit instantiations of inline templates,
2886     either.  The default is to handle inlines differently so that
2887     compiles with and without optimization need the same set of
2888     explicit instantiations.
2889
2890'-fno-implement-inlines'
2891     To save space, do not emit out-of-line copies of inline functions
2892     controlled by '#pragma implementation'.  This causes linker errors
2893     if these functions are not inlined everywhere they are called.
2894
2895'-fms-extensions'
2896     Disable Wpedantic warnings about constructs used in MFC, such as
2897     implicit int and getting a pointer to member function via
2898     non-standard syntax.
2899
2900'-fnew-inheriting-ctors'
2901     Enable the P0136 adjustment to the semantics of C++11 constructor
2902     inheritance.  This is part of C++17 but also considered to be a
2903     Defect Report against C++11 and C++14.  This flag is enabled by
2904     default unless '-fabi-version=10' or lower is specified.
2905
2906'-fnew-ttp-matching'
2907     Enable the P0522 resolution to Core issue 150, template template
2908     parameters and default arguments: this allows a template with
2909     default template arguments as an argument for a template template
2910     parameter with fewer template parameters.  This flag is enabled by
2911     default for '-std=c++17'.
2912
2913'-fno-nonansi-builtins'
2914     Disable built-in declarations of functions that are not mandated by
2915     ANSI/ISO C.  These include 'ffs', 'alloca', '_exit', 'index',
2916     'bzero', 'conjf', and other related functions.
2917
2918'-fnothrow-opt'
2919     Treat a 'throw()' exception specification as if it were a
2920     'noexcept' specification to reduce or eliminate the text size
2921     overhead relative to a function with no exception specification.
2922     If the function has local variables of types with non-trivial
2923     destructors, the exception specification actually makes the
2924     function smaller because the EH cleanups for those variables can be
2925     optimized away.  The semantic effect is that an exception thrown
2926     out of a function with such an exception specification results in a
2927     call to 'terminate' rather than 'unexpected'.
2928
2929'-fno-operator-names'
2930     Do not treat the operator name keywords 'and', 'bitand', 'bitor',
2931     'compl', 'not', 'or' and 'xor' as synonyms as keywords.
2932
2933'-fno-optional-diags'
2934     Disable diagnostics that the standard says a compiler does not need
2935     to issue.  Currently, the only such diagnostic issued by G++ is the
2936     one for a name having multiple meanings within a class.
2937
2938'-fpermissive'
2939     Downgrade some diagnostics about nonconformant code from errors to
2940     warnings.  Thus, using '-fpermissive' allows some nonconforming
2941     code to compile.
2942
2943'-fno-pretty-templates'
2944     When an error message refers to a specialization of a function
2945     template, the compiler normally prints the signature of the
2946     template followed by the template arguments and any typedefs or
2947     typenames in the signature (e.g. 'void f(T) [with T = int]' rather
2948     than 'void f(int)') so that it's clear which template is involved.
2949     When an error message refers to a specialization of a class
2950     template, the compiler omits any template arguments that match the
2951     default template arguments for that template.  If either of these
2952     behaviors make it harder to understand the error message rather
2953     than easier, you can use '-fno-pretty-templates' to disable them.
2954
2955'-fno-rtti'
2956     Disable generation of information about every class with virtual
2957     functions for use by the C++ run-time type identification features
2958     ('dynamic_cast' and 'typeid').  If you don't use those parts of the
2959     language, you can save some space by using this flag.  Note that
2960     exception handling uses the same information, but G++ generates it
2961     as needed.  The 'dynamic_cast' operator can still be used for casts
2962     that do not require run-time type information, i.e. casts to 'void
2963     *' or to unambiguous base classes.
2964
2965     Mixing code compiled with '-frtti' with that compiled with
2966     '-fno-rtti' may not work.  For example, programs may fail to link
2967     if a class compiled with '-fno-rtti' is used as a base for a class
2968     compiled with '-frtti'.
2969
2970'-fsized-deallocation'
2971     Enable the built-in global declarations
2972          void operator delete (void *, std::size_t) noexcept;
2973          void operator delete[] (void *, std::size_t) noexcept;
2974     as introduced in C++14.  This is useful for user-defined
2975     replacement deallocation functions that, for example, use the size
2976     of the object to make deallocation faster.  Enabled by default
2977     under '-std=c++14' and above.  The flag '-Wsized-deallocation'
2978     warns about places that might want to add a definition.
2979
2980'-fstrict-enums'
2981     Allow the compiler to optimize using the assumption that a value of
2982     enumerated type can only be one of the values of the enumeration
2983     (as defined in the C++ standard; basically, a value that can be
2984     represented in the minimum number of bits needed to represent all
2985     the enumerators).  This assumption may not be valid if the program
2986     uses a cast to convert an arbitrary integer value to the enumerated
2987     type.
2988
2989'-fstrong-eval-order'
2990     Evaluate member access, array subscripting, and shift expressions
2991     in left-to-right order, and evaluate assignment in right-to-left
2992     order, as adopted for C++17.  Enabled by default with '-std=c++17'.
2993     '-fstrong-eval-order=some' enables just the ordering of member
2994     access and shift expressions, and is the default without
2995     '-std=c++17'.
2996
2997'-ftemplate-backtrace-limit=N'
2998     Set the maximum number of template instantiation notes for a single
2999     warning or error to N.  The default value is 10.
3000
3001'-ftemplate-depth=N'
3002     Set the maximum instantiation depth for template classes to N.  A
3003     limit on the template instantiation depth is needed to detect
3004     endless recursions during template class instantiation.  ANSI/ISO
3005     C++ conforming programs must not rely on a maximum depth greater
3006     than 17 (changed to 1024 in C++11).  The default value is 900, as
3007     the compiler can run out of stack space before hitting 1024 in some
3008     situations.
3009
3010'-fno-threadsafe-statics'
3011     Do not emit the extra code to use the routines specified in the C++
3012     ABI for thread-safe initialization of local statics.  You can use
3013     this option to reduce code size slightly in code that doesn't need
3014     to be thread-safe.
3015
3016'-fuse-cxa-atexit'
3017     Register destructors for objects with static storage duration with
3018     the '__cxa_atexit' function rather than the 'atexit' function.
3019     This option is required for fully standards-compliant handling of
3020     static destructors, but only works if your C library supports
3021     '__cxa_atexit'.
3022
3023'-fno-use-cxa-get-exception-ptr'
3024     Don't use the '__cxa_get_exception_ptr' runtime routine.  This
3025     causes 'std::uncaught_exception' to be incorrect, but is necessary
3026     if the runtime routine is not available.
3027
3028'-fvisibility-inlines-hidden'
3029     This switch declares that the user does not attempt to compare
3030     pointers to inline functions or methods where the addresses of the
3031     two functions are taken in different shared objects.
3032
3033     The effect of this is that GCC may, effectively, mark inline
3034     methods with '__attribute__ ((visibility ("hidden")))' so that they
3035     do not appear in the export table of a DSO and do not require a PLT
3036     indirection when used within the DSO.  Enabling this option can
3037     have a dramatic effect on load and link times of a DSO as it
3038     massively reduces the size of the dynamic export table when the
3039     library makes heavy use of templates.
3040
3041     The behavior of this switch is not quite the same as marking the
3042     methods as hidden directly, because it does not affect static
3043     variables local to the function or cause the compiler to deduce
3044     that the function is defined in only one shared object.
3045
3046     You may mark a method as having a visibility explicitly to negate
3047     the effect of the switch for that method.  For example, if you do
3048     want to compare pointers to a particular inline method, you might
3049     mark it as having default visibility.  Marking the enclosing class
3050     with explicit visibility has no effect.
3051
3052     Explicitly instantiated inline methods are unaffected by this
3053     option as their linkage might otherwise cross a shared library
3054     boundary.  *Note Template Instantiation::.
3055
3056'-fvisibility-ms-compat'
3057     This flag attempts to use visibility settings to make GCC's C++
3058     linkage model compatible with that of Microsoft Visual Studio.
3059
3060     The flag makes these changes to GCC's linkage model:
3061
3062       1. It sets the default visibility to 'hidden', like
3063          '-fvisibility=hidden'.
3064
3065       2. Types, but not their members, are not hidden by default.
3066
3067       3. The One Definition Rule is relaxed for types without explicit
3068          visibility specifications that are defined in more than one
3069          shared object: those declarations are permitted if they are
3070          permitted when this option is not used.
3071
3072     In new code it is better to use '-fvisibility=hidden' and export
3073     those classes that are intended to be externally visible.
3074     Unfortunately it is possible for code to rely, perhaps
3075     accidentally, on the Visual Studio behavior.
3076
3077     Among the consequences of these changes are that static data
3078     members of the same type with the same name but defined in
3079     different shared objects are different, so changing one does not
3080     change the other; and that pointers to function members defined in
3081     different shared objects may not compare equal.  When this flag is
3082     given, it is a violation of the ODR to define types with the same
3083     name differently.
3084
3085'-fno-weak'
3086     Do not use weak symbol support, even if it is provided by the
3087     linker.  By default, G++ uses weak symbols if they are available.
3088     This option exists only for testing, and should not be used by
3089     end-users; it results in inferior code and has no benefits.  This
3090     option may be removed in a future release of G++.
3091
3092'-fext-numeric-literals (C++ and Objective-C++ only)'
3093     Accept imaginary, fixed-point, or machine-defined literal number
3094     suffixes as GNU extensions.  When this option is turned off these
3095     suffixes are treated as C++11 user-defined literal numeric
3096     suffixes.  This is on by default for all pre-C++11 dialects and all
3097     GNU dialects: '-std=c++98', '-std=gnu++98', '-std=gnu++11',
3098     '-std=gnu++14'.  This option is off by default for ISO C++11
3099     onwards ('-std=c++11', ...).
3100
3101'-nostdinc++'
3102     Do not search for header files in the standard directories specific
3103     to C++, but do still search the other standard directories.  (This
3104     option is used when building the C++ library.)
3105
3106 In addition, these warning options have meanings only for C++ programs:
3107
3108'-Wabi-tag (C++ and Objective-C++ only)'
3109     Warn when a type with an ABI tag is used in a context that does not
3110     have that ABI tag.  See *note C++ Attributes:: for more information
3111     about ABI tags.
3112
3113'-Wcomma-subscript (C++ and Objective-C++ only)'
3114     Warn about uses of a comma expression within a subscripting
3115     expression.  This usage was deprecated in C++2a.  However, a comma
3116     expression wrapped in '( )' is not deprecated.  Example:
3117
3118          void f(int *a, int b, int c) {
3119              a[b,c];     // deprecated
3120              a[(b,c)];   // OK
3121          }
3122
3123     Enabled by default with '-std=c++2a'.
3124
3125'-Wctor-dtor-privacy (C++ and Objective-C++ only)'
3126     Warn when a class seems unusable because all the constructors or
3127     destructors in that class are private, and it has neither friends
3128     nor public static member functions.  Also warn if there are no
3129     non-private methods, and there's at least one private member
3130     function that isn't a constructor or destructor.
3131
3132'-Wdelete-non-virtual-dtor (C++ and Objective-C++ only)'
3133     Warn when 'delete' is used to destroy an instance of a class that
3134     has virtual functions and non-virtual destructor.  It is unsafe to
3135     delete an instance of a derived class through a pointer to a base
3136     class if the base class does not have a virtual destructor.  This
3137     warning is enabled by '-Wall'.
3138
3139'-Wdeprecated-copy (C++ and Objective-C++ only)'
3140     Warn that the implicit declaration of a copy constructor or copy
3141     assignment operator is deprecated if the class has a user-provided
3142     copy constructor or copy assignment operator, in C++11 and up.
3143     This warning is enabled by '-Wextra'.  With
3144     '-Wdeprecated-copy-dtor', also deprecate if the class has a
3145     user-provided destructor.
3146
3147'-Wno-init-list-lifetime (C++ and Objective-C++ only)'
3148     Do not warn about uses of 'std::initializer_list' that are likely
3149     to result in dangling pointers.  Since the underlying array for an
3150     'initializer_list' is handled like a normal C++ temporary object,
3151     it is easy to inadvertently keep a pointer to the array past the
3152     end of the array's lifetime.  For example:
3153
3154        * If a function returns a temporary 'initializer_list', or a
3155          local 'initializer_list' variable, the array's lifetime ends
3156          at the end of the return statement, so the value returned has
3157          a dangling pointer.
3158
3159        * If a new-expression creates an 'initializer_list', the array
3160          only lives until the end of the enclosing full-expression, so
3161          the 'initializer_list' in the heap has a dangling pointer.
3162
3163        * When an 'initializer_list' variable is assigned from a
3164          brace-enclosed initializer list, the temporary array created
3165          for the right side of the assignment only lives until the end
3166          of the full-expression, so at the next statement the
3167          'initializer_list' variable has a dangling pointer.
3168
3169               // li's initial underlying array lives as long as li
3170               std::initializer_list<int> li = { 1,2,3 };
3171               // assignment changes li to point to a temporary array
3172               li = { 4, 5 };
3173               // now the temporary is gone and li has a dangling pointer
3174               int i = li.begin()[0] // undefined behavior
3175
3176        * When a list constructor stores the 'begin' pointer from the
3177          'initializer_list' argument, this doesn't extend the lifetime
3178          of the array, so if a class variable is constructed from a
3179          temporary 'initializer_list', the pointer is left dangling by
3180          the end of the variable declaration statement.
3181
3182'-Wno-literal-suffix (C++ and Objective-C++ only)'
3183     Do not warn when a string or character literal is followed by a
3184     ud-suffix which does not begin with an underscore.  As a conforming
3185     extension, GCC treats such suffixes as separate preprocessing
3186     tokens in order to maintain backwards compatibility with code that
3187     uses formatting macros from '<inttypes.h>'.  For example:
3188
3189          #define __STDC_FORMAT_MACROS
3190          #include <inttypes.h>
3191          #include <stdio.h>
3192
3193          int main() {
3194            int64_t i64 = 123;
3195            printf("My int64: %" PRId64"\n", i64);
3196          }
3197
3198     In this case, 'PRId64' is treated as a separate preprocessing
3199     token.
3200
3201     This option also controls warnings when a user-defined literal
3202     operator is declared with a literal suffix identifier that doesn't
3203     begin with an underscore.  Literal suffix identifiers that don't
3204     begin with an underscore are reserved for future standardization.
3205
3206     These warnings are enabled by default.
3207
3208'-Wno-narrowing (C++ and Objective-C++ only)'
3209     For C++11 and later standards, narrowing conversions are diagnosed
3210     by default, as required by the standard.  A narrowing conversion
3211     from a constant produces an error, and a narrowing conversion from
3212     a non-constant produces a warning, but '-Wno-narrowing' suppresses
3213     the diagnostic.  Note that this does not affect the meaning of
3214     well-formed code; narrowing conversions are still considered
3215     ill-formed in SFINAE contexts.
3216
3217     With '-Wnarrowing' in C++98, warn when a narrowing conversion
3218     prohibited by C++11 occurs within '{ }', e.g.
3219
3220          int i = { 2.2 }; // error: narrowing from double to int
3221
3222     This flag is included in '-Wall' and '-Wc++11-compat'.
3223
3224'-Wnoexcept (C++ and Objective-C++ only)'
3225     Warn when a noexcept-expression evaluates to false because of a
3226     call to a function that does not have a non-throwing exception
3227     specification (i.e.  'throw()' or 'noexcept') but is known by the
3228     compiler to never throw an exception.
3229
3230'-Wnoexcept-type (C++ and Objective-C++ only)'
3231     Warn if the C++17 feature making 'noexcept' part of a function type
3232     changes the mangled name of a symbol relative to C++14.  Enabled by
3233     '-Wabi' and '-Wc++17-compat'.
3234
3235     As an example:
3236
3237          template <class T> void f(T t) { t(); };
3238          void g() noexcept;
3239          void h() { f(g); }
3240
3241     In C++14, 'f' calls 'f<void(*)()>', but in C++17 it calls
3242     'f<void(*)()noexcept>'.
3243
3244'-Wclass-memaccess (C++ and Objective-C++ only)'
3245     Warn when the destination of a call to a raw memory function such
3246     as 'memset' or 'memcpy' is an object of class type, and when
3247     writing into such an object might bypass the class non-trivial or
3248     deleted constructor or copy assignment, violate const-correctness
3249     or encapsulation, or corrupt virtual table pointers.  Modifying the
3250     representation of such objects may violate invariants maintained by
3251     member functions of the class.  For example, the call to 'memset'
3252     below is undefined because it modifies a non-trivial class object
3253     and is, therefore, diagnosed.  The safe way to either initialize or
3254     clear the storage of objects of such types is by using the
3255     appropriate constructor or assignment operator, if one is
3256     available.
3257          std::string str = "abc";
3258          memset (&str, 0, sizeof str);
3259     The '-Wclass-memaccess' option is enabled by '-Wall'.  Explicitly
3260     casting the pointer to the class object to 'void *' or to a type
3261     that can be safely accessed by the raw memory function suppresses
3262     the warning.
3263
3264'-Wnon-virtual-dtor (C++ and Objective-C++ only)'
3265     Warn when a class has virtual functions and an accessible
3266     non-virtual destructor itself or in an accessible polymorphic base
3267     class, in which case it is possible but unsafe to delete an
3268     instance of a derived class through a pointer to the class itself
3269     or base class.  This warning is automatically enabled if '-Weffc++'
3270     is specified.
3271
3272'-Wregister (C++ and Objective-C++ only)'
3273     Warn on uses of the 'register' storage class specifier, except when
3274     it is part of the GNU *note Explicit Register Variables::
3275     extension.  The use of the 'register' keyword as storage class
3276     specifier has been deprecated in C++11 and removed in C++17.
3277     Enabled by default with '-std=c++17'.
3278
3279'-Wreorder (C++ and Objective-C++ only)'
3280     Warn when the order of member initializers given in the code does
3281     not match the order in which they must be executed.  For instance:
3282
3283          struct A {
3284            int i;
3285            int j;
3286            A(): j (0), i (1) { }
3287          };
3288
3289     The compiler rearranges the member initializers for 'i' and 'j' to
3290     match the declaration order of the members, emitting a warning to
3291     that effect.  This warning is enabled by '-Wall'.
3292
3293'-Wno-pessimizing-move (C++ and Objective-C++ only)'
3294     This warning warns when a call to 'std::move' prevents copy
3295     elision.  A typical scenario when copy elision can occur is when
3296     returning in a function with a class return type, when the
3297     expression being returned is the name of a non-volatile automatic
3298     object, and is not a function parameter, and has the same type as
3299     the function return type.
3300
3301          struct T {
3302          ...
3303          };
3304          T fn()
3305          {
3306            T t;
3307            ...
3308            return std::move (t);
3309          }
3310
3311     But in this example, the 'std::move' call prevents copy elision.
3312
3313     This warning is enabled by '-Wall'.
3314
3315'-Wno-redundant-move (C++ and Objective-C++ only)'
3316     This warning warns about redundant calls to 'std::move'; that is,
3317     when a move operation would have been performed even without the
3318     'std::move' call.  This happens because the compiler is forced to
3319     treat the object as if it were an rvalue in certain situations such
3320     as returning a local variable, where copy elision isn't applicable.
3321     Consider:
3322
3323          struct T {
3324          ...
3325          };
3326          T fn(T t)
3327          {
3328            ...
3329            return std::move (t);
3330          }
3331
3332     Here, the 'std::move' call is redundant.  Because G++ implements
3333     Core Issue 1579, another example is:
3334
3335          struct T { // convertible to U
3336          ...
3337          };
3338          struct U {
3339          ...
3340          };
3341          U fn()
3342          {
3343            T t;
3344            ...
3345            return std::move (t);
3346          }
3347     In this example, copy elision isn't applicable because the type of
3348     the expression being returned and the function return type differ,
3349     yet G++ treats the return value as if it were designated by an
3350     rvalue.
3351
3352     This warning is enabled by '-Wextra'.
3353
3354'-Wredundant-tags (C++ and Objective-C++ only)'
3355     Warn about redundant class-key and enum-key in references to class
3356     types and enumerated types in contexts where the key can be
3357     eliminated without causing an ambiguity.  For example:
3358
3359          struct foo;
3360          struct foo *p;   // warn that keyword struct can be eliminated
3361
3362     On the other hand, in this example there is no warning:
3363
3364          struct foo;
3365          void foo ();   // "hides" struct foo
3366          void bar (struct foo&);  // no warning, keyword struct is necessary
3367
3368'-Wno-subobject-linkage (C++ and Objective-C++ only)'
3369     Do not warn if a class type has a base or a field whose type uses
3370     the anonymous namespace or depends on a type with no linkage.  If a
3371     type A depends on a type B with no or internal linkage, defining it
3372     in multiple translation units would be an ODR violation because the
3373     meaning of B is different in each translation unit.  If A only
3374     appears in a single translation unit, the best way to silence the
3375     warning is to give it internal linkage by putting it in an
3376     anonymous namespace as well.  The compiler doesn't give this
3377     warning for types defined in the main .C file, as those are
3378     unlikely to have multiple definitions.  '-Wsubobject-linkage' is
3379     enabled by default.
3380
3381'-Weffc++ (C++ and Objective-C++ only)'
3382     Warn about violations of the following style guidelines from Scott
3383     Meyers' 'Effective C++' series of books:
3384
3385        * Define a copy constructor and an assignment operator for
3386          classes with dynamically-allocated memory.
3387
3388        * Prefer initialization to assignment in constructors.
3389
3390        * Have 'operator=' return a reference to '*this'.
3391
3392        * Don't try to return a reference when you must return an
3393          object.
3394
3395        * Distinguish between prefix and postfix forms of increment and
3396          decrement operators.
3397
3398        * Never overload '&&', '||', or ','.
3399
3400     This option also enables '-Wnon-virtual-dtor', which is also one of
3401     the effective C++ recommendations.  However, the check is extended
3402     to warn about the lack of virtual destructor in accessible
3403     non-polymorphic bases classes too.
3404
3405     When selecting this option, be aware that the standard library
3406     headers do not obey all of these guidelines; use 'grep -v' to
3407     filter out those warnings.
3408
3409'-Wstrict-null-sentinel (C++ and Objective-C++ only)'
3410     Warn about the use of an uncasted 'NULL' as sentinel.  When
3411     compiling only with GCC this is a valid sentinel, as 'NULL' is
3412     defined to '__null'.  Although it is a null pointer constant rather
3413     than a null pointer, it is guaranteed to be of the same size as a
3414     pointer.  But this use is not portable across different compilers.
3415
3416'-Wno-non-template-friend (C++ and Objective-C++ only)'
3417     Disable warnings when non-template friend functions are declared
3418     within a template.  In very old versions of GCC that predate
3419     implementation of the ISO standard, declarations such as 'friend
3420     int foo(int)', where the name of the friend is an unqualified-id,
3421     could be interpreted as a particular specialization of a template
3422     function; the warning exists to diagnose compatibility problems,
3423     and is enabled by default.
3424
3425'-Wold-style-cast (C++ and Objective-C++ only)'
3426     Warn if an old-style (C-style) cast to a non-void type is used
3427     within a C++ program.  The new-style casts ('dynamic_cast',
3428     'static_cast', 'reinterpret_cast', and 'const_cast') are less
3429     vulnerable to unintended effects and much easier to search for.
3430
3431'-Woverloaded-virtual (C++ and Objective-C++ only)'
3432     Warn when a function declaration hides virtual functions from a
3433     base class.  For example, in:
3434
3435          struct A {
3436            virtual void f();
3437          };
3438
3439          struct B: public A {
3440            void f(int);
3441          };
3442
3443     the 'A' class version of 'f' is hidden in 'B', and code like:
3444
3445          B* b;
3446          b->f();
3447
3448     fails to compile.
3449
3450'-Wno-pmf-conversions (C++ and Objective-C++ only)'
3451     Disable the diagnostic for converting a bound pointer to member
3452     function to a plain pointer.
3453
3454'-Wsign-promo (C++ and Objective-C++ only)'
3455     Warn when overload resolution chooses a promotion from unsigned or
3456     enumerated type to a signed type, over a conversion to an unsigned
3457     type of the same size.  Previous versions of G++ tried to preserve
3458     unsignedness, but the standard mandates the current behavior.
3459
3460'-Wtemplates (C++ and Objective-C++ only)'
3461     Warn when a primary template declaration is encountered.  Some
3462     coding rules disallow templates, and this may be used to enforce
3463     that rule.  The warning is inactive inside a system header file,
3464     such as the STL, so one can still use the STL. One may also
3465     instantiate or specialize templates.
3466
3467'-Wmismatched-tags (C++ and Objective-C++ only)'
3468     Warn for declarations of structs, classes, and class templates and
3469     their specializations with a class-key that does not match either
3470     the definition or the first declaration if no definition is
3471     provided.
3472
3473     For example, the declaration of 'struct Object' in the argument
3474     list of 'draw' triggers the warning.  To avoid it, either remove
3475     the redundant class-key 'struct' or replace it with 'class' to
3476     match its definition.
3477          class Object {
3478          public:
3479            virtual ~Object () = 0;
3480          };
3481          void draw (struct Object*);
3482
3483     It is not wrong to declare a class with the class-key 'struct' as
3484     the example above shows.  The '-Wmismatched-tags' option is
3485     intended to help achieve a consistent style of class declarations.
3486     In code that is intended to be portable to Windows-based compilers
3487     the warning helps prevent unresolved references due to the
3488     difference in the mangling of symbols declared with different
3489     class-keys.  The option can be used either on its own or in
3490     conjunction with '-Wredundant-tags'.
3491
3492'-Wmultiple-inheritance (C++ and Objective-C++ only)'
3493     Warn when a class is defined with multiple direct base classes.
3494     Some coding rules disallow multiple inheritance, and this may be
3495     used to enforce that rule.  The warning is inactive inside a system
3496     header file, such as the STL, so one can still use the STL. One may
3497     also define classes that indirectly use multiple inheritance.
3498
3499'-Wvirtual-inheritance'
3500     Warn when a class is defined with a virtual direct base class.
3501     Some coding rules disallow multiple inheritance, and this may be
3502     used to enforce that rule.  The warning is inactive inside a system
3503     header file, such as the STL, so one can still use the STL. One may
3504     also define classes that indirectly use virtual inheritance.
3505
3506'-Wno-virtual-move-assign'
3507     Suppress warnings about inheriting from a virtual base with a
3508     non-trivial C++11 move assignment operator.  This is dangerous
3509     because if the virtual base is reachable along more than one path,
3510     it is moved multiple times, which can mean both objects end up in
3511     the moved-from state.  If the move assignment operator is written
3512     to avoid moving from a moved-from object, this warning can be
3513     disabled.
3514
3515'-Wnamespaces'
3516     Warn when a namespace definition is opened.  Some coding rules
3517     disallow namespaces, and this may be used to enforce that rule.
3518     The warning is inactive inside a system header file, such as the
3519     STL, so one can still use the STL. One may also use using
3520     directives and qualified names.
3521
3522'-Wno-terminate (C++ and Objective-C++ only)'
3523     Disable the warning about a throw-expression that will immediately
3524     result in a call to 'terminate'.
3525
3526'-Wno-class-conversion (C++ and Objective-C++ only)'
3527     Do not warn when a conversion function converts an object to the
3528     same type, to a base class of that type, or to void; such a
3529     conversion function will never be called.
3530
3531'-Wvolatile (C++ and Objective-C++ only)'
3532     Warn about deprecated uses of the 'volatile' qualifier.  This
3533     includes postfix and prefix '++' and '--' expressions of
3534     'volatile'-qualified types, using simple assignments where the left
3535     operand is a 'volatile'-qualified non-class type for their value,
3536     compound assignments where the left operand is a
3537     'volatile'-qualified non-class type, 'volatile'-qualified function
3538     return type, 'volatile'-qualified parameter type, and structured
3539     bindings of a 'volatile'-qualified type.  This usage was deprecated
3540     in C++20.
3541
3542     Enabled by default with '-std=c++2a'.
3543
3544'-Wzero-as-null-pointer-constant (C++ and Objective-C++ only)'
3545     Warn when a literal '0' is used as null pointer constant.  This can
3546     be useful to facilitate the conversion to 'nullptr' in C++11.
3547
3548'-Waligned-new'
3549     Warn about a new-expression of a type that requires greater
3550     alignment than the 'alignof(std::max_align_t)' but uses an
3551     allocation function without an explicit alignment parameter.  This
3552     option is enabled by '-Wall'.
3553
3554     Normally this only warns about global allocation functions, but
3555     '-Waligned-new=all' also warns about class member allocation
3556     functions.
3557
3558'-Wno-placement-new'
3559'-Wplacement-new=N'
3560     Warn about placement new expressions with undefined behavior, such
3561     as constructing an object in a buffer that is smaller than the type
3562     of the object.  For example, the placement new expression below is
3563     diagnosed because it attempts to construct an array of 64 integers
3564     in a buffer only 64 bytes large.
3565          char buf [64];
3566          new (buf) int[64];
3567     This warning is enabled by default.
3568
3569     '-Wplacement-new=1'
3570          This is the default warning level of '-Wplacement-new'.  At
3571          this level the warning is not issued for some strictly
3572          undefined constructs that GCC allows as extensions for
3573          compatibility with legacy code.  For example, the following
3574          'new' expression is not diagnosed at this level even though it
3575          has undefined behavior according to the C++ standard because
3576          it writes past the end of the one-element array.
3577               struct S { int n, a[1]; };
3578               S *s = (S *)malloc (sizeof *s + 31 * sizeof s->a[0]);
3579               new (s->a)int [32]();
3580
3581     '-Wplacement-new=2'
3582          At this level, in addition to diagnosing all the same
3583          constructs as at level 1, a diagnostic is also issued for
3584          placement new expressions that construct an object in the last
3585          member of structure whose type is an array of a single element
3586          and whose size is less than the size of the object being
3587          constructed.  While the previous example would be diagnosed,
3588          the following construct makes use of the flexible member array
3589          extension to avoid the warning at level 2.
3590               struct S { int n, a[]; };
3591               S *s = (S *)malloc (sizeof *s + 32 * sizeof s->a[0]);
3592               new (s->a)int [32]();
3593
3594'-Wcatch-value'
3595'-Wcatch-value=N (C++ and Objective-C++ only)'
3596     Warn about catch handlers that do not catch via reference.  With
3597     '-Wcatch-value=1' (or '-Wcatch-value' for short) warn about
3598     polymorphic class types that are caught by value.  With
3599     '-Wcatch-value=2' warn about all class types that are caught by
3600     value.  With '-Wcatch-value=3' warn about all types that are not
3601     caught by reference.  '-Wcatch-value' is enabled by '-Wall'.
3602
3603'-Wconditionally-supported (C++ and Objective-C++ only)'
3604     Warn for conditionally-supported (C++11 [intro.defs]) constructs.
3605
3606'-Wno-delete-incomplete (C++ and Objective-C++ only)'
3607     Do not warn when deleting a pointer to incomplete type, which may
3608     cause undefined behavior at runtime.  This warning is enabled by
3609     default.
3610
3611'-Wextra-semi (C++, Objective-C++ only)'
3612     Warn about redundant semicolons after in-class function
3613     definitions.
3614
3615'-Wno-inaccessible-base (C++, Objective-C++ only)'
3616     This option controls warnings when a base class is inaccessible in
3617     a class derived from it due to ambiguity.  The warning is enabled
3618     by default.  Note that the warning for ambiguous virtual bases is
3619     enabled by the '-Wextra' option.
3620          struct A { int a; };
3621
3622          struct B : A { };
3623
3624          struct C : B, A { };
3625
3626'-Wno-inherited-variadic-ctor'
3627     Suppress warnings about use of C++11 inheriting constructors when
3628     the base class inherited from has a C variadic constructor; the
3629     warning is on by default because the ellipsis is not inherited.
3630
3631'-Wno-invalid-offsetof (C++ and Objective-C++ only)'
3632     Suppress warnings from applying the 'offsetof' macro to a non-POD
3633     type.  According to the 2014 ISO C++ standard, applying 'offsetof'
3634     to a non-standard-layout type is undefined.  In existing C++
3635     implementations, however, 'offsetof' typically gives meaningful
3636     results.  This flag is for users who are aware that they are
3637     writing nonportable code and who have deliberately chosen to ignore
3638     the warning about it.
3639
3640     The restrictions on 'offsetof' may be relaxed in a future version
3641     of the C++ standard.
3642
3643'-Wsized-deallocation (C++ and Objective-C++ only)'
3644     Warn about a definition of an unsized deallocation function
3645          void operator delete (void *) noexcept;
3646          void operator delete[] (void *) noexcept;
3647     without a definition of the corresponding sized deallocation
3648     function
3649          void operator delete (void *, std::size_t) noexcept;
3650          void operator delete[] (void *, std::size_t) noexcept;
3651     or vice versa.  Enabled by '-Wextra' along with
3652     '-fsized-deallocation'.
3653
3654'-Wsuggest-final-types'
3655     Warn about types with virtual methods where code quality would be
3656     improved if the type were declared with the C++11 'final'
3657     specifier, or, if possible, declared in an anonymous namespace.
3658     This allows GCC to more aggressively devirtualize the polymorphic
3659     calls.  This warning is more effective with link-time optimization,
3660     where the information about the class hierarchy graph is more
3661     complete.
3662
3663'-Wsuggest-final-methods'
3664     Warn about virtual methods where code quality would be improved if
3665     the method were declared with the C++11 'final' specifier, or, if
3666     possible, its type were declared in an anonymous namespace or with
3667     the 'final' specifier.  This warning is more effective with
3668     link-time optimization, where the information about the class
3669     hierarchy graph is more complete.  It is recommended to first
3670     consider suggestions of '-Wsuggest-final-types' and then rebuild
3671     with new annotations.
3672
3673'-Wsuggest-override'
3674     Warn about overriding virtual functions that are not marked with
3675     the 'override' keyword.
3676
3677'-Wuseless-cast (C++ and Objective-C++ only)'
3678     Warn when an expression is casted to its own type.
3679
3680'-Wno-conversion-null (C++ and Objective-C++ only)'
3681     Do not warn for conversions between 'NULL' and non-pointer types.
3682     '-Wconversion-null' is enabled by default.
3683
3684
3685File: gcc.info,  Node: Objective-C and Objective-C++ Dialect Options,  Next: Diagnostic Message Formatting Options,  Prev: C++ Dialect Options,  Up: Invoking GCC
3686
36873.6 Options Controlling Objective-C and Objective-C++ Dialects
3688==============================================================
3689
3690(NOTE: This manual does not describe the Objective-C and Objective-C++
3691languages themselves.  *Note Language Standards Supported by GCC:
3692Standards, for references.)
3693
3694 This section describes the command-line options that are only
3695meaningful for Objective-C and Objective-C++ programs.  You can also use
3696most of the language-independent GNU compiler options.  For example, you
3697might compile a file 'some_class.m' like this:
3698
3699     gcc -g -fgnu-runtime -O -c some_class.m
3700
3701In this example, '-fgnu-runtime' is an option meant only for Objective-C
3702and Objective-C++ programs; you can use the other options with any
3703language supported by GCC.
3704
3705 Note that since Objective-C is an extension of the C language,
3706Objective-C compilations may also use options specific to the C
3707front-end (e.g., '-Wtraditional').  Similarly, Objective-C++
3708compilations may use C++-specific options (e.g., '-Wabi').
3709
3710 Here is a list of options that are _only_ for compiling Objective-C and
3711Objective-C++ programs:
3712
3713'-fconstant-string-class=CLASS-NAME'
3714     Use CLASS-NAME as the name of the class to instantiate for each
3715     literal string specified with the syntax '@"..."'.  The default
3716     class name is 'NXConstantString' if the GNU runtime is being used,
3717     and 'NSConstantString' if the NeXT runtime is being used (see
3718     below).  The '-fconstant-cfstrings' option, if also present,
3719     overrides the '-fconstant-string-class' setting and cause '@"..."'
3720     literals to be laid out as constant CoreFoundation strings.
3721
3722'-fgnu-runtime'
3723     Generate object code compatible with the standard GNU Objective-C
3724     runtime.  This is the default for most types of systems.
3725
3726'-fnext-runtime'
3727     Generate output compatible with the NeXT runtime.  This is the
3728     default for NeXT-based systems, including Darwin and Mac OS X.  The
3729     macro '__NEXT_RUNTIME__' is predefined if (and only if) this option
3730     is used.
3731
3732'-fno-nil-receivers'
3733     Assume that all Objective-C message dispatches ('[receiver
3734     message:arg]') in this translation unit ensure that the receiver is
3735     not 'nil'.  This allows for more efficient entry points in the
3736     runtime to be used.  This option is only available in conjunction
3737     with the NeXT runtime and ABI version 0 or 1.
3738
3739'-fobjc-abi-version=N'
3740     Use version N of the Objective-C ABI for the selected runtime.
3741     This option is currently supported only for the NeXT runtime.  In
3742     that case, Version 0 is the traditional (32-bit) ABI without
3743     support for properties and other Objective-C 2.0 additions.
3744     Version 1 is the traditional (32-bit) ABI with support for
3745     properties and other Objective-C 2.0 additions.  Version 2 is the
3746     modern (64-bit) ABI. If nothing is specified, the default is
3747     Version 0 on 32-bit target machines, and Version 2 on 64-bit target
3748     machines.
3749
3750'-fobjc-call-cxx-cdtors'
3751     For each Objective-C class, check if any of its instance variables
3752     is a C++ object with a non-trivial default constructor.  If so,
3753     synthesize a special '- (id) .cxx_construct' instance method which
3754     runs non-trivial default constructors on any such instance
3755     variables, in order, and then return 'self'.  Similarly, check if
3756     any instance variable is a C++ object with a non-trivial
3757     destructor, and if so, synthesize a special '- (void)
3758     .cxx_destruct' method which runs all such default destructors, in
3759     reverse order.
3760
3761     The '- (id) .cxx_construct' and '- (void) .cxx_destruct' methods
3762     thusly generated only operate on instance variables declared in the
3763     current Objective-C class, and not those inherited from
3764     superclasses.  It is the responsibility of the Objective-C runtime
3765     to invoke all such methods in an object's inheritance hierarchy.
3766     The '- (id) .cxx_construct' methods are invoked by the runtime
3767     immediately after a new object instance is allocated; the '- (void)
3768     .cxx_destruct' methods are invoked immediately before the runtime
3769     deallocates an object instance.
3770
3771     As of this writing, only the NeXT runtime on Mac OS X 10.4 and
3772     later has support for invoking the '- (id) .cxx_construct' and '-
3773     (void) .cxx_destruct' methods.
3774
3775'-fobjc-direct-dispatch'
3776     Allow fast jumps to the message dispatcher.  On Darwin this is
3777     accomplished via the comm page.
3778
3779'-fobjc-exceptions'
3780     Enable syntactic support for structured exception handling in
3781     Objective-C, similar to what is offered by C++.  This option is
3782     required to use the Objective-C keywords '@try', '@throw',
3783     '@catch', '@finally' and '@synchronized'.  This option is available
3784     with both the GNU runtime and the NeXT runtime (but not available
3785     in conjunction with the NeXT runtime on Mac OS X 10.2 and earlier).
3786
3787'-fobjc-gc'
3788     Enable garbage collection (GC) in Objective-C and Objective-C++
3789     programs.  This option is only available with the NeXT runtime; the
3790     GNU runtime has a different garbage collection implementation that
3791     does not require special compiler flags.
3792
3793'-fobjc-nilcheck'
3794     For the NeXT runtime with version 2 of the ABI, check for a nil
3795     receiver in method invocations before doing the actual method call.
3796     This is the default and can be disabled using '-fno-objc-nilcheck'.
3797     Class methods and super calls are never checked for nil in this way
3798     no matter what this flag is set to.  Currently this flag does
3799     nothing when the GNU runtime, or an older version of the NeXT
3800     runtime ABI, is used.
3801
3802'-fobjc-std=objc1'
3803     Conform to the language syntax of Objective-C 1.0, the language
3804     recognized by GCC 4.0.  This only affects the Objective-C additions
3805     to the C/C++ language; it does not affect conformance to C/C++
3806     standards, which is controlled by the separate C/C++ dialect option
3807     flags.  When this option is used with the Objective-C or
3808     Objective-C++ compiler, any Objective-C syntax that is not
3809     recognized by GCC 4.0 is rejected.  This is useful if you need to
3810     make sure that your Objective-C code can be compiled with older
3811     versions of GCC.
3812
3813'-freplace-objc-classes'
3814     Emit a special marker instructing 'ld(1)' not to statically link in
3815     the resulting object file, and allow 'dyld(1)' to load it in at run
3816     time instead.  This is used in conjunction with the
3817     Fix-and-Continue debugging mode, where the object file in question
3818     may be recompiled and dynamically reloaded in the course of program
3819     execution, without the need to restart the program itself.
3820     Currently, Fix-and-Continue functionality is only available in
3821     conjunction with the NeXT runtime on Mac OS X 10.3 and later.
3822
3823'-fzero-link'
3824     When compiling for the NeXT runtime, the compiler ordinarily
3825     replaces calls to 'objc_getClass("...")' (when the name of the
3826     class is known at compile time) with static class references that
3827     get initialized at load time, which improves run-time performance.
3828     Specifying the '-fzero-link' flag suppresses this behavior and
3829     causes calls to 'objc_getClass("...")' to be retained.  This is
3830     useful in Zero-Link debugging mode, since it allows for individual
3831     class implementations to be modified during program execution.  The
3832     GNU runtime currently always retains calls to
3833     'objc_get_class("...")' regardless of command-line options.
3834
3835'-fno-local-ivars'
3836     By default instance variables in Objective-C can be accessed as if
3837     they were local variables from within the methods of the class
3838     they're declared in.  This can lead to shadowing between instance
3839     variables and other variables declared either locally inside a
3840     class method or globally with the same name.  Specifying the
3841     '-fno-local-ivars' flag disables this behavior thus avoiding
3842     variable shadowing issues.
3843
3844'-fivar-visibility=[public|protected|private|package]'
3845     Set the default instance variable visibility to the specified
3846     option so that instance variables declared outside the scope of any
3847     access modifier directives default to the specified visibility.
3848
3849'-gen-decls'
3850     Dump interface declarations for all classes seen in the source file
3851     to a file named 'SOURCENAME.decl'.
3852
3853'-Wassign-intercept (Objective-C and Objective-C++ only)'
3854     Warn whenever an Objective-C assignment is being intercepted by the
3855     garbage collector.
3856
3857'-Wno-property-assign-default (Objective-C and Objective-C++ only)'
3858     Do not warn if a property for an Objective-C object has no assign
3859     semantics specified.
3860
3861'-Wno-protocol (Objective-C and Objective-C++ only)'
3862     If a class is declared to implement a protocol, a warning is issued
3863     for every method in the protocol that is not implemented by the
3864     class.  The default behavior is to issue a warning for every method
3865     not explicitly implemented in the class, even if a method
3866     implementation is inherited from the superclass.  If you use the
3867     '-Wno-protocol' option, then methods inherited from the superclass
3868     are considered to be implemented, and no warning is issued for
3869     them.
3870
3871'-Wselector (Objective-C and Objective-C++ only)'
3872     Warn if multiple methods of different types for the same selector
3873     are found during compilation.  The check is performed on the list
3874     of methods in the final stage of compilation.  Additionally, a
3875     check is performed for each selector appearing in a
3876     '@selector(...)' expression, and a corresponding method for that
3877     selector has been found during compilation.  Because these checks
3878     scan the method table only at the end of compilation, these
3879     warnings are not produced if the final stage of compilation is not
3880     reached, for example because an error is found during compilation,
3881     or because the '-fsyntax-only' option is being used.
3882
3883'-Wstrict-selector-match (Objective-C and Objective-C++ only)'
3884     Warn if multiple methods with differing argument and/or return
3885     types are found for a given selector when attempting to send a
3886     message using this selector to a receiver of type 'id' or 'Class'.
3887     When this flag is off (which is the default behavior), the compiler
3888     omits such warnings if any differences found are confined to types
3889     that share the same size and alignment.
3890
3891'-Wundeclared-selector (Objective-C and Objective-C++ only)'
3892     Warn if a '@selector(...)' expression referring to an undeclared
3893     selector is found.  A selector is considered undeclared if no
3894     method with that name has been declared before the '@selector(...)'
3895     expression, either explicitly in an '@interface' or '@protocol'
3896     declaration, or implicitly in an '@implementation' section.  This
3897     option always performs its checks as soon as a '@selector(...)'
3898     expression is found, while '-Wselector' only performs its checks in
3899     the final stage of compilation.  This also enforces the coding
3900     style convention that methods and selectors must be declared before
3901     being used.
3902
3903'-print-objc-runtime-info'
3904     Generate C header describing the largest structure that is passed
3905     by value, if any.
3906
3907
3908File: gcc.info,  Node: Diagnostic Message Formatting Options,  Next: Warning Options,  Prev: Objective-C and Objective-C++ Dialect Options,  Up: Invoking GCC
3909
39103.7 Options to Control Diagnostic Messages Formatting
3911=====================================================
3912
3913Traditionally, diagnostic messages have been formatted irrespective of
3914the output device's aspect (e.g. its width, ...).  You can use the
3915options described below to control the formatting algorithm for
3916diagnostic messages, e.g. how many characters per line, how often source
3917location information should be reported.  Note that some language front
3918ends may not honor these options.
3919
3920'-fmessage-length=N'
3921     Try to format error messages so that they fit on lines of about N
3922     characters.  If N is zero, then no line-wrapping is done; each
3923     error message appears on a single line.  This is the default for
3924     all front ends.
3925
3926     Note - this option also affects the display of the '#error' and
3927     '#warning' pre-processor directives, and the 'deprecated'
3928     function/type/variable attribute.  It does not however affect the
3929     'pragma GCC warning' and 'pragma GCC error' pragmas.
3930
3931'-fdiagnostics-show-location=once'
3932     Only meaningful in line-wrapping mode.  Instructs the diagnostic
3933     messages reporter to emit source location information _once_; that
3934     is, in case the message is too long to fit on a single physical
3935     line and has to be wrapped, the source location won't be emitted
3936     (as prefix) again, over and over, in subsequent continuation lines.
3937     This is the default behavior.
3938
3939'-fdiagnostics-show-location=every-line'
3940     Only meaningful in line-wrapping mode.  Instructs the diagnostic
3941     messages reporter to emit the same source location information (as
3942     prefix) for physical lines that result from the process of breaking
3943     a message which is too long to fit on a single line.
3944
3945'-fdiagnostics-color[=WHEN]'
3946'-fno-diagnostics-color'
3947     Use color in diagnostics.  WHEN is 'never', 'always', or 'auto'.
3948     The default depends on how the compiler has been configured, it can
3949     be any of the above WHEN options or also 'never' if 'GCC_COLORS'
3950     environment variable isn't present in the environment, and 'auto'
3951     otherwise.  'auto' makes GCC use color only when the standard error
3952     is a terminal, and when not executing in an emacs shell.  The forms
3953     '-fdiagnostics-color' and '-fno-diagnostics-color' are aliases for
3954     '-fdiagnostics-color=always' and '-fdiagnostics-color=never',
3955     respectively.
3956
3957     The colors are defined by the environment variable 'GCC_COLORS'.
3958     Its value is a colon-separated list of capabilities and Select
3959     Graphic Rendition (SGR) substrings.  SGR commands are interpreted
3960     by the terminal or terminal emulator.  (See the section in the
3961     documentation of your text terminal for permitted values and their
3962     meanings as character attributes.)  These substring values are
3963     integers in decimal representation and can be concatenated with
3964     semicolons.  Common values to concatenate include '1' for bold, '4'
3965     for underline, '5' for blink, '7' for inverse, '39' for default
3966     foreground color, '30' to '37' for foreground colors, '90' to '97'
3967     for 16-color mode foreground colors, '38;5;0' to '38;5;255' for
3968     88-color and 256-color modes foreground colors, '49' for default
3969     background color, '40' to '47' for background colors, '100' to
3970     '107' for 16-color mode background colors, and '48;5;0' to
3971     '48;5;255' for 88-color and 256-color modes background colors.
3972
3973     The default 'GCC_COLORS' is
3974          error=01;31:warning=01;35:note=01;36:range1=32:range2=34:locus=01:\
3975          quote=01:path=01;36:fixit-insert=32:fixit-delete=31:\
3976          diff-filename=01:diff-hunk=32:diff-delete=31:diff-insert=32:\
3977          type-diff=01;32
3978     where '01;31' is bold red, '01;35' is bold magenta, '01;36' is bold
3979     cyan, '32' is green, '34' is blue, '01' is bold, and '31' is red.
3980     Setting 'GCC_COLORS' to the empty string disables colors.
3981     Supported capabilities are as follows.
3982
3983     'error='
3984          SGR substring for error: markers.
3985
3986     'warning='
3987          SGR substring for warning: markers.
3988
3989     'note='
3990          SGR substring for note: markers.
3991
3992     'path='
3993          SGR substring for colorizing paths of control-flow events as
3994          printed via '-fdiagnostics-path-format=', such as the
3995          identifiers of individual events and lines indicating
3996          interprocedural calls and returns.
3997
3998     'range1='
3999          SGR substring for first additional range.
4000
4001     'range2='
4002          SGR substring for second additional range.
4003
4004     'locus='
4005          SGR substring for location information, 'file:line' or
4006          'file:line:column' etc.
4007
4008     'quote='
4009          SGR substring for information printed within quotes.
4010
4011     'fixit-insert='
4012          SGR substring for fix-it hints suggesting text to be inserted
4013          or replaced.
4014
4015     'fixit-delete='
4016          SGR substring for fix-it hints suggesting text to be deleted.
4017
4018     'diff-filename='
4019          SGR substring for filename headers within generated patches.
4020
4021     'diff-hunk='
4022          SGR substring for the starts of hunks within generated
4023          patches.
4024
4025     'diff-delete='
4026          SGR substring for deleted lines within generated patches.
4027
4028     'diff-insert='
4029          SGR substring for inserted lines within generated patches.
4030
4031     'type-diff='
4032          SGR substring for highlighting mismatching types within
4033          template arguments in the C++ frontend.
4034
4035'-fdiagnostics-urls[=WHEN]'
4036     Use escape sequences to embed URLs in diagnostics.  For example,
4037     when '-fdiagnostics-show-option' emits text showing the
4038     command-line option controlling a diagnostic, embed a URL for
4039     documentation of that option.
4040
4041     WHEN is 'never', 'always', or 'auto'.  'auto' makes GCC use URL
4042     escape sequences only when the standard error is a terminal, and
4043     when not executing in an emacs shell or any graphical terminal
4044     which is known to be incompatible with this feature, see below.
4045
4046     The default depends on how the compiler has been configured.  It
4047     can be any of the above WHEN options.
4048
4049     GCC can also be configured (via the
4050     '--with-diagnostics-urls=auto-if-env' configure-time option) so
4051     that the default is affected by environment variables.  Under such
4052     a configuration, GCC defaults to using 'auto' if either 'GCC_URLS'
4053     or 'TERM_URLS' environment variables are present and non-empty in
4054     the environment of the compiler, or 'never' if neither are.
4055
4056     However, even with '-fdiagnostics-urls=always' the behavior is
4057     dependent on those environment variables: If 'GCC_URLS' is set to
4058     empty or 'no', do not embed URLs in diagnostics.  If set to 'st',
4059     URLs use ST escape sequences.  If set to 'bel', the default, URLs
4060     use BEL escape sequences.  Any other non-empty value enables the
4061     feature.  If 'GCC_URLS' is not set, use 'TERM_URLS' as a fallback.
4062     Note: ST is an ANSI escape sequence, string terminator 'ESC \', BEL
4063     is an ASCII character, CTRL-G that usually sounds like a beep.
4064
4065     At this time GCC tries to detect also a few terminals that are
4066     known to not implement the URL feature, and have bugs or at least
4067     had bugs in some versions that are still in use, where the URL
4068     escapes are likely to misbehave, i.e.  print garbage on the screen.
4069     That list is currently xfce4-terminal, certain known to be buggy
4070     gnome-terminal versions, the linux console, and mingw.  This check
4071     can be skipped with the '-fdiagnostics-urls=always'.
4072
4073'-fno-diagnostics-show-option'
4074     By default, each diagnostic emitted includes text indicating the
4075     command-line option that directly controls the diagnostic (if such
4076     an option is known to the diagnostic machinery).  Specifying the
4077     '-fno-diagnostics-show-option' flag suppresses that behavior.
4078
4079'-fno-diagnostics-show-caret'
4080     By default, each diagnostic emitted includes the original source
4081     line and a caret '^' indicating the column.  This option suppresses
4082     this information.  The source line is truncated to N characters, if
4083     the '-fmessage-length=n' option is given.  When the output is done
4084     to the terminal, the width is limited to the width given by the
4085     'COLUMNS' environment variable or, if not set, to the terminal
4086     width.
4087
4088'-fno-diagnostics-show-labels'
4089     By default, when printing source code (via
4090     '-fdiagnostics-show-caret'), diagnostics can label ranges of source
4091     code with pertinent information, such as the types of expressions:
4092
4093              printf ("foo %s bar", long_i + long_j);
4094                           ~^       ~~~~~~~~~~~~~~~
4095                            |              |
4096                            char *         long int
4097
4098     This option suppresses the printing of these labels (in the example
4099     above, the vertical bars and the "char *" and "long int" text).
4100
4101'-fno-diagnostics-show-cwe'
4102     Diagnostic messages can optionally have an associated CWE
4103     (https://cwe.mitre.org/index.html) identifier.  GCC itself only
4104     provides such metadata for some of the '-fanalyzer' diagnostics.
4105     GCC plugins may also provide diagnostics with such metadata.  By
4106     default, if this information is present, it will be printed with
4107     the diagnostic.  This option suppresses the printing of this
4108     metadata.
4109
4110'-fno-diagnostics-show-line-numbers'
4111     By default, when printing source code (via
4112     '-fdiagnostics-show-caret'), a left margin is printed, showing line
4113     numbers.  This option suppresses this left margin.
4114
4115'-fdiagnostics-minimum-margin-width=WIDTH'
4116     This option controls the minimum width of the left margin printed
4117     by '-fdiagnostics-show-line-numbers'.  It defaults to 6.
4118
4119'-fdiagnostics-parseable-fixits'
4120     Emit fix-it hints in a machine-parseable format, suitable for
4121     consumption by IDEs.  For each fix-it, a line will be printed after
4122     the relevant diagnostic, starting with the string "fix-it:".  For
4123     example:
4124
4125          fix-it:"test.c":{45:3-45:21}:"gtk_widget_show_all"
4126
4127     The location is expressed as a half-open range, expressed as a
4128     count of bytes, starting at byte 1 for the initial column.  In the
4129     above example, bytes 3 through 20 of line 45 of "test.c" are to be
4130     replaced with the given string:
4131
4132          00000000011111111112222222222
4133          12345678901234567890123456789
4134            gtk_widget_showall (dlg);
4135            ^^^^^^^^^^^^^^^^^^
4136            gtk_widget_show_all
4137
4138     The filename and replacement string escape backslash as "\\", tab
4139     as "\t", newline as "\n", double quotes as "\"", non-printable
4140     characters as octal (e.g.  vertical tab as "\013").
4141
4142     An empty replacement string indicates that the given range is to be
4143     removed.  An empty range (e.g.  "45:3-45:3") indicates that the
4144     string is to be inserted at the given position.
4145
4146'-fdiagnostics-generate-patch'
4147     Print fix-it hints to stderr in unified diff format, after any
4148     diagnostics are printed.  For example:
4149
4150          --- test.c
4151          +++ test.c
4152          @ -42,5 +42,5 @
4153
4154           void show_cb(GtkDialog *dlg)
4155           {
4156          -  gtk_widget_showall(dlg);
4157          +  gtk_widget_show_all(dlg);
4158           }
4159
4160
4161     The diff may or may not be colorized, following the same rules as
4162     for diagnostics (see '-fdiagnostics-color').
4163
4164'-fdiagnostics-show-template-tree'
4165
4166     In the C++ frontend, when printing diagnostics showing mismatching
4167     template types, such as:
4168
4169            could not convert 'std::map<int, std::vector<double> >()'
4170              from 'map<[...],vector<double>>' to 'map<[...],vector<float>>
4171
4172     the '-fdiagnostics-show-template-tree' flag enables printing a
4173     tree-like structure showing the common and differing parts of the
4174     types, such as:
4175
4176            map<
4177              [...],
4178              vector<
4179                [double != float]>>
4180
4181     The parts that differ are highlighted with color ("double" and
4182     "float" in this case).
4183
4184'-fno-elide-type'
4185     By default when the C++ frontend prints diagnostics showing
4186     mismatching template types, common parts of the types are printed
4187     as "[...]"  to simplify the error message.  For example:
4188
4189            could not convert 'std::map<int, std::vector<double> >()'
4190              from 'map<[...],vector<double>>' to 'map<[...],vector<float>>
4191
4192     Specifying the '-fno-elide-type' flag suppresses that behavior.
4193     This flag also affects the output of the
4194     '-fdiagnostics-show-template-tree' flag.
4195
4196'-fdiagnostics-path-format=KIND'
4197     Specify how to print paths of control-flow events for diagnostics
4198     that have such a path associated with them.
4199
4200     KIND is 'none', 'separate-events', or 'inline-events', the default.
4201
4202     'none' means to not print diagnostic paths.
4203
4204     'separate-events' means to print a separate "note" diagnostic for
4205     each event within the diagnostic.  For example:
4206
4207          test.c:29:5: error: passing NULL as argument 1 to 'PyList_Append' which requires a non-NULL parameter
4208          test.c:25:10: note: (1) when 'PyList_New' fails, returning NULL
4209          test.c:27:3: note: (2) when 'i < count'
4210          test.c:29:5: note: (3) when calling 'PyList_Append', passing NULL from (1) as argument 1
4211
4212     'inline-events' means to print the events "inline" within the
4213     source code.  This view attempts to consolidate the events into
4214     runs of sufficiently-close events, printing them as labelled ranges
4215     within the source.
4216
4217     For example, the same events as above might be printed as:
4218
4219            'test': events 1-3
4220              |
4221              |   25 |   list = PyList_New(0);
4222              |      |          ^~~~~~~~~~~~~
4223              |      |          |
4224              |      |          (1) when 'PyList_New' fails, returning NULL
4225              |   26 |
4226              |   27 |   for (i = 0; i < count; i++) {
4227              |      |   ~~~
4228              |      |   |
4229              |      |   (2) when 'i < count'
4230              |   28 |     item = PyLong_FromLong(random());
4231              |   29 |     PyList_Append(list, item);
4232              |      |     ~~~~~~~~~~~~~~~~~~~~~~~~~
4233              |      |     |
4234              |      |     (3) when calling 'PyList_Append', passing NULL from (1) as argument 1
4235              |
4236
4237     Interprocedural control flow is shown by grouping the events by
4238     stack frame, and using indentation to show how stack frames are
4239     nested, pushed, and popped.
4240
4241     For example:
4242
4243            'test': events 1-2
4244              |
4245              |  133 | {
4246              |      | ^
4247              |      | |
4248              |      | (1) entering 'test'
4249              |  134 |   boxed_int *obj = make_boxed_int (i);
4250              |      |                    ~~~~~~~~~~~~~~~~~~
4251              |      |                    |
4252              |      |                    (2) calling 'make_boxed_int'
4253              |
4254              +--> 'make_boxed_int': events 3-4
4255                     |
4256                     |  120 | {
4257                     |      | ^
4258                     |      | |
4259                     |      | (3) entering 'make_boxed_int'
4260                     |  121 |   boxed_int *result = (boxed_int *)wrapped_malloc (sizeof (boxed_int));
4261                     |      |                                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4262                     |      |                                    |
4263                     |      |                                    (4) calling 'wrapped_malloc'
4264                     |
4265                     +--> 'wrapped_malloc': events 5-6
4266                            |
4267                            |    7 | {
4268                            |      | ^
4269                            |      | |
4270                            |      | (5) entering 'wrapped_malloc'
4271                            |    8 |   return malloc (size);
4272                            |      |          ~~~~~~~~~~~~~
4273                            |      |          |
4274                            |      |          (6) calling 'malloc'
4275                            |
4276              <-------------+
4277              |
4278           'test': event 7
4279              |
4280              |  138 |   free_boxed_int (obj);
4281              |      |   ^~~~~~~~~~~~~~~~~~~~
4282              |      |   |
4283              |      |   (7) calling 'free_boxed_int'
4284              |
4285          (etc)
4286
4287'-fdiagnostics-show-path-depths'
4288     This option provides additional information when printing
4289     control-flow paths associated with a diagnostic.
4290
4291     If this is option is provided then the stack depth will be printed
4292     for each run of events within
4293     '-fdiagnostics-path-format=separate-events'.
4294
4295     This is intended for use by GCC developers and plugin developers
4296     when debugging diagnostics that report interprocedural control
4297     flow.
4298
4299'-fno-show-column'
4300     Do not print column numbers in diagnostics.  This may be necessary
4301     if diagnostics are being scanned by a program that does not
4302     understand the column numbers, such as 'dejagnu'.
4303
4304'-fdiagnostics-format=FORMAT'
4305     Select a different format for printing diagnostics.  FORMAT is
4306     'text' or 'json'.  The default is 'text'.
4307
4308     The 'json' format consists of a top-level JSON array containing
4309     JSON objects representing the diagnostics.
4310
4311     The JSON is emitted as one line, without formatting; the examples
4312     below have been formatted for clarity.
4313
4314     Diagnostics can have child diagnostics.  For example, this error
4315     and note:
4316
4317          misleading-indentation.c:15:3: warning: this 'if' clause does not
4318            guard... [-Wmisleading-indentation]
4319             15 |   if (flag)
4320                |   ^~
4321          misleading-indentation.c:17:5: note: ...this statement, but the latter
4322            is misleadingly indented as if it were guarded by the 'if'
4323             17 |     y = 2;
4324                |     ^
4325
4326     might be printed in JSON form (after formatting) like this:
4327
4328          [
4329              {
4330                  "kind": "warning",
4331                  "locations": [
4332                      {
4333                          "caret": {
4334                              "column": 3,
4335                              "file": "misleading-indentation.c",
4336                              "line": 15
4337                          },
4338                          "finish": {
4339                              "column": 4,
4340                              "file": "misleading-indentation.c",
4341                              "line": 15
4342                          }
4343                      }
4344                  ],
4345                  "message": "this \u2018if\u2019 clause does not guard...",
4346                  "option": "-Wmisleading-indentation",
4347                  "option_url": "https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wmisleading-indentation",
4348                  "children": [
4349                      {
4350                          "kind": "note",
4351                          "locations": [
4352                              {
4353                                  "caret": {
4354                                      "column": 5,
4355                                      "file": "misleading-indentation.c",
4356                                      "line": 17
4357                                  }
4358                              }
4359                          ],
4360                          "message": "...this statement, but the latter is ..."
4361                      }
4362                  ]
4363              },
4364              ...
4365          ]
4366
4367     where the 'note' is a child of the 'warning'.
4368
4369     A diagnostic has a 'kind'.  If this is 'warning', then there is an
4370     'option' key describing the command-line option controlling the
4371     warning.
4372
4373     A diagnostic can contain zero or more locations.  Each location has
4374     up to three positions within it: a 'caret' position and optional
4375     'start' and 'finish' positions.  A location can also have an
4376     optional 'label' string.  For example, this error:
4377
4378          bad-binary-ops.c:64:23: error: invalid operands to binary + (have 'S' {aka
4379             'struct s'} and 'T' {aka 'struct t'})
4380             64 |   return callee_4a () + callee_4b ();
4381                |          ~~~~~~~~~~~~ ^ ~~~~~~~~~~~~
4382                |          |              |
4383                |          |              T {aka struct t}
4384                |          S {aka struct s}
4385
4386     has three locations.  Its primary location is at the "+" token at
4387     column 23.  It has two secondary locations, describing the left and
4388     right-hand sides of the expression, which have labels.  It might be
4389     printed in JSON form as:
4390
4391              {
4392                  "children": [],
4393                  "kind": "error",
4394                  "locations": [
4395                      {
4396                          "caret": {
4397                              "column": 23, "file": "bad-binary-ops.c", "line": 64
4398                          }
4399                      },
4400                      {
4401                          "caret": {
4402                              "column": 10, "file": "bad-binary-ops.c", "line": 64
4403                          },
4404                          "finish": {
4405                              "column": 21, "file": "bad-binary-ops.c", "line": 64
4406                          },
4407                          "label": "S {aka struct s}"
4408                      },
4409                      {
4410                          "caret": {
4411                              "column": 25, "file": "bad-binary-ops.c", "line": 64
4412                          },
4413                          "finish": {
4414                              "column": 36, "file": "bad-binary-ops.c", "line": 64
4415                          },
4416                          "label": "T {aka struct t}"
4417                      }
4418                  ],
4419                  "message": "invalid operands to binary + ..."
4420              }
4421
4422     If a diagnostic contains fix-it hints, it has a 'fixits' array,
4423     consisting of half-open intervals, similar to the output of
4424     '-fdiagnostics-parseable-fixits'.  For example, this diagnostic
4425     with a replacement fix-it hint:
4426
4427          demo.c:8:15: error: 'struct s' has no member named 'colour'; did you
4428            mean 'color'?
4429              8 |   return ptr->colour;
4430                |               ^~~~~~
4431                |               color
4432
4433     might be printed in JSON form as:
4434
4435              {
4436                  "children": [],
4437                  "fixits": [
4438                      {
4439                          "next": {
4440                              "column": 21,
4441                              "file": "demo.c",
4442                              "line": 8
4443                          },
4444                          "start": {
4445                              "column": 15,
4446                              "file": "demo.c",
4447                              "line": 8
4448                          },
4449                          "string": "color"
4450                      }
4451                  ],
4452                  "kind": "error",
4453                  "locations": [
4454                      {
4455                          "caret": {
4456                              "column": 15,
4457                              "file": "demo.c",
4458                              "line": 8
4459                          },
4460                          "finish": {
4461                              "column": 20,
4462                              "file": "demo.c",
4463                              "line": 8
4464                          }
4465                      }
4466                  ],
4467                  "message": "\u2018struct s\u2019 has no member named ..."
4468              }
4469
4470     where the fix-it hint suggests replacing the text from 'start' up
4471     to but not including 'next' with 'string''s value.  Deletions are
4472     expressed via an empty value for 'string', insertions by having
4473     'start' equal 'next'.
4474
4475     If the diagnostic has a path of control-flow events associated with
4476     it, it has a 'path' array of objects representing the events.  Each
4477     event object has a 'description' string, a 'location' object, along
4478     with a 'function' string and a 'depth' number for representing
4479     interprocedural paths.  The 'function' represents the current
4480     function at that event, and the 'depth' represents the stack depth
4481     relative to some baseline: the higher, the more frames are within
4482     the stack.
4483
4484     For example, the intraprocedural example shown for
4485     '-fdiagnostics-path-format=' might have this JSON for its path:
4486
4487              "path": [
4488                  {
4489                      "depth": 0,
4490                      "description": "when 'PyList_New' fails, returning NULL",
4491                      "function": "test",
4492                      "location": {
4493                          "column": 10,
4494                          "file": "test.c",
4495                          "line": 25
4496                      }
4497                  },
4498                  {
4499                      "depth": 0,
4500                      "description": "when 'i < count'",
4501                      "function": "test",
4502                      "location": {
4503                          "column": 3,
4504                          "file": "test.c",
4505                          "line": 27
4506                      }
4507                  },
4508                  {
4509                      "depth": 0,
4510                      "description": "when calling 'PyList_Append', passing NULL from (1) as argument 1",
4511                      "function": "test",
4512                      "location": {
4513                          "column": 5,
4514                          "file": "test.c",
4515                          "line": 29
4516                      }
4517                  }
4518              ]
4519
4520
4521File: gcc.info,  Node: Warning Options,  Next: Static Analyzer Options,  Prev: Diagnostic Message Formatting Options,  Up: Invoking GCC
4522
45233.8 Options to Request or Suppress Warnings
4524===========================================
4525
4526Warnings are diagnostic messages that report constructions that are not
4527inherently erroneous but that are risky or suggest there may have been
4528an error.
4529
4530 The following language-independent options do not enable specific
4531warnings but control the kinds of diagnostics produced by GCC.
4532
4533'-fsyntax-only'
4534     Check the code for syntax errors, but don't do anything beyond
4535     that.
4536
4537'-fmax-errors=N'
4538     Limits the maximum number of error messages to N, at which point
4539     GCC bails out rather than attempting to continue processing the
4540     source code.  If N is 0 (the default), there is no limit on the
4541     number of error messages produced.  If '-Wfatal-errors' is also
4542     specified, then '-Wfatal-errors' takes precedence over this option.
4543
4544'-w'
4545     Inhibit all warning messages.
4546
4547'-Werror'
4548     Make all warnings into errors.
4549
4550'-Werror='
4551     Make the specified warning into an error.  The specifier for a
4552     warning is appended; for example '-Werror=switch' turns the
4553     warnings controlled by '-Wswitch' into errors.  This switch takes a
4554     negative form, to be used to negate '-Werror' for specific
4555     warnings; for example '-Wno-error=switch' makes '-Wswitch' warnings
4556     not be errors, even when '-Werror' is in effect.
4557
4558     The warning message for each controllable warning includes the
4559     option that controls the warning.  That option can then be used
4560     with '-Werror=' and '-Wno-error=' as described above.  (Printing of
4561     the option in the warning message can be disabled using the
4562     '-fno-diagnostics-show-option' flag.)
4563
4564     Note that specifying '-Werror='FOO automatically implies '-W'FOO.
4565     However, '-Wno-error='FOO does not imply anything.
4566
4567'-Wfatal-errors'
4568     This option causes the compiler to abort compilation on the first
4569     error occurred rather than trying to keep going and printing
4570     further error messages.
4571
4572 You can request many specific warnings with options beginning with
4573'-W', for example '-Wimplicit' to request warnings on implicit
4574declarations.  Each of these specific warning options also has a
4575negative form beginning '-Wno-' to turn off warnings; for example,
4576'-Wno-implicit'.  This manual lists only one of the two forms, whichever
4577is not the default.  For further language-specific options also refer to
4578*note C++ Dialect Options:: and *note Objective-C and Objective-C++
4579Dialect Options::.  Additional warnings can be produced by enabling the
4580static analyzer; *Note Static Analyzer Options::.
4581
4582 Some options, such as '-Wall' and '-Wextra', turn on other options,
4583such as '-Wunused', which may turn on further options, such as
4584'-Wunused-value'.  The combined effect of positive and negative forms is
4585that more specific options have priority over less specific ones,
4586independently of their position in the command-line.  For options of the
4587same specificity, the last one takes effect.  Options enabled or
4588disabled via pragmas (*note Diagnostic Pragmas::) take effect as if they
4589appeared at the end of the command-line.
4590
4591 When an unrecognized warning option is requested (e.g.,
4592'-Wunknown-warning'), GCC emits a diagnostic stating that the option is
4593not recognized.  However, if the '-Wno-' form is used, the behavior is
4594slightly different: no diagnostic is produced for '-Wno-unknown-warning'
4595unless other diagnostics are being produced.  This allows the use of new
4596'-Wno-' options with old compilers, but if something goes wrong, the
4597compiler warns that an unrecognized option is present.
4598
4599 The effectiveness of some warnings depends on optimizations also being
4600enabled.  For example '-Wsuggest-final-types' is more effective with
4601link-time optimization and '-Wmaybe-uninitialized' does not warn at all
4602unless optimization is enabled.
4603
4604'-Wpedantic'
4605'-pedantic'
4606     Issue all the warnings demanded by strict ISO C and ISO C++; reject
4607     all programs that use forbidden extensions, and some other programs
4608     that do not follow ISO C and ISO C++.  For ISO C, follows the
4609     version of the ISO C standard specified by any '-std' option used.
4610
4611     Valid ISO C and ISO C++ programs should compile properly with or
4612     without this option (though a rare few require '-ansi' or a '-std'
4613     option specifying the required version of ISO C).  However, without
4614     this option, certain GNU extensions and traditional C and C++
4615     features are supported as well.  With this option, they are
4616     rejected.
4617
4618     '-Wpedantic' does not cause warning messages for use of the
4619     alternate keywords whose names begin and end with '__'.  This
4620     alternate format can also be used to disable warnings for non-ISO
4621     '__intN' types, i.e.  '__intN__'.  Pedantic warnings are also
4622     disabled in the expression that follows '__extension__'.  However,
4623     only system header files should use these escape routes;
4624     application programs should avoid them.  *Note Alternate
4625     Keywords::.
4626
4627     Some users try to use '-Wpedantic' to check programs for strict ISO
4628     C conformance.  They soon find that it does not do quite what they
4629     want: it finds some non-ISO practices, but not all--only those for
4630     which ISO C _requires_ a diagnostic, and some others for which
4631     diagnostics have been added.
4632
4633     A feature to report any failure to conform to ISO C might be useful
4634     in some instances, but would require considerable additional work
4635     and would be quite different from '-Wpedantic'.  We don't have
4636     plans to support such a feature in the near future.
4637
4638     Where the standard specified with '-std' represents a GNU extended
4639     dialect of C, such as 'gnu90' or 'gnu99', there is a corresponding
4640     "base standard", the version of ISO C on which the GNU extended
4641     dialect is based.  Warnings from '-Wpedantic' are given where they
4642     are required by the base standard.  (It does not make sense for
4643     such warnings to be given only for features not in the specified
4644     GNU C dialect, since by definition the GNU dialects of C include
4645     all features the compiler supports with the given option, and there
4646     would be nothing to warn about.)
4647
4648'-pedantic-errors'
4649     Give an error whenever the "base standard" (see '-Wpedantic')
4650     requires a diagnostic, in some cases where there is undefined
4651     behavior at compile-time and in some other cases that do not
4652     prevent compilation of programs that are valid according to the
4653     standard.  This is not equivalent to '-Werror=pedantic', since
4654     there are errors enabled by this option and not enabled by the
4655     latter and vice versa.
4656
4657'-Wall'
4658     This enables all the warnings about constructions that some users
4659     consider questionable, and that are easy to avoid (or modify to
4660     prevent the warning), even in conjunction with macros.  This also
4661     enables some language-specific warnings described in *note C++
4662     Dialect Options:: and *note Objective-C and Objective-C++ Dialect
4663     Options::.
4664
4665     '-Wall' turns on the following warning flags:
4666
4667          -Waddress
4668          -Warray-bounds=1 (only with -O2)
4669          -Wbool-compare
4670          -Wbool-operation
4671          -Wc++11-compat  -Wc++14-compat
4672          -Wcatch-value (C++ and Objective-C++ only)
4673          -Wchar-subscripts
4674          -Wcomment
4675          -Wduplicate-decl-specifier (C and Objective-C only)
4676          -Wenum-compare (in C/ObjC; this is on by default in C++)
4677          -Wenum-conversion in C/ObjC;
4678          -Wformat
4679          -Wformat-overflow
4680          -Wformat-truncation
4681          -Wint-in-bool-context
4682          -Wimplicit (C and Objective-C only)
4683          -Wimplicit-int (C and Objective-C only)
4684          -Wimplicit-function-declaration (C and Objective-C only)
4685          -Winit-self (only for C++)
4686          -Wlogical-not-parentheses
4687          -Wmain (only for C/ObjC and unless -ffreestanding)
4688          -Wmaybe-uninitialized
4689          -Wmemset-elt-size
4690          -Wmemset-transposed-args
4691          -Wmisleading-indentation (only for C/C++)
4692          -Wmissing-attributes
4693          -Wmissing-braces (only for C/ObjC)
4694          -Wmultistatement-macros
4695          -Wnarrowing (only for C++)
4696          -Wnonnull
4697          -Wnonnull-compare
4698          -Wopenmp-simd
4699          -Wparentheses
4700          -Wpessimizing-move (only for C++)
4701          -Wpointer-sign
4702          -Wreorder
4703          -Wrestrict
4704          -Wreturn-type
4705          -Wsequence-point
4706          -Wsign-compare (only in C++)
4707          -Wsizeof-pointer-div
4708          -Wsizeof-pointer-memaccess
4709          -Wstrict-aliasing
4710          -Wstrict-overflow=1
4711          -Wswitch
4712          -Wtautological-compare
4713          -Wtrigraphs
4714          -Wuninitialized
4715          -Wunknown-pragmas
4716          -Wunused-function
4717          -Wunused-label
4718          -Wunused-value
4719          -Wunused-variable
4720          -Wvolatile-register-var
4721          -Wzero-length-bounds
4722
4723     Note that some warning flags are not implied by '-Wall'.  Some of
4724     them warn about constructions that users generally do not consider
4725     questionable, but which occasionally you might wish to check for;
4726     others warn about constructions that are necessary or hard to avoid
4727     in some cases, and there is no simple way to modify the code to
4728     suppress the warning.  Some of them are enabled by '-Wextra' but
4729     many of them must be enabled individually.
4730
4731'-Wextra'
4732     This enables some extra warning flags that are not enabled by
4733     '-Wall'.  (This option used to be called '-W'.  The older name is
4734     still supported, but the newer name is more descriptive.)
4735
4736          -Wclobbered
4737          -Wcast-function-type
4738          -Wdeprecated-copy (C++ only)
4739          -Wempty-body
4740          -Wignored-qualifiers
4741          -Wimplicit-fallthrough=3
4742          -Wmissing-field-initializers
4743          -Wmissing-parameter-type (C only)
4744          -Wold-style-declaration (C only)
4745          -Woverride-init
4746          -Wsign-compare (C only)
4747          -Wstring-compare
4748          -Wredundant-move (only for C++)
4749          -Wtype-limits
4750          -Wuninitialized
4751          -Wshift-negative-value (in C++03 and in C99 and newer)
4752          -Wunused-parameter (only with -Wunused or -Wall)
4753          -Wunused-but-set-parameter (only with -Wunused or -Wall)
4754
4755     The option '-Wextra' also prints warning messages for the following
4756     cases:
4757
4758        * A pointer is compared against integer zero with '<', '<=',
4759          '>', or '>='.
4760
4761        * (C++ only) An enumerator and a non-enumerator both appear in a
4762          conditional expression.
4763
4764        * (C++ only) Ambiguous virtual bases.
4765
4766        * (C++ only) Subscripting an array that has been declared
4767          'register'.
4768
4769        * (C++ only) Taking the address of a variable that has been
4770          declared 'register'.
4771
4772        * (C++ only) A base class is not initialized in the copy
4773          constructor of a derived class.
4774
4775'-Wabi (C, Objective-C, C++ and Objective-C++ only)'
4776
4777     Warn about code affected by ABI changes.  This includes code that
4778     may not be compatible with the vendor-neutral C++ ABI as well as
4779     the psABI for the particular target.
4780
4781     Since G++ now defaults to updating the ABI with each major release,
4782     normally '-Wabi' warns only about C++ ABI compatibility problems if
4783     there is a check added later in a release series for an ABI issue
4784     discovered since the initial release.  '-Wabi' warns about more
4785     things if an older ABI version is selected (with
4786     '-fabi-version=N').
4787
4788     '-Wabi' can also be used with an explicit version number to warn
4789     about C++ ABI compatibility with a particular '-fabi-version'
4790     level, e.g. '-Wabi=2' to warn about changes relative to
4791     '-fabi-version=2'.
4792
4793     If an explicit version number is provided and
4794     '-fabi-compat-version' is not specified, the version number from
4795     this option is used for compatibility aliases.  If no explicit
4796     version number is provided with this option, but
4797     '-fabi-compat-version' is specified, that version number is used
4798     for C++ ABI warnings.
4799
4800     Although an effort has been made to warn about all such cases,
4801     there are probably some cases that are not warned about, even
4802     though G++ is generating incompatible code.  There may also be
4803     cases where warnings are emitted even though the code that is
4804     generated is compatible.
4805
4806     You should rewrite your code to avoid these warnings if you are
4807     concerned about the fact that code generated by G++ may not be
4808     binary compatible with code generated by other compilers.
4809
4810     Known incompatibilities in '-fabi-version=2' (which was the default
4811     from GCC 3.4 to 4.9) include:
4812
4813        * A template with a non-type template parameter of reference
4814          type was mangled incorrectly:
4815               extern int N;
4816               template <int &> struct S {};
4817               void n (S<N>) {2}
4818
4819          This was fixed in '-fabi-version=3'.
4820
4821        * SIMD vector types declared using '__attribute ((vector_size))'
4822          were mangled in a non-standard way that does not allow for
4823          overloading of functions taking vectors of different sizes.
4824
4825          The mangling was changed in '-fabi-version=4'.
4826
4827        * '__attribute ((const))' and 'noreturn' were mangled as type
4828          qualifiers, and 'decltype' of a plain declaration was folded
4829          away.
4830
4831          These mangling issues were fixed in '-fabi-version=5'.
4832
4833        * Scoped enumerators passed as arguments to a variadic function
4834          are promoted like unscoped enumerators, causing 'va_arg' to
4835          complain.  On most targets this does not actually affect the
4836          parameter passing ABI, as there is no way to pass an argument
4837          smaller than 'int'.
4838
4839          Also, the ABI changed the mangling of template argument packs,
4840          'const_cast', 'static_cast', prefix increment/decrement, and a
4841          class scope function used as a template argument.
4842
4843          These issues were corrected in '-fabi-version=6'.
4844
4845        * Lambdas in default argument scope were mangled incorrectly,
4846          and the ABI changed the mangling of 'nullptr_t'.
4847
4848          These issues were corrected in '-fabi-version=7'.
4849
4850        * When mangling a function type with function-cv-qualifiers, the
4851          un-qualified function type was incorrectly treated as a
4852          substitution candidate.
4853
4854          This was fixed in '-fabi-version=8', the default for GCC 5.1.
4855
4856        * 'decltype(nullptr)' incorrectly had an alignment of 1, leading
4857          to unaligned accesses.  Note that this did not affect the ABI
4858          of a function with a 'nullptr_t' parameter, as parameters have
4859          a minimum alignment.
4860
4861          This was fixed in '-fabi-version=9', the default for GCC 5.2.
4862
4863        * Target-specific attributes that affect the identity of a type,
4864          such as ia32 calling conventions on a function type (stdcall,
4865          regparm, etc.), did not affect the mangled name, leading to
4866          name collisions when function pointers were used as template
4867          arguments.
4868
4869          This was fixed in '-fabi-version=10', the default for GCC 6.1.
4870
4871     This option also enables warnings about psABI-related changes.  The
4872     known psABI changes at this point include:
4873
4874        * For SysV/x86-64, unions with 'long double' members are passed
4875          in memory as specified in psABI. Prior to GCC 4.4, this was
4876          not the case.  For example:
4877
4878               union U {
4879                 long double ld;
4880                 int i;
4881               };
4882
4883          'union U' is now always passed in memory.
4884
4885'-Wchar-subscripts'
4886     Warn if an array subscript has type 'char'.  This is a common cause
4887     of error, as programmers often forget that this type is signed on
4888     some machines.  This warning is enabled by '-Wall'.
4889
4890'-Wno-coverage-mismatch'
4891     Warn if feedback profiles do not match when using the
4892     '-fprofile-use' option.  If a source file is changed between
4893     compiling with '-fprofile-generate' and with '-fprofile-use', the
4894     files with the profile feedback can fail to match the source file
4895     and GCC cannot use the profile feedback information.  By default,
4896     this warning is enabled and is treated as an error.
4897     '-Wno-coverage-mismatch' can be used to disable the warning or
4898     '-Wno-error=coverage-mismatch' can be used to disable the error.
4899     Disabling the error for this warning can result in poorly optimized
4900     code and is useful only in the case of very minor changes such as
4901     bug fixes to an existing code-base.  Completely disabling the
4902     warning is not recommended.
4903
4904'-Wno-cpp'
4905     (C, Objective-C, C++, Objective-C++ and Fortran only) Suppress
4906     warning messages emitted by '#warning' directives.
4907
4908'-Wdouble-promotion (C, C++, Objective-C and Objective-C++ only)'
4909     Give a warning when a value of type 'float' is implicitly promoted
4910     to 'double'.  CPUs with a 32-bit "single-precision" floating-point
4911     unit implement 'float' in hardware, but emulate 'double' in
4912     software.  On such a machine, doing computations using 'double'
4913     values is much more expensive because of the overhead required for
4914     software emulation.
4915
4916     It is easy to accidentally do computations with 'double' because
4917     floating-point literals are implicitly of type 'double'.  For
4918     example, in:
4919          float area(float radius)
4920          {
4921             return 3.14159 * radius * radius;
4922          }
4923     the compiler performs the entire computation with 'double' because
4924     the floating-point literal is a 'double'.
4925
4926'-Wduplicate-decl-specifier (C and Objective-C only)'
4927     Warn if a declaration has duplicate 'const', 'volatile', 'restrict'
4928     or '_Atomic' specifier.  This warning is enabled by '-Wall'.
4929
4930'-Wformat'
4931'-Wformat=N'
4932     Check calls to 'printf' and 'scanf', etc., to make sure that the
4933     arguments supplied have types appropriate to the format string
4934     specified, and that the conversions specified in the format string
4935     make sense.  This includes standard functions, and others specified
4936     by format attributes (*note Function Attributes::), in the
4937     'printf', 'scanf', 'strftime' and 'strfmon' (an X/Open extension,
4938     not in the C standard) families (or other target-specific
4939     families).  Which functions are checked without format attributes
4940     having been specified depends on the standard version selected, and
4941     such checks of functions without the attribute specified are
4942     disabled by '-ffreestanding' or '-fno-builtin'.
4943
4944     The formats are checked against the format features supported by
4945     GNU libc version 2.2.  These include all ISO C90 and C99 features,
4946     as well as features from the Single Unix Specification and some BSD
4947     and GNU extensions.  Other library implementations may not support
4948     all these features; GCC does not support warning about features
4949     that go beyond a particular library's limitations.  However, if
4950     '-Wpedantic' is used with '-Wformat', warnings are given about
4951     format features not in the selected standard version (but not for
4952     'strfmon' formats, since those are not in any version of the C
4953     standard).  *Note Options Controlling C Dialect: C Dialect Options.
4954
4955     '-Wformat=1'
4956     '-Wformat'
4957          Option '-Wformat' is equivalent to '-Wformat=1', and
4958          '-Wno-format' is equivalent to '-Wformat=0'.  Since '-Wformat'
4959          also checks for null format arguments for several functions,
4960          '-Wformat' also implies '-Wnonnull'.  Some aspects of this
4961          level of format checking can be disabled by the options:
4962          '-Wno-format-contains-nul', '-Wno-format-extra-args', and
4963          '-Wno-format-zero-length'.  '-Wformat' is enabled by '-Wall'.
4964
4965     '-Wformat=2'
4966          Enable '-Wformat' plus additional format checks.  Currently
4967          equivalent to '-Wformat -Wformat-nonliteral -Wformat-security
4968          -Wformat-y2k'.
4969
4970'-Wno-format-contains-nul'
4971     If '-Wformat' is specified, do not warn about format strings that
4972     contain NUL bytes.
4973
4974'-Wno-format-extra-args'
4975     If '-Wformat' is specified, do not warn about excess arguments to a
4976     'printf' or 'scanf' format function.  The C standard specifies that
4977     such arguments are ignored.
4978
4979     Where the unused arguments lie between used arguments that are
4980     specified with '$' operand number specifications, normally warnings
4981     are still given, since the implementation could not know what type
4982     to pass to 'va_arg' to skip the unused arguments.  However, in the
4983     case of 'scanf' formats, this option suppresses the warning if the
4984     unused arguments are all pointers, since the Single Unix
4985     Specification says that such unused arguments are allowed.
4986
4987'-Wformat-overflow'
4988'-Wformat-overflow=LEVEL'
4989     Warn about calls to formatted input/output functions such as
4990     'sprintf' and 'vsprintf' that might overflow the destination
4991     buffer.  When the exact number of bytes written by a format
4992     directive cannot be determined at compile-time it is estimated
4993     based on heuristics that depend on the LEVEL argument and on
4994     optimization.  While enabling optimization will in most cases
4995     improve the accuracy of the warning, it may also result in false
4996     positives.
4997
4998     '-Wformat-overflow'
4999     '-Wformat-overflow=1'
5000          Level 1 of '-Wformat-overflow' enabled by '-Wformat' employs a
5001          conservative approach that warns only about calls that most
5002          likely overflow the buffer.  At this level, numeric arguments
5003          to format directives with unknown values are assumed to have
5004          the value of one, and strings of unknown length to be empty.
5005          Numeric arguments that are known to be bounded to a subrange
5006          of their type, or string arguments whose output is bounded
5007          either by their directive's precision or by a finite set of
5008          string literals, are assumed to take on the value within the
5009          range that results in the most bytes on output.  For example,
5010          the call to 'sprintf' below is diagnosed because even with
5011          both A and B equal to zero, the terminating NUL character
5012          (''\0'') appended by the function to the destination buffer
5013          will be written past its end.  Increasing the size of the
5014          buffer by a single byte is sufficient to avoid the warning,
5015          though it may not be sufficient to avoid the overflow.
5016
5017               void f (int a, int b)
5018               {
5019                 char buf [13];
5020                 sprintf (buf, "a = %i, b = %i\n", a, b);
5021               }
5022
5023     '-Wformat-overflow=2'
5024          Level 2 warns also about calls that might overflow the
5025          destination buffer given an argument of sufficient length or
5026          magnitude.  At level 2, unknown numeric arguments are assumed
5027          to have the minimum representable value for signed types with
5028          a precision greater than 1, and the maximum representable
5029          value otherwise.  Unknown string arguments whose length cannot
5030          be assumed to be bounded either by the directive's precision,
5031          or by a finite set of string literals they may evaluate to, or
5032          the character array they may point to, are assumed to be 1
5033          character long.
5034
5035          At level 2, the call in the example above is again diagnosed,
5036          but this time because with A equal to a 32-bit 'INT_MIN' the
5037          first '%i' directive will write some of its digits beyond the
5038          end of the destination buffer.  To make the call safe
5039          regardless of the values of the two variables, the size of the
5040          destination buffer must be increased to at least 34 bytes.
5041          GCC includes the minimum size of the buffer in an
5042          informational note following the warning.
5043
5044          An alternative to increasing the size of the destination
5045          buffer is to constrain the range of formatted values.  The
5046          maximum length of string arguments can be bounded by
5047          specifying the precision in the format directive.  When
5048          numeric arguments of format directives can be assumed to be
5049          bounded by less than the precision of their type, choosing an
5050          appropriate length modifier to the format specifier will
5051          reduce the required buffer size.  For example, if A and B in
5052          the example above can be assumed to be within the precision of
5053          the 'short int' type then using either the '%hi' format
5054          directive or casting the argument to 'short' reduces the
5055          maximum required size of the buffer to 24 bytes.
5056
5057               void f (int a, int b)
5058               {
5059                 char buf [23];
5060                 sprintf (buf, "a = %hi, b = %i\n", a, (short)b);
5061               }
5062
5063'-Wno-format-zero-length'
5064     If '-Wformat' is specified, do not warn about zero-length formats.
5065     The C standard specifies that zero-length formats are allowed.
5066
5067'-Wformat-nonliteral'
5068     If '-Wformat' is specified, also warn if the format string is not a
5069     string literal and so cannot be checked, unless the format function
5070     takes its format arguments as a 'va_list'.
5071
5072'-Wformat-security'
5073     If '-Wformat' is specified, also warn about uses of format
5074     functions that represent possible security problems.  At present,
5075     this warns about calls to 'printf' and 'scanf' functions where the
5076     format string is not a string literal and there are no format
5077     arguments, as in 'printf (foo);'.  This may be a security hole if
5078     the format string came from untrusted input and contains '%n'.
5079     (This is currently a subset of what '-Wformat-nonliteral' warns
5080     about, but in future warnings may be added to '-Wformat-security'
5081     that are not included in '-Wformat-nonliteral'.)
5082
5083'-Wformat-signedness'
5084     If '-Wformat' is specified, also warn if the format string requires
5085     an unsigned argument and the argument is signed and vice versa.
5086
5087'-Wformat-truncation'
5088'-Wformat-truncation=LEVEL'
5089     Warn about calls to formatted input/output functions such as
5090     'snprintf' and 'vsnprintf' that might result in output truncation.
5091     When the exact number of bytes written by a format directive cannot
5092     be determined at compile-time it is estimated based on heuristics
5093     that depend on the LEVEL argument and on optimization.  While
5094     enabling optimization will in most cases improve the accuracy of
5095     the warning, it may also result in false positives.  Except as
5096     noted otherwise, the option uses the same logic
5097     '-Wformat-overflow'.
5098
5099     '-Wformat-truncation'
5100     '-Wformat-truncation=1'
5101          Level 1 of '-Wformat-truncation' enabled by '-Wformat' employs
5102          a conservative approach that warns only about calls to bounded
5103          functions whose return value is unused and that will most
5104          likely result in output truncation.
5105
5106     '-Wformat-truncation=2'
5107          Level 2 warns also about calls to bounded functions whose
5108          return value is used and that might result in truncation given
5109          an argument of sufficient length or magnitude.
5110
5111'-Wformat-y2k'
5112     If '-Wformat' is specified, also warn about 'strftime' formats that
5113     may yield only a two-digit year.
5114
5115'-Wnonnull'
5116     Warn about passing a null pointer for arguments marked as requiring
5117     a non-null value by the 'nonnull' function attribute.
5118
5119     '-Wnonnull' is included in '-Wall' and '-Wformat'.  It can be
5120     disabled with the '-Wno-nonnull' option.
5121
5122'-Wnonnull-compare'
5123     Warn when comparing an argument marked with the 'nonnull' function
5124     attribute against null inside the function.
5125
5126     '-Wnonnull-compare' is included in '-Wall'.  It can be disabled
5127     with the '-Wno-nonnull-compare' option.
5128
5129'-Wnull-dereference'
5130     Warn if the compiler detects paths that trigger erroneous or
5131     undefined behavior due to dereferencing a null pointer.  This
5132     option is only active when '-fdelete-null-pointer-checks' is
5133     active, which is enabled by optimizations in most targets.  The
5134     precision of the warnings depends on the optimization options used.
5135
5136'-Winit-self (C, C++, Objective-C and Objective-C++ only)'
5137     Warn about uninitialized variables that are initialized with
5138     themselves.  Note this option can only be used with the
5139     '-Wuninitialized' option.
5140
5141     For example, GCC warns about 'i' being uninitialized in the
5142     following snippet only when '-Winit-self' has been specified:
5143          int f()
5144          {
5145            int i = i;
5146            return i;
5147          }
5148
5149     This warning is enabled by '-Wall' in C++.
5150
5151'-Wno-implicit-int (C and Objective-C only)'
5152     This option controls warnings when a declaration does not specify a
5153     type.  This warning is enabled by default in C99 and later dialects
5154     of C, and also by '-Wall'.
5155
5156'-Wno-implicit-function-declaration (C and Objective-C only)'
5157     This option controls warnings when a function is used before being
5158     declared.  This warning is enabled by default in C99 and later
5159     dialects of C, and also by '-Wall'.  The warning is made into an
5160     error by '-pedantic-errors'.
5161
5162'-Wimplicit (C and Objective-C only)'
5163     Same as '-Wimplicit-int' and '-Wimplicit-function-declaration'.
5164     This warning is enabled by '-Wall'.
5165
5166'-Wimplicit-fallthrough'
5167     '-Wimplicit-fallthrough' is the same as '-Wimplicit-fallthrough=3'
5168     and '-Wno-implicit-fallthrough' is the same as
5169     '-Wimplicit-fallthrough=0'.
5170
5171'-Wimplicit-fallthrough=N'
5172     Warn when a switch case falls through.  For example:
5173
5174          switch (cond)
5175            {
5176            case 1:
5177              a = 1;
5178              break;
5179            case 2:
5180              a = 2;
5181            case 3:
5182              a = 3;
5183              break;
5184            }
5185
5186     This warning does not warn when the last statement of a case cannot
5187     fall through, e.g.  when there is a return statement or a call to
5188     function declared with the noreturn attribute.
5189     '-Wimplicit-fallthrough=' also takes into account control flow
5190     statements, such as ifs, and only warns when appropriate.  E.g.
5191
5192          switch (cond)
5193            {
5194            case 1:
5195              if (i > 3) {
5196                bar (5);
5197                break;
5198              } else if (i < 1) {
5199                bar (0);
5200              } else
5201                return;
5202            default:
5203              ...
5204            }
5205
5206     Since there are occasions where a switch case fall through is
5207     desirable, GCC provides an attribute, '__attribute__
5208     ((fallthrough))', that is to be used along with a null statement to
5209     suppress this warning that would normally occur:
5210
5211          switch (cond)
5212            {
5213            case 1:
5214              bar (0);
5215              __attribute__ ((fallthrough));
5216            default:
5217              ...
5218            }
5219
5220     C++17 provides a standard way to suppress the
5221     '-Wimplicit-fallthrough' warning using '[[fallthrough]];' instead
5222     of the GNU attribute.  In C++11 or C++14 users can use
5223     '[[gnu::fallthrough]];', which is a GNU extension.  Instead of
5224     these attributes, it is also possible to add a fallthrough comment
5225     to silence the warning.  The whole body of the C or C++ style
5226     comment should match the given regular expressions listed below.
5227     The option argument N specifies what kind of comments are accepted:
5228
5229        * '-Wimplicit-fallthrough=0' disables the warning altogether.
5230
5231        * '-Wimplicit-fallthrough=1' matches '.*' regular expression,
5232          any comment is used as fallthrough comment.
5233
5234        * '-Wimplicit-fallthrough=2' case insensitively matches
5235          '.*falls?[ \t-]*thr(ough|u).*' regular expression.
5236
5237        * '-Wimplicit-fallthrough=3' case sensitively matches one of the
5238          following regular expressions:
5239
5240             * '-fallthrough'
5241
5242             * '@fallthrough@'
5243
5244             * 'lint -fallthrough[ \t]*'
5245
5246             * '[ \t.!]*(ELSE,? |INTENTIONAL(LY)? )?
5247               FALL(S | |-)?THR(OUGH|U)[ \t.!]*(-[^\n\r]*)?'
5248
5249             * '[ \t.!]*(Else,? |Intentional(ly)? )?
5250               Fall((s | |-)[Tt]|t)hr(ough|u)[ \t.!]*(-[^\n\r]*)?'
5251
5252             * '[ \t.!]*([Ee]lse,? |[Ii]ntentional(ly)? )?
5253               fall(s | |-)?thr(ough|u)[ \t.!]*(-[^\n\r]*)?'
5254
5255        * '-Wimplicit-fallthrough=4' case sensitively matches one of the
5256          following regular expressions:
5257
5258             * '-fallthrough'
5259
5260             * '@fallthrough@'
5261
5262             * 'lint -fallthrough[ \t]*'
5263
5264             * '[ \t]*FALLTHR(OUGH|U)[ \t]*'
5265
5266        * '-Wimplicit-fallthrough=5' doesn't recognize any comments as
5267          fallthrough comments, only attributes disable the warning.
5268
5269     The comment needs to be followed after optional whitespace and
5270     other comments by 'case' or 'default' keywords or by a user label
5271     that precedes some 'case' or 'default' label.
5272
5273          switch (cond)
5274            {
5275            case 1:
5276              bar (0);
5277              /* FALLTHRU */
5278            default:
5279              ...
5280            }
5281
5282     The '-Wimplicit-fallthrough=3' warning is enabled by '-Wextra'.
5283
5284'-Wno-if-not-aligned (C, C++, Objective-C and Objective-C++ only)'
5285     Control if warnings triggered by the 'warn_if_not_aligned'
5286     attribute should be issued.  These warnings are enabled by default.
5287
5288'-Wignored-qualifiers (C and C++ only)'
5289     Warn if the return type of a function has a type qualifier such as
5290     'const'.  For ISO C such a type qualifier has no effect, since the
5291     value returned by a function is not an lvalue.  For C++, the
5292     warning is only emitted for scalar types or 'void'.  ISO C
5293     prohibits qualified 'void' return types on function definitions, so
5294     such return types always receive a warning even without this
5295     option.
5296
5297     This warning is also enabled by '-Wextra'.
5298
5299'-Wno-ignored-attributes (C and C++ only)'
5300     This option controls warnings when an attribute is ignored.  This
5301     is different from the '-Wattributes' option in that it warns
5302     whenever the compiler decides to drop an attribute, not that the
5303     attribute is either unknown, used in a wrong place, etc.  This
5304     warning is enabled by default.
5305
5306'-Wmain'
5307     Warn if the type of 'main' is suspicious.  'main' should be a
5308     function with external linkage, returning int, taking either zero
5309     arguments, two, or three arguments of appropriate types.  This
5310     warning is enabled by default in C++ and is enabled by either
5311     '-Wall' or '-Wpedantic'.
5312
5313'-Wmisleading-indentation (C and C++ only)'
5314     Warn when the indentation of the code does not reflect the block
5315     structure.  Specifically, a warning is issued for 'if', 'else',
5316     'while', and 'for' clauses with a guarded statement that does not
5317     use braces, followed by an unguarded statement with the same
5318     indentation.
5319
5320     In the following example, the call to "bar" is misleadingly
5321     indented as if it were guarded by the "if" conditional.
5322
5323            if (some_condition ())
5324              foo ();
5325              bar ();  /* Gotcha: this is not guarded by the "if".  */
5326
5327     In the case of mixed tabs and spaces, the warning uses the
5328     '-ftabstop=' option to determine if the statements line up
5329     (defaulting to 8).
5330
5331     The warning is not issued for code involving multiline preprocessor
5332     logic such as the following example.
5333
5334            if (flagA)
5335              foo (0);
5336          #if SOME_CONDITION_THAT_DOES_NOT_HOLD
5337            if (flagB)
5338          #endif
5339              foo (1);
5340
5341     The warning is not issued after a '#line' directive, since this
5342     typically indicates autogenerated code, and no assumptions can be
5343     made about the layout of the file that the directive references.
5344
5345     This warning is enabled by '-Wall' in C and C++.
5346
5347'-Wmissing-attributes'
5348     Warn when a declaration of a function is missing one or more
5349     attributes that a related function is declared with and whose
5350     absence may adversely affect the correctness or efficiency of
5351     generated code.  For example, the warning is issued for
5352     declarations of aliases that use attributes to specify less
5353     restrictive requirements than those of their targets.  This
5354     typically represents a potential optimization opportunity.  By
5355     contrast, the '-Wattribute-alias=2' option controls warnings issued
5356     when the alias is more restrictive than the target, which could
5357     lead to incorrect code generation.  Attributes considered include
5358     'alloc_align', 'alloc_size', 'cold', 'const', 'hot', 'leaf',
5359     'malloc', 'nonnull', 'noreturn', 'nothrow', 'pure',
5360     'returns_nonnull', and 'returns_twice'.
5361
5362     In C++, the warning is issued when an explicit specialization of a
5363     primary template declared with attribute 'alloc_align',
5364     'alloc_size', 'assume_aligned', 'format', 'format_arg', 'malloc',
5365     or 'nonnull' is declared without it.  Attributes 'deprecated',
5366     'error', and 'warning' suppress the warning.  (*note Function
5367     Attributes::).
5368
5369     You can use the 'copy' attribute to apply the same set of
5370     attributes to a declaration as that on another declaration without
5371     explicitly enumerating the attributes.  This attribute can be
5372     applied to declarations of functions (*note Common Function
5373     Attributes::), variables (*note Common Variable Attributes::), or
5374     types (*note Common Type Attributes::).
5375
5376     '-Wmissing-attributes' is enabled by '-Wall'.
5377
5378     For example, since the declaration of the primary function template
5379     below makes use of both attribute 'malloc' and 'alloc_size' the
5380     declaration of the explicit specialization of the template is
5381     diagnosed because it is missing one of the attributes.
5382
5383          template <class T>
5384          T* __attribute__ ((malloc, alloc_size (1)))
5385          allocate (size_t);
5386
5387          template <>
5388          void* __attribute__ ((malloc))   // missing alloc_size
5389          allocate<void> (size_t);
5390
5391'-Wmissing-braces'
5392     Warn if an aggregate or union initializer is not fully bracketed.
5393     In the following example, the initializer for 'a' is not fully
5394     bracketed, but that for 'b' is fully bracketed.
5395
5396          int a[2][2] = { 0, 1, 2, 3 };
5397          int b[2][2] = { { 0, 1 }, { 2, 3 } };
5398
5399     This warning is enabled by '-Wall'.
5400
5401'-Wmissing-include-dirs (C, C++, Objective-C and Objective-C++ only)'
5402     Warn if a user-supplied include directory does not exist.
5403
5404'-Wno-missing-profile'
5405     This option controls warnings if feedback profiles are missing when
5406     using the '-fprofile-use' option.  This option diagnoses those
5407     cases where a new function or a new file is added between compiling
5408     with '-fprofile-generate' and with '-fprofile-use', without
5409     regenerating the profiles.  In these cases, the profile feedback
5410     data files do not contain any profile feedback information for the
5411     newly added function or file respectively.  Also, in the case when
5412     profile count data (.gcda) files are removed, GCC cannot use any
5413     profile feedback information.  In all these cases, warnings are
5414     issued to inform you that a profile generation step is due.
5415     Ignoring the warning can result in poorly optimized code.
5416     '-Wno-missing-profile' can be used to disable the warning, but this
5417     is not recommended and should be done only when non-existent
5418     profile data is justified.
5419
5420'-Wmultistatement-macros'
5421     Warn about unsafe multiple statement macros that appear to be
5422     guarded by a clause such as 'if', 'else', 'for', 'switch', or
5423     'while', in which only the first statement is actually guarded
5424     after the macro is expanded.
5425
5426     For example:
5427
5428          #define DOIT x++; y++
5429          if (c)
5430            DOIT;
5431
5432     will increment 'y' unconditionally, not just when 'c' holds.  The
5433     can usually be fixed by wrapping the macro in a do-while loop:
5434          #define DOIT do { x++; y++; } while (0)
5435          if (c)
5436            DOIT;
5437
5438     This warning is enabled by '-Wall' in C and C++.
5439
5440'-Wparentheses'
5441     Warn if parentheses are omitted in certain contexts, such as when
5442     there is an assignment in a context where a truth value is
5443     expected, or when operators are nested whose precedence people
5444     often get confused about.
5445
5446     Also warn if a comparison like 'x<=y<=z' appears; this is
5447     equivalent to '(x<=y ? 1 : 0) <= z', which is a different
5448     interpretation from that of ordinary mathematical notation.
5449
5450     Also warn for dangerous uses of the GNU extension to '?:' with
5451     omitted middle operand.  When the condition in the '?': operator is
5452     a boolean expression, the omitted value is always 1.  Often
5453     programmers expect it to be a value computed inside the conditional
5454     expression instead.
5455
5456     For C++ this also warns for some cases of unnecessary parentheses
5457     in declarations, which can indicate an attempt at a function call
5458     instead of a declaration:
5459          {
5460            // Declares a local variable called mymutex.
5461            std::unique_lock<std::mutex> (mymutex);
5462            // User meant std::unique_lock<std::mutex> lock (mymutex);
5463          }
5464
5465     This warning is enabled by '-Wall'.
5466
5467'-Wsequence-point'
5468     Warn about code that may have undefined semantics because of
5469     violations of sequence point rules in the C and C++ standards.
5470
5471     The C and C++ standards define the order in which expressions in a
5472     C/C++ program are evaluated in terms of "sequence points", which
5473     represent a partial ordering between the execution of parts of the
5474     program: those executed before the sequence point, and those
5475     executed after it.  These occur after the evaluation of a full
5476     expression (one which is not part of a larger expression), after
5477     the evaluation of the first operand of a '&&', '||', '? :' or ','
5478     (comma) operator, before a function is called (but after the
5479     evaluation of its arguments and the expression denoting the called
5480     function), and in certain other places.  Other than as expressed by
5481     the sequence point rules, the order of evaluation of subexpressions
5482     of an expression is not specified.  All these rules describe only a
5483     partial order rather than a total order, since, for example, if two
5484     functions are called within one expression with no sequence point
5485     between them, the order in which the functions are called is not
5486     specified.  However, the standards committee have ruled that
5487     function calls do not overlap.
5488
5489     It is not specified when between sequence points modifications to
5490     the values of objects take effect.  Programs whose behavior depends
5491     on this have undefined behavior; the C and C++ standards specify
5492     that "Between the previous and next sequence point an object shall
5493     have its stored value modified at most once by the evaluation of an
5494     expression.  Furthermore, the prior value shall be read only to
5495     determine the value to be stored.".  If a program breaks these
5496     rules, the results on any particular implementation are entirely
5497     unpredictable.
5498
5499     Examples of code with undefined behavior are 'a = a++;', 'a[n] =
5500     b[n++]' and 'a[i++] = i;'.  Some more complicated cases are not
5501     diagnosed by this option, and it may give an occasional false
5502     positive result, but in general it has been found fairly effective
5503     at detecting this sort of problem in programs.
5504
5505     The C++17 standard will define the order of evaluation of operands
5506     in more cases: in particular it requires that the right-hand side
5507     of an assignment be evaluated before the left-hand side, so the
5508     above examples are no longer undefined.  But this option will still
5509     warn about them, to help people avoid writing code that is
5510     undefined in C and earlier revisions of C++.
5511
5512     The standard is worded confusingly, therefore there is some debate
5513     over the precise meaning of the sequence point rules in subtle
5514     cases.  Links to discussions of the problem, including proposed
5515     formal definitions, may be found on the GCC readings page, at
5516     <http://gcc.gnu.org/readings.html>.
5517
5518     This warning is enabled by '-Wall' for C and C++.
5519
5520'-Wno-return-local-addr'
5521     Do not warn about returning a pointer (or in C++, a reference) to a
5522     variable that goes out of scope after the function returns.
5523
5524'-Wreturn-type'
5525     Warn whenever a function is defined with a return type that
5526     defaults to 'int'.  Also warn about any 'return' statement with no
5527     return value in a function whose return type is not 'void' (falling
5528     off the end of the function body is considered returning without a
5529     value).
5530
5531     For C only, warn about a 'return' statement with an expression in a
5532     function whose return type is 'void', unless the expression type is
5533     also 'void'.  As a GNU extension, the latter case is accepted
5534     without a warning unless '-Wpedantic' is used.  Attempting to use
5535     the return value of a non-'void' function other than 'main' that
5536     flows off the end by reaching the closing curly brace that
5537     terminates the function is undefined.
5538
5539     Unlike in C, in C++, flowing off the end of a non-'void' function
5540     other than 'main' results in undefined behavior even when the value
5541     of the function is not used.
5542
5543     This warning is enabled by default in C++ and by '-Wall' otherwise.
5544
5545'-Wno-shift-count-negative'
5546     Controls warnings if a shift count is negative.  This warning is
5547     enabled by default.
5548
5549'-Wno-shift-count-overflow'
5550     Controls warnings if a shift count is greater than or equal to the
5551     bit width of the type.  This warning is enabled by default.
5552
5553'-Wshift-negative-value'
5554     Warn if left shifting a negative value.  This warning is enabled by
5555     '-Wextra' in C99 and C++11 modes (and newer).
5556
5557'-Wno-shift-overflow'
5558'-Wshift-overflow=N'
5559     These options control warnings about left shift overflows.
5560
5561     '-Wshift-overflow=1'
5562          This is the warning level of '-Wshift-overflow' and is enabled
5563          by default in C99 and C++11 modes (and newer).  This warning
5564          level does not warn about left-shifting 1 into the sign bit.
5565          (However, in C, such an overflow is still rejected in contexts
5566          where an integer constant expression is required.)  No warning
5567          is emitted in C++2A mode (and newer), as signed left shifts
5568          always wrap.
5569
5570     '-Wshift-overflow=2'
5571          This warning level also warns about left-shifting 1 into the
5572          sign bit, unless C++14 mode (or newer) is active.
5573
5574'-Wswitch'
5575     Warn whenever a 'switch' statement has an index of enumerated type
5576     and lacks a 'case' for one or more of the named codes of that
5577     enumeration.  (The presence of a 'default' label prevents this
5578     warning.)  'case' labels outside the enumeration range also provoke
5579     warnings when this option is used (even if there is a 'default'
5580     label).  This warning is enabled by '-Wall'.
5581
5582'-Wswitch-default'
5583     Warn whenever a 'switch' statement does not have a 'default' case.
5584
5585'-Wswitch-enum'
5586     Warn whenever a 'switch' statement has an index of enumerated type
5587     and lacks a 'case' for one or more of the named codes of that
5588     enumeration.  'case' labels outside the enumeration range also
5589     provoke warnings when this option is used.  The only difference
5590     between '-Wswitch' and this option is that this option gives a
5591     warning about an omitted enumeration code even if there is a
5592     'default' label.
5593
5594'-Wno-switch-bool'
5595     Do not warn when a 'switch' statement has an index of boolean type
5596     and the case values are outside the range of a boolean type.  It is
5597     possible to suppress this warning by casting the controlling
5598     expression to a type other than 'bool'.  For example:
5599          switch ((int) (a == 4))
5600            {
5601            ...
5602            }
5603     This warning is enabled by default for C and C++ programs.
5604
5605'-Wno-switch-outside-range'
5606     This option controls warnings when a 'switch' case has a value that
5607     is outside of its respective type range.  This warning is enabled
5608     by default for C and C++ programs.
5609
5610'-Wno-switch-unreachable'
5611     Do not warn when a 'switch' statement contains statements between
5612     the controlling expression and the first case label, which will
5613     never be executed.  For example:
5614          switch (cond)
5615            {
5616             i = 15;
5617            ...
5618             case 5:
5619            ...
5620            }
5621     '-Wswitch-unreachable' does not warn if the statement between the
5622     controlling expression and the first case label is just a
5623     declaration:
5624          switch (cond)
5625            {
5626             int i;
5627            ...
5628             case 5:
5629             i = 5;
5630            ...
5631            }
5632     This warning is enabled by default for C and C++ programs.
5633
5634'-Wsync-nand (C and C++ only)'
5635     Warn when '__sync_fetch_and_nand' and '__sync_nand_and_fetch'
5636     built-in functions are used.  These functions changed semantics in
5637     GCC 4.4.
5638
5639'-Wunused-but-set-parameter'
5640     Warn whenever a function parameter is assigned to, but otherwise
5641     unused (aside from its declaration).
5642
5643     To suppress this warning use the 'unused' attribute (*note Variable
5644     Attributes::).
5645
5646     This warning is also enabled by '-Wunused' together with '-Wextra'.
5647
5648'-Wunused-but-set-variable'
5649     Warn whenever a local variable is assigned to, but otherwise unused
5650     (aside from its declaration).  This warning is enabled by '-Wall'.
5651
5652     To suppress this warning use the 'unused' attribute (*note Variable
5653     Attributes::).
5654
5655     This warning is also enabled by '-Wunused', which is enabled by
5656     '-Wall'.
5657
5658'-Wunused-function'
5659     Warn whenever a static function is declared but not defined or a
5660     non-inline static function is unused.  This warning is enabled by
5661     '-Wall'.
5662
5663'-Wunused-label'
5664     Warn whenever a label is declared but not used.  This warning is
5665     enabled by '-Wall'.
5666
5667     To suppress this warning use the 'unused' attribute (*note Variable
5668     Attributes::).
5669
5670'-Wunused-local-typedefs (C, Objective-C, C++ and Objective-C++ only)'
5671     Warn when a typedef locally defined in a function is not used.
5672     This warning is enabled by '-Wall'.
5673
5674'-Wunused-parameter'
5675     Warn whenever a function parameter is unused aside from its
5676     declaration.
5677
5678     To suppress this warning use the 'unused' attribute (*note Variable
5679     Attributes::).
5680
5681'-Wno-unused-result'
5682     Do not warn if a caller of a function marked with attribute
5683     'warn_unused_result' (*note Function Attributes::) does not use its
5684     return value.  The default is '-Wunused-result'.
5685
5686'-Wunused-variable'
5687     Warn whenever a local or static variable is unused aside from its
5688     declaration.  This option implies '-Wunused-const-variable=1' for
5689     C, but not for C++.  This warning is enabled by '-Wall'.
5690
5691     To suppress this warning use the 'unused' attribute (*note Variable
5692     Attributes::).
5693
5694'-Wunused-const-variable'
5695'-Wunused-const-variable=N'
5696     Warn whenever a constant static variable is unused aside from its
5697     declaration.  '-Wunused-const-variable=1' is enabled by
5698     '-Wunused-variable' for C, but not for C++.  In C this declares
5699     variable storage, but in C++ this is not an error since const
5700     variables take the place of '#define's.
5701
5702     To suppress this warning use the 'unused' attribute (*note Variable
5703     Attributes::).
5704
5705     '-Wunused-const-variable=1'
5706          This is the warning level that is enabled by
5707          '-Wunused-variable' for C. It warns only about unused static
5708          const variables defined in the main compilation unit, but not
5709          about static const variables declared in any header included.
5710
5711     '-Wunused-const-variable=2'
5712          This warning level also warns for unused constant static
5713          variables in headers (excluding system headers).  This is the
5714          warning level of '-Wunused-const-variable' and must be
5715          explicitly requested since in C++ this isn't an error and in C
5716          it might be harder to clean up all headers included.
5717
5718'-Wunused-value'
5719     Warn whenever a statement computes a result that is explicitly not
5720     used.  To suppress this warning cast the unused expression to
5721     'void'.  This includes an expression-statement or the left-hand
5722     side of a comma expression that contains no side effects.  For
5723     example, an expression such as 'x[i,j]' causes a warning, while
5724     'x[(void)i,j]' does not.
5725
5726     This warning is enabled by '-Wall'.
5727
5728'-Wunused'
5729     All the above '-Wunused' options combined.
5730
5731     In order to get a warning about an unused function parameter, you
5732     must either specify '-Wextra -Wunused' (note that '-Wall' implies
5733     '-Wunused'), or separately specify '-Wunused-parameter'.
5734
5735'-Wuninitialized'
5736     Warn if an automatic variable is used without first being
5737     initialized.  In C++, warn if a non-static reference or non-static
5738     'const' member appears in a class without constructors.
5739
5740     If you want to warn about code that uses the uninitialized value of
5741     the variable in its own initializer, use the '-Winit-self' option.
5742
5743     These warnings occur for individual uninitialized elements of
5744     structure, union or array variables as well as for variables that
5745     are uninitialized as a whole.  They do not occur for variables or
5746     elements declared 'volatile'.  Because these warnings depend on
5747     optimization, the exact variables or elements for which there are
5748     warnings depend on the precise optimization options and version of
5749     GCC used.
5750
5751     Note that there may be no warning about a variable that is used
5752     only to compute a value that itself is never used, because such
5753     computations may be deleted by data flow analysis before the
5754     warnings are printed.
5755
5756'-Wno-invalid-memory-model'
5757     This option controls warnings for invocations of *note __atomic
5758     Builtins::, *note __sync Builtins::, and the C11 atomic generic
5759     functions with a memory consistency argument that is either invalid
5760     for the operation or outside the range of values of the
5761     'memory_order' enumeration.  For example, since the
5762     '__atomic_store' and '__atomic_store_n' built-ins are only defined
5763     for the relaxed, release, and sequentially consistent memory orders
5764     the following code is diagnosed:
5765
5766          void store (int *i)
5767          {
5768            __atomic_store_n (i, 0, memory_order_consume);
5769          }
5770
5771     '-Winvalid-memory-model' is enabled by default.
5772
5773'-Wmaybe-uninitialized'
5774     For an automatic (i.e. local) variable, if there exists a path from
5775     the function entry to a use of the variable that is initialized,
5776     but there exist some other paths for which the variable is not
5777     initialized, the compiler emits a warning if it cannot prove the
5778     uninitialized paths are not executed at run time.
5779
5780     These warnings are only possible in optimizing compilation, because
5781     otherwise GCC does not keep track of the state of variables.
5782
5783     These warnings are made optional because GCC may not be able to
5784     determine when the code is correct in spite of appearing to have an
5785     error.  Here is one example of how this can happen:
5786
5787          {
5788            int x;
5789            switch (y)
5790              {
5791              case 1: x = 1;
5792                break;
5793              case 2: x = 4;
5794                break;
5795              case 3: x = 5;
5796              }
5797            foo (x);
5798          }
5799
5800     If the value of 'y' is always 1, 2 or 3, then 'x' is always
5801     initialized, but GCC doesn't know this.  To suppress the warning,
5802     you need to provide a default case with assert(0) or similar code.
5803
5804     This option also warns when a non-volatile automatic variable might
5805     be changed by a call to 'longjmp'.  The compiler sees only the
5806     calls to 'setjmp'.  It cannot know where 'longjmp' will be called;
5807     in fact, a signal handler could call it at any point in the code.
5808     As a result, you may get a warning even when there is in fact no
5809     problem because 'longjmp' cannot in fact be called at the place
5810     that would cause a problem.
5811
5812     Some spurious warnings can be avoided if you declare all the
5813     functions you use that never return as 'noreturn'.  *Note Function
5814     Attributes::.
5815
5816     This warning is enabled by '-Wall' or '-Wextra'.
5817
5818'-Wunknown-pragmas'
5819     Warn when a '#pragma' directive is encountered that is not
5820     understood by GCC.  If this command-line option is used, warnings
5821     are even issued for unknown pragmas in system header files.  This
5822     is not the case if the warnings are only enabled by the '-Wall'
5823     command-line option.
5824
5825'-Wno-pragmas'
5826     Do not warn about misuses of pragmas, such as incorrect parameters,
5827     invalid syntax, or conflicts between pragmas.  See also
5828     '-Wunknown-pragmas'.
5829
5830'-Wno-prio-ctor-dtor'
5831     Do not warn if a priority from 0 to 100 is used for constructor or
5832     destructor.  The use of constructor and destructor attributes allow
5833     you to assign a priority to the constructor/destructor to control
5834     its order of execution before 'main' is called or after it returns.
5835     The priority values must be greater than 100 as the compiler
5836     reserves priority values between 0-100 for the implementation.
5837
5838'-Wstrict-aliasing'
5839     This option is only active when '-fstrict-aliasing' is active.  It
5840     warns about code that might break the strict aliasing rules that
5841     the compiler is using for optimization.  The warning does not catch
5842     all cases, but does attempt to catch the more common pitfalls.  It
5843     is included in '-Wall'.  It is equivalent to '-Wstrict-aliasing=3'
5844
5845'-Wstrict-aliasing=n'
5846     This option is only active when '-fstrict-aliasing' is active.  It
5847     warns about code that might break the strict aliasing rules that
5848     the compiler is using for optimization.  Higher levels correspond
5849     to higher accuracy (fewer false positives).  Higher levels also
5850     correspond to more effort, similar to the way '-O' works.
5851     '-Wstrict-aliasing' is equivalent to '-Wstrict-aliasing=3'.
5852
5853     Level 1: Most aggressive, quick, least accurate.  Possibly useful
5854     when higher levels do not warn but '-fstrict-aliasing' still breaks
5855     the code, as it has very few false negatives.  However, it has many
5856     false positives.  Warns for all pointer conversions between
5857     possibly incompatible types, even if never dereferenced.  Runs in
5858     the front end only.
5859
5860     Level 2: Aggressive, quick, not too precise.  May still have many
5861     false positives (not as many as level 1 though), and few false
5862     negatives (but possibly more than level 1).  Unlike level 1, it
5863     only warns when an address is taken.  Warns about incomplete types.
5864     Runs in the front end only.
5865
5866     Level 3 (default for '-Wstrict-aliasing'): Should have very few
5867     false positives and few false negatives.  Slightly slower than
5868     levels 1 or 2 when optimization is enabled.  Takes care of the
5869     common pun+dereference pattern in the front end:
5870     '*(int*)&some_float'.  If optimization is enabled, it also runs in
5871     the back end, where it deals with multiple statement cases using
5872     flow-sensitive points-to information.  Only warns when the
5873     converted pointer is dereferenced.  Does not warn about incomplete
5874     types.
5875
5876'-Wstrict-overflow'
5877'-Wstrict-overflow=N'
5878     This option is only active when signed overflow is undefined.  It
5879     warns about cases where the compiler optimizes based on the
5880     assumption that signed overflow does not occur.  Note that it does
5881     not warn about all cases where the code might overflow: it only
5882     warns about cases where the compiler implements some optimization.
5883     Thus this warning depends on the optimization level.
5884
5885     An optimization that assumes that signed overflow does not occur is
5886     perfectly safe if the values of the variables involved are such
5887     that overflow never does, in fact, occur.  Therefore this warning
5888     can easily give a false positive: a warning about code that is not
5889     actually a problem.  To help focus on important issues, several
5890     warning levels are defined.  No warnings are issued for the use of
5891     undefined signed overflow when estimating how many iterations a
5892     loop requires, in particular when determining whether a loop will
5893     be executed at all.
5894
5895     '-Wstrict-overflow=1'
5896          Warn about cases that are both questionable and easy to avoid.
5897          For example the compiler simplifies 'x + 1 > x' to '1'.  This
5898          level of '-Wstrict-overflow' is enabled by '-Wall'; higher
5899          levels are not, and must be explicitly requested.
5900
5901     '-Wstrict-overflow=2'
5902          Also warn about other cases where a comparison is simplified
5903          to a constant.  For example: 'abs (x) >= 0'.  This can only be
5904          simplified when signed integer overflow is undefined, because
5905          'abs (INT_MIN)' overflows to 'INT_MIN', which is less than
5906          zero.  '-Wstrict-overflow' (with no level) is the same as
5907          '-Wstrict-overflow=2'.
5908
5909     '-Wstrict-overflow=3'
5910          Also warn about other cases where a comparison is simplified.
5911          For example: 'x + 1 > 1' is simplified to 'x > 0'.
5912
5913     '-Wstrict-overflow=4'
5914          Also warn about other simplifications not covered by the above
5915          cases.  For example: '(x * 10) / 5' is simplified to 'x * 2'.
5916
5917     '-Wstrict-overflow=5'
5918          Also warn about cases where the compiler reduces the magnitude
5919          of a constant involved in a comparison.  For example: 'x + 2 >
5920          y' is simplified to 'x + 1 >= y'.  This is reported only at
5921          the highest warning level because this simplification applies
5922          to many comparisons, so this warning level gives a very large
5923          number of false positives.
5924
5925'-Wstring-compare'
5926     Warn for calls to 'strcmp' and 'strncmp' whose result is determined
5927     to be either zero or non-zero in tests for such equality owing to
5928     the length of one argument being greater than the size of the array
5929     the other argument is stored in (or the bound in the case of
5930     'strncmp').  Such calls could be mistakes.  For example, the call
5931     to 'strcmp' below is diagnosed because its result is necessarily
5932     non-zero irrespective of the contents of the array 'a'.
5933
5934          extern char a[4];
5935          void f (char *d)
5936          {
5937            strcpy (d, "string");
5938            ...
5939            if (0 == strcmp (a, d))   // cannot be true
5940              puts ("a and d are the same");
5941          }
5942
5943     '-Wstring-compare' is enabled by '-Wextra'.
5944
5945'-Wstringop-overflow'
5946'-Wstringop-overflow=TYPE'
5947     Warn for calls to string manipulation functions such as 'memcpy'
5948     and 'strcpy' that are determined to overflow the destination
5949     buffer.  The optional argument is one greater than the type of
5950     Object Size Checking to perform to determine the size of the
5951     destination.  *Note Object Size Checking::.  The argument is
5952     meaningful only for functions that operate on character arrays but
5953     not for raw memory functions like 'memcpy' which always make use of
5954     Object Size type-0.  The option also warns for calls that specify a
5955     size in excess of the largest possible object or at most 'SIZE_MAX
5956     / 2' bytes.  The option produces the best results with optimization
5957     enabled but can detect a small subset of simple buffer overflows
5958     even without optimization in calls to the GCC built-in functions
5959     like '__builtin_memcpy' that correspond to the standard functions.
5960     In any case, the option warns about just a subset of buffer
5961     overflows detected by the corresponding overflow checking
5962     built-ins.  For example, the option issues a warning for the
5963     'strcpy' call below because it copies at least 5 characters (the
5964     string '"blue"' including the terminating NUL) into the buffer of
5965     size 4.
5966
5967          enum Color { blue, purple, yellow };
5968          const char* f (enum Color clr)
5969          {
5970            static char buf [4];
5971            const char *str;
5972            switch (clr)
5973              {
5974                case blue: str = "blue"; break;
5975                case purple: str = "purple"; break;
5976                case yellow: str = "yellow"; break;
5977              }
5978
5979            return strcpy (buf, str);   // warning here
5980          }
5981
5982     Option '-Wstringop-overflow=2' is enabled by default.
5983
5984     '-Wstringop-overflow'
5985     '-Wstringop-overflow=1'
5986          The '-Wstringop-overflow=1' option uses type-zero Object Size
5987          Checking to determine the sizes of destination objects.  This
5988          is the default setting of the option.  At this setting the
5989          option does not warn for writes past the end of subobjects of
5990          larger objects accessed by pointers unless the size of the
5991          largest surrounding object is known.  When the destination may
5992          be one of several objects it is assumed to be the largest one
5993          of them.  On Linux systems, when optimization is enabled at
5994          this setting the option warns for the same code as when the
5995          '_FORTIFY_SOURCE' macro is defined to a non-zero value.
5996
5997     '-Wstringop-overflow=2'
5998          The '-Wstringop-overflow=2' option uses type-one Object Size
5999          Checking to determine the sizes of destination objects.  At
6000          this setting the option warna about overflows when writing to
6001          members of the largest complete objects whose exact size is
6002          known.  However, it does not warn for excessive writes to the
6003          same members of unknown objects referenced by pointers since
6004          they may point to arrays containing unknown numbers of
6005          elements.
6006
6007     '-Wstringop-overflow=3'
6008          The '-Wstringop-overflow=3' option uses type-two Object Size
6009          Checking to determine the sizes of destination objects.  At
6010          this setting the option warns about overflowing the smallest
6011          object or data member.  This is the most restrictive setting
6012          of the option that may result in warnings for safe code.
6013
6014     '-Wstringop-overflow=4'
6015          The '-Wstringop-overflow=4' option uses type-three Object Size
6016          Checking to determine the sizes of destination objects.  At
6017          this setting the option warns about overflowing any data
6018          members, and when the destination is one of several objects it
6019          uses the size of the largest of them to decide whether to
6020          issue a warning.  Similarly to '-Wstringop-overflow=3' this
6021          setting of the option may result in warnings for benign code.
6022
6023'-Wno-stringop-truncation'
6024     Do not warn for calls to bounded string manipulation functions such
6025     as 'strncat', 'strncpy', and 'stpncpy' that may either truncate the
6026     copied string or leave the destination unchanged.
6027
6028     In the following example, the call to 'strncat' specifies a bound
6029     that is less than the length of the source string.  As a result,
6030     the copy of the source will be truncated and so the call is
6031     diagnosed.  To avoid the warning use 'bufsize - strlen (buf) - 1)'
6032     as the bound.
6033
6034          void append (char *buf, size_t bufsize)
6035          {
6036            strncat (buf, ".txt", 3);
6037          }
6038
6039     As another example, the following call to 'strncpy' results in
6040     copying to 'd' just the characters preceding the terminating NUL,
6041     without appending the NUL to the end.  Assuming the result of
6042     'strncpy' is necessarily a NUL-terminated string is a common
6043     mistake, and so the call is diagnosed.  To avoid the warning when
6044     the result is not expected to be NUL-terminated, call 'memcpy'
6045     instead.
6046
6047          void copy (char *d, const char *s)
6048          {
6049            strncpy (d, s, strlen (s));
6050          }
6051
6052     In the following example, the call to 'strncpy' specifies the size
6053     of the destination buffer as the bound.  If the length of the
6054     source string is equal to or greater than this size the result of
6055     the copy will not be NUL-terminated.  Therefore, the call is also
6056     diagnosed.  To avoid the warning, specify 'sizeof buf - 1' as the
6057     bound and set the last element of the buffer to 'NUL'.
6058
6059          void copy (const char *s)
6060          {
6061            char buf[80];
6062            strncpy (buf, s, sizeof buf);
6063            ...
6064          }
6065
6066     In situations where a character array is intended to store a
6067     sequence of bytes with no terminating 'NUL' such an array may be
6068     annotated with attribute 'nonstring' to avoid this warning.  Such
6069     arrays, however, are not suitable arguments to functions that
6070     expect 'NUL'-terminated strings.  To help detect accidental misuses
6071     of such arrays GCC issues warnings unless it can prove that the use
6072     is safe.  *Note Common Variable Attributes::.
6073
6074'-Wsuggest-attribute=[pure|const|noreturn|format|cold|malloc]'
6075     Warn for cases where adding an attribute may be beneficial.  The
6076     attributes currently supported are listed below.
6077
6078     '-Wsuggest-attribute=pure'
6079     '-Wsuggest-attribute=const'
6080     '-Wsuggest-attribute=noreturn'
6081     '-Wmissing-noreturn'
6082     '-Wsuggest-attribute=malloc'
6083
6084          Warn about functions that might be candidates for attributes
6085          'pure', 'const' or 'noreturn' or 'malloc'.  The compiler only
6086          warns for functions visible in other compilation units or (in
6087          the case of 'pure' and 'const') if it cannot prove that the
6088          function returns normally.  A function returns normally if it
6089          doesn't contain an infinite loop or return abnormally by
6090          throwing, calling 'abort' or trapping.  This analysis requires
6091          option '-fipa-pure-const', which is enabled by default at '-O'
6092          and higher.  Higher optimization levels improve the accuracy
6093          of the analysis.
6094
6095     '-Wsuggest-attribute=format'
6096     '-Wmissing-format-attribute'
6097
6098          Warn about function pointers that might be candidates for
6099          'format' attributes.  Note these are only possible candidates,
6100          not absolute ones.  GCC guesses that function pointers with
6101          'format' attributes that are used in assignment,
6102          initialization, parameter passing or return statements should
6103          have a corresponding 'format' attribute in the resulting type.
6104          I.e. the left-hand side of the assignment or initialization,
6105          the type of the parameter variable, or the return type of the
6106          containing function respectively should also have a 'format'
6107          attribute to avoid the warning.
6108
6109          GCC also warns about function definitions that might be
6110          candidates for 'format' attributes.  Again, these are only
6111          possible candidates.  GCC guesses that 'format' attributes
6112          might be appropriate for any function that calls a function
6113          like 'vprintf' or 'vscanf', but this might not always be the
6114          case, and some functions for which 'format' attributes are
6115          appropriate may not be detected.
6116
6117     '-Wsuggest-attribute=cold'
6118
6119          Warn about functions that might be candidates for 'cold'
6120          attribute.  This is based on static detection and generally
6121          only warns about functions which always leads to a call to
6122          another 'cold' function such as wrappers of C++ 'throw' or
6123          fatal error reporting functions leading to 'abort'.
6124
6125'-Walloc-zero'
6126     Warn about calls to allocation functions decorated with attribute
6127     'alloc_size' that specify zero bytes, including those to the
6128     built-in forms of the functions 'aligned_alloc', 'alloca',
6129     'calloc', 'malloc', and 'realloc'.  Because the behavior of these
6130     functions when called with a zero size differs among
6131     implementations (and in the case of 'realloc' has been deprecated)
6132     relying on it may result in subtle portability bugs and should be
6133     avoided.
6134
6135'-Walloc-size-larger-than=BYTE-SIZE'
6136     Warn about calls to functions decorated with attribute 'alloc_size'
6137     that attempt to allocate objects larger than the specified number
6138     of bytes, or where the result of the size computation in an integer
6139     type with infinite precision would exceed the value of
6140     'PTRDIFF_MAX' on the target.
6141     '-Walloc-size-larger-than=''PTRDIFF_MAX' is enabled by default.
6142     Warnings controlled by the option can be disabled either by
6143     specifying BYTE-SIZE of 'SIZE_MAX' or more or by
6144     '-Wno-alloc-size-larger-than'.  *Note Function Attributes::.
6145
6146'-Wno-alloc-size-larger-than'
6147     Disable '-Walloc-size-larger-than=' warnings.  The option is
6148     equivalent to '-Walloc-size-larger-than=''SIZE_MAX' or larger.
6149
6150'-Walloca'
6151     This option warns on all uses of 'alloca' in the source.
6152
6153'-Walloca-larger-than=BYTE-SIZE'
6154     This option warns on calls to 'alloca' with an integer argument
6155     whose value is either zero, or that is not bounded by a controlling
6156     predicate that limits its value to at most BYTE-SIZE.  It also
6157     warns for calls to 'alloca' where the bound value is unknown.
6158     Arguments of non-integer types are considered unbounded even if
6159     they appear to be constrained to the expected range.
6160
6161     For example, a bounded case of 'alloca' could be:
6162
6163          void func (size_t n)
6164          {
6165            void *p;
6166            if (n <= 1000)
6167              p = alloca (n);
6168            else
6169              p = malloc (n);
6170            f (p);
6171          }
6172
6173     In the above example, passing '-Walloca-larger-than=1000' would not
6174     issue a warning because the call to 'alloca' is known to be at most
6175     1000 bytes.  However, if '-Walloca-larger-than=500' were passed,
6176     the compiler would emit a warning.
6177
6178     Unbounded uses, on the other hand, are uses of 'alloca' with no
6179     controlling predicate constraining its integer argument.  For
6180     example:
6181
6182          void func ()
6183          {
6184            void *p = alloca (n);
6185            f (p);
6186          }
6187
6188     If '-Walloca-larger-than=500' were passed, the above would trigger
6189     a warning, but this time because of the lack of bounds checking.
6190
6191     Note, that even seemingly correct code involving signed integers
6192     could cause a warning:
6193
6194          void func (signed int n)
6195          {
6196            if (n < 500)
6197              {
6198                p = alloca (n);
6199                f (p);
6200              }
6201          }
6202
6203     In the above example, N could be negative, causing a larger than
6204     expected argument to be implicitly cast into the 'alloca' call.
6205
6206     This option also warns when 'alloca' is used in a loop.
6207
6208     '-Walloca-larger-than=''PTRDIFF_MAX' is enabled by default but is
6209     usually only effective when '-ftree-vrp' is active (default for
6210     '-O2' and above).
6211
6212     See also '-Wvla-larger-than=''byte-size'.
6213
6214'-Wno-alloca-larger-than'
6215     Disable '-Walloca-larger-than=' warnings.  The option is equivalent
6216     to '-Walloca-larger-than=''SIZE_MAX' or larger.
6217
6218'-Warith-conversion'
6219     Do warn about implicit conversions from arithmetic operations even
6220     when conversion of the operands to the same type cannot change
6221     their values.  This affects warnings from '-Wconversion',
6222     '-Wfloat-conversion', and '-Wsign-conversion'.
6223
6224          void f (char c, int i)
6225          {
6226            c = c + i; // warns with -Wconversion
6227            c = c + 1; // only warns with -Warith-conversion
6228          }
6229
6230'-Warray-bounds'
6231'-Warray-bounds=N'
6232     This option is only active when '-ftree-vrp' is active (default for
6233     '-O2' and above).  It warns about subscripts to arrays that are
6234     always out of bounds.  This warning is enabled by '-Wall'.
6235
6236     '-Warray-bounds=1'
6237          This is the warning level of '-Warray-bounds' and is enabled
6238          by '-Wall'; higher levels are not, and must be explicitly
6239          requested.
6240
6241     '-Warray-bounds=2'
6242          This warning level also warns about out of bounds access for
6243          arrays at the end of a struct and for arrays accessed through
6244          pointers.  This warning level may give a larger number of
6245          false positives and is deactivated by default.
6246
6247'-Wattribute-alias=N'
6248'-Wno-attribute-alias'
6249     Warn about declarations using the 'alias' and similar attributes
6250     whose target is incompatible with the type of the alias.  *Note
6251     Declaring Attributes of Functions: Function Attributes.
6252
6253     '-Wattribute-alias=1'
6254          The default warning level of the '-Wattribute-alias' option
6255          diagnoses incompatibilities between the type of the alias
6256          declaration and that of its target.  Such incompatibilities
6257          are typically indicative of bugs.
6258
6259     '-Wattribute-alias=2'
6260
6261          At this level '-Wattribute-alias' also diagnoses cases where
6262          the attributes of the alias declaration are more restrictive
6263          than the attributes applied to its target.  These mismatches
6264          can potentially result in incorrect code generation.  In other
6265          cases they may be benign and could be resolved simply by
6266          adding the missing attribute to the target.  For comparison,
6267          see the '-Wmissing-attributes' option, which controls
6268          diagnostics when the alias declaration is less restrictive
6269          than the target, rather than more restrictive.
6270
6271          Attributes considered include 'alloc_align', 'alloc_size',
6272          'cold', 'const', 'hot', 'leaf', 'malloc', 'nonnull',
6273          'noreturn', 'nothrow', 'pure', 'returns_nonnull', and
6274          'returns_twice'.
6275
6276     '-Wattribute-alias' is equivalent to '-Wattribute-alias=1'.  This
6277     is the default.  You can disable these warnings with either
6278     '-Wno-attribute-alias' or '-Wattribute-alias=0'.
6279
6280'-Wbool-compare'
6281     Warn about boolean expression compared with an integer value
6282     different from 'true'/'false'.  For instance, the following
6283     comparison is always false:
6284          int n = 5;
6285          ...
6286          if ((n > 1) == 2) { ... }
6287     This warning is enabled by '-Wall'.
6288
6289'-Wbool-operation'
6290     Warn about suspicious operations on expressions of a boolean type.
6291     For instance, bitwise negation of a boolean is very likely a bug in
6292     the program.  For C, this warning also warns about incrementing or
6293     decrementing a boolean, which rarely makes sense.  (In C++,
6294     decrementing a boolean is always invalid.  Incrementing a boolean
6295     is invalid in C++17, and deprecated otherwise.)
6296
6297     This warning is enabled by '-Wall'.
6298
6299'-Wduplicated-branches'
6300     Warn when an if-else has identical branches.  This warning detects
6301     cases like
6302          if (p != NULL)
6303            return 0;
6304          else
6305            return 0;
6306     It doesn't warn when both branches contain just a null statement.
6307     This warning also warn for conditional operators:
6308            int i = x ? *p : *p;
6309
6310'-Wduplicated-cond'
6311     Warn about duplicated conditions in an if-else-if chain.  For
6312     instance, warn for the following code:
6313          if (p->q != NULL) { ... }
6314          else if (p->q != NULL) { ... }
6315
6316'-Wframe-address'
6317     Warn when the '__builtin_frame_address' or
6318     '__builtin_return_address' is called with an argument greater than
6319     0.  Such calls may return indeterminate values or crash the
6320     program.  The warning is included in '-Wall'.
6321
6322'-Wno-discarded-qualifiers (C and Objective-C only)'
6323     Do not warn if type qualifiers on pointers are being discarded.
6324     Typically, the compiler warns if a 'const char *' variable is
6325     passed to a function that takes a 'char *' parameter.  This option
6326     can be used to suppress such a warning.
6327
6328'-Wno-discarded-array-qualifiers (C and Objective-C only)'
6329     Do not warn if type qualifiers on arrays which are pointer targets
6330     are being discarded.  Typically, the compiler warns if a 'const int
6331     (*)[]' variable is passed to a function that takes a 'int (*)[]'
6332     parameter.  This option can be used to suppress such a warning.
6333
6334'-Wno-incompatible-pointer-types (C and Objective-C only)'
6335     Do not warn when there is a conversion between pointers that have
6336     incompatible types.  This warning is for cases not covered by
6337     '-Wno-pointer-sign', which warns for pointer argument passing or
6338     assignment with different signedness.
6339
6340'-Wno-int-conversion (C and Objective-C only)'
6341     Do not warn about incompatible integer to pointer and pointer to
6342     integer conversions.  This warning is about implicit conversions;
6343     for explicit conversions the warnings '-Wno-int-to-pointer-cast'
6344     and '-Wno-pointer-to-int-cast' may be used.
6345
6346'-Wzero-length-bounds'
6347     Warn about accesses to elements of zero-length array members that
6348     might overlap other members of the same object.  Declaring interior
6349     zero-length arrays is discouraged because accesses to them are
6350     undefined.  See *Note Zero Length::.
6351
6352     For example, the first two stores in function 'bad' are diagnosed
6353     because the array elements overlap the subsequent members 'b' and
6354     'c'.  The third store is diagnosed by '-Warray-bounds' because it
6355     is beyond the bounds of the enclosing object.
6356
6357          struct X { int a[0]; int b, c; };
6358          struct X x;
6359
6360          void bad (void)
6361          {
6362            x.a[0] = 0;   // -Wzero-length-bounds
6363            x.a[1] = 1;   // -Wzero-length-bounds
6364            x.a[2] = 2;   // -Warray-bounds
6365          }
6366
6367     Option '-Wzero-length-bounds' is enabled by '-Warray-bounds'.
6368
6369'-Wno-div-by-zero'
6370     Do not warn about compile-time integer division by zero.
6371     Floating-point division by zero is not warned about, as it can be a
6372     legitimate way of obtaining infinities and NaNs.
6373
6374'-Wsystem-headers'
6375     Print warning messages for constructs found in system header files.
6376     Warnings from system headers are normally suppressed, on the
6377     assumption that they usually do not indicate real problems and
6378     would only make the compiler output harder to read.  Using this
6379     command-line option tells GCC to emit warnings from system headers
6380     as if they occurred in user code.  However, note that using '-Wall'
6381     in conjunction with this option does _not_ warn about unknown
6382     pragmas in system headers--for that, '-Wunknown-pragmas' must also
6383     be used.
6384
6385'-Wtautological-compare'
6386     Warn if a self-comparison always evaluates to true or false.  This
6387     warning detects various mistakes such as:
6388          int i = 1;
6389          ...
6390          if (i > i) { ... }
6391
6392     This warning also warns about bitwise comparisons that always
6393     evaluate to true or false, for instance:
6394          if ((a & 16) == 10) { ... }
6395     will always be false.
6396
6397     This warning is enabled by '-Wall'.
6398
6399'-Wtrampolines'
6400     Warn about trampolines generated for pointers to nested functions.
6401     A trampoline is a small piece of data or code that is created at
6402     run time on the stack when the address of a nested function is
6403     taken, and is used to call the nested function indirectly.  For
6404     some targets, it is made up of data only and thus requires no
6405     special treatment.  But, for most targets, it is made up of code
6406     and thus requires the stack to be made executable in order for the
6407     program to work properly.
6408
6409'-Wfloat-equal'
6410     Warn if floating-point values are used in equality comparisons.
6411
6412     The idea behind this is that sometimes it is convenient (for the
6413     programmer) to consider floating-point values as approximations to
6414     infinitely precise real numbers.  If you are doing this, then you
6415     need to compute (by analyzing the code, or in some other way) the
6416     maximum or likely maximum error that the computation introduces,
6417     and allow for it when performing comparisons (and when producing
6418     output, but that's a different problem).  In particular, instead of
6419     testing for equality, you should check to see whether the two
6420     values have ranges that overlap; and this is done with the
6421     relational operators, so equality comparisons are probably
6422     mistaken.
6423
6424'-Wtraditional (C and Objective-C only)'
6425     Warn about certain constructs that behave differently in
6426     traditional and ISO C.  Also warn about ISO C constructs that have
6427     no traditional C equivalent, and/or problematic constructs that
6428     should be avoided.
6429
6430        * Macro parameters that appear within string literals in the
6431          macro body.  In traditional C macro replacement takes place
6432          within string literals, but in ISO C it does not.
6433
6434        * In traditional C, some preprocessor directives did not exist.
6435          Traditional preprocessors only considered a line to be a
6436          directive if the '#' appeared in column 1 on the line.
6437          Therefore '-Wtraditional' warns about directives that
6438          traditional C understands but ignores because the '#' does not
6439          appear as the first character on the line.  It also suggests
6440          you hide directives like '#pragma' not understood by
6441          traditional C by indenting them.  Some traditional
6442          implementations do not recognize '#elif', so this option
6443          suggests avoiding it altogether.
6444
6445        * A function-like macro that appears without arguments.
6446
6447        * The unary plus operator.
6448
6449        * The 'U' integer constant suffix, or the 'F' or 'L'
6450          floating-point constant suffixes.  (Traditional C does support
6451          the 'L' suffix on integer constants.)  Note, these suffixes
6452          appear in macros defined in the system headers of most modern
6453          systems, e.g. the '_MIN'/'_MAX' macros in '<limits.h>'.  Use
6454          of these macros in user code might normally lead to spurious
6455          warnings, however GCC's integrated preprocessor has enough
6456          context to avoid warning in these cases.
6457
6458        * A function declared external in one block and then used after
6459          the end of the block.
6460
6461        * A 'switch' statement has an operand of type 'long'.
6462
6463        * A non-'static' function declaration follows a 'static' one.
6464          This construct is not accepted by some traditional C
6465          compilers.
6466
6467        * The ISO type of an integer constant has a different width or
6468          signedness from its traditional type.  This warning is only
6469          issued if the base of the constant is ten.  I.e. hexadecimal
6470          or octal values, which typically represent bit patterns, are
6471          not warned about.
6472
6473        * Usage of ISO string concatenation is detected.
6474
6475        * Initialization of automatic aggregates.
6476
6477        * Identifier conflicts with labels.  Traditional C lacks a
6478          separate namespace for labels.
6479
6480        * Initialization of unions.  If the initializer is zero, the
6481          warning is omitted.  This is done under the assumption that
6482          the zero initializer in user code appears conditioned on e.g.
6483          '__STDC__' to avoid missing initializer warnings and relies on
6484          default initialization to zero in the traditional C case.
6485
6486        * Conversions by prototypes between fixed/floating-point values
6487          and vice versa.  The absence of these prototypes when
6488          compiling with traditional C causes serious problems.  This is
6489          a subset of the possible conversion warnings; for the full set
6490          use '-Wtraditional-conversion'.
6491
6492        * Use of ISO C style function definitions.  This warning
6493          intentionally is _not_ issued for prototype declarations or
6494          variadic functions because these ISO C features appear in your
6495          code when using libiberty's traditional C compatibility
6496          macros, 'PARAMS' and 'VPARAMS'.  This warning is also bypassed
6497          for nested functions because that feature is already a GCC
6498          extension and thus not relevant to traditional C
6499          compatibility.
6500
6501'-Wtraditional-conversion (C and Objective-C only)'
6502     Warn if a prototype causes a type conversion that is different from
6503     what would happen to the same argument in the absence of a
6504     prototype.  This includes conversions of fixed point to floating
6505     and vice versa, and conversions changing the width or signedness of
6506     a fixed-point argument except when the same as the default
6507     promotion.
6508
6509'-Wdeclaration-after-statement (C and Objective-C only)'
6510     Warn when a declaration is found after a statement in a block.
6511     This construct, known from C++, was introduced with ISO C99 and is
6512     by default allowed in GCC.  It is not supported by ISO C90.  *Note
6513     Mixed Declarations::.
6514
6515'-Wshadow'
6516     Warn whenever a local variable or type declaration shadows another
6517     variable, parameter, type, class member (in C++), or instance
6518     variable (in Objective-C) or whenever a built-in function is
6519     shadowed.  Note that in C++, the compiler warns if a local variable
6520     shadows an explicit typedef, but not if it shadows a
6521     struct/class/enum.  If this warning is enabled, it includes also
6522     all instances of local shadowing.  This means that
6523     '-Wno-shadow=local' and '-Wno-shadow=compatible-local' are ignored
6524     when '-Wshadow' is used.  Same as '-Wshadow=global'.
6525
6526'-Wno-shadow-ivar (Objective-C only)'
6527     Do not warn whenever a local variable shadows an instance variable
6528     in an Objective-C method.
6529
6530'-Wshadow=global'
6531     Warn for any shadowing.  Same as '-Wshadow'.
6532
6533'-Wshadow=local'
6534     Warn when a local variable shadows another local variable or
6535     parameter.
6536
6537'-Wshadow=compatible-local'
6538     Warn when a local variable shadows another local variable or
6539     parameter whose type is compatible with that of the shadowing
6540     variable.  In C++, type compatibility here means the type of the
6541     shadowing variable can be converted to that of the shadowed
6542     variable.  The creation of this flag (in addition to
6543     '-Wshadow=local') is based on the idea that when a local variable
6544     shadows another one of incompatible type, it is most likely
6545     intentional, not a bug or typo, as shown in the following example:
6546
6547          for (SomeIterator i = SomeObj.begin(); i != SomeObj.end(); ++i)
6548          {
6549            for (int i = 0; i < N; ++i)
6550            {
6551              ...
6552            }
6553            ...
6554          }
6555
6556     Since the two variable 'i' in the example above have incompatible
6557     types, enabling only '-Wshadow=compatible-local' does not emit a
6558     warning.  Because their types are incompatible, if a programmer
6559     accidentally uses one in place of the other, type checking is
6560     expected to catch that and emit an error or warning.  Use of this
6561     flag instead of '-Wshadow=local' can possibly reduce the number of
6562     warnings triggered by intentional shadowing.  Note that this also
6563     means that shadowing 'const char *i' by 'char *i' does not emit a
6564     warning.
6565
6566     This warning is also enabled by '-Wshadow=local'.
6567
6568'-Wlarger-than=BYTE-SIZE'
6569     Warn whenever an object is defined whose size exceeds BYTE-SIZE.
6570     '-Wlarger-than=''PTRDIFF_MAX' is enabled by default.  Warnings
6571     controlled by the option can be disabled either by specifying
6572     BYTE-SIZE of 'SIZE_MAX' or more or by '-Wno-larger-than'.
6573
6574'-Wno-larger-than'
6575     Disable '-Wlarger-than=' warnings.  The option is equivalent to
6576     '-Wlarger-than=''SIZE_MAX' or larger.
6577
6578'-Wframe-larger-than=BYTE-SIZE'
6579     Warn if the size of a function frame exceeds BYTE-SIZE.  The
6580     computation done to determine the stack frame size is approximate
6581     and not conservative.  The actual requirements may be somewhat
6582     greater than BYTE-SIZE even if you do not get a warning.  In
6583     addition, any space allocated via 'alloca', variable-length arrays,
6584     or related constructs is not included by the compiler when
6585     determining whether or not to issue a warning.
6586     '-Wframe-larger-than=''PTRDIFF_MAX' is enabled by default.
6587     Warnings controlled by the option can be disabled either by
6588     specifying BYTE-SIZE of 'SIZE_MAX' or more or by
6589     '-Wno-frame-larger-than'.
6590
6591'-Wno-frame-larger-than'
6592     Disable '-Wframe-larger-than=' warnings.  The option is equivalent
6593     to '-Wframe-larger-than=''SIZE_MAX' or larger.
6594
6595'-Wno-free-nonheap-object'
6596     Do not warn when attempting to free an object that was not
6597     allocated on the heap.
6598
6599'-Wstack-usage=BYTE-SIZE'
6600     Warn if the stack usage of a function might exceed BYTE-SIZE.  The
6601     computation done to determine the stack usage is conservative.  Any
6602     space allocated via 'alloca', variable-length arrays, or related
6603     constructs is included by the compiler when determining whether or
6604     not to issue a warning.
6605
6606     The message is in keeping with the output of '-fstack-usage'.
6607
6608        * If the stack usage is fully static but exceeds the specified
6609          amount, it's:
6610
6611                 warning: stack usage is 1120 bytes
6612        * If the stack usage is (partly) dynamic but bounded, it's:
6613
6614                 warning: stack usage might be 1648 bytes
6615        * If the stack usage is (partly) dynamic and not bounded, it's:
6616
6617                 warning: stack usage might be unbounded
6618
6619     '-Wstack-usage=''PTRDIFF_MAX' is enabled by default.  Warnings
6620     controlled by the option can be disabled either by specifying
6621     BYTE-SIZE of 'SIZE_MAX' or more or by '-Wno-stack-usage'.
6622
6623'-Wno-stack-usage'
6624     Disable '-Wstack-usage=' warnings.  The option is equivalent to
6625     '-Wstack-usage=''SIZE_MAX' or larger.
6626
6627'-Wunsafe-loop-optimizations'
6628     Warn if the loop cannot be optimized because the compiler cannot
6629     assume anything on the bounds of the loop indices.  With
6630     '-funsafe-loop-optimizations' warn if the compiler makes such
6631     assumptions.
6632
6633'-Wno-pedantic-ms-format (MinGW targets only)'
6634     When used in combination with '-Wformat' and '-pedantic' without
6635     GNU extensions, this option disables the warnings about non-ISO
6636     'printf' / 'scanf' format width specifiers 'I32', 'I64', and 'I'
6637     used on Windows targets, which depend on the MS runtime.
6638
6639'-Wpointer-arith'
6640     Warn about anything that depends on the "size of" a function type
6641     or of 'void'.  GNU C assigns these types a size of 1, for
6642     convenience in calculations with 'void *' pointers and pointers to
6643     functions.  In C++, warn also when an arithmetic operation involves
6644     'NULL'.  This warning is also enabled by '-Wpedantic'.
6645
6646'-Wno-pointer-compare'
6647     Do not warn if a pointer is compared with a zero character
6648     constant.  This usually means that the pointer was meant to be
6649     dereferenced.  For example:
6650
6651          const char *p = foo ();
6652          if (p == '\0')
6653            return 42;
6654
6655     Note that the code above is invalid in C++11.
6656
6657     This warning is enabled by default.
6658
6659'-Wtype-limits'
6660     Warn if a comparison is always true or always false due to the
6661     limited range of the data type, but do not warn for constant
6662     expressions.  For example, warn if an unsigned variable is compared
6663     against zero with '<' or '>='.  This warning is also enabled by
6664     '-Wextra'.
6665
6666'-Wabsolute-value (C and Objective-C only)'
6667     Warn for calls to standard functions that compute the absolute
6668     value of an argument when a more appropriate standard function is
6669     available.  For example, calling 'abs(3.14)' triggers the warning
6670     because the appropriate function to call to compute the absolute
6671     value of a double argument is 'fabs'.  The option also triggers
6672     warnings when the argument in a call to such a function has an
6673     unsigned type.  This warning can be suppressed with an explicit
6674     type cast and it is also enabled by '-Wextra'.
6675
6676'-Wcomment'
6677'-Wcomments'
6678     Warn whenever a comment-start sequence '/*' appears in a '/*'
6679     comment, or whenever a backslash-newline appears in a '//' comment.
6680     This warning is enabled by '-Wall'.
6681
6682'-Wtrigraphs'
6683     Warn if any trigraphs are encountered that might change the meaning
6684     of the program.  Trigraphs within comments are not warned about,
6685     except those that would form escaped newlines.
6686
6687     This option is implied by '-Wall'.  If '-Wall' is not given, this
6688     option is still enabled unless trigraphs are enabled.  To get
6689     trigraph conversion without warnings, but get the other '-Wall'
6690     warnings, use '-trigraphs -Wall -Wno-trigraphs'.
6691
6692'-Wundef'
6693     Warn if an undefined identifier is evaluated in an '#if' directive.
6694     Such identifiers are replaced with zero.
6695
6696'-Wexpansion-to-defined'
6697     Warn whenever 'defined' is encountered in the expansion of a macro
6698     (including the case where the macro is expanded by an '#if'
6699     directive).  Such usage is not portable.  This warning is also
6700     enabled by '-Wpedantic' and '-Wextra'.
6701
6702'-Wunused-macros'
6703     Warn about macros defined in the main file that are unused.  A
6704     macro is "used" if it is expanded or tested for existence at least
6705     once.  The preprocessor also warns if the macro has not been used
6706     at the time it is redefined or undefined.
6707
6708     Built-in macros, macros defined on the command line, and macros
6709     defined in include files are not warned about.
6710
6711     _Note:_ If a macro is actually used, but only used in skipped
6712     conditional blocks, then the preprocessor reports it as unused.  To
6713     avoid the warning in such a case, you might improve the scope of
6714     the macro's definition by, for example, moving it into the first
6715     skipped block.  Alternatively, you could provide a dummy use with
6716     something like:
6717
6718          #if defined the_macro_causing_the_warning
6719          #endif
6720
6721'-Wno-endif-labels'
6722     Do not warn whenever an '#else' or an '#endif' are followed by
6723     text.  This sometimes happens in older programs with code of the
6724     form
6725
6726          #if FOO
6727          ...
6728          #else FOO
6729          ...
6730          #endif FOO
6731
6732     The second and third 'FOO' should be in comments.  This warning is
6733     on by default.
6734
6735'-Wbad-function-cast (C and Objective-C only)'
6736     Warn when a function call is cast to a non-matching type.  For
6737     example, warn if a call to a function returning an integer type is
6738     cast to a pointer type.
6739
6740'-Wc90-c99-compat (C and Objective-C only)'
6741     Warn about features not present in ISO C90, but present in ISO C99.
6742     For instance, warn about use of variable length arrays, 'long long'
6743     type, 'bool' type, compound literals, designated initializers, and
6744     so on.  This option is independent of the standards mode.  Warnings
6745     are disabled in the expression that follows '__extension__'.
6746
6747'-Wc99-c11-compat (C and Objective-C only)'
6748     Warn about features not present in ISO C99, but present in ISO C11.
6749     For instance, warn about use of anonymous structures and unions,
6750     '_Atomic' type qualifier, '_Thread_local' storage-class specifier,
6751     '_Alignas' specifier, 'Alignof' operator, '_Generic' keyword, and
6752     so on.  This option is independent of the standards mode.  Warnings
6753     are disabled in the expression that follows '__extension__'.
6754
6755'-Wc11-c2x-compat (C and Objective-C only)'
6756     Warn about features not present in ISO C11, but present in ISO C2X.
6757     For instance, warn about omitting the string in '_Static_assert',
6758     use of '[[]]' syntax for attributes, use of decimal floating-point
6759     types, and so on.  This option is independent of the standards
6760     mode.  Warnings are disabled in the expression that follows
6761     '__extension__'.
6762
6763'-Wc++-compat (C and Objective-C only)'
6764     Warn about ISO C constructs that are outside of the common subset
6765     of ISO C and ISO C++, e.g. request for implicit conversion from
6766     'void *' to a pointer to non-'void' type.
6767
6768'-Wc++11-compat (C++ and Objective-C++ only)'
6769     Warn about C++ constructs whose meaning differs between ISO C++
6770     1998 and ISO C++ 2011, e.g., identifiers in ISO C++ 1998 that are
6771     keywords in ISO C++ 2011.  This warning turns on '-Wnarrowing' and
6772     is enabled by '-Wall'.
6773
6774'-Wc++14-compat (C++ and Objective-C++ only)'
6775     Warn about C++ constructs whose meaning differs between ISO C++
6776     2011 and ISO C++ 2014.  This warning is enabled by '-Wall'.
6777
6778'-Wc++17-compat (C++ and Objective-C++ only)'
6779     Warn about C++ constructs whose meaning differs between ISO C++
6780     2014 and ISO C++ 2017.  This warning is enabled by '-Wall'.
6781
6782'-Wc++20-compat (C++ and Objective-C++ only)'
6783     Warn about C++ constructs whose meaning differs between ISO C++
6784     2017 and ISO C++ 2020.  This warning is enabled by '-Wall'.
6785
6786'-Wcast-qual'
6787     Warn whenever a pointer is cast so as to remove a type qualifier
6788     from the target type.  For example, warn if a 'const char *' is
6789     cast to an ordinary 'char *'.
6790
6791     Also warn when making a cast that introduces a type qualifier in an
6792     unsafe way.  For example, casting 'char **' to 'const char **' is
6793     unsafe, as in this example:
6794
6795            /* p is char ** value.  */
6796            const char **q = (const char **) p;
6797            /* Assignment of readonly string to const char * is OK.  */
6798            *q = "string";
6799            /* Now char** pointer points to read-only memory.  */
6800            **p = 'b';
6801
6802'-Wcast-align'
6803     Warn whenever a pointer is cast such that the required alignment of
6804     the target is increased.  For example, warn if a 'char *' is cast
6805     to an 'int *' on machines where integers can only be accessed at
6806     two- or four-byte boundaries.
6807
6808'-Wcast-align=strict'
6809     Warn whenever a pointer is cast such that the required alignment of
6810     the target is increased.  For example, warn if a 'char *' is cast
6811     to an 'int *' regardless of the target machine.
6812
6813'-Wcast-function-type'
6814     Warn when a function pointer is cast to an incompatible function
6815     pointer.  In a cast involving function types with a variable
6816     argument list only the types of initial arguments that are provided
6817     are considered.  Any parameter of pointer-type matches any other
6818     pointer-type.  Any benign differences in integral types are
6819     ignored, like 'int' vs. 'long' on ILP32 targets.  Likewise type
6820     qualifiers are ignored.  The function type 'void (*) (void)' is
6821     special and matches everything, which can be used to suppress this
6822     warning.  In a cast involving pointer to member types this warning
6823     warns whenever the type cast is changing the pointer to member
6824     type.  This warning is enabled by '-Wextra'.
6825
6826'-Wwrite-strings'
6827     When compiling C, give string constants the type 'const
6828     char[LENGTH]' so that copying the address of one into a non-'const'
6829     'char *' pointer produces a warning.  These warnings help you find
6830     at compile time code that can try to write into a string constant,
6831     but only if you have been very careful about using 'const' in
6832     declarations and prototypes.  Otherwise, it is just a nuisance.
6833     This is why we did not make '-Wall' request these warnings.
6834
6835     When compiling C++, warn about the deprecated conversion from
6836     string literals to 'char *'.  This warning is enabled by default
6837     for C++ programs.
6838
6839'-Wclobbered'
6840     Warn for variables that might be changed by 'longjmp' or 'vfork'.
6841     This warning is also enabled by '-Wextra'.
6842
6843'-Wconversion'
6844     Warn for implicit conversions that may alter a value.  This
6845     includes conversions between real and integer, like 'abs (x)' when
6846     'x' is 'double'; conversions between signed and unsigned, like
6847     'unsigned ui = -1'; and conversions to smaller types, like 'sqrtf
6848     (M_PI)'.  Do not warn for explicit casts like 'abs ((int) x)' and
6849     'ui = (unsigned) -1', or if the value is not changed by the
6850     conversion like in 'abs (2.0)'.  Warnings about conversions between
6851     signed and unsigned integers can be disabled by using
6852     '-Wno-sign-conversion'.
6853
6854     For C++, also warn for confusing overload resolution for
6855     user-defined conversions; and conversions that never use a type
6856     conversion operator: conversions to 'void', the same type, a base
6857     class or a reference to them.  Warnings about conversions between
6858     signed and unsigned integers are disabled by default in C++ unless
6859     '-Wsign-conversion' is explicitly enabled.
6860
6861     Warnings about conversion from arithmetic on a small type back to
6862     that type are only given with '-Warith-conversion'.
6863
6864'-Wdangling-else'
6865     Warn about constructions where there may be confusion to which 'if'
6866     statement an 'else' branch belongs.  Here is an example of such a
6867     case:
6868
6869          {
6870            if (a)
6871              if (b)
6872                foo ();
6873            else
6874              bar ();
6875          }
6876
6877     In C/C++, every 'else' branch belongs to the innermost possible
6878     'if' statement, which in this example is 'if (b)'.  This is often
6879     not what the programmer expected, as illustrated in the above
6880     example by indentation the programmer chose.  When there is the
6881     potential for this confusion, GCC issues a warning when this flag
6882     is specified.  To eliminate the warning, add explicit braces around
6883     the innermost 'if' statement so there is no way the 'else' can
6884     belong to the enclosing 'if'.  The resulting code looks like this:
6885
6886          {
6887            if (a)
6888              {
6889                if (b)
6890                  foo ();
6891                else
6892                  bar ();
6893              }
6894          }
6895
6896     This warning is enabled by '-Wparentheses'.
6897
6898'-Wdate-time'
6899     Warn when macros '__TIME__', '__DATE__' or '__TIMESTAMP__' are
6900     encountered as they might prevent bit-wise-identical reproducible
6901     compilations.
6902
6903'-Wempty-body'
6904     Warn if an empty body occurs in an 'if', 'else' or 'do while'
6905     statement.  This warning is also enabled by '-Wextra'.
6906
6907'-Wno-endif-labels'
6908     Do not warn about stray tokens after '#else' and '#endif'.
6909
6910'-Wenum-compare'
6911     Warn about a comparison between values of different enumerated
6912     types.  In C++ enumerated type mismatches in conditional
6913     expressions are also diagnosed and the warning is enabled by
6914     default.  In C this warning is enabled by '-Wall'.
6915
6916'-Wenum-conversion (C, Objective-C only)'
6917     Warn when a value of enumerated type is implicitly converted to a
6918     different enumerated type.  This warning is enabled by '-Wextra'.
6919
6920'-Wjump-misses-init (C, Objective-C only)'
6921     Warn if a 'goto' statement or a 'switch' statement jumps forward
6922     across the initialization of a variable, or jumps backward to a
6923     label after the variable has been initialized.  This only warns
6924     about variables that are initialized when they are declared.  This
6925     warning is only supported for C and Objective-C; in C++ this sort
6926     of branch is an error in any case.
6927
6928     '-Wjump-misses-init' is included in '-Wc++-compat'.  It can be
6929     disabled with the '-Wno-jump-misses-init' option.
6930
6931'-Wsign-compare'
6932     Warn when a comparison between signed and unsigned values could
6933     produce an incorrect result when the signed value is converted to
6934     unsigned.  In C++, this warning is also enabled by '-Wall'.  In C,
6935     it is also enabled by '-Wextra'.
6936
6937'-Wsign-conversion'
6938     Warn for implicit conversions that may change the sign of an
6939     integer value, like assigning a signed integer expression to an
6940     unsigned integer variable.  An explicit cast silences the warning.
6941     In C, this option is enabled also by '-Wconversion'.
6942
6943'-Wfloat-conversion'
6944     Warn for implicit conversions that reduce the precision of a real
6945     value.  This includes conversions from real to integer, and from
6946     higher precision real to lower precision real values.  This option
6947     is also enabled by '-Wconversion'.
6948
6949'-Wno-scalar-storage-order'
6950     Do not warn on suspicious constructs involving reverse scalar
6951     storage order.
6952
6953'-Wsizeof-pointer-div'
6954     Warn for suspicious divisions of two sizeof expressions that divide
6955     the pointer size by the element size, which is the usual way to
6956     compute the array size but won't work out correctly with pointers.
6957     This warning warns e.g. about 'sizeof (ptr) / sizeof (ptr[0])' if
6958     'ptr' is not an array, but a pointer.  This warning is enabled by
6959     '-Wall'.
6960
6961'-Wsizeof-pointer-memaccess'
6962     Warn for suspicious length parameters to certain string and memory
6963     built-in functions if the argument uses 'sizeof'.  This warning
6964     triggers for example for 'memset (ptr, 0, sizeof (ptr));' if 'ptr'
6965     is not an array, but a pointer, and suggests a possible fix, or
6966     about 'memcpy (&foo, ptr, sizeof (&foo));'.
6967     '-Wsizeof-pointer-memaccess' also warns about calls to bounded
6968     string copy functions like 'strncat' or 'strncpy' that specify as
6969     the bound a 'sizeof' expression of the source array.  For example,
6970     in the following function the call to 'strncat' specifies the size
6971     of the source string as the bound.  That is almost certainly a
6972     mistake and so the call is diagnosed.
6973          void make_file (const char *name)
6974          {
6975            char path[PATH_MAX];
6976            strncpy (path, name, sizeof path - 1);
6977            strncat (path, ".text", sizeof ".text");
6978            ...
6979          }
6980
6981     The '-Wsizeof-pointer-memaccess' option is enabled by '-Wall'.
6982
6983'-Wno-sizeof-array-argument'
6984     Do not warn when the 'sizeof' operator is applied to a parameter
6985     that is declared as an array in a function definition.  This
6986     warning is enabled by default for C and C++ programs.
6987
6988'-Wmemset-elt-size'
6989     Warn for suspicious calls to the 'memset' built-in function, if the
6990     first argument references an array, and the third argument is a
6991     number equal to the number of elements, but not equal to the size
6992     of the array in memory.  This indicates that the user has omitted a
6993     multiplication by the element size.  This warning is enabled by
6994     '-Wall'.
6995
6996'-Wmemset-transposed-args'
6997     Warn for suspicious calls to the 'memset' built-in function where
6998     the second argument is not zero and the third argument is zero.
6999     For example, the call 'memset (buf, sizeof buf, 0)' is diagnosed
7000     because 'memset (buf, 0, sizeof buf)' was meant instead.  The
7001     diagnostic is only emitted if the third argument is a literal zero.
7002     Otherwise, if it is an expression that is folded to zero, or a cast
7003     of zero to some type, it is far less likely that the arguments have
7004     been mistakenly transposed and no warning is emitted.  This warning
7005     is enabled by '-Wall'.
7006
7007'-Waddress'
7008     Warn about suspicious uses of memory addresses.  These include
7009     using the address of a function in a conditional expression, such
7010     as 'void func(void); if (func)', and comparisons against the memory
7011     address of a string literal, such as 'if (x == "abc")'.  Such uses
7012     typically indicate a programmer error: the address of a function
7013     always evaluates to true, so their use in a conditional usually
7014     indicate that the programmer forgot the parentheses in a function
7015     call; and comparisons against string literals result in unspecified
7016     behavior and are not portable in C, so they usually indicate that
7017     the programmer intended to use 'strcmp'.  This warning is enabled
7018     by '-Wall'.
7019
7020'-Wno-address-of-packed-member'
7021     Do not warn when the address of packed member of struct or union is
7022     taken, which usually results in an unaligned pointer value.  This
7023     is enabled by default.
7024
7025'-Wlogical-op'
7026     Warn about suspicious uses of logical operators in expressions.
7027     This includes using logical operators in contexts where a bit-wise
7028     operator is likely to be expected.  Also warns when the operands of
7029     a logical operator are the same:
7030          extern int a;
7031          if (a < 0 && a < 0) { ... }
7032
7033'-Wlogical-not-parentheses'
7034     Warn about logical not used on the left hand side operand of a
7035     comparison.  This option does not warn if the right operand is
7036     considered to be a boolean expression.  Its purpose is to detect
7037     suspicious code like the following:
7038          int a;
7039          ...
7040          if (!a > 1) { ... }
7041
7042     It is possible to suppress the warning by wrapping the LHS into
7043     parentheses:
7044          if ((!a) > 1) { ... }
7045
7046     This warning is enabled by '-Wall'.
7047
7048'-Waggregate-return'
7049     Warn if any functions that return structures or unions are defined
7050     or called.  (In languages where you can return an array, this also
7051     elicits a warning.)
7052
7053'-Wno-aggressive-loop-optimizations'
7054     Warn if in a loop with constant number of iterations the compiler
7055     detects undefined behavior in some statement during one or more of
7056     the iterations.
7057
7058'-Wno-attributes'
7059     Do not warn if an unexpected '__attribute__' is used, such as
7060     unrecognized attributes, function attributes applied to variables,
7061     etc.  This does not stop errors for incorrect use of supported
7062     attributes.
7063
7064'-Wno-builtin-declaration-mismatch'
7065     Warn if a built-in function is declared with an incompatible
7066     signature or as a non-function, or when a built-in function
7067     declared with a type that does not include a prototype is called
7068     with arguments whose promoted types do not match those expected by
7069     the function.  When '-Wextra' is specified, also warn when a
7070     built-in function that takes arguments is declared without a
7071     prototype.  The '-Wbuiltin-declaration-mismatch' warning is enabled
7072     by default.  To avoid the warning include the appropriate header to
7073     bring the prototypes of built-in functions into scope.
7074
7075     For example, the call to 'memset' below is diagnosed by the warning
7076     because the function expects a value of type 'size_t' as its
7077     argument but the type of '32' is 'int'.  With '-Wextra', the
7078     declaration of the function is diagnosed as well.
7079          extern void* memset ();
7080          void f (void *d)
7081          {
7082            memset (d, '\0', 32);
7083          }
7084
7085'-Wno-builtin-macro-redefined'
7086     Do not warn if certain built-in macros are redefined.  This
7087     suppresses warnings for redefinition of '__TIMESTAMP__',
7088     '__TIME__', '__DATE__', '__FILE__', and '__BASE_FILE__'.
7089
7090'-Wstrict-prototypes (C and Objective-C only)'
7091     Warn if a function is declared or defined without specifying the
7092     argument types.  (An old-style function definition is permitted
7093     without a warning if preceded by a declaration that specifies the
7094     argument types.)
7095
7096'-Wold-style-declaration (C and Objective-C only)'
7097     Warn for obsolescent usages, according to the C Standard, in a
7098     declaration.  For example, warn if storage-class specifiers like
7099     'static' are not the first things in a declaration.  This warning
7100     is also enabled by '-Wextra'.
7101
7102'-Wold-style-definition (C and Objective-C only)'
7103     Warn if an old-style function definition is used.  A warning is
7104     given even if there is a previous prototype.  A definition using
7105     '()' is not considered an old-style definition in C2X mode, because
7106     it is equivalent to '(void)' in that case, but is considered an
7107     old-style definition for older standards.
7108
7109'-Wmissing-parameter-type (C and Objective-C only)'
7110     A function parameter is declared without a type specifier in
7111     K&R-style functions:
7112
7113          void foo(bar) { }
7114
7115     This warning is also enabled by '-Wextra'.
7116
7117'-Wmissing-prototypes (C and Objective-C only)'
7118     Warn if a global function is defined without a previous prototype
7119     declaration.  This warning is issued even if the definition itself
7120     provides a prototype.  Use this option to detect global functions
7121     that do not have a matching prototype declaration in a header file.
7122     This option is not valid for C++ because all function declarations
7123     provide prototypes and a non-matching declaration declares an
7124     overload rather than conflict with an earlier declaration.  Use
7125     '-Wmissing-declarations' to detect missing declarations in C++.
7126
7127'-Wmissing-declarations'
7128     Warn if a global function is defined without a previous
7129     declaration.  Do so even if the definition itself provides a
7130     prototype.  Use this option to detect global functions that are not
7131     declared in header files.  In C, no warnings are issued for
7132     functions with previous non-prototype declarations; use
7133     '-Wmissing-prototypes' to detect missing prototypes.  In C++, no
7134     warnings are issued for function templates, or for inline
7135     functions, or for functions in anonymous namespaces.
7136
7137'-Wmissing-field-initializers'
7138     Warn if a structure's initializer has some fields missing.  For
7139     example, the following code causes such a warning, because 'x.h' is
7140     implicitly zero:
7141
7142          struct s { int f, g, h; };
7143          struct s x = { 3, 4 };
7144
7145     This option does not warn about designated initializers, so the
7146     following modification does not trigger a warning:
7147
7148          struct s { int f, g, h; };
7149          struct s x = { .f = 3, .g = 4 };
7150
7151     In C this option does not warn about the universal zero initializer
7152     '{ 0 }':
7153
7154          struct s { int f, g, h; };
7155          struct s x = { 0 };
7156
7157     Likewise, in C++ this option does not warn about the empty { }
7158     initializer, for example:
7159
7160          struct s { int f, g, h; };
7161          s x = { };
7162
7163     This warning is included in '-Wextra'.  To get other '-Wextra'
7164     warnings without this one, use '-Wextra
7165     -Wno-missing-field-initializers'.
7166
7167'-Wno-multichar'
7168     Do not warn if a multicharacter constant (''FOOF'') is used.
7169     Usually they indicate a typo in the user's code, as they have
7170     implementation-defined values, and should not be used in portable
7171     code.
7172
7173'-Wnormalized=[none|id|nfc|nfkc]'
7174     In ISO C and ISO C++, two identifiers are different if they are
7175     different sequences of characters.  However, sometimes when
7176     characters outside the basic ASCII character set are used, you can
7177     have two different character sequences that look the same.  To
7178     avoid confusion, the ISO 10646 standard sets out some
7179     "normalization rules" which when applied ensure that two sequences
7180     that look the same are turned into the same sequence.  GCC can warn
7181     you if you are using identifiers that have not been normalized;
7182     this option controls that warning.
7183
7184     There are four levels of warning supported by GCC.  The default is
7185     '-Wnormalized=nfc', which warns about any identifier that is not in
7186     the ISO 10646 "C" normalized form, "NFC". NFC is the recommended
7187     form for most uses.  It is equivalent to '-Wnormalized'.
7188
7189     Unfortunately, there are some characters allowed in identifiers by
7190     ISO C and ISO C++ that, when turned into NFC, are not allowed in
7191     identifiers.  That is, there's no way to use these symbols in
7192     portable ISO C or C++ and have all your identifiers in NFC.
7193     '-Wnormalized=id' suppresses the warning for these characters.  It
7194     is hoped that future versions of the standards involved will
7195     correct this, which is why this option is not the default.
7196
7197     You can switch the warning off for all characters by writing
7198     '-Wnormalized=none' or '-Wno-normalized'.  You should only do this
7199     if you are using some other normalization scheme (like "D"),
7200     because otherwise you can easily create bugs that are literally
7201     impossible to see.
7202
7203     Some characters in ISO 10646 have distinct meanings but look
7204     identical in some fonts or display methodologies, especially once
7205     formatting has been applied.  For instance '\u207F', "SUPERSCRIPT
7206     LATIN SMALL LETTER N", displays just like a regular 'n' that has
7207     been placed in a superscript.  ISO 10646 defines the "NFKC"
7208     normalization scheme to convert all these into a standard form as
7209     well, and GCC warns if your code is not in NFKC if you use
7210     '-Wnormalized=nfkc'.  This warning is comparable to warning about
7211     every identifier that contains the letter O because it might be
7212     confused with the digit 0, and so is not the default, but may be
7213     useful as a local coding convention if the programming environment
7214     cannot be fixed to display these characters distinctly.
7215
7216'-Wno-attribute-warning'
7217     Do not warn about usage of functions (*note Function Attributes::)
7218     declared with 'warning' attribute.  By default, this warning is
7219     enabled.  '-Wno-attribute-warning' can be used to disable the
7220     warning or '-Wno-error=attribute-warning' can be used to disable
7221     the error when compiled with '-Werror' flag.
7222
7223'-Wno-deprecated'
7224     Do not warn about usage of deprecated features.  *Note Deprecated
7225     Features::.
7226
7227'-Wno-deprecated-declarations'
7228     Do not warn about uses of functions (*note Function Attributes::),
7229     variables (*note Variable Attributes::), and types (*note Type
7230     Attributes::) marked as deprecated by using the 'deprecated'
7231     attribute.
7232
7233'-Wno-overflow'
7234     Do not warn about compile-time overflow in constant expressions.
7235
7236'-Wno-odr'
7237     Warn about One Definition Rule violations during link-time
7238     optimization.  Enabled by default.
7239
7240'-Wopenmp-simd'
7241     Warn if the vectorizer cost model overrides the OpenMP simd
7242     directive set by user.  The '-fsimd-cost-model=unlimited' option
7243     can be used to relax the cost model.
7244
7245'-Woverride-init (C and Objective-C only)'
7246     Warn if an initialized field without side effects is overridden
7247     when using designated initializers (*note Designated Initializers:
7248     Designated Inits.).
7249
7250     This warning is included in '-Wextra'.  To get other '-Wextra'
7251     warnings without this one, use '-Wextra -Wno-override-init'.
7252
7253'-Wno-override-init-side-effects (C and Objective-C only)'
7254     Do not warn if an initialized field with side effects is overridden
7255     when using designated initializers (*note Designated Initializers:
7256     Designated Inits.).  This warning is enabled by default.
7257
7258'-Wpacked'
7259     Warn if a structure is given the packed attribute, but the packed
7260     attribute has no effect on the layout or size of the structure.
7261     Such structures may be mis-aligned for little benefit.  For
7262     instance, in this code, the variable 'f.x' in 'struct bar' is
7263     misaligned even though 'struct bar' does not itself have the packed
7264     attribute:
7265
7266          struct foo {
7267            int x;
7268            char a, b, c, d;
7269          } __attribute__((packed));
7270          struct bar {
7271            char z;
7272            struct foo f;
7273          };
7274
7275'-Wnopacked-bitfield-compat'
7276     The 4.1, 4.2 and 4.3 series of GCC ignore the 'packed' attribute on
7277     bit-fields of type 'char'.  This was fixed in GCC 4.4 but the
7278     change can lead to differences in the structure layout.  GCC
7279     informs you when the offset of such a field has changed in GCC 4.4.
7280     For example there is no longer a 4-bit padding between field 'a'
7281     and 'b' in this structure:
7282
7283          struct foo
7284          {
7285            char a:4;
7286            char b:8;
7287          } __attribute__ ((packed));
7288
7289     This warning is enabled by default.  Use
7290     '-Wno-packed-bitfield-compat' to disable this warning.
7291
7292'-Wpacked-not-aligned (C, C++, Objective-C and Objective-C++ only)'
7293     Warn if a structure field with explicitly specified alignment in a
7294     packed struct or union is misaligned.  For example, a warning will
7295     be issued on 'struct S', like, 'warning: alignment 1 of 'struct S'
7296     is less than 8', in this code:
7297
7298          struct __attribute__ ((aligned (8))) S8 { char a[8]; };
7299          struct __attribute__ ((packed)) S {
7300            struct S8 s8;
7301          };
7302
7303     This warning is enabled by '-Wall'.
7304
7305'-Wpadded'
7306     Warn if padding is included in a structure, either to align an
7307     element of the structure or to align the whole structure.
7308     Sometimes when this happens it is possible to rearrange the fields
7309     of the structure to reduce the padding and so make the structure
7310     smaller.
7311
7312'-Wredundant-decls'
7313     Warn if anything is declared more than once in the same scope, even
7314     in cases where multiple declaration is valid and changes nothing.
7315
7316'-Wrestrict'
7317     Warn when an object referenced by a 'restrict'-qualified parameter
7318     (or, in C++, a '__restrict'-qualified parameter) is aliased by
7319     another argument, or when copies between such objects overlap.  For
7320     example, the call to the 'strcpy' function below attempts to
7321     truncate the string by replacing its initial characters with the
7322     last four.  However, because the call writes the terminating NUL
7323     into 'a[4]', the copies overlap and the call is diagnosed.
7324
7325          void foo (void)
7326          {
7327            char a[] = "abcd1234";
7328            strcpy (a, a + 4);
7329            ...
7330          }
7331     The '-Wrestrict' option detects some instances of simple overlap
7332     even without optimization but works best at '-O2' and above.  It is
7333     included in '-Wall'.
7334
7335'-Wnested-externs (C and Objective-C only)'
7336     Warn if an 'extern' declaration is encountered within a function.
7337
7338'-Winline'
7339     Warn if a function that is declared as inline cannot be inlined.
7340     Even with this option, the compiler does not warn about failures to
7341     inline functions declared in system headers.
7342
7343     The compiler uses a variety of heuristics to determine whether or
7344     not to inline a function.  For example, the compiler takes into
7345     account the size of the function being inlined and the amount of
7346     inlining that has already been done in the current function.
7347     Therefore, seemingly insignificant changes in the source program
7348     can cause the warnings produced by '-Winline' to appear or
7349     disappear.
7350
7351'-Wint-in-bool-context'
7352     Warn for suspicious use of integer values where boolean values are
7353     expected, such as conditional expressions (?:) using non-boolean
7354     integer constants in boolean context, like 'if (a <= b ? 2 : 3)'.
7355     Or left shifting of signed integers in boolean context, like 'for
7356     (a = 0; 1 << a; a++);'.  Likewise for all kinds of multiplications
7357     regardless of the data type.  This warning is enabled by '-Wall'.
7358
7359'-Wno-int-to-pointer-cast'
7360     Suppress warnings from casts to pointer type of an integer of a
7361     different size.  In C++, casting to a pointer type of smaller size
7362     is an error.  'Wint-to-pointer-cast' is enabled by default.
7363
7364'-Wno-pointer-to-int-cast (C and Objective-C only)'
7365     Suppress warnings from casts from a pointer to an integer type of a
7366     different size.
7367
7368'-Winvalid-pch'
7369     Warn if a precompiled header (*note Precompiled Headers::) is found
7370     in the search path but cannot be used.
7371
7372'-Wlong-long'
7373     Warn if 'long long' type is used.  This is enabled by either
7374     '-Wpedantic' or '-Wtraditional' in ISO C90 and C++98 modes.  To
7375     inhibit the warning messages, use '-Wno-long-long'.
7376
7377'-Wvariadic-macros'
7378     Warn if variadic macros are used in ISO C90 mode, or if the GNU
7379     alternate syntax is used in ISO C99 mode.  This is enabled by
7380     either '-Wpedantic' or '-Wtraditional'.  To inhibit the warning
7381     messages, use '-Wno-variadic-macros'.
7382
7383'-Wno-varargs'
7384     Do not warn upon questionable usage of the macros used to handle
7385     variable arguments like 'va_start'.  These warnings are enabled by
7386     default.
7387
7388'-Wvector-operation-performance'
7389     Warn if vector operation is not implemented via SIMD capabilities
7390     of the architecture.  Mainly useful for the performance tuning.
7391     Vector operation can be implemented 'piecewise', which means that
7392     the scalar operation is performed on every vector element; 'in
7393     parallel', which means that the vector operation is implemented
7394     using scalars of wider type, which normally is more performance
7395     efficient; and 'as a single scalar', which means that vector fits
7396     into a scalar type.
7397
7398'-Wvla'
7399     Warn if a variable-length array is used in the code.  '-Wno-vla'
7400     prevents the '-Wpedantic' warning of the variable-length array.
7401
7402'-Wvla-larger-than=BYTE-SIZE'
7403     If this option is used, the compiler warns for declarations of
7404     variable-length arrays whose size is either unbounded, or bounded
7405     by an argument that allows the array size to exceed BYTE-SIZE
7406     bytes.  This is similar to how '-Walloca-larger-than='BYTE-SIZE
7407     works, but with variable-length arrays.
7408
7409     Note that GCC may optimize small variable-length arrays of a known
7410     value into plain arrays, so this warning may not get triggered for
7411     such arrays.
7412
7413     '-Wvla-larger-than=''PTRDIFF_MAX' is enabled by default but is
7414     typically only effective when '-ftree-vrp' is active (default for
7415     '-O2' and above).
7416
7417     See also '-Walloca-larger-than=BYTE-SIZE'.
7418
7419'-Wno-vla-larger-than'
7420     Disable '-Wvla-larger-than=' warnings.  The option is equivalent to
7421     '-Wvla-larger-than=''SIZE_MAX' or larger.
7422
7423'-Wvolatile-register-var'
7424     Warn if a register variable is declared volatile.  The volatile
7425     modifier does not inhibit all optimizations that may eliminate
7426     reads and/or writes to register variables.  This warning is enabled
7427     by '-Wall'.
7428
7429'-Wdisabled-optimization'
7430     Warn if a requested optimization pass is disabled.  This warning
7431     does not generally indicate that there is anything wrong with your
7432     code; it merely indicates that GCC's optimizers are unable to
7433     handle the code effectively.  Often, the problem is that your code
7434     is too big or too complex; GCC refuses to optimize programs when
7435     the optimization itself is likely to take inordinate amounts of
7436     time.
7437
7438'-Wpointer-sign (C and Objective-C only)'
7439     Warn for pointer argument passing or assignment with different
7440     signedness.  This option is only supported for C and Objective-C.
7441     It is implied by '-Wall' and by '-Wpedantic', which can be disabled
7442     with '-Wno-pointer-sign'.
7443
7444'-Wstack-protector'
7445     This option is only active when '-fstack-protector' is active.  It
7446     warns about functions that are not protected against stack
7447     smashing.
7448
7449'-Woverlength-strings'
7450     Warn about string constants that are longer than the "minimum
7451     maximum" length specified in the C standard.  Modern compilers
7452     generally allow string constants that are much longer than the
7453     standard's minimum limit, but very portable programs should avoid
7454     using longer strings.
7455
7456     The limit applies _after_ string constant concatenation, and does
7457     not count the trailing NUL.  In C90, the limit was 509 characters;
7458     in C99, it was raised to 4095.  C++98 does not specify a normative
7459     minimum maximum, so we do not diagnose overlength strings in C++.
7460
7461     This option is implied by '-Wpedantic', and can be disabled with
7462     '-Wno-overlength-strings'.
7463
7464'-Wunsuffixed-float-constants (C and Objective-C only)'
7465
7466     Issue a warning for any floating constant that does not have a
7467     suffix.  When used together with '-Wsystem-headers' it warns about
7468     such constants in system header files.  This can be useful when
7469     preparing code to use with the 'FLOAT_CONST_DECIMAL64' pragma from
7470     the decimal floating-point extension to C99.
7471
7472'-Wno-lto-type-mismatch'
7473
7474     During the link-time optimization, do not warn about type
7475     mismatches in global declarations from different compilation units.
7476     Requires '-flto' to be enabled.  Enabled by default.
7477
7478'-Wno-designated-init (C and Objective-C only)'
7479     Suppress warnings when a positional initializer is used to
7480     initialize a structure that has been marked with the
7481     'designated_init' attribute.
7482
7483'-Wno-hsa'
7484     Do not warn when HSAIL cannot be emitted for the compiled function
7485     or OpenMP construct.  These warnings are enabled by default.
7486
7487
7488File: gcc.info,  Node: Static Analyzer Options,  Next: Debugging Options,  Prev: Warning Options,  Up: Invoking GCC
7489
74903.9 Options That Control Static Analysis
7491========================================
7492
7493'-fanalyzer'
7494     This option enables an static analysis of program flow which looks
7495     for "interesting" interprocedural paths through the code, and
7496     issues warnings for problems found on them.
7497
7498     This analysis is much more expensive than other GCC warnings.
7499
7500     Enabling this option effectively enables the following warnings:
7501
7502
7503          -Wanalyzer-double-fclose
7504          -Wanalyzer-double-free
7505          -Wanalyzer-exposure-through-output-file
7506          -Wanalyzer-file-leak
7507          -Wanalyzer-free-of-non-heap
7508          -Wanalyzer-malloc-leak
7509          -Wanalyzer-possible-null-argument
7510          -Wanalyzer-possible-null-dereference
7511          -Wanalyzer-null-argument
7512          -Wanalyzer-null-dereference
7513          -Wanalyzer-stale-setjmp-buffer
7514          -Wanalyzer-tainted-array-index
7515          -Wanalyzer-unsafe-call-within-signal-handler
7516          -Wanalyzer-use-after-free
7517          -Wanalyzer-use-of-pointer-in-stale-stack-frame
7518
7519
7520     This option is only available if GCC was configured with analyzer
7521     support enabled.
7522
7523'-Wanalyzer-too-complex'
7524     If '-fanalyzer' is enabled, the analyzer uses various heuristics to
7525     attempt to explore the control flow and data flow in the program,
7526     but these can be defeated by sufficiently complicated code.
7527
7528     By default, the analysis silently stops if the code is too
7529     complicated for the analyzer to fully explore and it reaches an
7530     internal limit.  The '-Wanalyzer-too-complex' option warns if this
7531     occurs.
7532
7533'-Wno-analyzer-double-fclose'
7534     This warning requires '-fanalyzer', which enables it; use
7535     '-Wno-analyzer-double-fclose' to disable it.
7536
7537     This diagnostic warns for paths through the code in which a 'FILE
7538     *' can have 'fclose' called on it more than once.
7539
7540'-Wno-analyzer-double-free'
7541     This warning requires '-fanalyzer', which enables it; use
7542     '-Wno-analyzer-double-free' to disable it.
7543
7544     This diagnostic warns for paths through the code in which a pointer
7545     can have 'free' called on it more than once.
7546
7547'-Wno-analyzer-exposure-through-output-file'
7548     This warning requires '-fanalyzer', which enables it; use
7549     '-Wno-analyzer-exposure-through-output-file' to disable it.
7550
7551     This diagnostic warns for paths through the code in which a
7552     security-sensitive value is written to an output file (such as
7553     writing a password to a log file).
7554
7555'-Wno-analyzer-file-leak'
7556     This warning requires '-fanalyzer', which enables it; use
7557     '-Wno-analyzer-file-leak' to disable it.
7558
7559     This diagnostic warns for paths through the code in which a
7560     '<stdio.h>' 'FILE *' stream object is leaked.
7561
7562'-Wno-analyzer-free-of-non-heap'
7563     This warning requires '-fanalyzer', which enables it; use
7564     '-Wno-analyzer-free-of-non-heap' to disable it.
7565
7566     This diagnostic warns for paths through the code in which 'free' is
7567     called on a non-heap pointer (e.g.  an on-stack buffer, or a
7568     global).
7569
7570'-Wno-analyzer-malloc-leak'
7571     This warning requires '-fanalyzer', which enables it; use
7572     '-Wno-analyzer-malloc-leak' to disable it.
7573
7574     This diagnostic warns for paths through the code in which a pointer
7575     allocated via 'malloc' is leaked.
7576
7577'-Wno-analyzer-possible-null-argument'
7578     This warning requires '-fanalyzer', which enables it; use
7579     '-Wno-analyzer-possible-null-argument' to disable it.
7580
7581     This diagnostic warns for paths through the code in which a
7582     possibly-NULL value is passed to a function argument marked with
7583     '__attribute__((nonnull))' as requiring a non-NULL value.
7584
7585'-Wno-analyzer-possible-null-dereference'
7586     This warning requires '-fanalyzer', which enables it; use
7587     '-Wno-analyzer-possible-null-dereference' to disable it.
7588
7589     This diagnostic warns for paths through the code in which a
7590     possibly-NULL value is dereferenced.
7591
7592'-Wno-analyzer-null-argument'
7593     This warning requires '-fanalyzer', which enables it; use
7594     '-Wno-analyzer-null-argument' to disable it.
7595
7596     This diagnostic warns for paths through the code in which a value
7597     known to be NULL is passed to a function argument marked with
7598     '__attribute__((nonnull))' as requiring a non-NULL value.
7599
7600'-Wno-analyzer-null-dereference'
7601     This warning requires '-fanalyzer', which enables it; use
7602     '-Wno-analyzer-null-dereference' to disable it.
7603
7604     This diagnostic warns for paths through the code in which a value
7605     known to be NULL is dereferenced.
7606
7607'-Wno-analyzer-stale-setjmp-buffer'
7608     This warning requires '-fanalyzer', which enables it; use
7609     '-Wno-analyzer-stale-setjmp-buffer' to disable it.
7610
7611     This diagnostic warns for paths through the code in which 'longjmp'
7612     is called to rewind to a 'jmp_buf' relating to a 'setjmp' call in a
7613     function that has returned.
7614
7615     When 'setjmp' is called on a 'jmp_buf' to record a rewind location,
7616     it records the stack frame.  The stack frame becomes invalid when
7617     the function containing the 'setjmp' call returns.  Attempting to
7618     rewind to it via 'longjmp' would reference a stack frame that no
7619     longer exists, and likely lead to a crash (or worse).
7620
7621'-Wno-analyzer-tainted-array-index'
7622     This warning requires both '-fanalyzer' and
7623     '-fanalyzer-checker=taint' to enable it; use
7624     '-Wno-analyzer-tainted-array-index' to disable it.
7625
7626     This diagnostic warns for paths through the code in which a value
7627     that could be under an attacker's control is used as the index of
7628     an array access without being sanitized.
7629
7630'-Wno-analyzer-unsafe-call-within-signal-handler'
7631     This warning requires '-fanalyzer', which enables it; use
7632     '-Wno-analyzer-unsafe-call-within-signal-handler' to disable it.
7633
7634     This diagnostic warns for paths through the code in which a
7635     function known to be async-signal-unsafe (such as 'fprintf') is
7636     called from a signal handler.
7637
7638'-Wno-analyzer-use-after-free'
7639     This warning requires '-fanalyzer', which enables it; use
7640     '-Wno-analyzer-use-after-free' to disable it.
7641
7642     This diagnostic warns for paths through the code in which a pointer
7643     is used after 'free' is called on it.
7644
7645'-Wno-analyzer-use-of-pointer-in-stale-stack-frame'
7646     This warning requires '-fanalyzer', which enables it; use
7647     '-Wno-analyzer-use-of-pointer-in-stale-stack-frame' to disable it.
7648
7649     This diagnostic warns for paths through the code in which a pointer
7650     is dereferenced that points to a variable in a stale stack frame.
7651
7652 Pertinent parameters for controlling the exploration are: '--param
7653analyzer-bb-explosion-factor=VALUE', '--param
7654analyzer-max-enodes-per-program-point=VALUE', '--param
7655analyzer-max-recursion-depth=VALUE', and '--param
7656analyzer-min-snodes-for-call-summary=VALUE'.
7657
7658 The following options control the analyzer.
7659
7660'-fanalyzer-call-summaries'
7661     Simplify interprocedural analysis by computing the effect of
7662     certain calls, rather than exploring all paths through the function
7663     from callsite to each possible return.
7664
7665     If enabled, call summaries are only used for functions with more
7666     than one call site, and that are sufficiently complicated (as per
7667     '--param analyzer-min-snodes-for-call-summary=VALUE').
7668
7669'-fanalyzer-checker=NAME'
7670     Restrict the analyzer to run just the named checker, and enable it.
7671
7672     Some checkers are disabled by default (even with '-fanalyzer'),
7673     such as the 'taint' checker that implements
7674     '-Wanalyzer-tainted-array-index', and this option is required to
7675     enable them.
7676
7677'-fanalyzer-fine-grained'
7678     This option is intended for analyzer developers.
7679
7680     Internally the analyzer builds an "exploded graph" that combines
7681     control flow graphs with data flow information.
7682
7683     By default, an edge in this graph can contain the effects of a run
7684     of multiple statements within a basic block.  With
7685     '-fanalyzer-fine-grained', each statement gets its own edge.
7686
7687'-fanalyzer-show-duplicate-count'
7688     This option is intended for analyzer developers: if multiple
7689     diagnostics have been detected as being duplicates of each other,
7690     it emits a note when reporting the best diagnostic, giving the
7691     number of additional diagnostics that were suppressed by the
7692     deduplication logic.
7693
7694'-fno-analyzer-state-merge'
7695     This option is intended for analyzer developers.
7696
7697     By default the analyzer attempts to simplify analysis by merging
7698     sufficiently similar states at each program point as it builds its
7699     "exploded graph".  With '-fno-analyzer-state-merge' this merging
7700     can be suppressed, for debugging state-handling issues.
7701
7702'-fno-analyzer-state-purge'
7703     This option is intended for analyzer developers.
7704
7705     By default the analyzer attempts to simplify analysis by purging
7706     aspects of state at a program point that appear to no longer be
7707     relevant e.g.  the values of locals that aren't accessed later in
7708     the function and which aren't relevant to leak analysis.
7709
7710     With '-fno-analyzer-state-purge' this purging of state can be
7711     suppressed, for debugging state-handling issues.
7712
7713'-fanalyzer-transitivity'
7714     This option enables transitivity of constraints within the
7715     analyzer.
7716
7717'-fanalyzer-verbose-edges'
7718     This option is intended for analyzer developers.  It enables more
7719     verbose, lower-level detail in the descriptions of control flow
7720     within diagnostic paths.
7721
7722'-fanalyzer-verbose-state-changes'
7723     This option is intended for analyzer developers.  It enables more
7724     verbose, lower-level detail in the descriptions of events relating
7725     to state machines within diagnostic paths.
7726
7727'-fanalyzer-verbosity=LEVEL'
7728     This option controls the complexity of the control flow paths that
7729     are emitted for analyzer diagnostics.
7730
7731     The LEVEL can be one of:
7732
7733     '0'
7734          At this level, interprocedural call and return events are
7735          displayed, along with the most pertinent state-change events
7736          relating to a diagnostic.  For example, for a double-'free'
7737          diagnostic, both calls to 'free' will be shown.
7738
7739     '1'
7740          As per the previous level, but also show events for the entry
7741          to each function.
7742
7743     '2'
7744          As per the previous level, but also show events relating to
7745          control flow that are significant to triggering the issue
7746          (e.g.  "true path taken" at a conditional).
7747
7748          This level is the default.
7749
7750     '3'
7751          As per the previous level, but show all control flow events,
7752          not just significant ones.
7753
7754     '4'
7755          This level is intended for analyzer developers; it adds
7756          various other events intended for debugging the analyzer.
7757
7758'-fdump-analyzer'
7759     Dump internal details about what the analyzer is doing to
7760     'FILE.analyzer.txt'.  This option is overridden by
7761     '-fdump-analyzer-stderr'.
7762
7763'-fdump-analyzer-stderr'
7764     Dump internal details about what the analyzer is doing to stderr.
7765     This option overrides '-fdump-analyzer'.
7766
7767'-fdump-analyzer-callgraph'
7768     Dump a representation of the call graph suitable for viewing with
7769     GraphViz to 'FILE.callgraph.dot'.
7770
7771'-fdump-analyzer-exploded-graph'
7772     Dump a representation of the "exploded graph" suitable for viewing
7773     with GraphViz to 'FILE.eg.dot'.  Nodes are color-coded based on
7774     state-machine states to emphasize state changes.
7775
7776'-fdump-analyzer-exploded-nodes'
7777     Emit diagnostics showing where nodes in the "exploded graph" are in
7778     relation to the program source.
7779
7780'-fdump-analyzer-exploded-nodes-2'
7781     Dump a textual representation of the "exploded graph" to
7782     'FILE.eg.txt'.
7783
7784'-fdump-analyzer-exploded-nodes-3'
7785     Dump a textual representation of the "exploded graph" to one dump
7786     file per node, to 'FILE.eg-ID.txt'.  This is typically a large
7787     number of dump files.
7788
7789'-fdump-analyzer-state-purge'
7790     As per '-fdump-analyzer-supergraph', dump a representation of the
7791     "supergraph" suitable for viewing with GraphViz, but annotate the
7792     graph with information on what state will be purged at each node.
7793     The graph is written to 'FILE.state-purge.dot'.
7794
7795'-fdump-analyzer-supergraph'
7796     Dump representations of the "supergraph" suitable for viewing with
7797     GraphViz to 'FILE.supergraph.dot' and to 'FILE.supergraph-eg.dot'.
7798     These show all of the control flow graphs in the program, with
7799     interprocedural edges for calls and returns.  The second dump
7800     contains annotations showing nodes in the "exploded graph" and
7801     diagnostics associated with them.
7802
7803
7804File: gcc.info,  Node: Debugging Options,  Next: Optimize Options,  Prev: Static Analyzer Options,  Up: Invoking GCC
7805
78063.10 Options for Debugging Your Program
7807=======================================
7808
7809To tell GCC to emit extra information for use by a debugger, in almost
7810all cases you need only to add '-g' to your other options.
7811
7812 GCC allows you to use '-g' with '-O'.  The shortcuts taken by optimized
7813code may occasionally be surprising: some variables you declared may not
7814exist at all; flow of control may briefly move where you did not expect
7815it; some statements may not be executed because they compute constant
7816results or their values are already at hand; some statements may execute
7817in different places because they have been moved out of loops.
7818Nevertheless it is possible to debug optimized output.  This makes it
7819reasonable to use the optimizer for programs that might have bugs.
7820
7821 If you are not using some other optimization option, consider using
7822'-Og' (*note Optimize Options::) with '-g'.  With no '-O' option at all,
7823some compiler passes that collect information useful for debugging do
7824not run at all, so that '-Og' may result in a better debugging
7825experience.
7826
7827'-g'
7828     Produce debugging information in the operating system's native
7829     format (stabs, COFF, XCOFF, or DWARF).  GDB can work with this
7830     debugging information.
7831
7832     On most systems that use stabs format, '-g' enables use of extra
7833     debugging information that only GDB can use; this extra information
7834     makes debugging work better in GDB but probably makes other
7835     debuggers crash or refuse to read the program.  If you want to
7836     control for certain whether to generate the extra information, use
7837     '-gstabs+', '-gstabs', '-gxcoff+', '-gxcoff', or '-gvms' (see
7838     below).
7839
7840'-ggdb'
7841     Produce debugging information for use by GDB.  This means to use
7842     the most expressive format available (DWARF, stabs, or the native
7843     format if neither of those are supported), including GDB extensions
7844     if at all possible.
7845
7846'-gdwarf'
7847'-gdwarf-VERSION'
7848     Produce debugging information in DWARF format (if that is
7849     supported).  The value of VERSION may be either 2, 3, 4 or 5; the
7850     default version for most targets is 4.  DWARF Version 5 is only
7851     experimental.
7852
7853     Note that with DWARF Version 2, some ports require and always use
7854     some non-conflicting DWARF 3 extensions in the unwind tables.
7855
7856     Version 4 may require GDB 7.0 and '-fvar-tracking-assignments' for
7857     maximum benefit.
7858
7859     GCC no longer supports DWARF Version 1, which is substantially
7860     different than Version 2 and later.  For historical reasons, some
7861     other DWARF-related options such as '-fno-dwarf2-cfi-asm') retain a
7862     reference to DWARF Version 2 in their names, but apply to all
7863     currently-supported versions of DWARF.
7864
7865'-gstabs'
7866     Produce debugging information in stabs format (if that is
7867     supported), without GDB extensions.  This is the format used by DBX
7868     on most BSD systems.  On MIPS, Alpha and System V Release 4 systems
7869     this option produces stabs debugging output that is not understood
7870     by DBX.  On System V Release 4 systems this option requires the GNU
7871     assembler.
7872
7873'-gstabs+'
7874     Produce debugging information in stabs format (if that is
7875     supported), using GNU extensions understood only by the GNU
7876     debugger (GDB).  The use of these extensions is likely to make
7877     other debuggers crash or refuse to read the program.
7878
7879'-gxcoff'
7880     Produce debugging information in XCOFF format (if that is
7881     supported).  This is the format used by the DBX debugger on IBM
7882     RS/6000 systems.
7883
7884'-gxcoff+'
7885     Produce debugging information in XCOFF format (if that is
7886     supported), using GNU extensions understood only by the GNU
7887     debugger (GDB).  The use of these extensions is likely to make
7888     other debuggers crash or refuse to read the program, and may cause
7889     assemblers other than the GNU assembler (GAS) to fail with an
7890     error.
7891
7892'-gvms'
7893     Produce debugging information in Alpha/VMS debug format (if that is
7894     supported).  This is the format used by DEBUG on Alpha/VMS systems.
7895
7896'-gLEVEL'
7897'-ggdbLEVEL'
7898'-gstabsLEVEL'
7899'-gxcoffLEVEL'
7900'-gvmsLEVEL'
7901     Request debugging information and also use LEVEL to specify how
7902     much information.  The default level is 2.
7903
7904     Level 0 produces no debug information at all.  Thus, '-g0' negates
7905     '-g'.
7906
7907     Level 1 produces minimal information, enough for making backtraces
7908     in parts of the program that you don't plan to debug.  This
7909     includes descriptions of functions and external variables, and line
7910     number tables, but no information about local variables.
7911
7912     Level 3 includes extra information, such as all the macro
7913     definitions present in the program.  Some debuggers support macro
7914     expansion when you use '-g3'.
7915
7916     If you use multiple '-g' options, with or without level numbers,
7917     the last such option is the one that is effective.
7918
7919     '-gdwarf' does not accept a concatenated debug level, to avoid
7920     confusion with '-gdwarf-LEVEL'.  Instead use an additional
7921     '-gLEVEL' option to change the debug level for DWARF.
7922
7923'-fno-eliminate-unused-debug-symbols'
7924     By default, no debug information is produced for symbols that are
7925     not actually used.  Use this option if you want debug information
7926     for all symbols.
7927
7928'-femit-class-debug-always'
7929     Instead of emitting debugging information for a C++ class in only
7930     one object file, emit it in all object files using the class.  This
7931     option should be used only with debuggers that are unable to handle
7932     the way GCC normally emits debugging information for classes
7933     because using this option increases the size of debugging
7934     information by as much as a factor of two.
7935
7936'-fno-merge-debug-strings'
7937     Direct the linker to not merge together strings in the debugging
7938     information that are identical in different object files.  Merging
7939     is not supported by all assemblers or linkers.  Merging decreases
7940     the size of the debug information in the output file at the cost of
7941     increasing link processing time.  Merging is enabled by default.
7942
7943'-fdebug-prefix-map=OLD=NEW'
7944     When compiling files residing in directory 'OLD', record debugging
7945     information describing them as if the files resided in directory
7946     'NEW' instead.  This can be used to replace a build-time path with
7947     an install-time path in the debug info.  It can also be used to
7948     change an absolute path to a relative path by using '.' for NEW.
7949     This can give more reproducible builds, which are location
7950     independent, but may require an extra command to tell GDB where to
7951     find the source files.  See also '-ffile-prefix-map'.
7952
7953'-fvar-tracking'
7954     Run variable tracking pass.  It computes where variables are stored
7955     at each position in code.  Better debugging information is then
7956     generated (if the debugging information format supports this
7957     information).
7958
7959     It is enabled by default when compiling with optimization ('-Os',
7960     '-O', '-O2', ...), debugging information ('-g') and the debug info
7961     format supports it.
7962
7963'-fvar-tracking-assignments'
7964     Annotate assignments to user variables early in the compilation and
7965     attempt to carry the annotations over throughout the compilation
7966     all the way to the end, in an attempt to improve debug information
7967     while optimizing.  Use of '-gdwarf-4' is recommended along with it.
7968
7969     It can be enabled even if var-tracking is disabled, in which case
7970     annotations are created and maintained, but discarded at the end.
7971     By default, this flag is enabled together with '-fvar-tracking',
7972     except when selective scheduling is enabled.
7973
7974'-gsplit-dwarf'
7975     Separate as much DWARF debugging information as possible into a
7976     separate output file with the extension '.dwo'.  This option allows
7977     the build system to avoid linking files with debug information.  To
7978     be useful, this option requires a debugger capable of reading
7979     '.dwo' files.
7980
7981'-gdescribe-dies'
7982     Add description attributes to some DWARF DIEs that have no name
7983     attribute, such as artificial variables, external references and
7984     call site parameter DIEs.
7985
7986'-gpubnames'
7987     Generate DWARF '.debug_pubnames' and '.debug_pubtypes' sections.
7988
7989'-ggnu-pubnames'
7990     Generate '.debug_pubnames' and '.debug_pubtypes' sections in a
7991     format suitable for conversion into a GDB index.  This option is
7992     only useful with a linker that can produce GDB index version 7.
7993
7994'-fdebug-types-section'
7995     When using DWARF Version 4 or higher, type DIEs can be put into
7996     their own '.debug_types' section instead of making them part of the
7997     '.debug_info' section.  It is more efficient to put them in a
7998     separate comdat section since the linker can then remove
7999     duplicates.  But not all DWARF consumers support '.debug_types'
8000     sections yet and on some objects '.debug_types' produces larger
8001     instead of smaller debugging information.
8002
8003'-grecord-gcc-switches'
8004'-gno-record-gcc-switches'
8005     This switch causes the command-line options used to invoke the
8006     compiler that may affect code generation to be appended to the
8007     DW_AT_producer attribute in DWARF debugging information.  The
8008     options are concatenated with spaces separating them from each
8009     other and from the compiler version.  It is enabled by default.
8010     See also '-frecord-gcc-switches' for another way of storing
8011     compiler options into the object file.
8012
8013'-gstrict-dwarf'
8014     Disallow using extensions of later DWARF standard version than
8015     selected with '-gdwarf-VERSION'.  On most targets using
8016     non-conflicting DWARF extensions from later standard versions is
8017     allowed.
8018
8019'-gno-strict-dwarf'
8020     Allow using extensions of later DWARF standard version than
8021     selected with '-gdwarf-VERSION'.
8022
8023'-gas-loc-support'
8024     Inform the compiler that the assembler supports '.loc' directives.
8025     It may then use them for the assembler to generate DWARF2+ line
8026     number tables.
8027
8028     This is generally desirable, because assembler-generated
8029     line-number tables are a lot more compact than those the compiler
8030     can generate itself.
8031
8032     This option will be enabled by default if, at GCC configure time,
8033     the assembler was found to support such directives.
8034
8035'-gno-as-loc-support'
8036     Force GCC to generate DWARF2+ line number tables internally, if
8037     DWARF2+ line number tables are to be generated.
8038
8039'-gas-locview-support'
8040     Inform the compiler that the assembler supports 'view' assignment
8041     and reset assertion checking in '.loc' directives.
8042
8043     This option will be enabled by default if, at GCC configure time,
8044     the assembler was found to support them.
8045
8046'-gno-as-locview-support'
8047     Force GCC to assign view numbers internally, if
8048     '-gvariable-location-views' are explicitly requested.
8049
8050'-gcolumn-info'
8051'-gno-column-info'
8052     Emit location column information into DWARF debugging information,
8053     rather than just file and line.  This option is enabled by default.
8054
8055'-gstatement-frontiers'
8056'-gno-statement-frontiers'
8057     This option causes GCC to create markers in the internal
8058     representation at the beginning of statements, and to keep them
8059     roughly in place throughout compilation, using them to guide the
8060     output of 'is_stmt' markers in the line number table.  This is
8061     enabled by default when compiling with optimization ('-Os', '-O',
8062     '-O2', ...), and outputting DWARF 2 debug information at the normal
8063     level.
8064
8065'-gvariable-location-views'
8066'-gvariable-location-views=incompat5'
8067'-gno-variable-location-views'
8068     Augment variable location lists with progressive view numbers
8069     implied from the line number table.  This enables debug information
8070     consumers to inspect state at certain points of the program, even
8071     if no instructions associated with the corresponding source
8072     locations are present at that point.  If the assembler lacks
8073     support for view numbers in line number tables, this will cause the
8074     compiler to emit the line number table, which generally makes them
8075     somewhat less compact.  The augmented line number tables and
8076     location lists are fully backward-compatible, so they can be
8077     consumed by debug information consumers that are not aware of these
8078     augmentations, but they won't derive any benefit from them either.
8079
8080     This is enabled by default when outputting DWARF 2 debug
8081     information at the normal level, as long as there is assembler
8082     support, '-fvar-tracking-assignments' is enabled and
8083     '-gstrict-dwarf' is not.  When assembler support is not available,
8084     this may still be enabled, but it will force GCC to output internal
8085     line number tables, and if '-ginternal-reset-location-views' is not
8086     enabled, that will most certainly lead to silently mismatching
8087     location views.
8088
8089     There is a proposed representation for view numbers that is not
8090     backward compatible with the location list format introduced in
8091     DWARF 5, that can be enabled with
8092     '-gvariable-location-views=incompat5'.  This option may be removed
8093     in the future, is only provided as a reference implementation of
8094     the proposed representation.  Debug information consumers are not
8095     expected to support this extended format, and they would be
8096     rendered unable to decode location lists using it.
8097
8098'-ginternal-reset-location-views'
8099'-gno-internal-reset-location-views'
8100     Attempt to determine location views that can be omitted from
8101     location view lists.  This requires the compiler to have very
8102     accurate insn length estimates, which isn't always the case, and it
8103     may cause incorrect view lists to be generated silently when using
8104     an assembler that does not support location view lists.  The GNU
8105     assembler will flag any such error as a 'view number mismatch'.
8106     This is only enabled on ports that define a reliable estimation
8107     function.
8108
8109'-ginline-points'
8110'-gno-inline-points'
8111     Generate extended debug information for inlined functions.
8112     Location view tracking markers are inserted at inlined entry
8113     points, so that address and view numbers can be computed and output
8114     in debug information.  This can be enabled independently of
8115     location views, in which case the view numbers won't be output, but
8116     it can only be enabled along with statement frontiers, and it is
8117     only enabled by default if location views are enabled.
8118
8119'-gz[=TYPE]'
8120     Produce compressed debug sections in DWARF format, if that is
8121     supported.  If TYPE is not given, the default type depends on the
8122     capabilities of the assembler and linker used.  TYPE may be one of
8123     'none' (don't compress debug sections), 'zlib' (use zlib
8124     compression in ELF gABI format), or 'zlib-gnu' (use zlib
8125     compression in traditional GNU format).  If the linker doesn't
8126     support writing compressed debug sections, the option is rejected.
8127     Otherwise, if the assembler does not support them, '-gz' is
8128     silently ignored when producing object files.
8129
8130'-femit-struct-debug-baseonly'
8131     Emit debug information for struct-like types only when the base
8132     name of the compilation source file matches the base name of file
8133     in which the struct is defined.
8134
8135     This option substantially reduces the size of debugging
8136     information, but at significant potential loss in type information
8137     to the debugger.  See '-femit-struct-debug-reduced' for a less
8138     aggressive option.  See '-femit-struct-debug-detailed' for more
8139     detailed control.
8140
8141     This option works only with DWARF debug output.
8142
8143'-femit-struct-debug-reduced'
8144     Emit debug information for struct-like types only when the base
8145     name of the compilation source file matches the base name of file
8146     in which the type is defined, unless the struct is a template or
8147     defined in a system header.
8148
8149     This option significantly reduces the size of debugging
8150     information, with some potential loss in type information to the
8151     debugger.  See '-femit-struct-debug-baseonly' for a more aggressive
8152     option.  See '-femit-struct-debug-detailed' for more detailed
8153     control.
8154
8155     This option works only with DWARF debug output.
8156
8157'-femit-struct-debug-detailed[=SPEC-LIST]'
8158     Specify the struct-like types for which the compiler generates
8159     debug information.  The intent is to reduce duplicate struct debug
8160     information between different object files within the same program.
8161
8162     This option is a detailed version of '-femit-struct-debug-reduced'
8163     and '-femit-struct-debug-baseonly', which serves for most needs.
8164
8165     A specification has the syntax
8166     ['dir:'|'ind:']['ord:'|'gen:']('any'|'sys'|'base'|'none')
8167
8168     The optional first word limits the specification to structs that
8169     are used directly ('dir:') or used indirectly ('ind:').  A struct
8170     type is used directly when it is the type of a variable, member.
8171     Indirect uses arise through pointers to structs.  That is, when use
8172     of an incomplete struct is valid, the use is indirect.  An example
8173     is 'struct one direct; struct two * indirect;'.
8174
8175     The optional second word limits the specification to ordinary
8176     structs ('ord:') or generic structs ('gen:').  Generic structs are
8177     a bit complicated to explain.  For C++, these are non-explicit
8178     specializations of template classes, or non-template classes within
8179     the above.  Other programming languages have generics, but
8180     '-femit-struct-debug-detailed' does not yet implement them.
8181
8182     The third word specifies the source files for those structs for
8183     which the compiler should emit debug information.  The values
8184     'none' and 'any' have the normal meaning.  The value 'base' means
8185     that the base of name of the file in which the type declaration
8186     appears must match the base of the name of the main compilation
8187     file.  In practice, this means that when compiling 'foo.c', debug
8188     information is generated for types declared in that file and
8189     'foo.h', but not other header files.  The value 'sys' means those
8190     types satisfying 'base' or declared in system or compiler headers.
8191
8192     You may need to experiment to determine the best settings for your
8193     application.
8194
8195     The default is '-femit-struct-debug-detailed=all'.
8196
8197     This option works only with DWARF debug output.
8198
8199'-fno-dwarf2-cfi-asm'
8200     Emit DWARF unwind info as compiler generated '.eh_frame' section
8201     instead of using GAS '.cfi_*' directives.
8202
8203'-fno-eliminate-unused-debug-types'
8204     Normally, when producing DWARF output, GCC avoids producing debug
8205     symbol output for types that are nowhere used in the source file
8206     being compiled.  Sometimes it is useful to have GCC emit debugging
8207     information for all types declared in a compilation unit,
8208     regardless of whether or not they are actually used in that
8209     compilation unit, for example if, in the debugger, you want to cast
8210     a value to a type that is not actually used in your program (but is
8211     declared).  More often, however, this results in a significant
8212     amount of wasted space.
8213
8214
8215File: gcc.info,  Node: Optimize Options,  Next: Instrumentation Options,  Prev: Debugging Options,  Up: Invoking GCC
8216
82173.11 Options That Control Optimization
8218======================================
8219
8220These options control various sorts of optimizations.
8221
8222 Without any optimization option, the compiler's goal is to reduce the
8223cost of compilation and to make debugging produce the expected results.
8224Statements are independent: if you stop the program with a breakpoint
8225between statements, you can then assign a new value to any variable or
8226change the program counter to any other statement in the function and
8227get exactly the results you expect from the source code.
8228
8229 Turning on optimization flags makes the compiler attempt to improve the
8230performance and/or code size at the expense of compilation time and
8231possibly the ability to debug the program.
8232
8233 The compiler performs optimization based on the knowledge it has of the
8234program.  Compiling multiple files at once to a single output file mode
8235allows the compiler to use information gained from all of the files when
8236compiling each of them.
8237
8238 Not all optimizations are controlled directly by a flag.  Only
8239optimizations that have a flag are listed in this section.
8240
8241 Most optimizations are completely disabled at '-O0' or if an '-O' level
8242is not set on the command line, even if individual optimization flags
8243are specified.  Similarly, '-Og' suppresses many optimization passes.
8244
8245 Depending on the target and how GCC was configured, a slightly
8246different set of optimizations may be enabled at each '-O' level than
8247those listed here.  You can invoke GCC with '-Q --help=optimizers' to
8248find out the exact set of optimizations that are enabled at each level.
8249*Note Overall Options::, for examples.
8250
8251'-O'
8252'-O1'
8253     Optimize.  Optimizing compilation takes somewhat more time, and a
8254     lot more memory for a large function.
8255
8256     With '-O', the compiler tries to reduce code size and execution
8257     time, without performing any optimizations that take a great deal
8258     of compilation time.
8259
8260     '-O' turns on the following optimization flags:
8261
8262          -fauto-inc-dec
8263          -fbranch-count-reg
8264          -fcombine-stack-adjustments
8265          -fcompare-elim
8266          -fcprop-registers
8267          -fdce
8268          -fdefer-pop
8269          -fdelayed-branch
8270          -fdse
8271          -fforward-propagate
8272          -fguess-branch-probability
8273          -fif-conversion
8274          -fif-conversion2
8275          -finline-functions-called-once
8276          -fipa-profile
8277          -fipa-pure-const
8278          -fipa-reference
8279          -fipa-reference-addressable
8280          -fmerge-constants
8281          -fmove-loop-invariants
8282          -fomit-frame-pointer
8283          -freorder-blocks
8284          -fshrink-wrap
8285          -fshrink-wrap-separate
8286          -fsplit-wide-types
8287          -fssa-backprop
8288          -fssa-phiopt
8289          -ftree-bit-ccp
8290          -ftree-ccp
8291          -ftree-ch
8292          -ftree-coalesce-vars
8293          -ftree-copy-prop
8294          -ftree-dce
8295          -ftree-dominator-opts
8296          -ftree-dse
8297          -ftree-forwprop
8298          -ftree-fre
8299          -ftree-phiprop
8300          -ftree-pta
8301          -ftree-scev-cprop
8302          -ftree-sink
8303          -ftree-slsr
8304          -ftree-sra
8305          -ftree-ter
8306          -funit-at-a-time
8307
8308'-O2'
8309     Optimize even more.  GCC performs nearly all supported
8310     optimizations that do not involve a space-speed tradeoff.  As
8311     compared to '-O', this option increases both compilation time and
8312     the performance of the generated code.
8313
8314     '-O2' turns on all optimization flags specified by '-O'.  It also
8315     turns on the following optimization flags:
8316
8317          -falign-functions  -falign-jumps
8318          -falign-labels  -falign-loops
8319          -fcaller-saves
8320          -fcode-hoisting
8321          -fcrossjumping
8322          -fcse-follow-jumps  -fcse-skip-blocks
8323          -fdelete-null-pointer-checks
8324          -fdevirtualize  -fdevirtualize-speculatively
8325          -fexpensive-optimizations
8326          -ffinite-loops
8327          -fgcse  -fgcse-lm
8328          -fhoist-adjacent-loads
8329          -finline-functions
8330          -finline-small-functions
8331          -findirect-inlining
8332          -fipa-bit-cp  -fipa-cp  -fipa-icf
8333          -fipa-ra  -fipa-sra  -fipa-vrp
8334          -fisolate-erroneous-paths-dereference
8335          -flra-remat
8336          -foptimize-sibling-calls
8337          -foptimize-strlen
8338          -fpartial-inlining
8339          -fpeephole2
8340          -freorder-blocks-algorithm=stc
8341          -freorder-blocks-and-partition  -freorder-functions
8342          -frerun-cse-after-loop
8343          -fschedule-insns  -fschedule-insns2
8344          -fsched-interblock  -fsched-spec
8345          -fstore-merging
8346          -fstrict-aliasing
8347          -fthread-jumps
8348          -ftree-builtin-call-dce
8349          -ftree-pre
8350          -ftree-switch-conversion  -ftree-tail-merge
8351          -ftree-vrp
8352
8353     Please note the warning under '-fgcse' about invoking '-O2' on
8354     programs that use computed gotos.
8355
8356'-O3'
8357     Optimize yet more.  '-O3' turns on all optimizations specified by
8358     '-O2' and also turns on the following optimization flags:
8359
8360          -fgcse-after-reload
8361          -fipa-cp-clone
8362          -floop-interchange
8363          -floop-unroll-and-jam
8364          -fpeel-loops
8365          -fpredictive-commoning
8366          -fsplit-loops
8367          -fsplit-paths
8368          -ftree-loop-distribution
8369          -ftree-loop-vectorize
8370          -ftree-partial-pre
8371          -ftree-slp-vectorize
8372          -funswitch-loops
8373          -fvect-cost-model
8374          -fvect-cost-model=dynamic
8375          -fversion-loops-for-strides
8376
8377'-O0'
8378     Reduce compilation time and make debugging produce the expected
8379     results.  This is the default.
8380
8381'-Os'
8382     Optimize for size.  '-Os' enables all '-O2' optimizations except
8383     those that often increase code size:
8384
8385          -falign-functions  -falign-jumps
8386          -falign-labels  -falign-loops
8387          -fprefetch-loop-arrays  -freorder-blocks-algorithm=stc
8388
8389     It also enables '-finline-functions', causes the compiler to tune
8390     for code size rather than execution speed, and performs further
8391     optimizations designed to reduce code size.
8392
8393'-Ofast'
8394     Disregard strict standards compliance.  '-Ofast' enables all '-O3'
8395     optimizations.  It also enables optimizations that are not valid
8396     for all standard-compliant programs.  It turns on '-ffast-math',
8397     '-fallow-store-data-races' and the Fortran-specific
8398     '-fstack-arrays', unless '-fmax-stack-var-size' is specified, and
8399     '-fno-protect-parens'.
8400
8401'-Og'
8402     Optimize debugging experience.  '-Og' should be the optimization
8403     level of choice for the standard edit-compile-debug cycle, offering
8404     a reasonable level of optimization while maintaining fast
8405     compilation and a good debugging experience.  It is a better choice
8406     than '-O0' for producing debuggable code because some compiler
8407     passes that collect debug information are disabled at '-O0'.
8408
8409     Like '-O0', '-Og' completely disables a number of optimization
8410     passes so that individual options controlling them have no effect.
8411     Otherwise '-Og' enables all '-O1' optimization flags except for
8412     those that may interfere with debugging:
8413
8414          -fbranch-count-reg  -fdelayed-branch
8415          -fdse  -fif-conversion  -fif-conversion2
8416          -finline-functions-called-once
8417          -fmove-loop-invariants  -fssa-phiopt
8418          -ftree-bit-ccp  -ftree-dse  -ftree-pta  -ftree-sra
8419
8420 If you use multiple '-O' options, with or without level numbers, the
8421last such option is the one that is effective.
8422
8423 Options of the form '-fFLAG' specify machine-independent flags.  Most
8424flags have both positive and negative forms; the negative form of
8425'-ffoo' is '-fno-foo'.  In the table below, only one of the forms is
8426listed--the one you typically use.  You can figure out the other form by
8427either removing 'no-' or adding it.
8428
8429 The following options control specific optimizations.  They are either
8430activated by '-O' options or are related to ones that are.  You can use
8431the following flags in the rare cases when "fine-tuning" of
8432optimizations to be performed is desired.
8433
8434'-fno-defer-pop'
8435     For machines that must pop arguments after a function call, always
8436     pop the arguments as soon as each function returns.  At levels
8437     '-O1' and higher, '-fdefer-pop' is the default; this allows the
8438     compiler to let arguments accumulate on the stack for several
8439     function calls and pop them all at once.
8440
8441'-fforward-propagate'
8442     Perform a forward propagation pass on RTL.  The pass tries to
8443     combine two instructions and checks if the result can be
8444     simplified.  If loop unrolling is active, two passes are performed
8445     and the second is scheduled after loop unrolling.
8446
8447     This option is enabled by default at optimization levels '-O',
8448     '-O2', '-O3', '-Os'.
8449
8450'-ffp-contract=STYLE'
8451     '-ffp-contract=off' disables floating-point expression contraction.
8452     '-ffp-contract=fast' enables floating-point expression contraction
8453     such as forming of fused multiply-add operations if the target has
8454     native support for them.  '-ffp-contract=on' enables floating-point
8455     expression contraction if allowed by the language standard.  This
8456     is currently not implemented and treated equal to
8457     '-ffp-contract=off'.
8458
8459     The default is '-ffp-contract=fast'.
8460
8461'-fomit-frame-pointer'
8462     Omit the frame pointer in functions that don't need one.  This
8463     avoids the instructions to save, set up and restore the frame
8464     pointer; on many targets it also makes an extra register available.
8465
8466     On some targets this flag has no effect because the standard
8467     calling sequence always uses a frame pointer, so it cannot be
8468     omitted.
8469
8470     Note that '-fno-omit-frame-pointer' doesn't guarantee the frame
8471     pointer is used in all functions.  Several targets always omit the
8472     frame pointer in leaf functions.
8473
8474     Enabled by default at '-O' and higher.
8475
8476'-foptimize-sibling-calls'
8477     Optimize sibling and tail recursive calls.
8478
8479     Enabled at levels '-O2', '-O3', '-Os'.
8480
8481'-foptimize-strlen'
8482     Optimize various standard C string functions (e.g. 'strlen',
8483     'strchr' or 'strcpy') and their '_FORTIFY_SOURCE' counterparts into
8484     faster alternatives.
8485
8486     Enabled at levels '-O2', '-O3'.
8487
8488'-fno-inline'
8489     Do not expand any functions inline apart from those marked with the
8490     'always_inline' attribute.  This is the default when not
8491     optimizing.
8492
8493     Single functions can be exempted from inlining by marking them with
8494     the 'noinline' attribute.
8495
8496'-finline-small-functions'
8497     Integrate functions into their callers when their body is smaller
8498     than expected function call code (so overall size of program gets
8499     smaller).  The compiler heuristically decides which functions are
8500     simple enough to be worth integrating in this way.  This inlining
8501     applies to all functions, even those not declared inline.
8502
8503     Enabled at levels '-O2', '-O3', '-Os'.
8504
8505'-findirect-inlining'
8506     Inline also indirect calls that are discovered to be known at
8507     compile time thanks to previous inlining.  This option has any
8508     effect only when inlining itself is turned on by the
8509     '-finline-functions' or '-finline-small-functions' options.
8510
8511     Enabled at levels '-O2', '-O3', '-Os'.
8512
8513'-finline-functions'
8514     Consider all functions for inlining, even if they are not declared
8515     inline.  The compiler heuristically decides which functions are
8516     worth integrating in this way.
8517
8518     If all calls to a given function are integrated, and the function
8519     is declared 'static', then the function is normally not output as
8520     assembler code in its own right.
8521
8522     Enabled at levels '-O2', '-O3', '-Os'.  Also enabled by
8523     '-fprofile-use' and '-fauto-profile'.
8524
8525'-finline-functions-called-once'
8526     Consider all 'static' functions called once for inlining into their
8527     caller even if they are not marked 'inline'.  If a call to a given
8528     function is integrated, then the function is not output as
8529     assembler code in its own right.
8530
8531     Enabled at levels '-O1', '-O2', '-O3' and '-Os', but not '-Og'.
8532
8533'-fearly-inlining'
8534     Inline functions marked by 'always_inline' and functions whose body
8535     seems smaller than the function call overhead early before doing
8536     '-fprofile-generate' instrumentation and real inlining pass.  Doing
8537     so makes profiling significantly cheaper and usually inlining
8538     faster on programs having large chains of nested wrapper functions.
8539
8540     Enabled by default.
8541
8542'-fipa-sra'
8543     Perform interprocedural scalar replacement of aggregates, removal
8544     of unused parameters and replacement of parameters passed by
8545     reference by parameters passed by value.
8546
8547     Enabled at levels '-O2', '-O3' and '-Os'.
8548
8549'-finline-limit=N'
8550     By default, GCC limits the size of functions that can be inlined.
8551     This flag allows coarse control of this limit.  N is the size of
8552     functions that can be inlined in number of pseudo instructions.
8553
8554     Inlining is actually controlled by a number of parameters, which
8555     may be specified individually by using '--param NAME=VALUE'.  The
8556     '-finline-limit=N' option sets some of these parameters as follows:
8557
8558     'max-inline-insns-single'
8559          is set to N/2.
8560     'max-inline-insns-auto'
8561          is set to N/2.
8562
8563     See below for a documentation of the individual parameters
8564     controlling inlining and for the defaults of these parameters.
8565
8566     _Note:_ there may be no value to '-finline-limit' that results in
8567     default behavior.
8568
8569     _Note:_ pseudo instruction represents, in this particular context,
8570     an abstract measurement of function's size.  In no way does it
8571     represent a count of assembly instructions and as such its exact
8572     meaning might change from one release to an another.
8573
8574'-fno-keep-inline-dllexport'
8575     This is a more fine-grained version of '-fkeep-inline-functions',
8576     which applies only to functions that are declared using the
8577     'dllexport' attribute or declspec.  *Note Declaring Attributes of
8578     Functions: Function Attributes.
8579
8580'-fkeep-inline-functions'
8581     In C, emit 'static' functions that are declared 'inline' into the
8582     object file, even if the function has been inlined into all of its
8583     callers.  This switch does not affect functions using the 'extern
8584     inline' extension in GNU C90.  In C++, emit any and all inline
8585     functions into the object file.
8586
8587'-fkeep-static-functions'
8588     Emit 'static' functions into the object file, even if the function
8589     is never used.
8590
8591'-fkeep-static-consts'
8592     Emit variables declared 'static const' when optimization isn't
8593     turned on, even if the variables aren't referenced.
8594
8595     GCC enables this option by default.  If you want to force the
8596     compiler to check if a variable is referenced, regardless of
8597     whether or not optimization is turned on, use the
8598     '-fno-keep-static-consts' option.
8599
8600'-fmerge-constants'
8601     Attempt to merge identical constants (string constants and
8602     floating-point constants) across compilation units.
8603
8604     This option is the default for optimized compilation if the
8605     assembler and linker support it.  Use '-fno-merge-constants' to
8606     inhibit this behavior.
8607
8608     Enabled at levels '-O', '-O2', '-O3', '-Os'.
8609
8610'-fmerge-all-constants'
8611     Attempt to merge identical constants and identical variables.
8612
8613     This option implies '-fmerge-constants'.  In addition to
8614     '-fmerge-constants' this considers e.g. even constant initialized
8615     arrays or initialized constant variables with integral or
8616     floating-point types.  Languages like C or C++ require each
8617     variable, including multiple instances of the same variable in
8618     recursive calls, to have distinct locations, so using this option
8619     results in non-conforming behavior.
8620
8621'-fmodulo-sched'
8622     Perform swing modulo scheduling immediately before the first
8623     scheduling pass.  This pass looks at innermost loops and reorders
8624     their instructions by overlapping different iterations.
8625
8626'-fmodulo-sched-allow-regmoves'
8627     Perform more aggressive SMS-based modulo scheduling with register
8628     moves allowed.  By setting this flag certain anti-dependences edges
8629     are deleted, which triggers the generation of reg-moves based on
8630     the life-range analysis.  This option is effective only with
8631     '-fmodulo-sched' enabled.
8632
8633'-fno-branch-count-reg'
8634     Disable the optimization pass that scans for opportunities to use
8635     "decrement and branch" instructions on a count register instead of
8636     instruction sequences that decrement a register, compare it against
8637     zero, and then branch based upon the result.  This option is only
8638     meaningful on architectures that support such instructions, which
8639     include x86, PowerPC, IA-64 and S/390.  Note that the
8640     '-fno-branch-count-reg' option doesn't remove the decrement and
8641     branch instructions from the generated instruction stream
8642     introduced by other optimization passes.
8643
8644     The default is '-fbranch-count-reg' at '-O1' and higher, except for
8645     '-Og'.
8646
8647'-fno-function-cse'
8648     Do not put function addresses in registers; make each instruction
8649     that calls a constant function contain the function's address
8650     explicitly.
8651
8652     This option results in less efficient code, but some strange hacks
8653     that alter the assembler output may be confused by the
8654     optimizations performed when this option is not used.
8655
8656     The default is '-ffunction-cse'
8657
8658'-fno-zero-initialized-in-bss'
8659     If the target supports a BSS section, GCC by default puts variables
8660     that are initialized to zero into BSS.  This can save space in the
8661     resulting code.
8662
8663     This option turns off this behavior because some programs
8664     explicitly rely on variables going to the data section--e.g., so
8665     that the resulting executable can find the beginning of that
8666     section and/or make assumptions based on that.
8667
8668     The default is '-fzero-initialized-in-bss'.
8669
8670'-fthread-jumps'
8671     Perform optimizations that check to see if a jump branches to a
8672     location where another comparison subsumed by the first is found.
8673     If so, the first branch is redirected to either the destination of
8674     the second branch or a point immediately following it, depending on
8675     whether the condition is known to be true or false.
8676
8677     Enabled at levels '-O2', '-O3', '-Os'.
8678
8679'-fsplit-wide-types'
8680     When using a type that occupies multiple registers, such as 'long
8681     long' on a 32-bit system, split the registers apart and allocate
8682     them independently.  This normally generates better code for those
8683     types, but may make debugging more difficult.
8684
8685     Enabled at levels '-O', '-O2', '-O3', '-Os'.
8686
8687'-fsplit-wide-types-early'
8688     Fully split wide types early, instead of very late.  This option
8689     has no effect unless '-fsplit-wide-types' is turned on.
8690
8691     This is the default on some targets.
8692
8693'-fcse-follow-jumps'
8694     In common subexpression elimination (CSE), scan through jump
8695     instructions when the target of the jump is not reached by any
8696     other path.  For example, when CSE encounters an 'if' statement
8697     with an 'else' clause, CSE follows the jump when the condition
8698     tested is false.
8699
8700     Enabled at levels '-O2', '-O3', '-Os'.
8701
8702'-fcse-skip-blocks'
8703     This is similar to '-fcse-follow-jumps', but causes CSE to follow
8704     jumps that conditionally skip over blocks.  When CSE encounters a
8705     simple 'if' statement with no else clause, '-fcse-skip-blocks'
8706     causes CSE to follow the jump around the body of the 'if'.
8707
8708     Enabled at levels '-O2', '-O3', '-Os'.
8709
8710'-frerun-cse-after-loop'
8711     Re-run common subexpression elimination after loop optimizations
8712     are performed.
8713
8714     Enabled at levels '-O2', '-O3', '-Os'.
8715
8716'-fgcse'
8717     Perform a global common subexpression elimination pass.  This pass
8718     also performs global constant and copy propagation.
8719
8720     _Note:_ When compiling a program using computed gotos, a GCC
8721     extension, you may get better run-time performance if you disable
8722     the global common subexpression elimination pass by adding
8723     '-fno-gcse' to the command line.
8724
8725     Enabled at levels '-O2', '-O3', '-Os'.
8726
8727'-fgcse-lm'
8728     When '-fgcse-lm' is enabled, global common subexpression
8729     elimination attempts to move loads that are only killed by stores
8730     into themselves.  This allows a loop containing a load/store
8731     sequence to be changed to a load outside the loop, and a copy/store
8732     within the loop.
8733
8734     Enabled by default when '-fgcse' is enabled.
8735
8736'-fgcse-sm'
8737     When '-fgcse-sm' is enabled, a store motion pass is run after
8738     global common subexpression elimination.  This pass attempts to
8739     move stores out of loops.  When used in conjunction with
8740     '-fgcse-lm', loops containing a load/store sequence can be changed
8741     to a load before the loop and a store after the loop.
8742
8743     Not enabled at any optimization level.
8744
8745'-fgcse-las'
8746     When '-fgcse-las' is enabled, the global common subexpression
8747     elimination pass eliminates redundant loads that come after stores
8748     to the same memory location (both partial and full redundancies).
8749
8750     Not enabled at any optimization level.
8751
8752'-fgcse-after-reload'
8753     When '-fgcse-after-reload' is enabled, a redundant load elimination
8754     pass is performed after reload.  The purpose of this pass is to
8755     clean up redundant spilling.
8756
8757     Enabled by '-fprofile-use' and '-fauto-profile'.
8758
8759'-faggressive-loop-optimizations'
8760     This option tells the loop optimizer to use language constraints to
8761     derive bounds for the number of iterations of a loop.  This assumes
8762     that loop code does not invoke undefined behavior by for example
8763     causing signed integer overflows or out-of-bound array accesses.
8764     The bounds for the number of iterations of a loop are used to guide
8765     loop unrolling and peeling and loop exit test optimizations.  This
8766     option is enabled by default.
8767
8768'-funconstrained-commons'
8769     This option tells the compiler that variables declared in common
8770     blocks (e.g. Fortran) may later be overridden with longer trailing
8771     arrays.  This prevents certain optimizations that depend on knowing
8772     the array bounds.
8773
8774'-fcrossjumping'
8775     Perform cross-jumping transformation.  This transformation unifies
8776     equivalent code and saves code size.  The resulting code may or may
8777     not perform better than without cross-jumping.
8778
8779     Enabled at levels '-O2', '-O3', '-Os'.
8780
8781'-fauto-inc-dec'
8782     Combine increments or decrements of addresses with memory accesses.
8783     This pass is always skipped on architectures that do not have
8784     instructions to support this.  Enabled by default at '-O' and
8785     higher on architectures that support this.
8786
8787'-fdce'
8788     Perform dead code elimination (DCE) on RTL.  Enabled by default at
8789     '-O' and higher.
8790
8791'-fdse'
8792     Perform dead store elimination (DSE) on RTL.  Enabled by default at
8793     '-O' and higher.
8794
8795'-fif-conversion'
8796     Attempt to transform conditional jumps into branch-less
8797     equivalents.  This includes use of conditional moves, min, max, set
8798     flags and abs instructions, and some tricks doable by standard
8799     arithmetics.  The use of conditional execution on chips where it is
8800     available is controlled by '-fif-conversion2'.
8801
8802     Enabled at levels '-O', '-O2', '-O3', '-Os', but not with '-Og'.
8803
8804'-fif-conversion2'
8805     Use conditional execution (where available) to transform
8806     conditional jumps into branch-less equivalents.
8807
8808     Enabled at levels '-O', '-O2', '-O3', '-Os', but not with '-Og'.
8809
8810'-fdeclone-ctor-dtor'
8811     The C++ ABI requires multiple entry points for constructors and
8812     destructors: one for a base subobject, one for a complete object,
8813     and one for a virtual destructor that calls operator delete
8814     afterwards.  For a hierarchy with virtual bases, the base and
8815     complete variants are clones, which means two copies of the
8816     function.  With this option, the base and complete variants are
8817     changed to be thunks that call a common implementation.
8818
8819     Enabled by '-Os'.
8820
8821'-fdelete-null-pointer-checks'
8822     Assume that programs cannot safely dereference null pointers, and
8823     that no code or data element resides at address zero.  This option
8824     enables simple constant folding optimizations at all optimization
8825     levels.  In addition, other optimization passes in GCC use this
8826     flag to control global dataflow analyses that eliminate useless
8827     checks for null pointers; these assume that a memory access to
8828     address zero always results in a trap, so that if a pointer is
8829     checked after it has already been dereferenced, it cannot be null.
8830
8831     Note however that in some environments this assumption is not true.
8832     Use '-fno-delete-null-pointer-checks' to disable this optimization
8833     for programs that depend on that behavior.
8834
8835     This option is enabled by default on most targets.  On Nios II ELF,
8836     it defaults to off.  On AVR, CR16, and MSP430, this option is
8837     completely disabled.
8838
8839     Passes that use the dataflow information are enabled independently
8840     at different optimization levels.
8841
8842'-fdevirtualize'
8843     Attempt to convert calls to virtual functions to direct calls.
8844     This is done both within a procedure and interprocedurally as part
8845     of indirect inlining ('-findirect-inlining') and interprocedural
8846     constant propagation ('-fipa-cp').  Enabled at levels '-O2', '-O3',
8847     '-Os'.
8848
8849'-fdevirtualize-speculatively'
8850     Attempt to convert calls to virtual functions to speculative direct
8851     calls.  Based on the analysis of the type inheritance graph,
8852     determine for a given call the set of likely targets.  If the set
8853     is small, preferably of size 1, change the call into a conditional
8854     deciding between direct and indirect calls.  The speculative calls
8855     enable more optimizations, such as inlining.  When they seem
8856     useless after further optimization, they are converted back into
8857     original form.
8858
8859'-fdevirtualize-at-ltrans'
8860     Stream extra information needed for aggressive devirtualization
8861     when running the link-time optimizer in local transformation mode.
8862     This option enables more devirtualization but significantly
8863     increases the size of streamed data.  For this reason it is
8864     disabled by default.
8865
8866'-fexpensive-optimizations'
8867     Perform a number of minor optimizations that are relatively
8868     expensive.
8869
8870     Enabled at levels '-O2', '-O3', '-Os'.
8871
8872'-free'
8873     Attempt to remove redundant extension instructions.  This is
8874     especially helpful for the x86-64 architecture, which implicitly
8875     zero-extends in 64-bit registers after writing to their lower
8876     32-bit half.
8877
8878     Enabled for Alpha, AArch64 and x86 at levels '-O2', '-O3', '-Os'.
8879
8880'-fno-lifetime-dse'
8881     In C++ the value of an object is only affected by changes within
8882     its lifetime: when the constructor begins, the object has an
8883     indeterminate value, and any changes during the lifetime of the
8884     object are dead when the object is destroyed.  Normally dead store
8885     elimination will take advantage of this; if your code relies on the
8886     value of the object storage persisting beyond the lifetime of the
8887     object, you can use this flag to disable this optimization.  To
8888     preserve stores before the constructor starts (e.g. because your
8889     operator new clears the object storage) but still treat the object
8890     as dead after the destructor, you can use '-flifetime-dse=1'.  The
8891     default behavior can be explicitly selected with
8892     '-flifetime-dse=2'.  '-flifetime-dse=0' is equivalent to
8893     '-fno-lifetime-dse'.
8894
8895'-flive-range-shrinkage'
8896     Attempt to decrease register pressure through register live range
8897     shrinkage.  This is helpful for fast processors with small or
8898     moderate size register sets.
8899
8900'-fira-algorithm=ALGORITHM'
8901     Use the specified coloring algorithm for the integrated register
8902     allocator.  The ALGORITHM argument can be 'priority', which
8903     specifies Chow's priority coloring, or 'CB', which specifies
8904     Chaitin-Briggs coloring.  Chaitin-Briggs coloring is not
8905     implemented for all architectures, but for those targets that do
8906     support it, it is the default because it generates better code.
8907
8908'-fira-region=REGION'
8909     Use specified regions for the integrated register allocator.  The
8910     REGION argument should be one of the following:
8911
8912     'all'
8913          Use all loops as register allocation regions.  This can give
8914          the best results for machines with a small and/or irregular
8915          register set.
8916
8917     'mixed'
8918          Use all loops except for loops with small register pressure as
8919          the regions.  This value usually gives the best results in
8920          most cases and for most architectures, and is enabled by
8921          default when compiling with optimization for speed ('-O',
8922          '-O2', ...).
8923
8924     'one'
8925          Use all functions as a single region.  This typically results
8926          in the smallest code size, and is enabled by default for '-Os'
8927          or '-O0'.
8928
8929'-fira-hoist-pressure'
8930     Use IRA to evaluate register pressure in the code hoisting pass for
8931     decisions to hoist expressions.  This option usually results in
8932     smaller code, but it can slow the compiler down.
8933
8934     This option is enabled at level '-Os' for all targets.
8935
8936'-fira-loop-pressure'
8937     Use IRA to evaluate register pressure in loops for decisions to
8938     move loop invariants.  This option usually results in generation of
8939     faster and smaller code on machines with large register files (>=
8940     32 registers), but it can slow the compiler down.
8941
8942     This option is enabled at level '-O3' for some targets.
8943
8944'-fno-ira-share-save-slots'
8945     Disable sharing of stack slots used for saving call-used hard
8946     registers living through a call.  Each hard register gets a
8947     separate stack slot, and as a result function stack frames are
8948     larger.
8949
8950'-fno-ira-share-spill-slots'
8951     Disable sharing of stack slots allocated for pseudo-registers.
8952     Each pseudo-register that does not get a hard register gets a
8953     separate stack slot, and as a result function stack frames are
8954     larger.
8955
8956'-flra-remat'
8957     Enable CFG-sensitive rematerialization in LRA. Instead of loading
8958     values of spilled pseudos, LRA tries to rematerialize (recalculate)
8959     values if it is profitable.
8960
8961     Enabled at levels '-O2', '-O3', '-Os'.
8962
8963'-fdelayed-branch'
8964     If supported for the target machine, attempt to reorder
8965     instructions to exploit instruction slots available after delayed
8966     branch instructions.
8967
8968     Enabled at levels '-O', '-O2', '-O3', '-Os', but not at '-Og'.
8969
8970'-fschedule-insns'
8971     If supported for the target machine, attempt to reorder
8972     instructions to eliminate execution stalls due to required data
8973     being unavailable.  This helps machines that have slow floating
8974     point or memory load instructions by allowing other instructions to
8975     be issued until the result of the load or floating-point
8976     instruction is required.
8977
8978     Enabled at levels '-O2', '-O3'.
8979
8980'-fschedule-insns2'
8981     Similar to '-fschedule-insns', but requests an additional pass of
8982     instruction scheduling after register allocation has been done.
8983     This is especially useful on machines with a relatively small
8984     number of registers and where memory load instructions take more
8985     than one cycle.
8986
8987     Enabled at levels '-O2', '-O3', '-Os'.
8988
8989'-fno-sched-interblock'
8990     Disable instruction scheduling across basic blocks, which is
8991     normally enabled when scheduling before register allocation, i.e.
8992     with '-fschedule-insns' or at '-O2' or higher.
8993
8994'-fno-sched-spec'
8995     Disable speculative motion of non-load instructions, which is
8996     normally enabled when scheduling before register allocation, i.e.
8997     with '-fschedule-insns' or at '-O2' or higher.
8998
8999'-fsched-pressure'
9000     Enable register pressure sensitive insn scheduling before register
9001     allocation.  This only makes sense when scheduling before register
9002     allocation is enabled, i.e. with '-fschedule-insns' or at '-O2' or
9003     higher.  Usage of this option can improve the generated code and
9004     decrease its size by preventing register pressure increase above
9005     the number of available hard registers and subsequent spills in
9006     register allocation.
9007
9008'-fsched-spec-load'
9009     Allow speculative motion of some load instructions.  This only
9010     makes sense when scheduling before register allocation, i.e. with
9011     '-fschedule-insns' or at '-O2' or higher.
9012
9013'-fsched-spec-load-dangerous'
9014     Allow speculative motion of more load instructions.  This only
9015     makes sense when scheduling before register allocation, i.e. with
9016     '-fschedule-insns' or at '-O2' or higher.
9017
9018'-fsched-stalled-insns'
9019'-fsched-stalled-insns=N'
9020     Define how many insns (if any) can be moved prematurely from the
9021     queue of stalled insns into the ready list during the second
9022     scheduling pass.  '-fno-sched-stalled-insns' means that no insns
9023     are moved prematurely, '-fsched-stalled-insns=0' means there is no
9024     limit on how many queued insns can be moved prematurely.
9025     '-fsched-stalled-insns' without a value is equivalent to
9026     '-fsched-stalled-insns=1'.
9027
9028'-fsched-stalled-insns-dep'
9029'-fsched-stalled-insns-dep=N'
9030     Define how many insn groups (cycles) are examined for a dependency
9031     on a stalled insn that is a candidate for premature removal from
9032     the queue of stalled insns.  This has an effect only during the
9033     second scheduling pass, and only if '-fsched-stalled-insns' is
9034     used.  '-fno-sched-stalled-insns-dep' is equivalent to
9035     '-fsched-stalled-insns-dep=0'.  '-fsched-stalled-insns-dep' without
9036     a value is equivalent to '-fsched-stalled-insns-dep=1'.
9037
9038'-fsched2-use-superblocks'
9039     When scheduling after register allocation, use superblock
9040     scheduling.  This allows motion across basic block boundaries,
9041     resulting in faster schedules.  This option is experimental, as not
9042     all machine descriptions used by GCC model the CPU closely enough
9043     to avoid unreliable results from the algorithm.
9044
9045     This only makes sense when scheduling after register allocation,
9046     i.e. with '-fschedule-insns2' or at '-O2' or higher.
9047
9048'-fsched-group-heuristic'
9049     Enable the group heuristic in the scheduler.  This heuristic favors
9050     the instruction that belongs to a schedule group.  This is enabled
9051     by default when scheduling is enabled, i.e. with '-fschedule-insns'
9052     or '-fschedule-insns2' or at '-O2' or higher.
9053
9054'-fsched-critical-path-heuristic'
9055     Enable the critical-path heuristic in the scheduler.  This
9056     heuristic favors instructions on the critical path.  This is
9057     enabled by default when scheduling is enabled, i.e. with
9058     '-fschedule-insns' or '-fschedule-insns2' or at '-O2' or higher.
9059
9060'-fsched-spec-insn-heuristic'
9061     Enable the speculative instruction heuristic in the scheduler.
9062     This heuristic favors speculative instructions with greater
9063     dependency weakness.  This is enabled by default when scheduling is
9064     enabled, i.e. with '-fschedule-insns' or '-fschedule-insns2' or at
9065     '-O2' or higher.
9066
9067'-fsched-rank-heuristic'
9068     Enable the rank heuristic in the scheduler.  This heuristic favors
9069     the instruction belonging to a basic block with greater size or
9070     frequency.  This is enabled by default when scheduling is enabled,
9071     i.e. with '-fschedule-insns' or '-fschedule-insns2' or at '-O2' or
9072     higher.
9073
9074'-fsched-last-insn-heuristic'
9075     Enable the last-instruction heuristic in the scheduler.  This
9076     heuristic favors the instruction that is less dependent on the last
9077     instruction scheduled.  This is enabled by default when scheduling
9078     is enabled, i.e. with '-fschedule-insns' or '-fschedule-insns2' or
9079     at '-O2' or higher.
9080
9081'-fsched-dep-count-heuristic'
9082     Enable the dependent-count heuristic in the scheduler.  This
9083     heuristic favors the instruction that has more instructions
9084     depending on it.  This is enabled by default when scheduling is
9085     enabled, i.e. with '-fschedule-insns' or '-fschedule-insns2' or at
9086     '-O2' or higher.
9087
9088'-freschedule-modulo-scheduled-loops'
9089     Modulo scheduling is performed before traditional scheduling.  If a
9090     loop is modulo scheduled, later scheduling passes may change its
9091     schedule.  Use this option to control that behavior.
9092
9093'-fselective-scheduling'
9094     Schedule instructions using selective scheduling algorithm.
9095     Selective scheduling runs instead of the first scheduler pass.
9096
9097'-fselective-scheduling2'
9098     Schedule instructions using selective scheduling algorithm.
9099     Selective scheduling runs instead of the second scheduler pass.
9100
9101'-fsel-sched-pipelining'
9102     Enable software pipelining of innermost loops during selective
9103     scheduling.  This option has no effect unless one of
9104     '-fselective-scheduling' or '-fselective-scheduling2' is turned on.
9105
9106'-fsel-sched-pipelining-outer-loops'
9107     When pipelining loops during selective scheduling, also pipeline
9108     outer loops.  This option has no effect unless
9109     '-fsel-sched-pipelining' is turned on.
9110
9111'-fsemantic-interposition'
9112     Some object formats, like ELF, allow interposing of symbols by the
9113     dynamic linker.  This means that for symbols exported from the DSO,
9114     the compiler cannot perform interprocedural propagation, inlining
9115     and other optimizations in anticipation that the function or
9116     variable in question may change.  While this feature is useful, for
9117     example, to rewrite memory allocation functions by a debugging
9118     implementation, it is expensive in the terms of code quality.  With
9119     '-fno-semantic-interposition' the compiler assumes that if
9120     interposition happens for functions the overwriting function will
9121     have precisely the same semantics (and side effects).  Similarly if
9122     interposition happens for variables, the constructor of the
9123     variable will be the same.  The flag has no effect for functions
9124     explicitly declared inline (where it is never allowed for
9125     interposition to change semantics) and for symbols explicitly
9126     declared weak.
9127
9128'-fshrink-wrap'
9129     Emit function prologues only before parts of the function that need
9130     it, rather than at the top of the function.  This flag is enabled
9131     by default at '-O' and higher.
9132
9133'-fshrink-wrap-separate'
9134     Shrink-wrap separate parts of the prologue and epilogue separately,
9135     so that those parts are only executed when needed.  This option is
9136     on by default, but has no effect unless '-fshrink-wrap' is also
9137     turned on and the target supports this.
9138
9139'-fcaller-saves'
9140     Enable allocation of values to registers that are clobbered by
9141     function calls, by emitting extra instructions to save and restore
9142     the registers around such calls.  Such allocation is done only when
9143     it seems to result in better code.
9144
9145     This option is always enabled by default on certain machines,
9146     usually those which have no call-preserved registers to use
9147     instead.
9148
9149     Enabled at levels '-O2', '-O3', '-Os'.
9150
9151'-fcombine-stack-adjustments'
9152     Tracks stack adjustments (pushes and pops) and stack memory
9153     references and then tries to find ways to combine them.
9154
9155     Enabled by default at '-O1' and higher.
9156
9157'-fipa-ra'
9158     Use caller save registers for allocation if those registers are not
9159     used by any called function.  In that case it is not necessary to
9160     save and restore them around calls.  This is only possible if
9161     called functions are part of same compilation unit as current
9162     function and they are compiled before it.
9163
9164     Enabled at levels '-O2', '-O3', '-Os', however the option is
9165     disabled if generated code will be instrumented for profiling
9166     ('-p', or '-pg') or if callee's register usage cannot be known
9167     exactly (this happens on targets that do not expose prologues and
9168     epilogues in RTL).
9169
9170'-fconserve-stack'
9171     Attempt to minimize stack usage.  The compiler attempts to use less
9172     stack space, even if that makes the program slower.  This option
9173     implies setting the 'large-stack-frame' parameter to 100 and the
9174     'large-stack-frame-growth' parameter to 400.
9175
9176'-ftree-reassoc'
9177     Perform reassociation on trees.  This flag is enabled by default at
9178     '-O' and higher.
9179
9180'-fcode-hoisting'
9181     Perform code hoisting.  Code hoisting tries to move the evaluation
9182     of expressions executed on all paths to the function exit as early
9183     as possible.  This is especially useful as a code size
9184     optimization, but it often helps for code speed as well.  This flag
9185     is enabled by default at '-O2' and higher.
9186
9187'-ftree-pre'
9188     Perform partial redundancy elimination (PRE) on trees.  This flag
9189     is enabled by default at '-O2' and '-O3'.
9190
9191'-ftree-partial-pre'
9192     Make partial redundancy elimination (PRE) more aggressive.  This
9193     flag is enabled by default at '-O3'.
9194
9195'-ftree-forwprop'
9196     Perform forward propagation on trees.  This flag is enabled by
9197     default at '-O' and higher.
9198
9199'-ftree-fre'
9200     Perform full redundancy elimination (FRE) on trees.  The difference
9201     between FRE and PRE is that FRE only considers expressions that are
9202     computed on all paths leading to the redundant computation.  This
9203     analysis is faster than PRE, though it exposes fewer redundancies.
9204     This flag is enabled by default at '-O' and higher.
9205
9206'-ftree-phiprop'
9207     Perform hoisting of loads from conditional pointers on trees.  This
9208     pass is enabled by default at '-O' and higher.
9209
9210'-fhoist-adjacent-loads'
9211     Speculatively hoist loads from both branches of an if-then-else if
9212     the loads are from adjacent locations in the same structure and the
9213     target architecture has a conditional move instruction.  This flag
9214     is enabled by default at '-O2' and higher.
9215
9216'-ftree-copy-prop'
9217     Perform copy propagation on trees.  This pass eliminates
9218     unnecessary copy operations.  This flag is enabled by default at
9219     '-O' and higher.
9220
9221'-fipa-pure-const'
9222     Discover which functions are pure or constant.  Enabled by default
9223     at '-O' and higher.
9224
9225'-fipa-reference'
9226     Discover which static variables do not escape the compilation unit.
9227     Enabled by default at '-O' and higher.
9228
9229'-fipa-reference-addressable'
9230     Discover read-only, write-only and non-addressable static
9231     variables.  Enabled by default at '-O' and higher.
9232
9233'-fipa-stack-alignment'
9234     Reduce stack alignment on call sites if possible.  Enabled by
9235     default.
9236
9237'-fipa-pta'
9238     Perform interprocedural pointer analysis and interprocedural
9239     modification and reference analysis.  This option can cause
9240     excessive memory and compile-time usage on large compilation units.
9241     It is not enabled by default at any optimization level.
9242
9243'-fipa-profile'
9244     Perform interprocedural profile propagation.  The functions called
9245     only from cold functions are marked as cold.  Also functions
9246     executed once (such as 'cold', 'noreturn', static constructors or
9247     destructors) are identified.  Cold functions and loop less parts of
9248     functions executed once are then optimized for size.  Enabled by
9249     default at '-O' and higher.
9250
9251'-fipa-cp'
9252     Perform interprocedural constant propagation.  This optimization
9253     analyzes the program to determine when values passed to functions
9254     are constants and then optimizes accordingly.  This optimization
9255     can substantially increase performance if the application has
9256     constants passed to functions.  This flag is enabled by default at
9257     '-O2', '-Os' and '-O3'.  It is also enabled by '-fprofile-use' and
9258     '-fauto-profile'.
9259
9260'-fipa-cp-clone'
9261     Perform function cloning to make interprocedural constant
9262     propagation stronger.  When enabled, interprocedural constant
9263     propagation performs function cloning when externally visible
9264     function can be called with constant arguments.  Because this
9265     optimization can create multiple copies of functions, it may
9266     significantly increase code size (see '--param
9267     ipa-cp-unit-growth=VALUE').  This flag is enabled by default at
9268     '-O3'.  It is also enabled by '-fprofile-use' and '-fauto-profile'.
9269
9270'-fipa-bit-cp'
9271     When enabled, perform interprocedural bitwise constant propagation.
9272     This flag is enabled by default at '-O2' and by '-fprofile-use' and
9273     '-fauto-profile'.  It requires that '-fipa-cp' is enabled.
9274
9275'-fipa-vrp'
9276     When enabled, perform interprocedural propagation of value ranges.
9277     This flag is enabled by default at '-O2'.  It requires that
9278     '-fipa-cp' is enabled.
9279
9280'-fipa-icf'
9281     Perform Identical Code Folding for functions and read-only
9282     variables.  The optimization reduces code size and may disturb
9283     unwind stacks by replacing a function by equivalent one with a
9284     different name.  The optimization works more effectively with
9285     link-time optimization enabled.
9286
9287     Although the behavior is similar to the Gold Linker's ICF
9288     optimization, GCC ICF works on different levels and thus the
9289     optimizations are not same - there are equivalences that are found
9290     only by GCC and equivalences found only by Gold.
9291
9292     This flag is enabled by default at '-O2' and '-Os'.
9293
9294'-flive-patching=LEVEL'
9295     Control GCC's optimizations to produce output suitable for
9296     live-patching.
9297
9298     If the compiler's optimization uses a function's body or
9299     information extracted from its body to optimize/change another
9300     function, the latter is called an impacted function of the former.
9301     If a function is patched, its impacted functions should be patched
9302     too.
9303
9304     The impacted functions are determined by the compiler's
9305     interprocedural optimizations.  For example, a caller is impacted
9306     when inlining a function into its caller, cloning a function and
9307     changing its caller to call this new clone, or extracting a
9308     function's pureness/constness information to optimize its direct or
9309     indirect callers, etc.
9310
9311     Usually, the more IPA optimizations enabled, the larger the number
9312     of impacted functions for each function.  In order to control the
9313     number of impacted functions and more easily compute the list of
9314     impacted function, IPA optimizations can be partially enabled at
9315     two different levels.
9316
9317     The LEVEL argument should be one of the following:
9318
9319     'inline-clone'
9320
9321          Only enable inlining and cloning optimizations, which includes
9322          inlining, cloning, interprocedural scalar replacement of
9323          aggregates and partial inlining.  As a result, when patching a
9324          function, all its callers and its clones' callers are
9325          impacted, therefore need to be patched as well.
9326
9327          '-flive-patching=inline-clone' disables the following
9328          optimization flags:
9329               -fwhole-program  -fipa-pta  -fipa-reference  -fipa-ra
9330               -fipa-icf  -fipa-icf-functions  -fipa-icf-variables
9331               -fipa-bit-cp  -fipa-vrp  -fipa-pure-const  -fipa-reference-addressable
9332               -fipa-stack-alignment
9333
9334     'inline-only-static'
9335
9336          Only enable inlining of static functions.  As a result, when
9337          patching a static function, all its callers are impacted and
9338          so need to be patched as well.
9339
9340          In addition to all the flags that
9341          '-flive-patching=inline-clone' disables,
9342          '-flive-patching=inline-only-static' disables the following
9343          additional optimization flags:
9344               -fipa-cp-clone  -fipa-sra  -fpartial-inlining  -fipa-cp
9345
9346     When '-flive-patching' is specified without any value, the default
9347     value is INLINE-CLONE.
9348
9349     This flag is disabled by default.
9350
9351     Note that '-flive-patching' is not supported with link-time
9352     optimization ('-flto').
9353
9354'-fisolate-erroneous-paths-dereference'
9355     Detect paths that trigger erroneous or undefined behavior due to
9356     dereferencing a null pointer.  Isolate those paths from the main
9357     control flow and turn the statement with erroneous or undefined
9358     behavior into a trap.  This flag is enabled by default at '-O2' and
9359     higher and depends on '-fdelete-null-pointer-checks' also being
9360     enabled.
9361
9362'-fisolate-erroneous-paths-attribute'
9363     Detect paths that trigger erroneous or undefined behavior due to a
9364     null value being used in a way forbidden by a 'returns_nonnull' or
9365     'nonnull' attribute.  Isolate those paths from the main control
9366     flow and turn the statement with erroneous or undefined behavior
9367     into a trap.  This is not currently enabled, but may be enabled by
9368     '-O2' in the future.
9369
9370'-ftree-sink'
9371     Perform forward store motion on trees.  This flag is enabled by
9372     default at '-O' and higher.
9373
9374'-ftree-bit-ccp'
9375     Perform sparse conditional bit constant propagation on trees and
9376     propagate pointer alignment information.  This pass only operates
9377     on local scalar variables and is enabled by default at '-O1' and
9378     higher, except for '-Og'.  It requires that '-ftree-ccp' is
9379     enabled.
9380
9381'-ftree-ccp'
9382     Perform sparse conditional constant propagation (CCP) on trees.
9383     This pass only operates on local scalar variables and is enabled by
9384     default at '-O' and higher.
9385
9386'-fssa-backprop'
9387     Propagate information about uses of a value up the definition chain
9388     in order to simplify the definitions.  For example, this pass
9389     strips sign operations if the sign of a value never matters.  The
9390     flag is enabled by default at '-O' and higher.
9391
9392'-fssa-phiopt'
9393     Perform pattern matching on SSA PHI nodes to optimize conditional
9394     code.  This pass is enabled by default at '-O1' and higher, except
9395     for '-Og'.
9396
9397'-ftree-switch-conversion'
9398     Perform conversion of simple initializations in a switch to
9399     initializations from a scalar array.  This flag is enabled by
9400     default at '-O2' and higher.
9401
9402'-ftree-tail-merge'
9403     Look for identical code sequences.  When found, replace one with a
9404     jump to the other.  This optimization is known as tail merging or
9405     cross jumping.  This flag is enabled by default at '-O2' and
9406     higher.  The compilation time in this pass can be limited using
9407     'max-tail-merge-comparisons' parameter and
9408     'max-tail-merge-iterations' parameter.
9409
9410'-ftree-dce'
9411     Perform dead code elimination (DCE) on trees.  This flag is enabled
9412     by default at '-O' and higher.
9413
9414'-ftree-builtin-call-dce'
9415     Perform conditional dead code elimination (DCE) for calls to
9416     built-in functions that may set 'errno' but are otherwise free of
9417     side effects.  This flag is enabled by default at '-O2' and higher
9418     if '-Os' is not also specified.
9419
9420'-ffinite-loops'
9421     Assume that a loop with an exit will eventually take the exit and
9422     not loop indefinitely.  This allows the compiler to remove loops
9423     that otherwise have no side-effects, not considering eventual
9424     endless looping as such.
9425
9426     This option is enabled by default at '-O2' for C++ with -std=c++11
9427     or higher.
9428
9429'-ftree-dominator-opts'
9430     Perform a variety of simple scalar cleanups (constant/copy
9431     propagation, redundancy elimination, range propagation and
9432     expression simplification) based on a dominator tree traversal.
9433     This also performs jump threading (to reduce jumps to jumps).  This
9434     flag is enabled by default at '-O' and higher.
9435
9436'-ftree-dse'
9437     Perform dead store elimination (DSE) on trees.  A dead store is a
9438     store into a memory location that is later overwritten by another
9439     store without any intervening loads.  In this case the earlier
9440     store can be deleted.  This flag is enabled by default at '-O' and
9441     higher.
9442
9443'-ftree-ch'
9444     Perform loop header copying on trees.  This is beneficial since it
9445     increases effectiveness of code motion optimizations.  It also
9446     saves one jump.  This flag is enabled by default at '-O' and
9447     higher.  It is not enabled for '-Os', since it usually increases
9448     code size.
9449
9450'-ftree-loop-optimize'
9451     Perform loop optimizations on trees.  This flag is enabled by
9452     default at '-O' and higher.
9453
9454'-ftree-loop-linear'
9455'-floop-strip-mine'
9456'-floop-block'
9457     Perform loop nest optimizations.  Same as '-floop-nest-optimize'.
9458     To use this code transformation, GCC has to be configured with
9459     '--with-isl' to enable the Graphite loop transformation
9460     infrastructure.
9461
9462'-fgraphite-identity'
9463     Enable the identity transformation for graphite.  For every SCoP we
9464     generate the polyhedral representation and transform it back to
9465     gimple.  Using '-fgraphite-identity' we can check the costs or
9466     benefits of the GIMPLE -> GRAPHITE -> GIMPLE transformation.  Some
9467     minimal optimizations are also performed by the code generator isl,
9468     like index splitting and dead code elimination in loops.
9469
9470'-floop-nest-optimize'
9471     Enable the isl based loop nest optimizer.  This is a generic loop
9472     nest optimizer based on the Pluto optimization algorithms.  It
9473     calculates a loop structure optimized for data-locality and
9474     parallelism.  This option is experimental.
9475
9476'-floop-parallelize-all'
9477     Use the Graphite data dependence analysis to identify loops that
9478     can be parallelized.  Parallelize all the loops that can be
9479     analyzed to not contain loop carried dependences without checking
9480     that it is profitable to parallelize the loops.
9481
9482'-ftree-coalesce-vars'
9483     While transforming the program out of the SSA representation,
9484     attempt to reduce copying by coalescing versions of different
9485     user-defined variables, instead of just compiler temporaries.  This
9486     may severely limit the ability to debug an optimized program
9487     compiled with '-fno-var-tracking-assignments'.  In the negated
9488     form, this flag prevents SSA coalescing of user variables.  This
9489     option is enabled by default if optimization is enabled, and it
9490     does very little otherwise.
9491
9492'-ftree-loop-if-convert'
9493     Attempt to transform conditional jumps in the innermost loops to
9494     branch-less equivalents.  The intent is to remove control-flow from
9495     the innermost loops in order to improve the ability of the
9496     vectorization pass to handle these loops.  This is enabled by
9497     default if vectorization is enabled.
9498
9499'-ftree-loop-distribution'
9500     Perform loop distribution.  This flag can improve cache performance
9501     on big loop bodies and allow further loop optimizations, like
9502     parallelization or vectorization, to take place.  For example, the
9503     loop
9504          DO I = 1, N
9505            A(I) = B(I) + C
9506            D(I) = E(I) * F
9507          ENDDO
9508     is transformed to
9509          DO I = 1, N
9510             A(I) = B(I) + C
9511          ENDDO
9512          DO I = 1, N
9513             D(I) = E(I) * F
9514          ENDDO
9515     This flag is enabled by default at '-O3'.  It is also enabled by
9516     '-fprofile-use' and '-fauto-profile'.
9517
9518'-ftree-loop-distribute-patterns'
9519     Perform loop distribution of patterns that can be code generated
9520     with calls to a library.  This flag is enabled by default at '-O2'
9521     and higher, and by '-fprofile-use' and '-fauto-profile'.
9522
9523     This pass distributes the initialization loops and generates a call
9524     to memset zero.  For example, the loop
9525          DO I = 1, N
9526            A(I) = 0
9527            B(I) = A(I) + I
9528          ENDDO
9529     is transformed to
9530          DO I = 1, N
9531             A(I) = 0
9532          ENDDO
9533          DO I = 1, N
9534             B(I) = A(I) + I
9535          ENDDO
9536     and the initialization loop is transformed into a call to memset
9537     zero.  This flag is enabled by default at '-O3'.  It is also
9538     enabled by '-fprofile-use' and '-fauto-profile'.
9539
9540'-floop-interchange'
9541     Perform loop interchange outside of graphite.  This flag can
9542     improve cache performance on loop nest and allow further loop
9543     optimizations, like vectorization, to take place.  For example, the
9544     loop
9545          for (int i = 0; i < N; i++)
9546            for (int j = 0; j < N; j++)
9547              for (int k = 0; k < N; k++)
9548                c[i][j] = c[i][j] + a[i][k]*b[k][j];
9549     is transformed to
9550          for (int i = 0; i < N; i++)
9551            for (int k = 0; k < N; k++)
9552              for (int j = 0; j < N; j++)
9553                c[i][j] = c[i][j] + a[i][k]*b[k][j];
9554     This flag is enabled by default at '-O3'.  It is also enabled by
9555     '-fprofile-use' and '-fauto-profile'.
9556
9557'-floop-unroll-and-jam'
9558     Apply unroll and jam transformations on feasible loops.  In a loop
9559     nest this unrolls the outer loop by some factor and fuses the
9560     resulting multiple inner loops.  This flag is enabled by default at
9561     '-O3'.  It is also enabled by '-fprofile-use' and '-fauto-profile'.
9562
9563'-ftree-loop-im'
9564     Perform loop invariant motion on trees.  This pass moves only
9565     invariants that are hard to handle at RTL level (function calls,
9566     operations that expand to nontrivial sequences of insns).  With
9567     '-funswitch-loops' it also moves operands of conditions that are
9568     invariant out of the loop, so that we can use just trivial
9569     invariantness analysis in loop unswitching.  The pass also includes
9570     store motion.
9571
9572'-ftree-loop-ivcanon'
9573     Create a canonical counter for number of iterations in loops for
9574     which determining number of iterations requires complicated
9575     analysis.  Later optimizations then may determine the number
9576     easily.  Useful especially in connection with unrolling.
9577
9578'-ftree-scev-cprop'
9579     Perform final value replacement.  If a variable is modified in a
9580     loop in such a way that its value when exiting the loop can be
9581     determined using only its initial value and the number of loop
9582     iterations, replace uses of the final value by such a computation,
9583     provided it is sufficiently cheap.  This reduces data dependencies
9584     and may allow further simplifications.  Enabled by default at '-O'
9585     and higher.
9586
9587'-fivopts'
9588     Perform induction variable optimizations (strength reduction,
9589     induction variable merging and induction variable elimination) on
9590     trees.
9591
9592'-ftree-parallelize-loops=n'
9593     Parallelize loops, i.e., split their iteration space to run in n
9594     threads.  This is only possible for loops whose iterations are
9595     independent and can be arbitrarily reordered.  The optimization is
9596     only profitable on multiprocessor machines, for loops that are
9597     CPU-intensive, rather than constrained e.g. by memory bandwidth.
9598     This option implies '-pthread', and thus is only supported on
9599     targets that have support for '-pthread'.
9600
9601'-ftree-pta'
9602     Perform function-local points-to analysis on trees.  This flag is
9603     enabled by default at '-O1' and higher, except for '-Og'.
9604
9605'-ftree-sra'
9606     Perform scalar replacement of aggregates.  This pass replaces
9607     structure references with scalars to prevent committing structures
9608     to memory too early.  This flag is enabled by default at '-O1' and
9609     higher, except for '-Og'.
9610
9611'-fstore-merging'
9612     Perform merging of narrow stores to consecutive memory addresses.
9613     This pass merges contiguous stores of immediate values narrower
9614     than a word into fewer wider stores to reduce the number of
9615     instructions.  This is enabled by default at '-O2' and higher as
9616     well as '-Os'.
9617
9618'-ftree-ter'
9619     Perform temporary expression replacement during the SSA->normal
9620     phase.  Single use/single def temporaries are replaced at their use
9621     location with their defining expression.  This results in
9622     non-GIMPLE code, but gives the expanders much more complex trees to
9623     work on resulting in better RTL generation.  This is enabled by
9624     default at '-O' and higher.
9625
9626'-ftree-slsr'
9627     Perform straight-line strength reduction on trees.  This recognizes
9628     related expressions involving multiplications and replaces them by
9629     less expensive calculations when possible.  This is enabled by
9630     default at '-O' and higher.
9631
9632'-ftree-vectorize'
9633     Perform vectorization on trees.  This flag enables
9634     '-ftree-loop-vectorize' and '-ftree-slp-vectorize' if not
9635     explicitly specified.
9636
9637'-ftree-loop-vectorize'
9638     Perform loop vectorization on trees.  This flag is enabled by
9639     default at '-O3' and by '-ftree-vectorize', '-fprofile-use', and
9640     '-fauto-profile'.
9641
9642'-ftree-slp-vectorize'
9643     Perform basic block vectorization on trees.  This flag is enabled
9644     by default at '-O3' and by '-ftree-vectorize', '-fprofile-use', and
9645     '-fauto-profile'.
9646
9647'-fvect-cost-model=MODEL'
9648     Alter the cost model used for vectorization.  The MODEL argument
9649     should be one of 'unlimited', 'dynamic' or 'cheap'.  With the
9650     'unlimited' model the vectorized code-path is assumed to be
9651     profitable while with the 'dynamic' model a runtime check guards
9652     the vectorized code-path to enable it only for iteration counts
9653     that will likely execute faster than when executing the original
9654     scalar loop.  The 'cheap' model disables vectorization of loops
9655     where doing so would be cost prohibitive for example due to
9656     required runtime checks for data dependence or alignment but
9657     otherwise is equal to the 'dynamic' model.  The default cost model
9658     depends on other optimization flags and is either 'dynamic' or
9659     'cheap'.
9660
9661'-fsimd-cost-model=MODEL'
9662     Alter the cost model used for vectorization of loops marked with
9663     the OpenMP simd directive.  The MODEL argument should be one of
9664     'unlimited', 'dynamic', 'cheap'.  All values of MODEL have the same
9665     meaning as described in '-fvect-cost-model' and by default a cost
9666     model defined with '-fvect-cost-model' is used.
9667
9668'-ftree-vrp'
9669     Perform Value Range Propagation on trees.  This is similar to the
9670     constant propagation pass, but instead of values, ranges of values
9671     are propagated.  This allows the optimizers to remove unnecessary
9672     range checks like array bound checks and null pointer checks.  This
9673     is enabled by default at '-O2' and higher.  Null pointer check
9674     elimination is only done if '-fdelete-null-pointer-checks' is
9675     enabled.
9676
9677'-fsplit-paths'
9678     Split paths leading to loop backedges.  This can improve dead code
9679     elimination and common subexpression elimination.  This is enabled
9680     by default at '-O3' and above.
9681
9682'-fsplit-ivs-in-unroller'
9683     Enables expression of values of induction variables in later
9684     iterations of the unrolled loop using the value in the first
9685     iteration.  This breaks long dependency chains, thus improving
9686     efficiency of the scheduling passes.
9687
9688     A combination of '-fweb' and CSE is often sufficient to obtain the
9689     same effect.  However, that is not reliable in cases where the loop
9690     body is more complicated than a single basic block.  It also does
9691     not work at all on some architectures due to restrictions in the
9692     CSE pass.
9693
9694     This optimization is enabled by default.
9695
9696'-fvariable-expansion-in-unroller'
9697     With this option, the compiler creates multiple copies of some
9698     local variables when unrolling a loop, which can result in superior
9699     code.
9700
9701     This optimization is enabled by default for PowerPC targets, but
9702     disabled by default otherwise.
9703
9704'-fpartial-inlining'
9705     Inline parts of functions.  This option has any effect only when
9706     inlining itself is turned on by the '-finline-functions' or
9707     '-finline-small-functions' options.
9708
9709     Enabled at levels '-O2', '-O3', '-Os'.
9710
9711'-fpredictive-commoning'
9712     Perform predictive commoning optimization, i.e., reusing
9713     computations (especially memory loads and stores) performed in
9714     previous iterations of loops.
9715
9716     This option is enabled at level '-O3'.  It is also enabled by
9717     '-fprofile-use' and '-fauto-profile'.
9718
9719'-fprefetch-loop-arrays'
9720     If supported by the target machine, generate instructions to
9721     prefetch memory to improve the performance of loops that access
9722     large arrays.
9723
9724     This option may generate better or worse code; results are highly
9725     dependent on the structure of loops within the source code.
9726
9727     Disabled at level '-Os'.
9728
9729'-fno-printf-return-value'
9730     Do not substitute constants for known return value of formatted
9731     output functions such as 'sprintf', 'snprintf', 'vsprintf', and
9732     'vsnprintf' (but not 'printf' of 'fprintf').  This transformation
9733     allows GCC to optimize or even eliminate branches based on the
9734     known return value of these functions called with arguments that
9735     are either constant, or whose values are known to be in a range
9736     that makes determining the exact return value possible.  For
9737     example, when '-fprintf-return-value' is in effect, both the branch
9738     and the body of the 'if' statement (but not the call to 'snprint')
9739     can be optimized away when 'i' is a 32-bit or smaller integer
9740     because the return value is guaranteed to be at most 8.
9741
9742          char buf[9];
9743          if (snprintf (buf, "%08x", i) >= sizeof buf)
9744            ...
9745
9746     The '-fprintf-return-value' option relies on other optimizations
9747     and yields best results with '-O2' and above.  It works in tandem
9748     with the '-Wformat-overflow' and '-Wformat-truncation' options.
9749     The '-fprintf-return-value' option is enabled by default.
9750
9751'-fno-peephole'
9752'-fno-peephole2'
9753     Disable any machine-specific peephole optimizations.  The
9754     difference between '-fno-peephole' and '-fno-peephole2' is in how
9755     they are implemented in the compiler; some targets use one, some
9756     use the other, a few use both.
9757
9758     '-fpeephole' is enabled by default.  '-fpeephole2' enabled at
9759     levels '-O2', '-O3', '-Os'.
9760
9761'-fno-guess-branch-probability'
9762     Do not guess branch probabilities using heuristics.
9763
9764     GCC uses heuristics to guess branch probabilities if they are not
9765     provided by profiling feedback ('-fprofile-arcs').  These
9766     heuristics are based on the control flow graph.  If some branch
9767     probabilities are specified by '__builtin_expect', then the
9768     heuristics are used to guess branch probabilities for the rest of
9769     the control flow graph, taking the '__builtin_expect' info into
9770     account.  The interactions between the heuristics and
9771     '__builtin_expect' can be complex, and in some cases, it may be
9772     useful to disable the heuristics so that the effects of
9773     '__builtin_expect' are easier to understand.
9774
9775     It is also possible to specify expected probability of the
9776     expression with '__builtin_expect_with_probability' built-in
9777     function.
9778
9779     The default is '-fguess-branch-probability' at levels '-O', '-O2',
9780     '-O3', '-Os'.
9781
9782'-freorder-blocks'
9783     Reorder basic blocks in the compiled function in order to reduce
9784     number of taken branches and improve code locality.
9785
9786     Enabled at levels '-O', '-O2', '-O3', '-Os'.
9787
9788'-freorder-blocks-algorithm=ALGORITHM'
9789     Use the specified algorithm for basic block reordering.  The
9790     ALGORITHM argument can be 'simple', which does not increase code
9791     size (except sometimes due to secondary effects like alignment), or
9792     'stc', the "software trace cache" algorithm, which tries to put all
9793     often executed code together, minimizing the number of branches
9794     executed by making extra copies of code.
9795
9796     The default is 'simple' at levels '-O', '-Os', and 'stc' at levels
9797     '-O2', '-O3'.
9798
9799'-freorder-blocks-and-partition'
9800     In addition to reordering basic blocks in the compiled function, in
9801     order to reduce number of taken branches, partitions hot and cold
9802     basic blocks into separate sections of the assembly and '.o' files,
9803     to improve paging and cache locality performance.
9804
9805     This optimization is automatically turned off in the presence of
9806     exception handling or unwind tables (on targets using
9807     setjump/longjump or target specific scheme), for linkonce sections,
9808     for functions with a user-defined section attribute and on any
9809     architecture that does not support named sections.  When
9810     '-fsplit-stack' is used this option is not enabled by default (to
9811     avoid linker errors), but may be enabled explicitly (if using a
9812     working linker).
9813
9814     Enabled for x86 at levels '-O2', '-O3', '-Os'.
9815
9816'-freorder-functions'
9817     Reorder functions in the object file in order to improve code
9818     locality.  This is implemented by using special subsections
9819     '.text.hot' for most frequently executed functions and
9820     '.text.unlikely' for unlikely executed functions.  Reordering is
9821     done by the linker so object file format must support named
9822     sections and linker must place them in a reasonable way.
9823
9824     This option isn't effective unless you either provide profile
9825     feedback (see '-fprofile-arcs' for details) or manually annotate
9826     functions with 'hot' or 'cold' attributes (*note Common Function
9827     Attributes::).
9828
9829     Enabled at levels '-O2', '-O3', '-Os'.
9830
9831'-fstrict-aliasing'
9832     Allow the compiler to assume the strictest aliasing rules
9833     applicable to the language being compiled.  For C (and C++), this
9834     activates optimizations based on the type of expressions.  In
9835     particular, an object of one type is assumed never to reside at the
9836     same address as an object of a different type, unless the types are
9837     almost the same.  For example, an 'unsigned int' can alias an
9838     'int', but not a 'void*' or a 'double'.  A character type may alias
9839     any other type.
9840
9841     Pay special attention to code like this:
9842          union a_union {
9843            int i;
9844            double d;
9845          };
9846
9847          int f() {
9848            union a_union t;
9849            t.d = 3.0;
9850            return t.i;
9851          }
9852     The practice of reading from a different union member than the one
9853     most recently written to (called "type-punning") is common.  Even
9854     with '-fstrict-aliasing', type-punning is allowed, provided the
9855     memory is accessed through the union type.  So, the code above
9856     works as expected.  *Note Structures unions enumerations and
9857     bit-fields implementation::.  However, this code might not:
9858          int f() {
9859            union a_union t;
9860            int* ip;
9861            t.d = 3.0;
9862            ip = &t.i;
9863            return *ip;
9864          }
9865
9866     Similarly, access by taking the address, casting the resulting
9867     pointer and dereferencing the result has undefined behavior, even
9868     if the cast uses a union type, e.g.:
9869          int f() {
9870            double d = 3.0;
9871            return ((union a_union *) &d)->i;
9872          }
9873
9874     The '-fstrict-aliasing' option is enabled at levels '-O2', '-O3',
9875     '-Os'.
9876
9877'-falign-functions'
9878'-falign-functions=N'
9879'-falign-functions=N:M'
9880'-falign-functions=N:M:N2'
9881'-falign-functions=N:M:N2:M2'
9882     Align the start of functions to the next power-of-two greater than
9883     or equal to N, skipping up to M-1 bytes.  This ensures that at
9884     least the first M bytes of the function can be fetched by the CPU
9885     without crossing an N-byte alignment boundary.
9886
9887     If M is not specified, it defaults to N.
9888
9889     Examples: '-falign-functions=32' aligns functions to the next
9890     32-byte boundary, '-falign-functions=24' aligns to the next 32-byte
9891     boundary only if this can be done by skipping 23 bytes or less,
9892     '-falign-functions=32:7' aligns to the next 32-byte boundary only
9893     if this can be done by skipping 6 bytes or less.
9894
9895     The second pair of N2:M2 values allows you to specify a secondary
9896     alignment: '-falign-functions=64:7:32:3' aligns to the next 64-byte
9897     boundary if this can be done by skipping 6 bytes or less, otherwise
9898     aligns to the next 32-byte boundary if this can be done by skipping
9899     2 bytes or less.  If M2 is not specified, it defaults to N2.
9900
9901     Some assemblers only support this flag when N is a power of two; in
9902     that case, it is rounded up.
9903
9904     '-fno-align-functions' and '-falign-functions=1' are equivalent and
9905     mean that functions are not aligned.
9906
9907     If N is not specified or is zero, use a machine-dependent default.
9908     The maximum allowed N option value is 65536.
9909
9910     Enabled at levels '-O2', '-O3'.
9911
9912'-flimit-function-alignment'
9913     If this option is enabled, the compiler tries to avoid
9914     unnecessarily overaligning functions.  It attempts to instruct the
9915     assembler to align by the amount specified by '-falign-functions',
9916     but not to skip more bytes than the size of the function.
9917
9918'-falign-labels'
9919'-falign-labels=N'
9920'-falign-labels=N:M'
9921'-falign-labels=N:M:N2'
9922'-falign-labels=N:M:N2:M2'
9923     Align all branch targets to a power-of-two boundary.
9924
9925     Parameters of this option are analogous to the '-falign-functions'
9926     option.  '-fno-align-labels' and '-falign-labels=1' are equivalent
9927     and mean that labels are not aligned.
9928
9929     If '-falign-loops' or '-falign-jumps' are applicable and are
9930     greater than this value, then their values are used instead.
9931
9932     If N is not specified or is zero, use a machine-dependent default
9933     which is very likely to be '1', meaning no alignment.  The maximum
9934     allowed N option value is 65536.
9935
9936     Enabled at levels '-O2', '-O3'.
9937
9938'-falign-loops'
9939'-falign-loops=N'
9940'-falign-loops=N:M'
9941'-falign-loops=N:M:N2'
9942'-falign-loops=N:M:N2:M2'
9943     Align loops to a power-of-two boundary.  If the loops are executed
9944     many times, this makes up for any execution of the dummy padding
9945     instructions.
9946
9947     If '-falign-labels' is greater than this value, then its value is
9948     used instead.
9949
9950     Parameters of this option are analogous to the '-falign-functions'
9951     option.  '-fno-align-loops' and '-falign-loops=1' are equivalent
9952     and mean that loops are not aligned.  The maximum allowed N option
9953     value is 65536.
9954
9955     If N is not specified or is zero, use a machine-dependent default.
9956
9957     Enabled at levels '-O2', '-O3'.
9958
9959'-falign-jumps'
9960'-falign-jumps=N'
9961'-falign-jumps=N:M'
9962'-falign-jumps=N:M:N2'
9963'-falign-jumps=N:M:N2:M2'
9964     Align branch targets to a power-of-two boundary, for branch targets
9965     where the targets can only be reached by jumping.  In this case, no
9966     dummy operations need be executed.
9967
9968     If '-falign-labels' is greater than this value, then its value is
9969     used instead.
9970
9971     Parameters of this option are analogous to the '-falign-functions'
9972     option.  '-fno-align-jumps' and '-falign-jumps=1' are equivalent
9973     and mean that loops are not aligned.
9974
9975     If N is not specified or is zero, use a machine-dependent default.
9976     The maximum allowed N option value is 65536.
9977
9978     Enabled at levels '-O2', '-O3'.
9979
9980'-fno-allocation-dce'
9981     Do not remove unused C++ allocations in dead code elimination.
9982
9983'-fallow-store-data-races'
9984     Allow the compiler to introduce new data races on stores.
9985
9986     Enabled at level '-Ofast'.
9987
9988'-funit-at-a-time'
9989     This option is left for compatibility reasons.  '-funit-at-a-time'
9990     has no effect, while '-fno-unit-at-a-time' implies
9991     '-fno-toplevel-reorder' and '-fno-section-anchors'.
9992
9993     Enabled by default.
9994
9995'-fno-toplevel-reorder'
9996     Do not reorder top-level functions, variables, and 'asm'
9997     statements.  Output them in the same order that they appear in the
9998     input file.  When this option is used, unreferenced static
9999     variables are not removed.  This option is intended to support
10000     existing code that relies on a particular ordering.  For new code,
10001     it is better to use attributes when possible.
10002
10003     '-ftoplevel-reorder' is the default at '-O1' and higher, and also
10004     at '-O0' if '-fsection-anchors' is explicitly requested.
10005     Additionally '-fno-toplevel-reorder' implies
10006     '-fno-section-anchors'.
10007
10008'-fweb'
10009     Constructs webs as commonly used for register allocation purposes
10010     and assign each web individual pseudo register.  This allows the
10011     register allocation pass to operate on pseudos directly, but also
10012     strengthens several other optimization passes, such as CSE, loop
10013     optimizer and trivial dead code remover.  It can, however, make
10014     debugging impossible, since variables no longer stay in a "home
10015     register".
10016
10017     Enabled by default with '-funroll-loops'.
10018
10019'-fwhole-program'
10020     Assume that the current compilation unit represents the whole
10021     program being compiled.  All public functions and variables with
10022     the exception of 'main' and those merged by attribute
10023     'externally_visible' become static functions and in effect are
10024     optimized more aggressively by interprocedural optimizers.
10025
10026     This option should not be used in combination with '-flto'.
10027     Instead relying on a linker plugin should provide safer and more
10028     precise information.
10029
10030'-flto[=N]'
10031     This option runs the standard link-time optimizer.  When invoked
10032     with source code, it generates GIMPLE (one of GCC's internal
10033     representations) and writes it to special ELF sections in the
10034     object file.  When the object files are linked together, all the
10035     function bodies are read from these ELF sections and instantiated
10036     as if they had been part of the same translation unit.
10037
10038     To use the link-time optimizer, '-flto' and optimization options
10039     should be specified at compile time and during the final link.  It
10040     is recommended that you compile all the files participating in the
10041     same link with the same options and also specify those options at
10042     link time.  For example:
10043
10044          gcc -c -O2 -flto foo.c
10045          gcc -c -O2 -flto bar.c
10046          gcc -o myprog -flto -O2 foo.o bar.o
10047
10048     The first two invocations to GCC save a bytecode representation of
10049     GIMPLE into special ELF sections inside 'foo.o' and 'bar.o'.  The
10050     final invocation reads the GIMPLE bytecode from 'foo.o' and
10051     'bar.o', merges the two files into a single internal image, and
10052     compiles the result as usual.  Since both 'foo.o' and 'bar.o' are
10053     merged into a single image, this causes all the interprocedural
10054     analyses and optimizations in GCC to work across the two files as
10055     if they were a single one.  This means, for example, that the
10056     inliner is able to inline functions in 'bar.o' into functions in
10057     'foo.o' and vice-versa.
10058
10059     Another (simpler) way to enable link-time optimization is:
10060
10061          gcc -o myprog -flto -O2 foo.c bar.c
10062
10063     The above generates bytecode for 'foo.c' and 'bar.c', merges them
10064     together into a single GIMPLE representation and optimizes them as
10065     usual to produce 'myprog'.
10066
10067     The important thing to keep in mind is that to enable link-time
10068     optimizations you need to use the GCC driver to perform the link
10069     step.  GCC automatically performs link-time optimization if any of
10070     the objects involved were compiled with the '-flto' command-line
10071     option.  You can always override the automatic decision to do
10072     link-time optimization by passing '-fno-lto' to the link command.
10073
10074     To make whole program optimization effective, it is necessary to
10075     make certain whole program assumptions.  The compiler needs to know
10076     what functions and variables can be accessed by libraries and
10077     runtime outside of the link-time optimized unit.  When supported by
10078     the linker, the linker plugin (see '-fuse-linker-plugin') passes
10079     information to the compiler about used and externally visible
10080     symbols.  When the linker plugin is not available,
10081     '-fwhole-program' should be used to allow the compiler to make
10082     these assumptions, which leads to more aggressive optimization
10083     decisions.
10084
10085     When a file is compiled with '-flto' without '-fuse-linker-plugin',
10086     the generated object file is larger than a regular object file
10087     because it contains GIMPLE bytecodes and the usual final code (see
10088     '-ffat-lto-objects'.  This means that object files with LTO
10089     information can be linked as normal object files; if '-fno-lto' is
10090     passed to the linker, no interprocedural optimizations are applied.
10091     Note that when '-fno-fat-lto-objects' is enabled the compile stage
10092     is faster but you cannot perform a regular, non-LTO link on them.
10093
10094     When producing the final binary, GCC only applies link-time
10095     optimizations to those files that contain bytecode.  Therefore, you
10096     can mix and match object files and libraries with GIMPLE bytecodes
10097     and final object code.  GCC automatically selects which files to
10098     optimize in LTO mode and which files to link without further
10099     processing.
10100
10101     Generally, options specified at link time override those specified
10102     at compile time, although in some cases GCC attempts to infer
10103     link-time options from the settings used to compile the input
10104     files.
10105
10106     If you do not specify an optimization level option '-O' at link
10107     time, then GCC uses the highest optimization level used when
10108     compiling the object files.  Note that it is generally ineffective
10109     to specify an optimization level option only at link time and not
10110     at compile time, for two reasons.  First, compiling without
10111     optimization suppresses compiler passes that gather information
10112     needed for effective optimization at link time.  Second, some early
10113     optimization passes can be performed only at compile time and not
10114     at link time.
10115
10116     There are some code generation flags preserved by GCC when
10117     generating bytecodes, as they need to be used during the final
10118     link.  Currently, the following options and their settings are
10119     taken from the first object file that explicitly specifies them:
10120     '-fPIC', '-fpic', '-fpie', '-fcommon', '-fexceptions',
10121     '-fnon-call-exceptions', '-fgnu-tm' and all the '-m' target flags.
10122
10123     Certain ABI-changing flags are required to match in all compilation
10124     units, and trying to override this at link time with a conflicting
10125     value is ignored.  This includes options such as
10126     '-freg-struct-return' and '-fpcc-struct-return'.
10127
10128     Other options such as '-ffp-contract', '-fno-strict-overflow',
10129     '-fwrapv', '-fno-trapv' or '-fno-strict-aliasing' are passed
10130     through to the link stage and merged conservatively for conflicting
10131     translation units.  Specifically '-fno-strict-overflow', '-fwrapv'
10132     and '-fno-trapv' take precedence; and for example
10133     '-ffp-contract=off' takes precedence over '-ffp-contract=fast'.
10134     You can override them at link time.
10135
10136     Diagnostic options such as '-Wstringop-overflow' are passed through
10137     to the link stage and their setting matches that of the
10138     compile-step at function granularity.  Note that this matters only
10139     for diagnostics emitted during optimization.  Note that code
10140     transforms such as inlining can lead to warnings being enabled or
10141     disabled for regions if code not consistent with the setting at
10142     compile time.
10143
10144     When you need to pass options to the assembler via '-Wa' or
10145     '-Xassembler' make sure to either compile such translation units
10146     with '-fno-lto' or consistently use the same assembler options on
10147     all translation units.  You can alternatively also specify
10148     assembler options at LTO link time.
10149
10150     To enable debug info generation you need to supply '-g' at compile
10151     time.  If any of the input files at link time were built with debug
10152     info generation enabled the link will enable debug info generation
10153     as well.  Any elaborate debug info settings like the dwarf level
10154     '-gdwarf-5' need to be explicitly repeated at the linker command
10155     line and mixing different settings in different translation units
10156     is discouraged.
10157
10158     If LTO encounters objects with C linkage declared with incompatible
10159     types in separate translation units to be linked together
10160     (undefined behavior according to ISO C99 6.2.7), a non-fatal
10161     diagnostic may be issued.  The behavior is still undefined at run
10162     time.  Similar diagnostics may be raised for other languages.
10163
10164     Another feature of LTO is that it is possible to apply
10165     interprocedural optimizations on files written in different
10166     languages:
10167
10168          gcc -c -flto foo.c
10169          g++ -c -flto bar.cc
10170          gfortran -c -flto baz.f90
10171          g++ -o myprog -flto -O3 foo.o bar.o baz.o -lgfortran
10172
10173     Notice that the final link is done with 'g++' to get the C++
10174     runtime libraries and '-lgfortran' is added to get the Fortran
10175     runtime libraries.  In general, when mixing languages in LTO mode,
10176     you should use the same link command options as when mixing
10177     languages in a regular (non-LTO) compilation.
10178
10179     If object files containing GIMPLE bytecode are stored in a library
10180     archive, say 'libfoo.a', it is possible to extract and use them in
10181     an LTO link if you are using a linker with plugin support.  To
10182     create static libraries suitable for LTO, use 'gcc-ar' and
10183     'gcc-ranlib' instead of 'ar' and 'ranlib'; to show the symbols of
10184     object files with GIMPLE bytecode, use 'gcc-nm'.  Those commands
10185     require that 'ar', 'ranlib' and 'nm' have been compiled with plugin
10186     support.  At link time, use the flag '-fuse-linker-plugin' to
10187     ensure that the library participates in the LTO optimization
10188     process:
10189
10190          gcc -o myprog -O2 -flto -fuse-linker-plugin a.o b.o -lfoo
10191
10192     With the linker plugin enabled, the linker extracts the needed
10193     GIMPLE files from 'libfoo.a' and passes them on to the running GCC
10194     to make them part of the aggregated GIMPLE image to be optimized.
10195
10196     If you are not using a linker with plugin support and/or do not
10197     enable the linker plugin, then the objects inside 'libfoo.a' are
10198     extracted and linked as usual, but they do not participate in the
10199     LTO optimization process.  In order to make a static library
10200     suitable for both LTO optimization and usual linkage, compile its
10201     object files with '-flto' '-ffat-lto-objects'.
10202
10203     Link-time optimizations do not require the presence of the whole
10204     program to operate.  If the program does not require any symbols to
10205     be exported, it is possible to combine '-flto' and
10206     '-fwhole-program' to allow the interprocedural optimizers to use
10207     more aggressive assumptions which may lead to improved optimization
10208     opportunities.  Use of '-fwhole-program' is not needed when linker
10209     plugin is active (see '-fuse-linker-plugin').
10210
10211     The current implementation of LTO makes no attempt to generate
10212     bytecode that is portable between different types of hosts.  The
10213     bytecode files are versioned and there is a strict version check,
10214     so bytecode files generated in one version of GCC do not work with
10215     an older or newer version of GCC.
10216
10217     Link-time optimization does not work well with generation of
10218     debugging information on systems other than those using a
10219     combination of ELF and DWARF.
10220
10221     If you specify the optional N, the optimization and code generation
10222     done at link time is executed in parallel using N parallel jobs by
10223     utilizing an installed 'make' program.  The environment variable
10224     'MAKE' may be used to override the program used.
10225
10226     You can also specify '-flto=jobserver' to use GNU make's job server
10227     mode to determine the number of parallel jobs.  This is useful when
10228     the Makefile calling GCC is already executing in parallel.  You
10229     must prepend a '+' to the command recipe in the parent Makefile for
10230     this to work.  This option likely only works if 'MAKE' is GNU make.
10231     Even without the option value, GCC tries to automatically detect a
10232     running GNU make's job server.
10233
10234     Use '-flto=auto' to use GNU make's job server, if available, or
10235     otherwise fall back to autodetection of the number of CPU threads
10236     present in your system.
10237
10238'-flto-partition=ALG'
10239     Specify the partitioning algorithm used by the link-time optimizer.
10240     The value is either '1to1' to specify a partitioning mirroring the
10241     original source files or 'balanced' to specify partitioning into
10242     equally sized chunks (whenever possible) or 'max' to create new
10243     partition for every symbol where possible.  Specifying 'none' as an
10244     algorithm disables partitioning and streaming completely.  The
10245     default value is 'balanced'.  While '1to1' can be used as an
10246     workaround for various code ordering issues, the 'max' partitioning
10247     is intended for internal testing only.  The value 'one' specifies
10248     that exactly one partition should be used while the value 'none'
10249     bypasses partitioning and executes the link-time optimization step
10250     directly from the WPA phase.
10251
10252'-flto-compression-level=N'
10253     This option specifies the level of compression used for
10254     intermediate language written to LTO object files, and is only
10255     meaningful in conjunction with LTO mode ('-flto').  Valid values
10256     are 0 (no compression) to 9 (maximum compression).  Values outside
10257     this range are clamped to either 0 or 9.  If the option is not
10258     given, a default balanced compression setting is used.
10259
10260'-fuse-linker-plugin'
10261     Enables the use of a linker plugin during link-time optimization.
10262     This option relies on plugin support in the linker, which is
10263     available in gold or in GNU ld 2.21 or newer.
10264
10265     This option enables the extraction of object files with GIMPLE
10266     bytecode out of library archives.  This improves the quality of
10267     optimization by exposing more code to the link-time optimizer.
10268     This information specifies what symbols can be accessed externally
10269     (by non-LTO object or during dynamic linking).  Resulting code
10270     quality improvements on binaries (and shared libraries that use
10271     hidden visibility) are similar to '-fwhole-program'.  See '-flto'
10272     for a description of the effect of this flag and how to use it.
10273
10274     This option is enabled by default when LTO support in GCC is
10275     enabled and GCC was configured for use with a linker supporting
10276     plugins (GNU ld 2.21 or newer or gold).
10277
10278'-ffat-lto-objects'
10279     Fat LTO objects are object files that contain both the intermediate
10280     language and the object code.  This makes them usable for both LTO
10281     linking and normal linking.  This option is effective only when
10282     compiling with '-flto' and is ignored at link time.
10283
10284     '-fno-fat-lto-objects' improves compilation time over plain LTO,
10285     but requires the complete toolchain to be aware of LTO. It requires
10286     a linker with linker plugin support for basic functionality.
10287     Additionally, 'nm', 'ar' and 'ranlib' need to support linker
10288     plugins to allow a full-featured build environment (capable of
10289     building static libraries etc).  GCC provides the 'gcc-ar',
10290     'gcc-nm', 'gcc-ranlib' wrappers to pass the right options to these
10291     tools.  With non fat LTO makefiles need to be modified to use them.
10292
10293     Note that modern binutils provide plugin auto-load mechanism.
10294     Installing the linker plugin into '$libdir/bfd-plugins' has the
10295     same effect as usage of the command wrappers ('gcc-ar', 'gcc-nm'
10296     and 'gcc-ranlib').
10297
10298     The default is '-fno-fat-lto-objects' on targets with linker plugin
10299     support.
10300
10301'-fcompare-elim'
10302     After register allocation and post-register allocation instruction
10303     splitting, identify arithmetic instructions that compute processor
10304     flags similar to a comparison operation based on that arithmetic.
10305     If possible, eliminate the explicit comparison operation.
10306
10307     This pass only applies to certain targets that cannot explicitly
10308     represent the comparison operation before register allocation is
10309     complete.
10310
10311     Enabled at levels '-O', '-O2', '-O3', '-Os'.
10312
10313'-fcprop-registers'
10314     After register allocation and post-register allocation instruction
10315     splitting, perform a copy-propagation pass to try to reduce
10316     scheduling dependencies and occasionally eliminate the copy.
10317
10318     Enabled at levels '-O', '-O2', '-O3', '-Os'.
10319
10320'-fprofile-correction'
10321     Profiles collected using an instrumented binary for multi-threaded
10322     programs may be inconsistent due to missed counter updates.  When
10323     this option is specified, GCC uses heuristics to correct or smooth
10324     out such inconsistencies.  By default, GCC emits an error message
10325     when an inconsistent profile is detected.
10326
10327     This option is enabled by '-fauto-profile'.
10328
10329'-fprofile-partial-training'
10330     With '-fprofile-use' all portions of programs not executed during
10331     train run are optimized agressively for size rather than speed.  In
10332     some cases it is not practical to train all possible hot paths in
10333     the program.  (For example, program may contain functions specific
10334     for a given hardware and trianing may not cover all hardware
10335     configurations program is run on.)  With
10336     '-fprofile-partial-training' profile feedback will be ignored for
10337     all functions not executed during the train run leading them to be
10338     optimized as if they were compiled without profile feedback.  This
10339     leads to better performance when train run is not representative
10340     but also leads to significantly bigger code.
10341
10342'-fprofile-use'
10343'-fprofile-use=PATH'
10344     Enable profile feedback-directed optimizations, and the following
10345     optimizations, many of which are generally profitable only with
10346     profile feedback available:
10347
10348          -fbranch-probabilities  -fprofile-values
10349          -funroll-loops  -fpeel-loops  -ftracer  -fvpt
10350          -finline-functions  -fipa-cp  -fipa-cp-clone  -fipa-bit-cp
10351          -fpredictive-commoning  -fsplit-loops  -funswitch-loops
10352          -fgcse-after-reload  -ftree-loop-vectorize  -ftree-slp-vectorize
10353          -fvect-cost-model=dynamic  -ftree-loop-distribute-patterns
10354          -fprofile-reorder-functions
10355
10356     Before you can use this option, you must first generate profiling
10357     information.  *Note Instrumentation Options::, for information
10358     about the '-fprofile-generate' option.
10359
10360     By default, GCC emits an error message if the feedback profiles do
10361     not match the source code.  This error can be turned into a warning
10362     by using '-Wno-error=coverage-mismatch'.  Note this may result in
10363     poorly optimized code.  Additionally, by default, GCC also emits a
10364     warning message if the feedback profiles do not exist (see
10365     '-Wmissing-profile').
10366
10367     If PATH is specified, GCC looks at the PATH to find the profile
10368     feedback data files.  See '-fprofile-dir'.
10369
10370'-fauto-profile'
10371'-fauto-profile=PATH'
10372     Enable sampling-based feedback-directed optimizations, and the
10373     following optimizations, many of which are generally profitable
10374     only with profile feedback available:
10375
10376          -fbranch-probabilities  -fprofile-values
10377          -funroll-loops  -fpeel-loops  -ftracer  -fvpt
10378          -finline-functions  -fipa-cp  -fipa-cp-clone  -fipa-bit-cp
10379          -fpredictive-commoning  -fsplit-loops  -funswitch-loops
10380          -fgcse-after-reload  -ftree-loop-vectorize  -ftree-slp-vectorize
10381          -fvect-cost-model=dynamic  -ftree-loop-distribute-patterns
10382          -fprofile-correction
10383
10384     PATH is the name of a file containing AutoFDO profile information.
10385     If omitted, it defaults to 'fbdata.afdo' in the current directory.
10386
10387     Producing an AutoFDO profile data file requires running your
10388     program with the 'perf' utility on a supported GNU/Linux target
10389     system.  For more information, see <https://perf.wiki.kernel.org/>.
10390
10391     E.g.
10392          perf record -e br_inst_retired:near_taken -b -o perf.data \
10393              -- your_program
10394
10395     Then use the 'create_gcov' tool to convert the raw profile data to
10396     a format that can be used by GCC.  You must also supply the
10397     unstripped binary for your program to this tool.  See
10398     <https://github.com/google/autofdo>.
10399
10400     E.g.
10401          create_gcov --binary=your_program.unstripped --profile=perf.data \
10402              --gcov=profile.afdo
10403
10404 The following options control compiler behavior regarding
10405floating-point arithmetic.  These options trade off between speed and
10406correctness.  All must be specifically enabled.
10407
10408'-ffloat-store'
10409     Do not store floating-point variables in registers, and inhibit
10410     other options that might change whether a floating-point value is
10411     taken from a register or memory.
10412
10413     This option prevents undesirable excess precision on machines such
10414     as the 68000 where the floating registers (of the 68881) keep more
10415     precision than a 'double' is supposed to have.  Similarly for the
10416     x86 architecture.  For most programs, the excess precision does
10417     only good, but a few programs rely on the precise definition of
10418     IEEE floating point.  Use '-ffloat-store' for such programs, after
10419     modifying them to store all pertinent intermediate computations
10420     into variables.
10421
10422'-fexcess-precision=STYLE'
10423     This option allows further control over excess precision on
10424     machines where floating-point operations occur in a format with
10425     more precision or range than the IEEE standard and interchange
10426     floating-point types.  By default, '-fexcess-precision=fast' is in
10427     effect; this means that operations may be carried out in a wider
10428     precision than the types specified in the source if that would
10429     result in faster code, and it is unpredictable when rounding to the
10430     types specified in the source code takes place.  When compiling C,
10431     if '-fexcess-precision=standard' is specified then excess precision
10432     follows the rules specified in ISO C99; in particular, both casts
10433     and assignments cause values to be rounded to their semantic types
10434     (whereas '-ffloat-store' only affects assignments).  This option is
10435     enabled by default for C if a strict conformance option such as
10436     '-std=c99' is used.  '-ffast-math' enables
10437     '-fexcess-precision=fast' by default regardless of whether a strict
10438     conformance option is used.
10439
10440     '-fexcess-precision=standard' is not implemented for languages
10441     other than C. On the x86, it has no effect if '-mfpmath=sse' or
10442     '-mfpmath=sse+387' is specified; in the former case, IEEE semantics
10443     apply without excess precision, and in the latter, rounding is
10444     unpredictable.
10445
10446'-ffast-math'
10447     Sets the options '-fno-math-errno', '-funsafe-math-optimizations',
10448     '-ffinite-math-only', '-fno-rounding-math', '-fno-signaling-nans',
10449     '-fcx-limited-range' and '-fexcess-precision=fast'.
10450
10451     This option causes the preprocessor macro '__FAST_MATH__' to be
10452     defined.
10453
10454     This option is not turned on by any '-O' option besides '-Ofast'
10455     since it can result in incorrect output for programs that depend on
10456     an exact implementation of IEEE or ISO rules/specifications for
10457     math functions.  It may, however, yield faster code for programs
10458     that do not require the guarantees of these specifications.
10459
10460'-fno-math-errno'
10461     Do not set 'errno' after calling math functions that are executed
10462     with a single instruction, e.g., 'sqrt'.  A program that relies on
10463     IEEE exceptions for math error handling may want to use this flag
10464     for speed while maintaining IEEE arithmetic compatibility.
10465
10466     This option is not turned on by any '-O' option since it can result
10467     in incorrect output for programs that depend on an exact
10468     implementation of IEEE or ISO rules/specifications for math
10469     functions.  It may, however, yield faster code for programs that do
10470     not require the guarantees of these specifications.
10471
10472     The default is '-fmath-errno'.
10473
10474     On Darwin systems, the math library never sets 'errno'.  There is
10475     therefore no reason for the compiler to consider the possibility
10476     that it might, and '-fno-math-errno' is the default.
10477
10478'-funsafe-math-optimizations'
10479
10480     Allow optimizations for floating-point arithmetic that (a) assume
10481     that arguments and results are valid and (b) may violate IEEE or
10482     ANSI standards.  When used at link time, it may include libraries
10483     or startup files that change the default FPU control word or other
10484     similar optimizations.
10485
10486     This option is not turned on by any '-O' option since it can result
10487     in incorrect output for programs that depend on an exact
10488     implementation of IEEE or ISO rules/specifications for math
10489     functions.  It may, however, yield faster code for programs that do
10490     not require the guarantees of these specifications.  Enables
10491     '-fno-signed-zeros', '-fno-trapping-math', '-fassociative-math' and
10492     '-freciprocal-math'.
10493
10494     The default is '-fno-unsafe-math-optimizations'.
10495
10496'-fassociative-math'
10497
10498     Allow re-association of operands in series of floating-point
10499     operations.  This violates the ISO C and C++ language standard by
10500     possibly changing computation result.  NOTE: re-ordering may change
10501     the sign of zero as well as ignore NaNs and inhibit or create
10502     underflow or overflow (and thus cannot be used on code that relies
10503     on rounding behavior like '(x + 2**52) - 2**52'.  May also reorder
10504     floating-point comparisons and thus may not be used when ordered
10505     comparisons are required.  This option requires that both
10506     '-fno-signed-zeros' and '-fno-trapping-math' be in effect.
10507     Moreover, it doesn't make much sense with '-frounding-math'.  For
10508     Fortran the option is automatically enabled when both
10509     '-fno-signed-zeros' and '-fno-trapping-math' are in effect.
10510
10511     The default is '-fno-associative-math'.
10512
10513'-freciprocal-math'
10514
10515     Allow the reciprocal of a value to be used instead of dividing by
10516     the value if this enables optimizations.  For example 'x / y' can
10517     be replaced with 'x * (1/y)', which is useful if '(1/y)' is subject
10518     to common subexpression elimination.  Note that this loses
10519     precision and increases the number of flops operating on the value.
10520
10521     The default is '-fno-reciprocal-math'.
10522
10523'-ffinite-math-only'
10524     Allow optimizations for floating-point arithmetic that assume that
10525     arguments and results are not NaNs or +-Infs.
10526
10527     This option is not turned on by any '-O' option since it can result
10528     in incorrect output for programs that depend on an exact
10529     implementation of IEEE or ISO rules/specifications for math
10530     functions.  It may, however, yield faster code for programs that do
10531     not require the guarantees of these specifications.
10532
10533     The default is '-fno-finite-math-only'.
10534
10535'-fno-signed-zeros'
10536     Allow optimizations for floating-point arithmetic that ignore the
10537     signedness of zero.  IEEE arithmetic specifies the behavior of
10538     distinct +0.0 and -0.0 values, which then prohibits simplification
10539     of expressions such as x+0.0 or 0.0*x (even with
10540     '-ffinite-math-only').  This option implies that the sign of a zero
10541     result isn't significant.
10542
10543     The default is '-fsigned-zeros'.
10544
10545'-fno-trapping-math'
10546     Compile code assuming that floating-point operations cannot
10547     generate user-visible traps.  These traps include division by zero,
10548     overflow, underflow, inexact result and invalid operation.  This
10549     option requires that '-fno-signaling-nans' be in effect.  Setting
10550     this option may allow faster code if one relies on "non-stop" IEEE
10551     arithmetic, for example.
10552
10553     This option should never be turned on by any '-O' option since it
10554     can result in incorrect output for programs that depend on an exact
10555     implementation of IEEE or ISO rules/specifications for math
10556     functions.
10557
10558     The default is '-ftrapping-math'.
10559
10560'-frounding-math'
10561     Disable transformations and optimizations that assume default
10562     floating-point rounding behavior.  This is round-to-zero for all
10563     floating point to integer conversions, and round-to-nearest for all
10564     other arithmetic truncations.  This option should be specified for
10565     programs that change the FP rounding mode dynamically, or that may
10566     be executed with a non-default rounding mode.  This option disables
10567     constant folding of floating-point expressions at compile time
10568     (which may be affected by rounding mode) and arithmetic
10569     transformations that are unsafe in the presence of sign-dependent
10570     rounding modes.
10571
10572     The default is '-fno-rounding-math'.
10573
10574     This option is experimental and does not currently guarantee to
10575     disable all GCC optimizations that are affected by rounding mode.
10576     Future versions of GCC may provide finer control of this setting
10577     using C99's 'FENV_ACCESS' pragma.  This command-line option will be
10578     used to specify the default state for 'FENV_ACCESS'.
10579
10580'-fsignaling-nans'
10581     Compile code assuming that IEEE signaling NaNs may generate
10582     user-visible traps during floating-point operations.  Setting this
10583     option disables optimizations that may change the number of
10584     exceptions visible with signaling NaNs.  This option implies
10585     '-ftrapping-math'.
10586
10587     This option causes the preprocessor macro '__SUPPORT_SNAN__' to be
10588     defined.
10589
10590     The default is '-fno-signaling-nans'.
10591
10592     This option is experimental and does not currently guarantee to
10593     disable all GCC optimizations that affect signaling NaN behavior.
10594
10595'-fno-fp-int-builtin-inexact'
10596     Do not allow the built-in functions 'ceil', 'floor', 'round' and
10597     'trunc', and their 'float' and 'long double' variants, to generate
10598     code that raises the "inexact" floating-point exception for
10599     noninteger arguments.  ISO C99 and C11 allow these functions to
10600     raise the "inexact" exception, but ISO/IEC TS 18661-1:2014, the C
10601     bindings to IEEE 754-2008, as integrated into ISO C2X, does not
10602     allow these functions to do so.
10603
10604     The default is '-ffp-int-builtin-inexact', allowing the exception
10605     to be raised, unless C2X or a later C standard is selected.  This
10606     option does nothing unless '-ftrapping-math' is in effect.
10607
10608     Even if '-fno-fp-int-builtin-inexact' is used, if the functions
10609     generate a call to a library function then the "inexact" exception
10610     may be raised if the library implementation does not follow TS
10611     18661.
10612
10613'-fsingle-precision-constant'
10614     Treat floating-point constants as single precision instead of
10615     implicitly converting them to double-precision constants.
10616
10617'-fcx-limited-range'
10618     When enabled, this option states that a range reduction step is not
10619     needed when performing complex division.  Also, there is no
10620     checking whether the result of a complex multiplication or division
10621     is 'NaN + I*NaN', with an attempt to rescue the situation in that
10622     case.  The default is '-fno-cx-limited-range', but is enabled by
10623     '-ffast-math'.
10624
10625     This option controls the default setting of the ISO C99
10626     'CX_LIMITED_RANGE' pragma.  Nevertheless, the option applies to all
10627     languages.
10628
10629'-fcx-fortran-rules'
10630     Complex multiplication and division follow Fortran rules.  Range
10631     reduction is done as part of complex division, but there is no
10632     checking whether the result of a complex multiplication or division
10633     is 'NaN + I*NaN', with an attempt to rescue the situation in that
10634     case.
10635
10636     The default is '-fno-cx-fortran-rules'.
10637
10638 The following options control optimizations that may improve
10639performance, but are not enabled by any '-O' options.  This section
10640includes experimental options that may produce broken code.
10641
10642'-fbranch-probabilities'
10643     After running a program compiled with '-fprofile-arcs' (*note
10644     Instrumentation Options::), you can compile it a second time using
10645     '-fbranch-probabilities', to improve optimizations based on the
10646     number of times each branch was taken.  When a program compiled
10647     with '-fprofile-arcs' exits, it saves arc execution counts to a
10648     file called 'SOURCENAME.gcda' for each source file.  The
10649     information in this data file is very dependent on the structure of
10650     the generated code, so you must use the same source code and the
10651     same optimization options for both compilations.
10652
10653     With '-fbranch-probabilities', GCC puts a 'REG_BR_PROB' note on
10654     each 'JUMP_INSN' and 'CALL_INSN'.  These can be used to improve
10655     optimization.  Currently, they are only used in one place: in
10656     'reorg.c', instead of guessing which path a branch is most likely
10657     to take, the 'REG_BR_PROB' values are used to exactly determine
10658     which path is taken more often.
10659
10660     Enabled by '-fprofile-use' and '-fauto-profile'.
10661
10662'-fprofile-values'
10663     If combined with '-fprofile-arcs', it adds code so that some data
10664     about values of expressions in the program is gathered.
10665
10666     With '-fbranch-probabilities', it reads back the data gathered from
10667     profiling values of expressions for usage in optimizations.
10668
10669     Enabled by '-fprofile-generate', '-fprofile-use', and
10670     '-fauto-profile'.
10671
10672'-fprofile-reorder-functions'
10673     Function reordering based on profile instrumentation collects first
10674     time of execution of a function and orders these functions in
10675     ascending order.
10676
10677     Enabled with '-fprofile-use'.
10678
10679'-fvpt'
10680     If combined with '-fprofile-arcs', this option instructs the
10681     compiler to add code to gather information about values of
10682     expressions.
10683
10684     With '-fbranch-probabilities', it reads back the data gathered and
10685     actually performs the optimizations based on them.  Currently the
10686     optimizations include specialization of division operations using
10687     the knowledge about the value of the denominator.
10688
10689     Enabled with '-fprofile-use' and '-fauto-profile'.
10690
10691'-frename-registers'
10692     Attempt to avoid false dependencies in scheduled code by making use
10693     of registers left over after register allocation.  This
10694     optimization most benefits processors with lots of registers.
10695     Depending on the debug information format adopted by the target,
10696     however, it can make debugging impossible, since variables no
10697     longer stay in a "home register".
10698
10699     Enabled by default with '-funroll-loops'.
10700
10701'-fschedule-fusion'
10702     Performs a target dependent pass over the instruction stream to
10703     schedule instructions of same type together because target machine
10704     can execute them more efficiently if they are adjacent to each
10705     other in the instruction flow.
10706
10707     Enabled at levels '-O2', '-O3', '-Os'.
10708
10709'-ftracer'
10710     Perform tail duplication to enlarge superblock size.  This
10711     transformation simplifies the control flow of the function allowing
10712     other optimizations to do a better job.
10713
10714     Enabled by '-fprofile-use' and '-fauto-profile'.
10715
10716'-funroll-loops'
10717     Unroll loops whose number of iterations can be determined at
10718     compile time or upon entry to the loop.  '-funroll-loops' implies
10719     '-frerun-cse-after-loop', '-fweb' and '-frename-registers'.  It
10720     also turns on complete loop peeling (i.e. complete removal of loops
10721     with a small constant number of iterations).  This option makes
10722     code larger, and may or may not make it run faster.
10723
10724     Enabled by '-fprofile-use' and '-fauto-profile'.
10725
10726'-funroll-all-loops'
10727     Unroll all loops, even if their number of iterations is uncertain
10728     when the loop is entered.  This usually makes programs run more
10729     slowly.  '-funroll-all-loops' implies the same options as
10730     '-funroll-loops'.
10731
10732'-fpeel-loops'
10733     Peels loops for which there is enough information that they do not
10734     roll much (from profile feedback or static analysis).  It also
10735     turns on complete loop peeling (i.e. complete removal of loops with
10736     small constant number of iterations).
10737
10738     Enabled by '-O3', '-fprofile-use', and '-fauto-profile'.
10739
10740'-fmove-loop-invariants'
10741     Enables the loop invariant motion pass in the RTL loop optimizer.
10742     Enabled at level '-O1' and higher, except for '-Og'.
10743
10744'-fsplit-loops'
10745     Split a loop into two if it contains a condition that's always true
10746     for one side of the iteration space and false for the other.
10747
10748     Enabled by '-fprofile-use' and '-fauto-profile'.
10749
10750'-funswitch-loops'
10751     Move branches with loop invariant conditions out of the loop, with
10752     duplicates of the loop on both branches (modified according to
10753     result of the condition).
10754
10755     Enabled by '-fprofile-use' and '-fauto-profile'.
10756
10757'-fversion-loops-for-strides'
10758     If a loop iterates over an array with a variable stride, create
10759     another version of the loop that assumes the stride is always one.
10760     For example:
10761
10762          for (int i = 0; i < n; ++i)
10763            x[i * stride] = ...;
10764
10765     becomes:
10766
10767          if (stride == 1)
10768            for (int i = 0; i < n; ++i)
10769              x[i] = ...;
10770          else
10771            for (int i = 0; i < n; ++i)
10772              x[i * stride] = ...;
10773
10774     This is particularly useful for assumed-shape arrays in Fortran
10775     where (for example) it allows better vectorization assuming
10776     contiguous accesses.  This flag is enabled by default at '-O3'.  It
10777     is also enabled by '-fprofile-use' and '-fauto-profile'.
10778
10779'-ffunction-sections'
10780'-fdata-sections'
10781     Place each function or data item into its own section in the output
10782     file if the target supports arbitrary sections.  The name of the
10783     function or the name of the data item determines the section's name
10784     in the output file.
10785
10786     Use these options on systems where the linker can perform
10787     optimizations to improve locality of reference in the instruction
10788     space.  Most systems using the ELF object format have linkers with
10789     such optimizations.  On AIX, the linker rearranges sections
10790     (CSECTs) based on the call graph.  The performance impact varies.
10791
10792     Together with a linker garbage collection (linker '--gc-sections'
10793     option) these options may lead to smaller statically-linked
10794     executables (after stripping).
10795
10796     On ELF/DWARF systems these options do not degenerate the quality of
10797     the debug information.  There could be issues with other object
10798     files/debug info formats.
10799
10800     Only use these options when there are significant benefits from
10801     doing so.  When you specify these options, the assembler and linker
10802     create larger object and executable files and are also slower.
10803     These options affect code generation.  They prevent optimizations
10804     by the compiler and assembler using relative locations inside a
10805     translation unit since the locations are unknown until link time.
10806     An example of such an optimization is relaxing calls to short call
10807     instructions.
10808
10809'-fstdarg-opt'
10810     Optimize the prologue of variadic argument functions with respect
10811     to usage of those arguments.
10812
10813'-fsection-anchors'
10814     Try to reduce the number of symbolic address calculations by using
10815     shared "anchor" symbols to address nearby objects.  This
10816     transformation can help to reduce the number of GOT entries and GOT
10817     accesses on some targets.
10818
10819     For example, the implementation of the following function 'foo':
10820
10821          static int a, b, c;
10822          int foo (void) { return a + b + c; }
10823
10824     usually calculates the addresses of all three variables, but if you
10825     compile it with '-fsection-anchors', it accesses the variables from
10826     a common anchor point instead.  The effect is similar to the
10827     following pseudocode (which isn't valid C):
10828
10829          int foo (void)
10830          {
10831            register int *xr = &x;
10832            return xr[&a - &x] + xr[&b - &x] + xr[&c - &x];
10833          }
10834
10835     Not all targets support this option.
10836
10837'--param NAME=VALUE'
10838     In some places, GCC uses various constants to control the amount of
10839     optimization that is done.  For example, GCC does not inline
10840     functions that contain more than a certain number of instructions.
10841     You can control some of these constants on the command line using
10842     the '--param' option.
10843
10844     The names of specific parameters, and the meaning of the values,
10845     are tied to the internals of the compiler, and are subject to
10846     change without notice in future releases.
10847
10848     In order to get minimal, maximal and default value of a parameter,
10849     one can use '--help=param -Q' options.
10850
10851     In each case, the VALUE is an integer.  The following choices of
10852     NAME are recognized for all targets:
10853
10854     'predictable-branch-outcome'
10855          When branch is predicted to be taken with probability lower
10856          than this threshold (in percent), then it is considered well
10857          predictable.
10858
10859     'max-rtl-if-conversion-insns'
10860          RTL if-conversion tries to remove conditional branches around
10861          a block and replace them with conditionally executed
10862          instructions.  This parameter gives the maximum number of
10863          instructions in a block which should be considered for
10864          if-conversion.  The compiler will also use other heuristics to
10865          decide whether if-conversion is likely to be profitable.
10866
10867     'max-rtl-if-conversion-predictable-cost'
10868     'max-rtl-if-conversion-unpredictable-cost'
10869          RTL if-conversion will try to remove conditional branches
10870          around a block and replace them with conditionally executed
10871          instructions.  These parameters give the maximum permissible
10872          cost for the sequence that would be generated by if-conversion
10873          depending on whether the branch is statically determined to be
10874          predictable or not.  The units for this parameter are the same
10875          as those for the GCC internal seq_cost metric.  The compiler
10876          will try to provide a reasonable default for this parameter
10877          using the BRANCH_COST target macro.
10878
10879     'max-crossjump-edges'
10880          The maximum number of incoming edges to consider for
10881          cross-jumping.  The algorithm used by '-fcrossjumping' is
10882          O(N^2) in the number of edges incoming to each block.
10883          Increasing values mean more aggressive optimization, making
10884          the compilation time increase with probably small improvement
10885          in executable size.
10886
10887     'min-crossjump-insns'
10888          The minimum number of instructions that must be matched at the
10889          end of two blocks before cross-jumping is performed on them.
10890          This value is ignored in the case where all instructions in
10891          the block being cross-jumped from are matched.
10892
10893     'max-grow-copy-bb-insns'
10894          The maximum code size expansion factor when copying basic
10895          blocks instead of jumping.  The expansion is relative to a
10896          jump instruction.
10897
10898     'max-goto-duplication-insns'
10899          The maximum number of instructions to duplicate to a block
10900          that jumps to a computed goto.  To avoid O(N^2) behavior in a
10901          number of passes, GCC factors computed gotos early in the
10902          compilation process, and unfactors them as late as possible.
10903          Only computed jumps at the end of a basic blocks with no more
10904          than max-goto-duplication-insns are unfactored.
10905
10906     'max-delay-slot-insn-search'
10907          The maximum number of instructions to consider when looking
10908          for an instruction to fill a delay slot.  If more than this
10909          arbitrary number of instructions are searched, the time
10910          savings from filling the delay slot are minimal, so stop
10911          searching.  Increasing values mean more aggressive
10912          optimization, making the compilation time increase with
10913          probably small improvement in execution time.
10914
10915     'max-delay-slot-live-search'
10916          When trying to fill delay slots, the maximum number of
10917          instructions to consider when searching for a block with valid
10918          live register information.  Increasing this arbitrarily chosen
10919          value means more aggressive optimization, increasing the
10920          compilation time.  This parameter should be removed when the
10921          delay slot code is rewritten to maintain the control-flow
10922          graph.
10923
10924     'max-gcse-memory'
10925          The approximate maximum amount of memory that can be allocated
10926          in order to perform the global common subexpression
10927          elimination optimization.  If more memory than specified is
10928          required, the optimization is not done.
10929
10930     'max-gcse-insertion-ratio'
10931          If the ratio of expression insertions to deletions is larger
10932          than this value for any expression, then RTL PRE inserts or
10933          removes the expression and thus leaves partially redundant
10934          computations in the instruction stream.
10935
10936     'max-pending-list-length'
10937          The maximum number of pending dependencies scheduling allows
10938          before flushing the current state and starting over.  Large
10939          functions with few branches or calls can create excessively
10940          large lists which needlessly consume memory and resources.
10941
10942     'max-modulo-backtrack-attempts'
10943          The maximum number of backtrack attempts the scheduler should
10944          make when modulo scheduling a loop.  Larger values can
10945          exponentially increase compilation time.
10946
10947     'max-inline-insns-single'
10948          Several parameters control the tree inliner used in GCC.  This
10949          number sets the maximum number of instructions (counted in
10950          GCC's internal representation) in a single function that the
10951          tree inliner considers for inlining.  This only affects
10952          functions declared inline and methods implemented in a class
10953          declaration (C++).
10954
10955     'max-inline-insns-auto'
10956          When you use '-finline-functions' (included in '-O3'), a lot
10957          of functions that would otherwise not be considered for
10958          inlining by the compiler are investigated.  To those
10959          functions, a different (more restrictive) limit compared to
10960          functions declared inline can be applied ('--param
10961          max-inline-insns-auto').
10962
10963     'max-inline-insns-small'
10964          This is bound applied to calls which are considered relevant
10965          with '-finline-small-functions'.
10966
10967     'max-inline-insns-size'
10968          This is bound applied to calls which are optimized for size.
10969          Small growth may be desirable to anticipate optimization
10970          oppurtunities exposed by inlining.
10971
10972     'uninlined-function-insns'
10973          Number of instructions accounted by inliner for function
10974          overhead such as function prologue and epilogue.
10975
10976     'uninlined-function-time'
10977          Extra time accounted by inliner for function overhead such as
10978          time needed to execute function prologue and epilogue
10979
10980     'inline-heuristics-hint-percent'
10981          The scale (in percents) applied to 'inline-insns-single',
10982          'inline-insns-single-O2', 'inline-insns-auto' when inline
10983          heuristics hints that inlining is very profitable (will enable
10984          later optimizations).
10985
10986     'uninlined-thunk-insns'
10987     'uninlined-thunk-time'
10988          Same as '--param uninlined-function-insns' and '--param
10989          uninlined-function-time' but applied to function thunks
10990
10991     'inline-min-speedup'
10992          When estimated performance improvement of caller + callee
10993          runtime exceeds this threshold (in percent), the function can
10994          be inlined regardless of the limit on '--param
10995          max-inline-insns-single' and '--param max-inline-insns-auto'.
10996
10997     'large-function-insns'
10998          The limit specifying really large functions.  For functions
10999          larger than this limit after inlining, inlining is constrained
11000          by '--param large-function-growth'.  This parameter is useful
11001          primarily to avoid extreme compilation time caused by
11002          non-linear algorithms used by the back end.
11003
11004     'large-function-growth'
11005          Specifies maximal growth of large function caused by inlining
11006          in percents.  For example, parameter value 100 limits large
11007          function growth to 2.0 times the original size.
11008
11009     'large-unit-insns'
11010          The limit specifying large translation unit.  Growth caused by
11011          inlining of units larger than this limit is limited by
11012          '--param inline-unit-growth'.  For small units this might be
11013          too tight.  For example, consider a unit consisting of
11014          function A that is inline and B that just calls A three times.
11015          If B is small relative to A, the growth of unit is 300\% and
11016          yet such inlining is very sane.  For very large units
11017          consisting of small inlineable functions, however, the overall
11018          unit growth limit is needed to avoid exponential explosion of
11019          code size.  Thus for smaller units, the size is increased to
11020          '--param large-unit-insns' before applying '--param
11021          inline-unit-growth'.
11022
11023     'inline-unit-growth'
11024          Specifies maximal overall growth of the compilation unit
11025          caused by inlining.  For example, parameter value 20 limits
11026          unit growth to 1.2 times the original size.  Cold functions
11027          (either marked cold via an attribute or by profile feedback)
11028          are not accounted into the unit size.
11029
11030     'ipa-cp-unit-growth'
11031          Specifies maximal overall growth of the compilation unit
11032          caused by interprocedural constant propagation.  For example,
11033          parameter value 10 limits unit growth to 1.1 times the
11034          original size.
11035
11036     'large-stack-frame'
11037          The limit specifying large stack frames.  While inlining the
11038          algorithm is trying to not grow past this limit too much.
11039
11040     'large-stack-frame-growth'
11041          Specifies maximal growth of large stack frames caused by
11042          inlining in percents.  For example, parameter value 1000
11043          limits large stack frame growth to 11 times the original size.
11044
11045     'max-inline-insns-recursive'
11046     'max-inline-insns-recursive-auto'
11047          Specifies the maximum number of instructions an out-of-line
11048          copy of a self-recursive inline function can grow into by
11049          performing recursive inlining.
11050
11051          '--param max-inline-insns-recursive' applies to functions
11052          declared inline.  For functions not declared inline, recursive
11053          inlining happens only when '-finline-functions' (included in
11054          '-O3') is enabled; '--param max-inline-insns-recursive-auto'
11055          applies instead.
11056
11057     'max-inline-recursive-depth'
11058     'max-inline-recursive-depth-auto'
11059          Specifies the maximum recursion depth used for recursive
11060          inlining.
11061
11062          '--param max-inline-recursive-depth' applies to functions
11063          declared inline.  For functions not declared inline, recursive
11064          inlining happens only when '-finline-functions' (included in
11065          '-O3') is enabled; '--param max-inline-recursive-depth-auto'
11066          applies instead.
11067
11068     'min-inline-recursive-probability'
11069          Recursive inlining is profitable only for function having deep
11070          recursion in average and can hurt for function having little
11071          recursion depth by increasing the prologue size or complexity
11072          of function body to other optimizers.
11073
11074          When profile feedback is available (see '-fprofile-generate')
11075          the actual recursion depth can be guessed from the probability
11076          that function recurses via a given call expression.  This
11077          parameter limits inlining only to call expressions whose
11078          probability exceeds the given threshold (in percents).
11079
11080     'early-inlining-insns'
11081          Specify growth that the early inliner can make.  In effect it
11082          increases the amount of inlining for code having a large
11083          abstraction penalty.
11084
11085     'max-early-inliner-iterations'
11086          Limit of iterations of the early inliner.  This basically
11087          bounds the number of nested indirect calls the early inliner
11088          can resolve.  Deeper chains are still handled by late
11089          inlining.
11090
11091     'comdat-sharing-probability'
11092          Probability (in percent) that C++ inline function with comdat
11093          visibility are shared across multiple compilation units.
11094
11095     'profile-func-internal-id'
11096          A parameter to control whether to use function internal id in
11097          profile database lookup.  If the value is 0, the compiler uses
11098          an id that is based on function assembler name and filename,
11099          which makes old profile data more tolerant to source changes
11100          such as function reordering etc.
11101
11102     'min-vect-loop-bound'
11103          The minimum number of iterations under which loops are not
11104          vectorized when '-ftree-vectorize' is used.  The number of
11105          iterations after vectorization needs to be greater than the
11106          value specified by this option to allow vectorization.
11107
11108     'gcse-cost-distance-ratio'
11109          Scaling factor in calculation of maximum distance an
11110          expression can be moved by GCSE optimizations.  This is
11111          currently supported only in the code hoisting pass.  The
11112          bigger the ratio, the more aggressive code hoisting is with
11113          simple expressions, i.e., the expressions that have cost less
11114          than 'gcse-unrestricted-cost'.  Specifying 0 disables hoisting
11115          of simple expressions.
11116
11117     'gcse-unrestricted-cost'
11118          Cost, roughly measured as the cost of a single typical machine
11119          instruction, at which GCSE optimizations do not constrain the
11120          distance an expression can travel.  This is currently
11121          supported only in the code hoisting pass.  The lesser the
11122          cost, the more aggressive code hoisting is.  Specifying 0
11123          allows all expressions to travel unrestricted distances.
11124
11125     'max-hoist-depth'
11126          The depth of search in the dominator tree for expressions to
11127          hoist.  This is used to avoid quadratic behavior in hoisting
11128          algorithm.  The value of 0 does not limit on the search, but
11129          may slow down compilation of huge functions.
11130
11131     'max-tail-merge-comparisons'
11132          The maximum amount of similar bbs to compare a bb with.  This
11133          is used to avoid quadratic behavior in tree tail merging.
11134
11135     'max-tail-merge-iterations'
11136          The maximum amount of iterations of the pass over the
11137          function.  This is used to limit compilation time in tree tail
11138          merging.
11139
11140     'store-merging-allow-unaligned'
11141          Allow the store merging pass to introduce unaligned stores if
11142          it is legal to do so.
11143
11144     'max-stores-to-merge'
11145          The maximum number of stores to attempt to merge into wider
11146          stores in the store merging pass.
11147
11148     'max-unrolled-insns'
11149          The maximum number of instructions that a loop may have to be
11150          unrolled.  If a loop is unrolled, this parameter also
11151          determines how many times the loop code is unrolled.
11152
11153     'max-average-unrolled-insns'
11154          The maximum number of instructions biased by probabilities of
11155          their execution that a loop may have to be unrolled.  If a
11156          loop is unrolled, this parameter also determines how many
11157          times the loop code is unrolled.
11158
11159     'max-unroll-times'
11160          The maximum number of unrollings of a single loop.
11161
11162     'max-peeled-insns'
11163          The maximum number of instructions that a loop may have to be
11164          peeled.  If a loop is peeled, this parameter also determines
11165          how many times the loop code is peeled.
11166
11167     'max-peel-times'
11168          The maximum number of peelings of a single loop.
11169
11170     'max-peel-branches'
11171          The maximum number of branches on the hot path through the
11172          peeled sequence.
11173
11174     'max-completely-peeled-insns'
11175          The maximum number of insns of a completely peeled loop.
11176
11177     'max-completely-peel-times'
11178          The maximum number of iterations of a loop to be suitable for
11179          complete peeling.
11180
11181     'max-completely-peel-loop-nest-depth'
11182          The maximum depth of a loop nest suitable for complete
11183          peeling.
11184
11185     'max-unswitch-insns'
11186          The maximum number of insns of an unswitched loop.
11187
11188     'max-unswitch-level'
11189          The maximum number of branches unswitched in a single loop.
11190
11191     'lim-expensive'
11192          The minimum cost of an expensive expression in the loop
11193          invariant motion.
11194
11195     'min-loop-cond-split-prob'
11196          When FDO profile information is available,
11197          'min-loop-cond-split-prob' specifies minimum threshold for
11198          probability of semi-invariant condition statement to trigger
11199          loop split.
11200
11201     'iv-consider-all-candidates-bound'
11202          Bound on number of candidates for induction variables, below
11203          which all candidates are considered for each use in induction
11204          variable optimizations.  If there are more candidates than
11205          this, only the most relevant ones are considered to avoid
11206          quadratic time complexity.
11207
11208     'iv-max-considered-uses'
11209          The induction variable optimizations give up on loops that
11210          contain more induction variable uses.
11211
11212     'iv-always-prune-cand-set-bound'
11213          If the number of candidates in the set is smaller than this
11214          value, always try to remove unnecessary ivs from the set when
11215          adding a new one.
11216
11217     'avg-loop-niter'
11218          Average number of iterations of a loop.
11219
11220     'dse-max-object-size'
11221          Maximum size (in bytes) of objects tracked bytewise by dead
11222          store elimination.  Larger values may result in larger
11223          compilation times.
11224
11225     'dse-max-alias-queries-per-store'
11226          Maximum number of queries into the alias oracle per store.
11227          Larger values result in larger compilation times and may
11228          result in more removed dead stores.
11229
11230     'scev-max-expr-size'
11231          Bound on size of expressions used in the scalar evolutions
11232          analyzer.  Large expressions slow the analyzer.
11233
11234     'scev-max-expr-complexity'
11235          Bound on the complexity of the expressions in the scalar
11236          evolutions analyzer.  Complex expressions slow the analyzer.
11237
11238     'max-tree-if-conversion-phi-args'
11239          Maximum number of arguments in a PHI supported by TREE if
11240          conversion unless the loop is marked with simd pragma.
11241
11242     'vect-max-version-for-alignment-checks'
11243          The maximum number of run-time checks that can be performed
11244          when doing loop versioning for alignment in the vectorizer.
11245
11246     'vect-max-version-for-alias-checks'
11247          The maximum number of run-time checks that can be performed
11248          when doing loop versioning for alias in the vectorizer.
11249
11250     'vect-max-peeling-for-alignment'
11251          The maximum number of loop peels to enhance access alignment
11252          for vectorizer.  Value -1 means no limit.
11253
11254     'max-iterations-to-track'
11255          The maximum number of iterations of a loop the brute-force
11256          algorithm for analysis of the number of iterations of the loop
11257          tries to evaluate.
11258
11259     'hot-bb-count-fraction'
11260          The denominator n of fraction 1/n of the maximal execution
11261          count of a basic block in the entire program that a basic
11262          block needs to at least have in order to be considered hot.
11263          The default is 10000, which means that a basic block is
11264          considered hot if its execution count is greater than 1/10000
11265          of the maximal execution count.  0 means that it is never
11266          considered hot.  Used in non-LTO mode.
11267
11268     'hot-bb-count-ws-permille'
11269          The number of most executed permilles, ranging from 0 to 1000,
11270          of the profiled execution of the entire program to which the
11271          execution count of a basic block must be part of in order to
11272          be considered hot.  The default is 990, which means that a
11273          basic block is considered hot if its execution count
11274          contributes to the upper 990 permilles, or 99.0%, of the
11275          profiled execution of the entire program.  0 means that it is
11276          never considered hot.  Used in LTO mode.
11277
11278     'hot-bb-frequency-fraction'
11279          The denominator n of fraction 1/n of the execution frequency
11280          of the entry block of a function that a basic block of this
11281          function needs to at least have in order to be considered hot.
11282          The default is 1000, which means that a basic block is
11283          considered hot in a function if it is executed more frequently
11284          than 1/1000 of the frequency of the entry block of the
11285          function.  0 means that it is never considered hot.
11286
11287     'unlikely-bb-count-fraction'
11288          The denominator n of fraction 1/n of the number of profiled
11289          runs of the entire program below which the execution count of
11290          a basic block must be in order for the basic block to be
11291          considered unlikely executed.  The default is 20, which means
11292          that a basic block is considered unlikely executed if it is
11293          executed in fewer than 1/20, or 5%, of the runs of the
11294          program.  0 means that it is always considered unlikely
11295          executed.
11296
11297     'max-predicted-iterations'
11298          The maximum number of loop iterations we predict statically.
11299          This is useful in cases where a function contains a single
11300          loop with known bound and another loop with unknown bound.
11301          The known number of iterations is predicted correctly, while
11302          the unknown number of iterations average to roughly 10.  This
11303          means that the loop without bounds appears artificially cold
11304          relative to the other one.
11305
11306     'builtin-expect-probability'
11307          Control the probability of the expression having the specified
11308          value.  This parameter takes a percentage (i.e. 0 ...  100) as
11309          input.
11310
11311     'builtin-string-cmp-inline-length'
11312          The maximum length of a constant string for a builtin string
11313          cmp call eligible for inlining.
11314
11315     'align-threshold'
11316
11317          Select fraction of the maximal frequency of executions of a
11318          basic block in a function to align the basic block.
11319
11320     'align-loop-iterations'
11321
11322          A loop expected to iterate at least the selected number of
11323          iterations is aligned.
11324
11325     'tracer-dynamic-coverage'
11326     'tracer-dynamic-coverage-feedback'
11327
11328          This value is used to limit superblock formation once the
11329          given percentage of executed instructions is covered.  This
11330          limits unnecessary code size expansion.
11331
11332          The 'tracer-dynamic-coverage-feedback' parameter is used only
11333          when profile feedback is available.  The real profiles (as
11334          opposed to statically estimated ones) are much less balanced
11335          allowing the threshold to be larger value.
11336
11337     'tracer-max-code-growth'
11338          Stop tail duplication once code growth has reached given
11339          percentage.  This is a rather artificial limit, as most of the
11340          duplicates are eliminated later in cross jumping, so it may be
11341          set to much higher values than is the desired code growth.
11342
11343     'tracer-min-branch-ratio'
11344
11345          Stop reverse growth when the reverse probability of best edge
11346          is less than this threshold (in percent).
11347
11348     'tracer-min-branch-probability'
11349     'tracer-min-branch-probability-feedback'
11350
11351          Stop forward growth if the best edge has probability lower
11352          than this threshold.
11353
11354          Similarly to 'tracer-dynamic-coverage' two parameters are
11355          provided.  'tracer-min-branch-probability-feedback' is used
11356          for compilation with profile feedback and
11357          'tracer-min-branch-probability' compilation without.  The
11358          value for compilation with profile feedback needs to be more
11359          conservative (higher) in order to make tracer effective.
11360
11361     'stack-clash-protection-guard-size'
11362          Specify the size of the operating system provided stack guard
11363          as 2 raised to NUM bytes.  Higher values may reduce the number
11364          of explicit probes, but a value larger than the operating
11365          system provided guard will leave code vulnerable to stack
11366          clash style attacks.
11367
11368     'stack-clash-protection-probe-interval'
11369          Stack clash protection involves probing stack space as it is
11370          allocated.  This param controls the maximum distance between
11371          probes into the stack as 2 raised to NUM bytes.  Higher values
11372          may reduce the number of explicit probes, but a value larger
11373          than the operating system provided guard will leave code
11374          vulnerable to stack clash style attacks.
11375
11376     'max-cse-path-length'
11377
11378          The maximum number of basic blocks on path that CSE considers.
11379
11380     'max-cse-insns'
11381          The maximum number of instructions CSE processes before
11382          flushing.
11383
11384     'ggc-min-expand'
11385
11386          GCC uses a garbage collector to manage its own memory
11387          allocation.  This parameter specifies the minimum percentage
11388          by which the garbage collector's heap should be allowed to
11389          expand between collections.  Tuning this may improve
11390          compilation speed; it has no effect on code generation.
11391
11392          The default is 30% + 70% * (RAM/1GB) with an upper bound of
11393          100% when RAM >= 1GB.  If 'getrlimit' is available, the notion
11394          of "RAM" is the smallest of actual RAM and 'RLIMIT_DATA' or
11395          'RLIMIT_AS'.  If GCC is not able to calculate RAM on a
11396          particular platform, the lower bound of 30% is used.  Setting
11397          this parameter and 'ggc-min-heapsize' to zero causes a full
11398          collection to occur at every opportunity.  This is extremely
11399          slow, but can be useful for debugging.
11400
11401     'ggc-min-heapsize'
11402
11403          Minimum size of the garbage collector's heap before it begins
11404          bothering to collect garbage.  The first collection occurs
11405          after the heap expands by 'ggc-min-expand'% beyond
11406          'ggc-min-heapsize'.  Again, tuning this may improve
11407          compilation speed, and has no effect on code generation.
11408
11409          The default is the smaller of RAM/8, RLIMIT_RSS, or a limit
11410          that tries to ensure that RLIMIT_DATA or RLIMIT_AS are not
11411          exceeded, but with a lower bound of 4096 (four megabytes) and
11412          an upper bound of 131072 (128 megabytes).  If GCC is not able
11413          to calculate RAM on a particular platform, the lower bound is
11414          used.  Setting this parameter very large effectively disables
11415          garbage collection.  Setting this parameter and
11416          'ggc-min-expand' to zero causes a full collection to occur at
11417          every opportunity.
11418
11419     'max-reload-search-insns'
11420          The maximum number of instruction reload should look backward
11421          for equivalent register.  Increasing values mean more
11422          aggressive optimization, making the compilation time increase
11423          with probably slightly better performance.
11424
11425     'max-cselib-memory-locations'
11426          The maximum number of memory locations cselib should take into
11427          account.  Increasing values mean more aggressive optimization,
11428          making the compilation time increase with probably slightly
11429          better performance.
11430
11431     'max-sched-ready-insns'
11432          The maximum number of instructions ready to be issued the
11433          scheduler should consider at any given time during the first
11434          scheduling pass.  Increasing values mean more thorough
11435          searches, making the compilation time increase with probably
11436          little benefit.
11437
11438     'max-sched-region-blocks'
11439          The maximum number of blocks in a region to be considered for
11440          interblock scheduling.
11441
11442     'max-pipeline-region-blocks'
11443          The maximum number of blocks in a region to be considered for
11444          pipelining in the selective scheduler.
11445
11446     'max-sched-region-insns'
11447          The maximum number of insns in a region to be considered for
11448          interblock scheduling.
11449
11450     'max-pipeline-region-insns'
11451          The maximum number of insns in a region to be considered for
11452          pipelining in the selective scheduler.
11453
11454     'min-spec-prob'
11455          The minimum probability (in percents) of reaching a source
11456          block for interblock speculative scheduling.
11457
11458     'max-sched-extend-regions-iters'
11459          The maximum number of iterations through CFG to extend
11460          regions.  A value of 0 disables region extensions.
11461
11462     'max-sched-insn-conflict-delay'
11463          The maximum conflict delay for an insn to be considered for
11464          speculative motion.
11465
11466     'sched-spec-prob-cutoff'
11467          The minimal probability of speculation success (in percents),
11468          so that speculative insns are scheduled.
11469
11470     'sched-state-edge-prob-cutoff'
11471          The minimum probability an edge must have for the scheduler to
11472          save its state across it.
11473
11474     'sched-mem-true-dep-cost'
11475          Minimal distance (in CPU cycles) between store and load
11476          targeting same memory locations.
11477
11478     'selsched-max-lookahead'
11479          The maximum size of the lookahead window of selective
11480          scheduling.  It is a depth of search for available
11481          instructions.
11482
11483     'selsched-max-sched-times'
11484          The maximum number of times that an instruction is scheduled
11485          during selective scheduling.  This is the limit on the number
11486          of iterations through which the instruction may be pipelined.
11487
11488     'selsched-insns-to-rename'
11489          The maximum number of best instructions in the ready list that
11490          are considered for renaming in the selective scheduler.
11491
11492     'sms-min-sc'
11493          The minimum value of stage count that swing modulo scheduler
11494          generates.
11495
11496     'max-last-value-rtl'
11497          The maximum size measured as number of RTLs that can be
11498          recorded in an expression in combiner for a pseudo register as
11499          last known value of that register.
11500
11501     'max-combine-insns'
11502          The maximum number of instructions the RTL combiner tries to
11503          combine.
11504
11505     'integer-share-limit'
11506          Small integer constants can use a shared data structure,
11507          reducing the compiler's memory usage and increasing its speed.
11508          This sets the maximum value of a shared integer constant.
11509
11510     'ssp-buffer-size'
11511          The minimum size of buffers (i.e. arrays) that receive stack
11512          smashing protection when '-fstack-protection' is used.
11513
11514     'min-size-for-stack-sharing'
11515          The minimum size of variables taking part in stack slot
11516          sharing when not optimizing.
11517
11518     'max-jump-thread-duplication-stmts'
11519          Maximum number of statements allowed in a block that needs to
11520          be duplicated when threading jumps.
11521
11522     'max-fields-for-field-sensitive'
11523          Maximum number of fields in a structure treated in a field
11524          sensitive manner during pointer analysis.
11525
11526     'prefetch-latency'
11527          Estimate on average number of instructions that are executed
11528          before prefetch finishes.  The distance prefetched ahead is
11529          proportional to this constant.  Increasing this number may
11530          also lead to less streams being prefetched (see
11531          'simultaneous-prefetches').
11532
11533     'simultaneous-prefetches'
11534          Maximum number of prefetches that can run at the same time.
11535
11536     'l1-cache-line-size'
11537          The size of cache line in L1 data cache, in bytes.
11538
11539     'l1-cache-size'
11540          The size of L1 data cache, in kilobytes.
11541
11542     'l2-cache-size'
11543          The size of L2 data cache, in kilobytes.
11544
11545     'prefetch-dynamic-strides'
11546          Whether the loop array prefetch pass should issue software
11547          prefetch hints for strides that are non-constant.  In some
11548          cases this may be beneficial, though the fact the stride is
11549          non-constant may make it hard to predict when there is clear
11550          benefit to issuing these hints.
11551
11552          Set to 1 if the prefetch hints should be issued for
11553          non-constant strides.  Set to 0 if prefetch hints should be
11554          issued only for strides that are known to be constant and
11555          below 'prefetch-minimum-stride'.
11556
11557     'prefetch-minimum-stride'
11558          Minimum constant stride, in bytes, to start using prefetch
11559          hints for.  If the stride is less than this threshold,
11560          prefetch hints will not be issued.
11561
11562          This setting is useful for processors that have hardware
11563          prefetchers, in which case there may be conflicts between the
11564          hardware prefetchers and the software prefetchers.  If the
11565          hardware prefetchers have a maximum stride they can handle, it
11566          should be used here to improve the use of software
11567          prefetchers.
11568
11569          A value of -1 means we don't have a threshold and therefore
11570          prefetch hints can be issued for any constant stride.
11571
11572          This setting is only useful for strides that are known and
11573          constant.
11574
11575     'loop-interchange-max-num-stmts'
11576          The maximum number of stmts in a loop to be interchanged.
11577
11578     'loop-interchange-stride-ratio'
11579          The minimum ratio between stride of two loops for interchange
11580          to be profitable.
11581
11582     'min-insn-to-prefetch-ratio'
11583          The minimum ratio between the number of instructions and the
11584          number of prefetches to enable prefetching in a loop.
11585
11586     'prefetch-min-insn-to-mem-ratio'
11587          The minimum ratio between the number of instructions and the
11588          number of memory references to enable prefetching in a loop.
11589
11590     'use-canonical-types'
11591          Whether the compiler should use the "canonical" type system.
11592          Should always be 1, which uses a more efficient internal
11593          mechanism for comparing types in C++ and Objective-C++.
11594          However, if bugs in the canonical type system are causing
11595          compilation failures, set this value to 0 to disable canonical
11596          types.
11597
11598     'switch-conversion-max-branch-ratio'
11599          Switch initialization conversion refuses to create arrays that
11600          are bigger than 'switch-conversion-max-branch-ratio' times the
11601          number of branches in the switch.
11602
11603     'max-partial-antic-length'
11604          Maximum length of the partial antic set computed during the
11605          tree partial redundancy elimination optimization
11606          ('-ftree-pre') when optimizing at '-O3' and above.  For some
11607          sorts of source code the enhanced partial redundancy
11608          elimination optimization can run away, consuming all of the
11609          memory available on the host machine.  This parameter sets a
11610          limit on the length of the sets that are computed, which
11611          prevents the runaway behavior.  Setting a value of 0 for this
11612          parameter allows an unlimited set length.
11613
11614     'rpo-vn-max-loop-depth'
11615          Maximum loop depth that is value-numbered optimistically.
11616          When the limit hits the innermost RPO-VN-MAX-LOOP-DEPTH loops
11617          and the outermost loop in the loop nest are value-numbered
11618          optimistically and the remaining ones not.
11619
11620     'sccvn-max-alias-queries-per-access'
11621          Maximum number of alias-oracle queries we perform when looking
11622          for redundancies for loads and stores.  If this limit is hit
11623          the search is aborted and the load or store is not considered
11624          redundant.  The number of queries is algorithmically limited
11625          to the number of stores on all paths from the load to the
11626          function entry.
11627
11628     'ira-max-loops-num'
11629          IRA uses regional register allocation by default.  If a
11630          function contains more loops than the number given by this
11631          parameter, only at most the given number of the most
11632          frequently-executed loops form regions for regional register
11633          allocation.
11634
11635     'ira-max-conflict-table-size'
11636          Although IRA uses a sophisticated algorithm to compress the
11637          conflict table, the table can still require excessive amounts
11638          of memory for huge functions.  If the conflict table for a
11639          function could be more than the size in MB given by this
11640          parameter, the register allocator instead uses a faster,
11641          simpler, and lower-quality algorithm that does not require
11642          building a pseudo-register conflict table.
11643
11644     'ira-loop-reserved-regs'
11645          IRA can be used to evaluate more accurate register pressure in
11646          loops for decisions to move loop invariants (see '-O3').  The
11647          number of available registers reserved for some other purposes
11648          is given by this parameter.  Default of the parameter is the
11649          best found from numerous experiments.
11650
11651     'lra-inheritance-ebb-probability-cutoff'
11652          LRA tries to reuse values reloaded in registers in subsequent
11653          insns.  This optimization is called inheritance.  EBB is used
11654          as a region to do this optimization.  The parameter defines a
11655          minimal fall-through edge probability in percentage used to
11656          add BB to inheritance EBB in LRA. The default value was chosen
11657          from numerous runs of SPEC2000 on x86-64.
11658
11659     'loop-invariant-max-bbs-in-loop'
11660          Loop invariant motion can be very expensive, both in
11661          compilation time and in amount of needed compile-time memory,
11662          with very large loops.  Loops with more basic blocks than this
11663          parameter won't have loop invariant motion optimization
11664          performed on them.
11665
11666     'loop-max-datarefs-for-datadeps'
11667          Building data dependencies is expensive for very large loops.
11668          This parameter limits the number of data references in loops
11669          that are considered for data dependence analysis.  These large
11670          loops are no handled by the optimizations using loop data
11671          dependencies.
11672
11673     'max-vartrack-size'
11674          Sets a maximum number of hash table slots to use during
11675          variable tracking dataflow analysis of any function.  If this
11676          limit is exceeded with variable tracking at assignments
11677          enabled, analysis for that function is retried without it,
11678          after removing all debug insns from the function.  If the
11679          limit is exceeded even without debug insns, var tracking
11680          analysis is completely disabled for the function.  Setting the
11681          parameter to zero makes it unlimited.
11682
11683     'max-vartrack-expr-depth'
11684          Sets a maximum number of recursion levels when attempting to
11685          map variable names or debug temporaries to value expressions.
11686          This trades compilation time for more complete debug
11687          information.  If this is set too low, value expressions that
11688          are available and could be represented in debug information
11689          may end up not being used; setting this higher may enable the
11690          compiler to find more complex debug expressions, but compile
11691          time and memory use may grow.
11692
11693     'max-debug-marker-count'
11694          Sets a threshold on the number of debug markers (e.g. begin
11695          stmt markers) to avoid complexity explosion at inlining or
11696          expanding to RTL. If a function has more such gimple stmts
11697          than the set limit, such stmts will be dropped from the
11698          inlined copy of a function, and from its RTL expansion.
11699
11700     'min-nondebug-insn-uid'
11701          Use uids starting at this parameter for nondebug insns.  The
11702          range below the parameter is reserved exclusively for debug
11703          insns created by '-fvar-tracking-assignments', but debug insns
11704          may get (non-overlapping) uids above it if the reserved range
11705          is exhausted.
11706
11707     'ipa-sra-ptr-growth-factor'
11708          IPA-SRA replaces a pointer to an aggregate with one or more
11709          new parameters only when their cumulative size is less or
11710          equal to 'ipa-sra-ptr-growth-factor' times the size of the
11711          original pointer parameter.
11712
11713     'ipa-sra-max-replacements'
11714          Maximum pieces of an aggregate that IPA-SRA tracks.  As a
11715          consequence, it is also the maximum number of replacements of
11716          a formal parameter.
11717
11718     'sra-max-scalarization-size-Ospeed'
11719     'sra-max-scalarization-size-Osize'
11720          The two Scalar Reduction of Aggregates passes (SRA and
11721          IPA-SRA) aim to replace scalar parts of aggregates with uses
11722          of independent scalar variables.  These parameters control the
11723          maximum size, in storage units, of aggregate which is
11724          considered for replacement when compiling for speed
11725          ('sra-max-scalarization-size-Ospeed') or size
11726          ('sra-max-scalarization-size-Osize') respectively.
11727
11728     'sra-max-propagations'
11729          The maximum number of artificial accesses that Scalar
11730          Replacement of Aggregates (SRA) will track, per one local
11731          variable, in order to facilitate copy propagation.
11732
11733     'tm-max-aggregate-size'
11734          When making copies of thread-local variables in a transaction,
11735          this parameter specifies the size in bytes after which
11736          variables are saved with the logging functions as opposed to
11737          save/restore code sequence pairs.  This option only applies
11738          when using '-fgnu-tm'.
11739
11740     'graphite-max-nb-scop-params'
11741          To avoid exponential effects in the Graphite loop transforms,
11742          the number of parameters in a Static Control Part (SCoP) is
11743          bounded.  A value of zero can be used to lift the bound.  A
11744          variable whose value is unknown at compilation time and
11745          defined outside a SCoP is a parameter of the SCoP.
11746
11747     'loop-block-tile-size'
11748          Loop blocking or strip mining transforms, enabled with
11749          '-floop-block' or '-floop-strip-mine', strip mine each loop in
11750          the loop nest by a given number of iterations.  The strip
11751          length can be changed using the 'loop-block-tile-size'
11752          parameter.
11753
11754     'ipa-cp-value-list-size'
11755          IPA-CP attempts to track all possible values and types passed
11756          to a function's parameter in order to propagate them and
11757          perform devirtualization.  'ipa-cp-value-list-size' is the
11758          maximum number of values and types it stores per one formal
11759          parameter of a function.
11760
11761     'ipa-cp-eval-threshold'
11762          IPA-CP calculates its own score of cloning profitability
11763          heuristics and performs those cloning opportunities with
11764          scores that exceed 'ipa-cp-eval-threshold'.
11765
11766     'ipa-cp-max-recursive-depth'
11767          Maximum depth of recursive cloning for self-recursive
11768          function.
11769
11770     'ipa-cp-min-recursive-probability'
11771          Recursive cloning only when the probability of call being
11772          executed exceeds the parameter.
11773
11774     'ipa-cp-recursion-penalty'
11775          Percentage penalty the recursive functions will receive when
11776          they are evaluated for cloning.
11777
11778     'ipa-cp-single-call-penalty'
11779          Percentage penalty functions containing a single call to
11780          another function will receive when they are evaluated for
11781          cloning.
11782
11783     'ipa-max-agg-items'
11784          IPA-CP is also capable to propagate a number of scalar values
11785          passed in an aggregate.  'ipa-max-agg-items' controls the
11786          maximum number of such values per one parameter.
11787
11788     'ipa-cp-loop-hint-bonus'
11789          When IPA-CP determines that a cloning candidate would make the
11790          number of iterations of a loop known, it adds a bonus of
11791          'ipa-cp-loop-hint-bonus' to the profitability score of the
11792          candidate.
11793
11794     'ipa-max-aa-steps'
11795          During its analysis of function bodies, IPA-CP employs alias
11796          analysis in order to track values pointed to by function
11797          parameters.  In order not spend too much time analyzing huge
11798          functions, it gives up and consider all memory clobbered after
11799          examining 'ipa-max-aa-steps' statements modifying memory.
11800
11801     'ipa-max-switch-predicate-bounds'
11802          Maximal number of boundary endpoints of case ranges of switch
11803          statement.  For switch exceeding this limit, IPA-CP will not
11804          construct cloning cost predicate, which is used to estimate
11805          cloning benefit, for default case of the switch statement.
11806
11807     'ipa-max-param-expr-ops'
11808          IPA-CP will analyze conditional statement that references some
11809          function parameter to estimate benefit for cloning upon
11810          certain constant value.  But if number of operations in a
11811          parameter expression exceeds 'ipa-max-param-expr-ops', the
11812          expression is treated as complicated one, and is not handled
11813          by IPA analysis.
11814
11815     'lto-partitions'
11816          Specify desired number of partitions produced during WHOPR
11817          compilation.  The number of partitions should exceed the
11818          number of CPUs used for compilation.
11819
11820     'lto-min-partition'
11821          Size of minimal partition for WHOPR (in estimated
11822          instructions).  This prevents expenses of splitting very small
11823          programs into too many partitions.
11824
11825     'lto-max-partition'
11826          Size of max partition for WHOPR (in estimated instructions).
11827          to provide an upper bound for individual size of partition.
11828          Meant to be used only with balanced partitioning.
11829
11830     'lto-max-streaming-parallelism'
11831          Maximal number of parallel processes used for LTO streaming.
11832
11833     'cxx-max-namespaces-for-diagnostic-help'
11834          The maximum number of namespaces to consult for suggestions
11835          when C++ name lookup fails for an identifier.
11836
11837     'sink-frequency-threshold'
11838          The maximum relative execution frequency (in percents) of the
11839          target block relative to a statement's original block to allow
11840          statement sinking of a statement.  Larger numbers result in
11841          more aggressive statement sinking.  A small positive
11842          adjustment is applied for statements with memory operands as
11843          those are even more profitable so sink.
11844
11845     'max-stores-to-sink'
11846          The maximum number of conditional store pairs that can be
11847          sunk.  Set to 0 if either vectorization ('-ftree-vectorize')
11848          or if-conversion ('-ftree-loop-if-convert') is disabled.
11849
11850     'case-values-threshold'
11851          The smallest number of different values for which it is best
11852          to use a jump-table instead of a tree of conditional branches.
11853          If the value is 0, use the default for the machine.
11854
11855     'jump-table-max-growth-ratio-for-size'
11856          The maximum code size growth ratio when expanding into a jump
11857          table (in percent).  The parameter is used when optimizing for
11858          size.
11859
11860     'jump-table-max-growth-ratio-for-speed'
11861          The maximum code size growth ratio when expanding into a jump
11862          table (in percent).  The parameter is used when optimizing for
11863          speed.
11864
11865     'tree-reassoc-width'
11866          Set the maximum number of instructions executed in parallel in
11867          reassociated tree.  This parameter overrides target dependent
11868          heuristics used by default if has non zero value.
11869
11870     'sched-pressure-algorithm'
11871          Choose between the two available implementations of
11872          '-fsched-pressure'.  Algorithm 1 is the original
11873          implementation and is the more likely to prevent instructions
11874          from being reordered.  Algorithm 2 was designed to be a
11875          compromise between the relatively conservative approach taken
11876          by algorithm 1 and the rather aggressive approach taken by the
11877          default scheduler.  It relies more heavily on having a regular
11878          register file and accurate register pressure classes.  See
11879          'haifa-sched.c' in the GCC sources for more details.
11880
11881          The default choice depends on the target.
11882
11883     'max-slsr-cand-scan'
11884          Set the maximum number of existing candidates that are
11885          considered when seeking a basis for a new straight-line
11886          strength reduction candidate.
11887
11888     'asan-globals'
11889          Enable buffer overflow detection for global objects.  This
11890          kind of protection is enabled by default if you are using
11891          '-fsanitize=address' option.  To disable global objects
11892          protection use '--param asan-globals=0'.
11893
11894     'asan-stack'
11895          Enable buffer overflow detection for stack objects.  This kind
11896          of protection is enabled by default when using
11897          '-fsanitize=address'.  To disable stack protection use
11898          '--param asan-stack=0' option.
11899
11900     'asan-instrument-reads'
11901          Enable buffer overflow detection for memory reads.  This kind
11902          of protection is enabled by default when using
11903          '-fsanitize=address'.  To disable memory reads protection use
11904          '--param asan-instrument-reads=0'.
11905
11906     'asan-instrument-writes'
11907          Enable buffer overflow detection for memory writes.  This kind
11908          of protection is enabled by default when using
11909          '-fsanitize=address'.  To disable memory writes protection use
11910          '--param asan-instrument-writes=0' option.
11911
11912     'asan-memintrin'
11913          Enable detection for built-in functions.  This kind of
11914          protection is enabled by default when using
11915          '-fsanitize=address'.  To disable built-in functions
11916          protection use '--param asan-memintrin=0'.
11917
11918     'asan-use-after-return'
11919          Enable detection of use-after-return.  This kind of protection
11920          is enabled by default when using the '-fsanitize=address'
11921          option.  To disable it use '--param asan-use-after-return=0'.
11922
11923          Note: By default the check is disabled at run time.  To enable
11924          it, add 'detect_stack_use_after_return=1' to the environment
11925          variable 'ASAN_OPTIONS'.
11926
11927     'asan-instrumentation-with-call-threshold'
11928          If number of memory accesses in function being instrumented is
11929          greater or equal to this number, use callbacks instead of
11930          inline checks.  E.g.  to disable inline code use '--param
11931          asan-instrumentation-with-call-threshold=0'.
11932
11933     'use-after-scope-direct-emission-threshold'
11934          If the size of a local variable in bytes is smaller or equal
11935          to this number, directly poison (or unpoison) shadow memory
11936          instead of using run-time callbacks.
11937
11938     'max-fsm-thread-path-insns'
11939          Maximum number of instructions to copy when duplicating blocks
11940          on a finite state automaton jump thread path.
11941
11942     'max-fsm-thread-length'
11943          Maximum number of basic blocks on a finite state automaton
11944          jump thread path.
11945
11946     'max-fsm-thread-paths'
11947          Maximum number of new jump thread paths to create for a finite
11948          state automaton.
11949
11950     'parloops-chunk-size'
11951          Chunk size of omp schedule for loops parallelized by parloops.
11952
11953     'parloops-schedule'
11954          Schedule type of omp schedule for loops parallelized by
11955          parloops (static, dynamic, guided, auto, runtime).
11956
11957     'parloops-min-per-thread'
11958          The minimum number of iterations per thread of an innermost
11959          parallelized loop for which the parallelized variant is
11960          preferred over the single threaded one.  Note that for a
11961          parallelized loop nest the minimum number of iterations of the
11962          outermost loop per thread is two.
11963
11964     'max-ssa-name-query-depth'
11965          Maximum depth of recursion when querying properties of SSA
11966          names in things like fold routines.  One level of recursion
11967          corresponds to following a use-def chain.
11968
11969     'hsa-gen-debug-stores'
11970          Enable emission of special debug stores within HSA kernels
11971          which are then read and reported by libgomp plugin.
11972          Generation of these stores is disabled by default, use
11973          '--param hsa-gen-debug-stores=1' to enable it.
11974
11975     'max-speculative-devirt-maydefs'
11976          The maximum number of may-defs we analyze when looking for a
11977          must-def specifying the dynamic type of an object that invokes
11978          a virtual call we may be able to devirtualize speculatively.
11979
11980     'max-vrp-switch-assertions'
11981          The maximum number of assertions to add along the default edge
11982          of a switch statement during VRP.
11983
11984     'unroll-jam-min-percent'
11985          The minimum percentage of memory references that must be
11986          optimized away for the unroll-and-jam transformation to be
11987          considered profitable.
11988
11989     'unroll-jam-max-unroll'
11990          The maximum number of times the outer loop should be unrolled
11991          by the unroll-and-jam transformation.
11992
11993     'max-rtl-if-conversion-unpredictable-cost'
11994          Maximum permissible cost for the sequence that would be
11995          generated by the RTL if-conversion pass for a branch that is
11996          considered unpredictable.
11997
11998     'max-variable-expansions-in-unroller'
11999          If '-fvariable-expansion-in-unroller' is used, the maximum
12000          number of times that an individual variable will be expanded
12001          during loop unrolling.
12002
12003     'tracer-min-branch-probability-feedback'
12004          Stop forward growth if the probability of best edge is less
12005          than this threshold (in percent).  Used when profile feedback
12006          is available.
12007
12008     'partial-inlining-entry-probability'
12009          Maximum probability of the entry BB of split region (in
12010          percent relative to entry BB of the function) to make partial
12011          inlining happen.
12012
12013     'max-tracked-strlens'
12014          Maximum number of strings for which strlen optimization pass
12015          will track string lengths.
12016
12017     'gcse-after-reload-partial-fraction'
12018          The threshold ratio for performing partial redundancy
12019          elimination after reload.
12020
12021     'gcse-after-reload-critical-fraction'
12022          The threshold ratio of critical edges execution count that
12023          permit performing redundancy elimination after reload.
12024
12025     'max-loop-header-insns'
12026          The maximum number of insns in loop header duplicated by the
12027          copy loop headers pass.
12028
12029     'vect-epilogues-nomask'
12030          Enable loop epilogue vectorization using smaller vector size.
12031
12032     'slp-max-insns-in-bb'
12033          Maximum number of instructions in basic block to be considered
12034          for SLP vectorization.
12035
12036     'avoid-fma-max-bits'
12037          Maximum number of bits for which we avoid creating FMAs.
12038
12039     'sms-loop-average-count-threshold'
12040          A threshold on the average loop count considered by the swing
12041          modulo scheduler.
12042
12043     'sms-dfa-history'
12044          The number of cycles the swing modulo scheduler considers when
12045          checking conflicts using DFA.
12046
12047     'max-inline-insns-recursive-auto'
12048          The maximum number of instructions non-inline function can
12049          grow to via recursive inlining.
12050
12051     'graphite-allow-codegen-errors'
12052          Whether codegen errors should be ICEs when '-fchecking'.
12053
12054     'sms-max-ii-factor'
12055          A factor for tuning the upper bound that swing modulo
12056          scheduler uses for scheduling a loop.
12057
12058     'lra-max-considered-reload-pseudos'
12059          The max number of reload pseudos which are considered during
12060          spilling a non-reload pseudo.
12061
12062     'max-pow-sqrt-depth'
12063          Maximum depth of sqrt chains to use when synthesizing
12064          exponentiation by a real constant.
12065
12066     'max-dse-active-local-stores'
12067          Maximum number of active local stores in RTL dead store
12068          elimination.
12069
12070     'asan-instrument-allocas'
12071          Enable asan allocas/VLAs protection.
12072
12073     'max-iterations-computation-cost'
12074          Bound on the cost of an expression to compute the number of
12075          iterations.
12076
12077     'max-isl-operations'
12078          Maximum number of isl operations, 0 means unlimited.
12079
12080     'graphite-max-arrays-per-scop'
12081          Maximum number of arrays per scop.
12082
12083     'max-vartrack-reverse-op-size'
12084          Max.  size of loc list for which reverse ops should be added.
12085
12086     'tracer-dynamic-coverage-feedback'
12087          The percentage of function, weighted by execution frequency,
12088          that must be covered by trace formation.  Used when profile
12089          feedback is available.
12090
12091     'max-inline-recursive-depth-auto'
12092          The maximum depth of recursive inlining for non-inline
12093          functions.
12094
12095     'fsm-scale-path-stmts'
12096          Scale factor to apply to the number of statements in a
12097          threading path when comparing to the number of (scaled)
12098          blocks.
12099
12100     'fsm-maximum-phi-arguments'
12101          Maximum number of arguments a PHI may have before the FSM
12102          threader will not try to thread through its block.
12103
12104     'uninit-control-dep-attempts'
12105          Maximum number of nested calls to search for control
12106          dependencies during uninitialized variable analysis.
12107
12108     'sra-max-scalarization-size-Osize'
12109          Maximum size, in storage units, of an aggregate which should
12110          be considered for scalarization when compiling for size.
12111
12112     'fsm-scale-path-blocks'
12113          Scale factor to apply to the number of blocks in a threading
12114          path when comparing to the number of (scaled) statements.
12115
12116     'sched-autopref-queue-depth'
12117          Hardware autoprefetcher scheduler model control flag.  Number
12118          of lookahead cycles the model looks into; at ' ' only enable
12119          instruction sorting heuristic.
12120
12121     'loop-versioning-max-inner-insns'
12122          The maximum number of instructions that an inner loop can have
12123          before the loop versioning pass considers it too big to copy.
12124
12125     'loop-versioning-max-outer-insns'
12126          The maximum number of instructions that an outer loop can have
12127          before the loop versioning pass considers it too big to copy,
12128          discounting any instructions in inner loops that directly
12129          benefit from versioning.
12130
12131     'ssa-name-def-chain-limit'
12132          The maximum number of SSA_NAME assignments to follow in
12133          determining a property of a variable such as its value.  This
12134          limits the number of iterations or recursive calls GCC
12135          performs when optimizing certain statements or when
12136          determining their validity prior to issuing diagnostics.
12137
12138     'store-merging-max-size'
12139          Maximum size of a single store merging region in bytes.
12140
12141     'hash-table-verification-limit'
12142          The number of elements for which hash table verification is
12143          done for each searched element.
12144
12145     'max-find-base-term-values'
12146          Maximum number of VALUEs handled during a single
12147          find_base_term call.
12148
12149     'analyzer-max-enodes-per-program-point'
12150          The maximum number of exploded nodes per program point within
12151          the analyzer, before terminating analysis of that point.
12152
12153     'analyzer-min-snodes-for-call-summary'
12154          The minimum number of supernodes within a function for the
12155          analyzer to consider summarizing its effects at call sites.
12156
12157     'analyzer-max-recursion-depth'
12158          The maximum number of times a callsite can appear in a call
12159          stack within the analyzer, before terminating analysis of a
12160          call that would recurse deeper.
12161
12162     'gimple-fe-computed-hot-bb-threshold'
12163          The number of executions of a basic block which is considered
12164          hot.  The parameter is used only in GIMPLE FE.
12165
12166     'analyzer-bb-explosion-factor'
12167          The maximum number of 'after supernode' exploded nodes within
12168          the analyzer per supernode, before terminating analysis.
12169
12170     The following choices of NAME are available on AArch64 targets:
12171
12172     'aarch64-sve-compare-costs'
12173          When vectorizing for SVE, consider using "unpacked" vectors
12174          for smaller elements and use the cost model to pick the
12175          cheapest approach.  Also use the cost model to choose between
12176          SVE and Advanced SIMD vectorization.
12177
12178          Using unpacked vectors includes storing smaller elements in
12179          larger containers and accessing elements with extending loads
12180          and truncating stores.
12181
12182     'aarch64-float-recp-precision'
12183          The number of Newton iterations for calculating the reciprocal
12184          for float type.  The precision of division is proportional to
12185          this param when division approximation is enabled.  The
12186          default value is 1.
12187
12188     'aarch64-double-recp-precision'
12189          The number of Newton iterations for calculating the reciprocal
12190          for double type.  The precision of division is propotional to
12191          this param when division approximation is enabled.  The
12192          default value is 2.
12193
12194
12195File: gcc.info,  Node: Instrumentation Options,  Next: Preprocessor Options,  Prev: Optimize Options,  Up: Invoking GCC
12196
121973.12 Program Instrumentation Options
12198====================================
12199
12200GCC supports a number of command-line options that control adding
12201run-time instrumentation to the code it normally generates.  For
12202example, one purpose of instrumentation is collect profiling statistics
12203for use in finding program hot spots, code coverage analysis, or
12204profile-guided optimizations.  Another class of program instrumentation
12205is adding run-time checking to detect programming errors like invalid
12206pointer dereferences or out-of-bounds array accesses, as well as
12207deliberately hostile attacks such as stack smashing or C++ vtable
12208hijacking.  There is also a general hook which can be used to implement
12209other forms of tracing or function-level instrumentation for debug or
12210program analysis purposes.
12211
12212'-p'
12213'-pg'
12214     Generate extra code to write profile information suitable for the
12215     analysis program 'prof' (for '-p') or 'gprof' (for '-pg').  You
12216     must use this option when compiling the source files you want data
12217     about, and you must also use it when linking.
12218
12219     You can use the function attribute 'no_instrument_function' to
12220     suppress profiling of individual functions when compiling with
12221     these options.  *Note Common Function Attributes::.
12222
12223'-fprofile-arcs'
12224     Add code so that program flow "arcs" are instrumented.  During
12225     execution the program records how many times each branch and call
12226     is executed and how many times it is taken or returns.  On targets
12227     that support constructors with priority support, profiling properly
12228     handles constructors, destructors and C++ constructors (and
12229     destructors) of classes which are used as a type of a global
12230     variable.
12231
12232     When the compiled program exits it saves this data to a file called
12233     'AUXNAME.gcda' for each source file.  The data may be used for
12234     profile-directed optimizations ('-fbranch-probabilities'), or for
12235     test coverage analysis ('-ftest-coverage').  Each object file's
12236     AUXNAME is generated from the name of the output file, if
12237     explicitly specified and it is not the final executable, otherwise
12238     it is the basename of the source file.  In both cases any suffix is
12239     removed (e.g. 'foo.gcda' for input file 'dir/foo.c', or
12240     'dir/foo.gcda' for output file specified as '-o dir/foo.o').  *Note
12241     Cross-profiling::.
12242
12243'--coverage'
12244
12245     This option is used to compile and link code instrumented for
12246     coverage analysis.  The option is a synonym for '-fprofile-arcs'
12247     '-ftest-coverage' (when compiling) and '-lgcov' (when linking).
12248     See the documentation for those options for more details.
12249
12250        * Compile the source files with '-fprofile-arcs' plus
12251          optimization and code generation options.  For test coverage
12252          analysis, use the additional '-ftest-coverage' option.  You do
12253          not need to profile every source file in a program.
12254
12255        * Compile the source files additionally with
12256          '-fprofile-abs-path' to create absolute path names in the
12257          '.gcno' files.  This allows 'gcov' to find the correct sources
12258          in projects where compilations occur with different working
12259          directories.
12260
12261        * Link your object files with '-lgcov' or '-fprofile-arcs' (the
12262          latter implies the former).
12263
12264        * Run the program on a representative workload to generate the
12265          arc profile information.  This may be repeated any number of
12266          times.  You can run concurrent instances of your program, and
12267          provided that the file system supports locking, the data files
12268          will be correctly updated.  Unless a strict ISO C dialect
12269          option is in effect, 'fork' calls are detected and correctly
12270          handled without double counting.
12271
12272        * For profile-directed optimizations, compile the source files
12273          again with the same optimization and code generation options
12274          plus '-fbranch-probabilities' (*note Options that Control
12275          Optimization: Optimize Options.).
12276
12277        * For test coverage analysis, use 'gcov' to produce human
12278          readable information from the '.gcno' and '.gcda' files.
12279          Refer to the 'gcov' documentation for further information.
12280
12281     With '-fprofile-arcs', for each function of your program GCC
12282     creates a program flow graph, then finds a spanning tree for the
12283     graph.  Only arcs that are not on the spanning tree have to be
12284     instrumented: the compiler adds code to count the number of times
12285     that these arcs are executed.  When an arc is the only exit or only
12286     entrance to a block, the instrumentation code can be added to the
12287     block; otherwise, a new basic block must be created to hold the
12288     instrumentation code.
12289
12290'-ftest-coverage'
12291     Produce a notes file that the 'gcov' code-coverage utility (*note
12292     'gcov'--a Test Coverage Program: Gcov.) can use to show program
12293     coverage.  Each source file's note file is called 'AUXNAME.gcno'.
12294     Refer to the '-fprofile-arcs' option above for a description of
12295     AUXNAME and instructions on how to generate test coverage data.
12296     Coverage data matches the source files more closely if you do not
12297     optimize.
12298
12299'-fprofile-abs-path'
12300     Automatically convert relative source file names to absolute path
12301     names in the '.gcno' files.  This allows 'gcov' to find the correct
12302     sources in projects where compilations occur with different working
12303     directories.
12304
12305'-fprofile-dir=PATH'
12306
12307     Set the directory to search for the profile data files in to PATH.
12308     This option affects only the profile data generated by
12309     '-fprofile-generate', '-ftest-coverage', '-fprofile-arcs' and used
12310     by '-fprofile-use' and '-fbranch-probabilities' and its related
12311     options.  Both absolute and relative paths can be used.  By
12312     default, GCC uses the current directory as PATH, thus the profile
12313     data file appears in the same directory as the object file.  In
12314     order to prevent the file name clashing, if the object file name is
12315     not an absolute path, we mangle the absolute path of the
12316     'SOURCENAME.gcda' file and use it as the file name of a '.gcda'
12317     file.  See similar option '-fprofile-note'.
12318
12319     When an executable is run in a massive parallel environment, it is
12320     recommended to save profile to different folders.  That can be done
12321     with variables in PATH that are exported during run-time:
12322
12323     '%p'
12324          process ID.
12325
12326     '%q{VAR}'
12327          value of environment variable VAR
12328
12329'-fprofile-generate'
12330'-fprofile-generate=PATH'
12331
12332     Enable options usually used for instrumenting application to
12333     produce profile useful for later recompilation with profile
12334     feedback based optimization.  You must use '-fprofile-generate'
12335     both when compiling and when linking your program.
12336
12337     The following options are enabled: '-fprofile-arcs',
12338     '-fprofile-values', '-finline-functions', and '-fipa-bit-cp'.
12339
12340     If PATH is specified, GCC looks at the PATH to find the profile
12341     feedback data files.  See '-fprofile-dir'.
12342
12343     To optimize the program based on the collected profile information,
12344     use '-fprofile-use'.  *Note Optimize Options::, for more
12345     information.
12346
12347'-fprofile-note=PATH'
12348
12349     If PATH is specified, GCC saves '.gcno' file into PATH location.
12350     If you combine the option with multiple source files, the '.gcno'
12351     file will be overwritten.
12352
12353'-fprofile-prefix-path=PATH'
12354
12355     This option can be used in combination with
12356     'profile-generate='PROFILE_DIR and 'profile-use='PROFILE_DIR to
12357     inform GCC where is the base directory of built source tree.  By
12358     default PROFILE_DIR will contain files with mangled absolute paths
12359     of all object files in the built project.  This is not desirable
12360     when directory used to build the instrumented binary differs from
12361     the directory used to build the binary optimized with profile
12362     feedback because the profile data will not be found during the
12363     optimized build.  In such setups '-fprofile-prefix-path='PATH with
12364     PATH pointing to the base directory of the build can be used to
12365     strip the irrelevant part of the path and keep all file names
12366     relative to the main build directory.
12367
12368'-fprofile-update=METHOD'
12369
12370     Alter the update method for an application instrumented for profile
12371     feedback based optimization.  The METHOD argument should be one of
12372     'single', 'atomic' or 'prefer-atomic'.  The first one is useful for
12373     single-threaded applications, while the second one prevents profile
12374     corruption by emitting thread-safe code.
12375
12376     *Warning:* When an application does not properly join all threads
12377     (or creates an detached thread), a profile file can be still
12378     corrupted.
12379
12380     Using 'prefer-atomic' would be transformed either to 'atomic', when
12381     supported by a target, or to 'single' otherwise.  The GCC driver
12382     automatically selects 'prefer-atomic' when '-pthread' is present in
12383     the command line.
12384
12385'-fprofile-filter-files=REGEX'
12386
12387     Instrument only functions from files where names match any regular
12388     expression (separated by a semi-colon).
12389
12390     For example, '-fprofile-filter-files=main.c;module.*.c' will
12391     instrument only 'main.c' and all C files starting with 'module'.
12392
12393'-fprofile-exclude-files=REGEX'
12394
12395     Instrument only functions from files where names do not match all
12396     the regular expressions (separated by a semi-colon).
12397
12398     For example, '-fprofile-exclude-files=/usr/*' will prevent
12399     instrumentation of all files that are located in '/usr/' folder.
12400
12401'-fprofile-reproducible'
12402     Control level of reproducibility of profile gathered by
12403     '-fprofile-generate'.  This makes it possible to rebuild program
12404     with same outcome which is useful, for example, for distribution
12405     packages.
12406
12407     With '-fprofile-reproducibility=serial' the profile gathered by
12408     '-fprofile-generate' is reproducible provided the trained program
12409     behaves the same at each invocation of the train run, it is not
12410     multi-threaded and profile data streaming is always done in the
12411     same order.  Note that profile streaming happens at the end of
12412     program run but also before 'fork' function is invoked.
12413
12414     Note that it is quite common that execution counts of some part of
12415     programs depends, for example, on length of temporary file names or
12416     memory space randomization (that may affect hash-table collision
12417     rate).  Such non-reproducible part of programs may be annotated by
12418     'no_instrument_function' function attribute.  'gcov-dump' with '-l'
12419     can be used to dump gathered data and verify that they are indeed
12420     reproducible.
12421
12422     With '-fprofile-reproducibility=parallel-runs' collected profile
12423     stays reproducible regardless the order of streaming of the data
12424     into gcda files.  This setting makes it possible to run multiple
12425     instances of instrumented program in parallel (such as with 'make
12426     -j').  This reduces quality of gathered data, in particular of
12427     indirect call profiling.
12428
12429'-fsanitize=address'
12430     Enable AddressSanitizer, a fast memory error detector.  Memory
12431     access instructions are instrumented to detect out-of-bounds and
12432     use-after-free bugs.  The option enables
12433     '-fsanitize-address-use-after-scope'.  See
12434     <https://github.com/google/sanitizers/wiki/AddressSanitizer> for
12435     more details.  The run-time behavior can be influenced using the
12436     'ASAN_OPTIONS' environment variable.  When set to 'help=1', the
12437     available options are shown at startup of the instrumented program.
12438     See
12439     <https://github.com/google/sanitizers/wiki/AddressSanitizerFlags#run-time-flags>
12440     for a list of supported options.  The option cannot be combined
12441     with '-fsanitize=thread'.
12442
12443'-fsanitize=kernel-address'
12444     Enable AddressSanitizer for Linux kernel.  See
12445     <https://github.com/google/kasan/wiki> for more details.
12446
12447'-fsanitize=pointer-compare'
12448     Instrument comparison operation (<, <=, >, >=) with pointer
12449     operands.  The option must be combined with either
12450     '-fsanitize=kernel-address' or '-fsanitize=address' The option
12451     cannot be combined with '-fsanitize=thread'.  Note: By default the
12452     check is disabled at run time.  To enable it, add
12453     'detect_invalid_pointer_pairs=2' to the environment variable
12454     'ASAN_OPTIONS'.  Using 'detect_invalid_pointer_pairs=1' detects
12455     invalid operation only when both pointers are non-null.
12456
12457'-fsanitize=pointer-subtract'
12458     Instrument subtraction with pointer operands.  The option must be
12459     combined with either '-fsanitize=kernel-address' or
12460     '-fsanitize=address' The option cannot be combined with
12461     '-fsanitize=thread'.  Note: By default the check is disabled at run
12462     time.  To enable it, add 'detect_invalid_pointer_pairs=2' to the
12463     environment variable 'ASAN_OPTIONS'.  Using
12464     'detect_invalid_pointer_pairs=1' detects invalid operation only
12465     when both pointers are non-null.
12466
12467'-fsanitize=thread'
12468     Enable ThreadSanitizer, a fast data race detector.  Memory access
12469     instructions are instrumented to detect data race bugs.  See
12470     <https://github.com/google/sanitizers/wiki#threadsanitizer> for
12471     more details.  The run-time behavior can be influenced using the
12472     'TSAN_OPTIONS' environment variable; see
12473     <https://github.com/google/sanitizers/wiki/ThreadSanitizerFlags>
12474     for a list of supported options.  The option cannot be combined
12475     with '-fsanitize=address', '-fsanitize=leak'.
12476
12477     Note that sanitized atomic builtins cannot throw exceptions when
12478     operating on invalid memory addresses with non-call exceptions
12479     ('-fnon-call-exceptions').
12480
12481'-fsanitize=leak'
12482     Enable LeakSanitizer, a memory leak detector.  This option only
12483     matters for linking of executables and the executable is linked
12484     against a library that overrides 'malloc' and other allocator
12485     functions.  See
12486     <https://github.com/google/sanitizers/wiki/AddressSanitizerLeakSanitizer>
12487     for more details.  The run-time behavior can be influenced using
12488     the 'LSAN_OPTIONS' environment variable.  The option cannot be
12489     combined with '-fsanitize=thread'.
12490
12491'-fsanitize=undefined'
12492     Enable UndefinedBehaviorSanitizer, a fast undefined behavior
12493     detector.  Various computations are instrumented to detect
12494     undefined behavior at runtime.  Current suboptions are:
12495
12496     '-fsanitize=shift'
12497          This option enables checking that the result of a shift
12498          operation is not undefined.  Note that what exactly is
12499          considered undefined differs slightly between C and C++, as
12500          well as between ISO C90 and C99, etc.  This option has two
12501          suboptions, '-fsanitize=shift-base' and
12502          '-fsanitize=shift-exponent'.
12503
12504     '-fsanitize=shift-exponent'
12505          This option enables checking that the second argument of a
12506          shift operation is not negative and is smaller than the
12507          precision of the promoted first argument.
12508
12509     '-fsanitize=shift-base'
12510          If the second argument of a shift operation is within range,
12511          check that the result of a shift operation is not undefined.
12512          Note that what exactly is considered undefined differs
12513          slightly between C and C++, as well as between ISO C90 and
12514          C99, etc.
12515
12516     '-fsanitize=integer-divide-by-zero'
12517          Detect integer division by zero as well as 'INT_MIN / -1'
12518          division.
12519
12520     '-fsanitize=unreachable'
12521          With this option, the compiler turns the
12522          '__builtin_unreachable' call into a diagnostics message call
12523          instead.  When reaching the '__builtin_unreachable' call, the
12524          behavior is undefined.
12525
12526     '-fsanitize=vla-bound'
12527          This option instructs the compiler to check that the size of a
12528          variable length array is positive.
12529
12530     '-fsanitize=null'
12531          This option enables pointer checking.  Particularly, the
12532          application built with this option turned on will issue an
12533          error message when it tries to dereference a NULL pointer, or
12534          if a reference (possibly an rvalue reference) is bound to a
12535          NULL pointer, or if a method is invoked on an object pointed
12536          by a NULL pointer.
12537
12538     '-fsanitize=return'
12539          This option enables return statement checking.  Programs built
12540          with this option turned on will issue an error message when
12541          the end of a non-void function is reached without actually
12542          returning a value.  This option works in C++ only.
12543
12544     '-fsanitize=signed-integer-overflow'
12545          This option enables signed integer overflow checking.  We
12546          check that the result of '+', '*', and both unary and binary
12547          '-' does not overflow in the signed arithmetics.  Note,
12548          integer promotion rules must be taken into account.  That is,
12549          the following is not an overflow:
12550               signed char a = SCHAR_MAX;
12551               a++;
12552
12553     '-fsanitize=bounds'
12554          This option enables instrumentation of array bounds.  Various
12555          out of bounds accesses are detected.  Flexible array members,
12556          flexible array member-like arrays, and initializers of
12557          variables with static storage are not instrumented.
12558
12559     '-fsanitize=bounds-strict'
12560          This option enables strict instrumentation of array bounds.
12561          Most out of bounds accesses are detected, including flexible
12562          array members and flexible array member-like arrays.
12563          Initializers of variables with static storage are not
12564          instrumented.
12565
12566     '-fsanitize=alignment'
12567
12568          This option enables checking of alignment of pointers when
12569          they are dereferenced, or when a reference is bound to
12570          insufficiently aligned target, or when a method or constructor
12571          is invoked on insufficiently aligned object.
12572
12573     '-fsanitize=object-size'
12574          This option enables instrumentation of memory references using
12575          the '__builtin_object_size' function.  Various out of bounds
12576          pointer accesses are detected.
12577
12578     '-fsanitize=float-divide-by-zero'
12579          Detect floating-point division by zero.  Unlike other similar
12580          options, '-fsanitize=float-divide-by-zero' is not enabled by
12581          '-fsanitize=undefined', since floating-point division by zero
12582          can be a legitimate way of obtaining infinities and NaNs.
12583
12584     '-fsanitize=float-cast-overflow'
12585          This option enables floating-point type to integer conversion
12586          checking.  We check that the result of the conversion does not
12587          overflow.  Unlike other similar options,
12588          '-fsanitize=float-cast-overflow' is not enabled by
12589          '-fsanitize=undefined'.  This option does not work well with
12590          'FE_INVALID' exceptions enabled.
12591
12592     '-fsanitize=nonnull-attribute'
12593
12594          This option enables instrumentation of calls, checking whether
12595          null values are not passed to arguments marked as requiring a
12596          non-null value by the 'nonnull' function attribute.
12597
12598     '-fsanitize=returns-nonnull-attribute'
12599
12600          This option enables instrumentation of return statements in
12601          functions marked with 'returns_nonnull' function attribute, to
12602          detect returning of null values from such functions.
12603
12604     '-fsanitize=bool'
12605
12606          This option enables instrumentation of loads from bool.  If a
12607          value other than 0/1 is loaded, a run-time error is issued.
12608
12609     '-fsanitize=enum'
12610
12611          This option enables instrumentation of loads from an enum
12612          type.  If a value outside the range of values for the enum
12613          type is loaded, a run-time error is issued.
12614
12615     '-fsanitize=vptr'
12616
12617          This option enables instrumentation of C++ member function
12618          calls, member accesses and some conversions between pointers
12619          to base and derived classes, to verify the referenced object
12620          has the correct dynamic type.
12621
12622     '-fsanitize=pointer-overflow'
12623
12624          This option enables instrumentation of pointer arithmetics.
12625          If the pointer arithmetics overflows, a run-time error is
12626          issued.
12627
12628     '-fsanitize=builtin'
12629
12630          This option enables instrumentation of arguments to selected
12631          builtin functions.  If an invalid value is passed to such
12632          arguments, a run-time error is issued.  E.g. passing 0 as the
12633          argument to '__builtin_ctz' or '__builtin_clz' invokes
12634          undefined behavior and is diagnosed by this option.
12635
12636     While '-ftrapv' causes traps for signed overflows to be emitted,
12637     '-fsanitize=undefined' gives a diagnostic message.  This currently
12638     works only for the C family of languages.
12639
12640'-fno-sanitize=all'
12641
12642     This option disables all previously enabled sanitizers.
12643     '-fsanitize=all' is not allowed, as some sanitizers cannot be used
12644     together.
12645
12646'-fasan-shadow-offset=NUMBER'
12647     This option forces GCC to use custom shadow offset in
12648     AddressSanitizer checks.  It is useful for experimenting with
12649     different shadow memory layouts in Kernel AddressSanitizer.
12650
12651'-fsanitize-sections=S1,S2,...'
12652     Sanitize global variables in selected user-defined sections.  SI
12653     may contain wildcards.
12654
12655'-fsanitize-recover[=OPTS]'
12656     '-fsanitize-recover=' controls error recovery mode for sanitizers
12657     mentioned in comma-separated list of OPTS.  Enabling this option
12658     for a sanitizer component causes it to attempt to continue running
12659     the program as if no error happened.  This means multiple runtime
12660     errors can be reported in a single program run, and the exit code
12661     of the program may indicate success even when errors have been
12662     reported.  The '-fno-sanitize-recover=' option can be used to alter
12663     this behavior: only the first detected error is reported and
12664     program then exits with a non-zero exit code.
12665
12666     Currently this feature only works for '-fsanitize=undefined' (and
12667     its suboptions except for '-fsanitize=unreachable' and
12668     '-fsanitize=return'), '-fsanitize=float-cast-overflow',
12669     '-fsanitize=float-divide-by-zero', '-fsanitize=bounds-strict',
12670     '-fsanitize=kernel-address' and '-fsanitize=address'.  For these
12671     sanitizers error recovery is turned on by default, except
12672     '-fsanitize=address', for which this feature is experimental.
12673     '-fsanitize-recover=all' and '-fno-sanitize-recover=all' is also
12674     accepted, the former enables recovery for all sanitizers that
12675     support it, the latter disables recovery for all sanitizers that
12676     support it.
12677
12678     Even if a recovery mode is turned on the compiler side, it needs to
12679     be also enabled on the runtime library side, otherwise the failures
12680     are still fatal.  The runtime library defaults to 'halt_on_error=0'
12681     for ThreadSanitizer and UndefinedBehaviorSanitizer, while default
12682     value for AddressSanitizer is 'halt_on_error=1'.  This can be
12683     overridden through setting the 'halt_on_error' flag in the
12684     corresponding environment variable.
12685
12686     Syntax without an explicit OPTS parameter is deprecated.  It is
12687     equivalent to specifying an OPTS list of:
12688
12689          undefined,float-cast-overflow,float-divide-by-zero,bounds-strict
12690
12691'-fsanitize-address-use-after-scope'
12692     Enable sanitization of local variables to detect use-after-scope
12693     bugs.  The option sets '-fstack-reuse' to 'none'.
12694
12695'-fsanitize-undefined-trap-on-error'
12696     The '-fsanitize-undefined-trap-on-error' option instructs the
12697     compiler to report undefined behavior using '__builtin_trap' rather
12698     than a 'libubsan' library routine.  The advantage of this is that
12699     the 'libubsan' library is not needed and is not linked in, so this
12700     is usable even in freestanding environments.
12701
12702'-fsanitize-coverage=trace-pc'
12703     Enable coverage-guided fuzzing code instrumentation.  Inserts a
12704     call to '__sanitizer_cov_trace_pc' into every basic block.
12705
12706'-fsanitize-coverage=trace-cmp'
12707     Enable dataflow guided fuzzing code instrumentation.  Inserts a
12708     call to '__sanitizer_cov_trace_cmp1', '__sanitizer_cov_trace_cmp2',
12709     '__sanitizer_cov_trace_cmp4' or '__sanitizer_cov_trace_cmp8' for
12710     integral comparison with both operands variable or
12711     '__sanitizer_cov_trace_const_cmp1',
12712     '__sanitizer_cov_trace_const_cmp2',
12713     '__sanitizer_cov_trace_const_cmp4' or
12714     '__sanitizer_cov_trace_const_cmp8' for integral comparison with one
12715     operand constant, '__sanitizer_cov_trace_cmpf' or
12716     '__sanitizer_cov_trace_cmpd' for float or double comparisons and
12717     '__sanitizer_cov_trace_switch' for switch statements.
12718
12719'-fcf-protection=[full|branch|return|none]'
12720     Enable code instrumentation of control-flow transfers to increase
12721     program security by checking that target addresses of control-flow
12722     transfer instructions (such as indirect function call, function
12723     return, indirect jump) are valid.  This prevents diverting the flow
12724     of control to an unexpected target.  This is intended to protect
12725     against such threats as Return-oriented Programming (ROP), and
12726     similarly call/jmp-oriented programming (COP/JOP).
12727
12728     The value 'branch' tells the compiler to implement checking of
12729     validity of control-flow transfer at the point of indirect branch
12730     instructions, i.e. call/jmp instructions.  The value 'return'
12731     implements checking of validity at the point of returning from a
12732     function.  The value 'full' is an alias for specifying both
12733     'branch' and 'return'.  The value 'none' turns off instrumentation.
12734
12735     The macro '__CET__' is defined when '-fcf-protection' is used.  The
12736     first bit of '__CET__' is set to 1 for the value 'branch' and the
12737     second bit of '__CET__' is set to 1 for the 'return'.
12738
12739     You can also use the 'nocf_check' attribute to identify which
12740     functions and calls should be skipped from instrumentation (*note
12741     Function Attributes::).
12742
12743     Currently the x86 GNU/Linux target provides an implementation based
12744     on Intel Control-flow Enforcement Technology (CET).
12745
12746'-fstack-protector'
12747     Emit extra code to check for buffer overflows, such as stack
12748     smashing attacks.  This is done by adding a guard variable to
12749     functions with vulnerable objects.  This includes functions that
12750     call 'alloca', and functions with buffers larger than or equal to 8
12751     bytes.  The guards are initialized when a function is entered and
12752     then checked when the function exits.  If a guard check fails, an
12753     error message is printed and the program exits.  Only variables
12754     that are actually allocated on the stack are considered, optimized
12755     away variables or variables allocated in registers don't count.
12756
12757'-fstack-protector-all'
12758     Like '-fstack-protector' except that all functions are protected.
12759
12760'-fstack-protector-strong'
12761     Like '-fstack-protector' but includes additional functions to be
12762     protected -- those that have local array definitions, or have
12763     references to local frame addresses.  Only variables that are
12764     actually allocated on the stack are considered, optimized away
12765     variables or variables allocated in registers don't count.
12766
12767'-fstack-protector-explicit'
12768     Like '-fstack-protector' but only protects those functions which
12769     have the 'stack_protect' attribute.
12770
12771'-fstack-check'
12772     Generate code to verify that you do not go beyond the boundary of
12773     the stack.  You should specify this flag if you are running in an
12774     environment with multiple threads, but you only rarely need to
12775     specify it in a single-threaded environment since stack overflow is
12776     automatically detected on nearly all systems if there is only one
12777     stack.
12778
12779     Note that this switch does not actually cause checking to be done;
12780     the operating system or the language runtime must do that.  The
12781     switch causes generation of code to ensure that they see the stack
12782     being extended.
12783
12784     You can additionally specify a string parameter: 'no' means no
12785     checking, 'generic' means force the use of old-style checking,
12786     'specific' means use the best checking method and is equivalent to
12787     bare '-fstack-check'.
12788
12789     Old-style checking is a generic mechanism that requires no specific
12790     target support in the compiler but comes with the following
12791     drawbacks:
12792
12793       1. Modified allocation strategy for large objects: they are
12794          always allocated dynamically if their size exceeds a fixed
12795          threshold.  Note this may change the semantics of some code.
12796
12797       2. Fixed limit on the size of the static frame of functions: when
12798          it is topped by a particular function, stack checking is not
12799          reliable and a warning is issued by the compiler.
12800
12801       3. Inefficiency: because of both the modified allocation strategy
12802          and the generic implementation, code performance is hampered.
12803
12804     Note that old-style stack checking is also the fallback method for
12805     'specific' if no target support has been added in the compiler.
12806
12807     '-fstack-check=' is designed for Ada's needs to detect infinite
12808     recursion and stack overflows.  'specific' is an excellent choice
12809     when compiling Ada code.  It is not generally sufficient to protect
12810     against stack-clash attacks.  To protect against those you want
12811     '-fstack-clash-protection'.
12812
12813'-fstack-clash-protection'
12814     Generate code to prevent stack clash style attacks.  When this
12815     option is enabled, the compiler will only allocate one page of
12816     stack space at a time and each page is accessed immediately after
12817     allocation.  Thus, it prevents allocations from jumping over any
12818     stack guard page provided by the operating system.
12819
12820     Most targets do not fully support stack clash protection.  However,
12821     on those targets '-fstack-clash-protection' will protect dynamic
12822     stack allocations.  '-fstack-clash-protection' may also provide
12823     limited protection for static stack allocations if the target
12824     supports '-fstack-check=specific'.
12825
12826'-fstack-limit-register=REG'
12827'-fstack-limit-symbol=SYM'
12828'-fno-stack-limit'
12829     Generate code to ensure that the stack does not grow beyond a
12830     certain value, either the value of a register or the address of a
12831     symbol.  If a larger stack is required, a signal is raised at run
12832     time.  For most targets, the signal is raised before the stack
12833     overruns the boundary, so it is possible to catch the signal
12834     without taking special precautions.
12835
12836     For instance, if the stack starts at absolute address '0x80000000'
12837     and grows downwards, you can use the flags
12838     '-fstack-limit-symbol=__stack_limit' and
12839     '-Wl,--defsym,__stack_limit=0x7ffe0000' to enforce a stack limit of
12840     128KB.  Note that this may only work with the GNU linker.
12841
12842     You can locally override stack limit checking by using the
12843     'no_stack_limit' function attribute (*note Function Attributes::).
12844
12845'-fsplit-stack'
12846     Generate code to automatically split the stack before it overflows.
12847     The resulting program has a discontiguous stack which can only
12848     overflow if the program is unable to allocate any more memory.
12849     This is most useful when running threaded programs, as it is no
12850     longer necessary to calculate a good stack size to use for each
12851     thread.  This is currently only implemented for the x86 targets
12852     running GNU/Linux.
12853
12854     When code compiled with '-fsplit-stack' calls code compiled without
12855     '-fsplit-stack', there may not be much stack space available for
12856     the latter code to run.  If compiling all code, including library
12857     code, with '-fsplit-stack' is not an option, then the linker can
12858     fix up these calls so that the code compiled without
12859     '-fsplit-stack' always has a large stack.  Support for this is
12860     implemented in the gold linker in GNU binutils release 2.21 and
12861     later.
12862
12863'-fvtable-verify=[std|preinit|none]'
12864     This option is only available when compiling C++ code.  It turns on
12865     (or off, if using '-fvtable-verify=none') the security feature that
12866     verifies at run time, for every virtual call, that the vtable
12867     pointer through which the call is made is valid for the type of the
12868     object, and has not been corrupted or overwritten.  If an invalid
12869     vtable pointer is detected at run time, an error is reported and
12870     execution of the program is immediately halted.
12871
12872     This option causes run-time data structures to be built at program
12873     startup, which are used for verifying the vtable pointers.  The
12874     options 'std' and 'preinit' control the timing of when these data
12875     structures are built.  In both cases the data structures are built
12876     before execution reaches 'main'.  Using '-fvtable-verify=std'
12877     causes the data structures to be built after shared libraries have
12878     been loaded and initialized.  '-fvtable-verify=preinit' causes them
12879     to be built before shared libraries have been loaded and
12880     initialized.
12881
12882     If this option appears multiple times in the command line with
12883     different values specified, 'none' takes highest priority over both
12884     'std' and 'preinit'; 'preinit' takes priority over 'std'.
12885
12886'-fvtv-debug'
12887     When used in conjunction with '-fvtable-verify=std' or
12888     '-fvtable-verify=preinit', causes debug versions of the runtime
12889     functions for the vtable verification feature to be called.  This
12890     flag also causes the compiler to log information about which vtable
12891     pointers it finds for each class.  This information is written to a
12892     file named 'vtv_set_ptr_data.log' in the directory named by the
12893     environment variable 'VTV_LOGS_DIR' if that is defined or the
12894     current working directory otherwise.
12895
12896     Note: This feature _appends_ data to the log file.  If you want a
12897     fresh log file, be sure to delete any existing one.
12898
12899'-fvtv-counts'
12900     This is a debugging flag.  When used in conjunction with
12901     '-fvtable-verify=std' or '-fvtable-verify=preinit', this causes the
12902     compiler to keep track of the total number of virtual calls it
12903     encounters and the number of verifications it inserts.  It also
12904     counts the number of calls to certain run-time library functions
12905     that it inserts and logs this information for each compilation
12906     unit.  The compiler writes this information to a file named
12907     'vtv_count_data.log' in the directory named by the environment
12908     variable 'VTV_LOGS_DIR' if that is defined or the current working
12909     directory otherwise.  It also counts the size of the vtable pointer
12910     sets for each class, and writes this information to
12911     'vtv_class_set_sizes.log' in the same directory.
12912
12913     Note: This feature _appends_ data to the log files.  To get fresh
12914     log files, be sure to delete any existing ones.
12915
12916'-finstrument-functions'
12917     Generate instrumentation calls for entry and exit to functions.
12918     Just after function entry and just before function exit, the
12919     following profiling functions are called with the address of the
12920     current function and its call site.  (On some platforms,
12921     '__builtin_return_address' does not work beyond the current
12922     function, so the call site information may not be available to the
12923     profiling functions otherwise.)
12924
12925          void __cyg_profile_func_enter (void *this_fn,
12926                                         void *call_site);
12927          void __cyg_profile_func_exit  (void *this_fn,
12928                                         void *call_site);
12929
12930     The first argument is the address of the start of the current
12931     function, which may be looked up exactly in the symbol table.
12932
12933     This instrumentation is also done for functions expanded inline in
12934     other functions.  The profiling calls indicate where, conceptually,
12935     the inline function is entered and exited.  This means that
12936     addressable versions of such functions must be available.  If all
12937     your uses of a function are expanded inline, this may mean an
12938     additional expansion of code size.  If you use 'extern inline' in
12939     your C code, an addressable version of such functions must be
12940     provided.  (This is normally the case anyway, but if you get lucky
12941     and the optimizer always expands the functions inline, you might
12942     have gotten away without providing static copies.)
12943
12944     A function may be given the attribute 'no_instrument_function', in
12945     which case this instrumentation is not done.  This can be used, for
12946     example, for the profiling functions listed above, high-priority
12947     interrupt routines, and any functions from which the profiling
12948     functions cannot safely be called (perhaps signal handlers, if the
12949     profiling routines generate output or allocate memory).  *Note
12950     Common Function Attributes::.
12951
12952'-finstrument-functions-exclude-file-list=FILE,FILE,...'
12953
12954     Set the list of functions that are excluded from instrumentation
12955     (see the description of '-finstrument-functions').  If the file
12956     that contains a function definition matches with one of FILE, then
12957     that function is not instrumented.  The match is done on
12958     substrings: if the FILE parameter is a substring of the file name,
12959     it is considered to be a match.
12960
12961     For example:
12962
12963          -finstrument-functions-exclude-file-list=/bits/stl,include/sys
12964
12965     excludes any inline function defined in files whose pathnames
12966     contain '/bits/stl' or 'include/sys'.
12967
12968     If, for some reason, you want to include letter ',' in one of SYM,
12969     write '\,'.  For example,
12970     '-finstrument-functions-exclude-file-list='\,\,tmp'' (note the
12971     single quote surrounding the option).
12972
12973'-finstrument-functions-exclude-function-list=SYM,SYM,...'
12974
12975     This is similar to '-finstrument-functions-exclude-file-list', but
12976     this option sets the list of function names to be excluded from
12977     instrumentation.  The function name to be matched is its
12978     user-visible name, such as 'vector<int> blah(const vector<int> &)',
12979     not the internal mangled name (e.g., '_Z4blahRSt6vectorIiSaIiEE').
12980     The match is done on substrings: if the SYM parameter is a
12981     substring of the function name, it is considered to be a match.
12982     For C99 and C++ extended identifiers, the function name must be
12983     given in UTF-8, not using universal character names.
12984
12985'-fpatchable-function-entry=N[,M]'
12986     Generate N NOPs right at the beginning of each function, with the
12987     function entry point before the Mth NOP. If M is omitted, it
12988     defaults to '0' so the function entry points to the address just at
12989     the first NOP. The NOP instructions reserve extra space which can
12990     be used to patch in any desired instrumentation at run time,
12991     provided that the code segment is writable.  The amount of space is
12992     controllable indirectly via the number of NOPs; the NOP instruction
12993     used corresponds to the instruction emitted by the internal GCC
12994     back-end interface 'gen_nop'.  This behavior is target-specific and
12995     may also depend on the architecture variant and/or other
12996     compilation options.
12997
12998     For run-time identification, the starting addresses of these areas,
12999     which correspond to their respective function entries minus M, are
13000     additionally collected in the '__patchable_function_entries'
13001     section of the resulting binary.
13002
13003     Note that the value of '__attribute__ ((patchable_function_entry
13004     (N,M)))' takes precedence over command-line option
13005     '-fpatchable-function-entry=N,M'.  This can be used to increase the
13006     area size or to remove it completely on a single function.  If
13007     'N=0', no pad location is recorded.
13008
13009     The NOP instructions are inserted at--and maybe before, depending
13010     on M--the function entry address, even before the prologue.
13011
13012
13013File: gcc.info,  Node: Preprocessor Options,  Next: Assembler Options,  Prev: Instrumentation Options,  Up: Invoking GCC
13014
130153.13 Options Controlling the Preprocessor
13016=========================================
13017
13018These options control the C preprocessor, which is run on each C source
13019file before actual compilation.
13020
13021 If you use the '-E' option, nothing is done except preprocessing.  Some
13022of these options make sense only together with '-E' because they cause
13023the preprocessor output to be unsuitable for actual compilation.
13024
13025 In addition to the options listed here, there are a number of options
13026to control search paths for include files documented in *note Directory
13027Options::.  Options to control preprocessor diagnostics are listed in
13028*note Warning Options::.
13029
13030'-D NAME'
13031     Predefine NAME as a macro, with definition '1'.
13032
13033'-D NAME=DEFINITION'
13034     The contents of DEFINITION are tokenized and processed as if they
13035     appeared during translation phase three in a '#define' directive.
13036     In particular, the definition is truncated by embedded newline
13037     characters.
13038
13039     If you are invoking the preprocessor from a shell or shell-like
13040     program you may need to use the shell's quoting syntax to protect
13041     characters such as spaces that have a meaning in the shell syntax.
13042
13043     If you wish to define a function-like macro on the command line,
13044     write its argument list with surrounding parentheses before the
13045     equals sign (if any).  Parentheses are meaningful to most shells,
13046     so you should quote the option.  With 'sh' and 'csh',
13047     '-D'NAME(ARGS...)=DEFINITION'' works.
13048
13049     '-D' and '-U' options are processed in the order they are given on
13050     the command line.  All '-imacros FILE' and '-include FILE' options
13051     are processed after all '-D' and '-U' options.
13052
13053'-U NAME'
13054     Cancel any previous definition of NAME, either built in or provided
13055     with a '-D' option.
13056
13057'-include FILE'
13058     Process FILE as if '#include "file"' appeared as the first line of
13059     the primary source file.  However, the first directory searched for
13060     FILE is the preprocessor's working directory _instead of_ the
13061     directory containing the main source file.  If not found there, it
13062     is searched for in the remainder of the '#include "..."' search
13063     chain as normal.
13064
13065     If multiple '-include' options are given, the files are included in
13066     the order they appear on the command line.
13067
13068'-imacros FILE'
13069     Exactly like '-include', except that any output produced by
13070     scanning FILE is thrown away.  Macros it defines remain defined.
13071     This allows you to acquire all the macros from a header without
13072     also processing its declarations.
13073
13074     All files specified by '-imacros' are processed before all files
13075     specified by '-include'.
13076
13077'-undef'
13078     Do not predefine any system-specific or GCC-specific macros.  The
13079     standard predefined macros remain defined.
13080
13081'-pthread'
13082     Define additional macros required for using the POSIX threads
13083     library.  You should use this option consistently for both
13084     compilation and linking.  This option is supported on GNU/Linux
13085     targets, most other Unix derivatives, and also on x86 Cygwin and
13086     MinGW targets.
13087
13088'-M'
13089     Instead of outputting the result of preprocessing, output a rule
13090     suitable for 'make' describing the dependencies of the main source
13091     file.  The preprocessor outputs one 'make' rule containing the
13092     object file name for that source file, a colon, and the names of
13093     all the included files, including those coming from '-include' or
13094     '-imacros' command-line options.
13095
13096     Unless specified explicitly (with '-MT' or '-MQ'), the object file
13097     name consists of the name of the source file with any suffix
13098     replaced with object file suffix and with any leading directory
13099     parts removed.  If there are many included files then the rule is
13100     split into several lines using '\'-newline.  The rule has no
13101     commands.
13102
13103     This option does not suppress the preprocessor's debug output, such
13104     as '-dM'.  To avoid mixing such debug output with the dependency
13105     rules you should explicitly specify the dependency output file with
13106     '-MF', or use an environment variable like 'DEPENDENCIES_OUTPUT'
13107     (*note Environment Variables::).  Debug output is still sent to the
13108     regular output stream as normal.
13109
13110     Passing '-M' to the driver implies '-E', and suppresses warnings
13111     with an implicit '-w'.
13112
13113'-MM'
13114     Like '-M' but do not mention header files that are found in system
13115     header directories, nor header files that are included, directly or
13116     indirectly, from such a header.
13117
13118     This implies that the choice of angle brackets or double quotes in
13119     an '#include' directive does not in itself determine whether that
13120     header appears in '-MM' dependency output.
13121
13122'-MF FILE'
13123     When used with '-M' or '-MM', specifies a file to write the
13124     dependencies to.  If no '-MF' switch is given the preprocessor
13125     sends the rules to the same place it would send preprocessed
13126     output.
13127
13128     When used with the driver options '-MD' or '-MMD', '-MF' overrides
13129     the default dependency output file.
13130
13131     If FILE is '-', then the dependencies are written to 'stdout'.
13132
13133'-MG'
13134     In conjunction with an option such as '-M' requesting dependency
13135     generation, '-MG' assumes missing header files are generated files
13136     and adds them to the dependency list without raising an error.  The
13137     dependency filename is taken directly from the '#include' directive
13138     without prepending any path.  '-MG' also suppresses preprocessed
13139     output, as a missing header file renders this useless.
13140
13141     This feature is used in automatic updating of makefiles.
13142
13143'-MP'
13144     This option instructs CPP to add a phony target for each dependency
13145     other than the main file, causing each to depend on nothing.  These
13146     dummy rules work around errors 'make' gives if you remove header
13147     files without updating the 'Makefile' to match.
13148
13149     This is typical output:
13150
13151          test.o: test.c test.h
13152
13153          test.h:
13154
13155'-MT TARGET'
13156
13157     Change the target of the rule emitted by dependency generation.  By
13158     default CPP takes the name of the main input file, deletes any
13159     directory components and any file suffix such as '.c', and appends
13160     the platform's usual object suffix.  The result is the target.
13161
13162     An '-MT' option sets the target to be exactly the string you
13163     specify.  If you want multiple targets, you can specify them as a
13164     single argument to '-MT', or use multiple '-MT' options.
13165
13166     For example, '-MT '$(objpfx)foo.o'' might give
13167
13168          $(objpfx)foo.o: foo.c
13169
13170'-MQ TARGET'
13171
13172     Same as '-MT', but it quotes any characters which are special to
13173     Make.  '-MQ '$(objpfx)foo.o'' gives
13174
13175          $$(objpfx)foo.o: foo.c
13176
13177     The default target is automatically quoted, as if it were given
13178     with '-MQ'.
13179
13180'-MD'
13181     '-MD' is equivalent to '-M -MF FILE', except that '-E' is not
13182     implied.  The driver determines FILE based on whether an '-o'
13183     option is given.  If it is, the driver uses its argument but with a
13184     suffix of '.d', otherwise it takes the name of the input file,
13185     removes any directory components and suffix, and applies a '.d'
13186     suffix.
13187
13188     If '-MD' is used in conjunction with '-E', any '-o' switch is
13189     understood to specify the dependency output file (*note -MF:
13190     dashMF.), but if used without '-E', each '-o' is understood to
13191     specify a target object file.
13192
13193     Since '-E' is not implied, '-MD' can be used to generate a
13194     dependency output file as a side effect of the compilation process.
13195
13196'-MMD'
13197     Like '-MD' except mention only user header files, not system header
13198     files.
13199
13200'-fpreprocessed'
13201     Indicate to the preprocessor that the input file has already been
13202     preprocessed.  This suppresses things like macro expansion,
13203     trigraph conversion, escaped newline splicing, and processing of
13204     most directives.  The preprocessor still recognizes and removes
13205     comments, so that you can pass a file preprocessed with '-C' to the
13206     compiler without problems.  In this mode the integrated
13207     preprocessor is little more than a tokenizer for the front ends.
13208
13209     '-fpreprocessed' is implicit if the input file has one of the
13210     extensions '.i', '.ii' or '.mi'.  These are the extensions that GCC
13211     uses for preprocessed files created by '-save-temps'.
13212
13213'-fdirectives-only'
13214     When preprocessing, handle directives, but do not expand macros.
13215
13216     The option's behavior depends on the '-E' and '-fpreprocessed'
13217     options.
13218
13219     With '-E', preprocessing is limited to the handling of directives
13220     such as '#define', '#ifdef', and '#error'.  Other preprocessor
13221     operations, such as macro expansion and trigraph conversion are not
13222     performed.  In addition, the '-dD' option is implicitly enabled.
13223
13224     With '-fpreprocessed', predefinition of command line and most
13225     builtin macros is disabled.  Macros such as '__LINE__', which are
13226     contextually dependent, are handled normally.  This enables
13227     compilation of files previously preprocessed with '-E
13228     -fdirectives-only'.
13229
13230     With both '-E' and '-fpreprocessed', the rules for '-fpreprocessed'
13231     take precedence.  This enables full preprocessing of files
13232     previously preprocessed with '-E -fdirectives-only'.
13233
13234'-fdollars-in-identifiers'
13235     Accept '$' in identifiers.
13236
13237'-fextended-identifiers'
13238     Accept universal character names and extended characters in
13239     identifiers.  This option is enabled by default for C99 (and later
13240     C standard versions) and C++.
13241
13242'-fno-canonical-system-headers'
13243     When preprocessing, do not shorten system header paths with
13244     canonicalization.
13245
13246'-fmax-include-depth=DEPTH'
13247     Set the maximum depth of the nested #include.  The default is 200.
13248
13249'-ftabstop=WIDTH'
13250     Set the distance between tab stops.  This helps the preprocessor
13251     report correct column numbers in warnings or errors, even if tabs
13252     appear on the line.  If the value is less than 1 or greater than
13253     100, the option is ignored.  The default is 8.
13254
13255'-ftrack-macro-expansion[=LEVEL]'
13256     Track locations of tokens across macro expansions.  This allows the
13257     compiler to emit diagnostic about the current macro expansion stack
13258     when a compilation error occurs in a macro expansion.  Using this
13259     option makes the preprocessor and the compiler consume more memory.
13260     The LEVEL parameter can be used to choose the level of precision of
13261     token location tracking thus decreasing the memory consumption if
13262     necessary.  Value '0' of LEVEL de-activates this option.  Value '1'
13263     tracks tokens locations in a degraded mode for the sake of minimal
13264     memory overhead.  In this mode all tokens resulting from the
13265     expansion of an argument of a function-like macro have the same
13266     location.  Value '2' tracks tokens locations completely.  This
13267     value is the most memory hungry.  When this option is given no
13268     argument, the default parameter value is '2'.
13269
13270     Note that '-ftrack-macro-expansion=2' is activated by default.
13271
13272'-fmacro-prefix-map=OLD=NEW'
13273     When preprocessing files residing in directory 'OLD', expand the
13274     '__FILE__' and '__BASE_FILE__' macros as if the files resided in
13275     directory 'NEW' instead.  This can be used to change an absolute
13276     path to a relative path by using '.' for NEW which can result in
13277     more reproducible builds that are location independent.  This
13278     option also affects '__builtin_FILE()' during compilation.  See
13279     also '-ffile-prefix-map'.
13280
13281'-fexec-charset=CHARSET'
13282     Set the execution character set, used for string and character
13283     constants.  The default is UTF-8.  CHARSET can be any encoding
13284     supported by the system's 'iconv' library routine.
13285
13286'-fwide-exec-charset=CHARSET'
13287     Set the wide execution character set, used for wide string and
13288     character constants.  The default is UTF-32 or UTF-16, whichever
13289     corresponds to the width of 'wchar_t'.  As with '-fexec-charset',
13290     CHARSET can be any encoding supported by the system's 'iconv'
13291     library routine; however, you will have problems with encodings
13292     that do not fit exactly in 'wchar_t'.
13293
13294'-finput-charset=CHARSET'
13295     Set the input character set, used for translation from the
13296     character set of the input file to the source character set used by
13297     GCC.  If the locale does not specify, or GCC cannot get this
13298     information from the locale, the default is UTF-8.  This can be
13299     overridden by either the locale or this command-line option.
13300     Currently the command-line option takes precedence if there's a
13301     conflict.  CHARSET can be any encoding supported by the system's
13302     'iconv' library routine.
13303
13304'-fpch-deps'
13305     When using precompiled headers (*note Precompiled Headers::), this
13306     flag causes the dependency-output flags to also list the files from
13307     the precompiled header's dependencies.  If not specified, only the
13308     precompiled header are listed and not the files that were used to
13309     create it, because those files are not consulted when a precompiled
13310     header is used.
13311
13312'-fpch-preprocess'
13313     This option allows use of a precompiled header (*note Precompiled
13314     Headers::) together with '-E'.  It inserts a special '#pragma',
13315     '#pragma GCC pch_preprocess "FILENAME"' in the output to mark the
13316     place where the precompiled header was found, and its FILENAME.
13317     When '-fpreprocessed' is in use, GCC recognizes this '#pragma' and
13318     loads the PCH.
13319
13320     This option is off by default, because the resulting preprocessed
13321     output is only really suitable as input to GCC.  It is switched on
13322     by '-save-temps'.
13323
13324     You should not write this '#pragma' in your own code, but it is
13325     safe to edit the filename if the PCH file is available in a
13326     different location.  The filename may be absolute or it may be
13327     relative to GCC's current directory.
13328
13329'-fworking-directory'
13330     Enable generation of linemarkers in the preprocessor output that
13331     let the compiler know the current working directory at the time of
13332     preprocessing.  When this option is enabled, the preprocessor
13333     emits, after the initial linemarker, a second linemarker with the
13334     current working directory followed by two slashes.  GCC uses this
13335     directory, when it's present in the preprocessed input, as the
13336     directory emitted as the current working directory in some
13337     debugging information formats.  This option is implicitly enabled
13338     if debugging information is enabled, but this can be inhibited with
13339     the negated form '-fno-working-directory'.  If the '-P' flag is
13340     present in the command line, this option has no effect, since no
13341     '#line' directives are emitted whatsoever.
13342
13343'-A PREDICATE=ANSWER'
13344     Make an assertion with the predicate PREDICATE and answer ANSWER.
13345     This form is preferred to the older form '-A PREDICATE(ANSWER)',
13346     which is still supported, because it does not use shell special
13347     characters.
13348
13349'-A -PREDICATE=ANSWER'
13350     Cancel an assertion with the predicate PREDICATE and answer ANSWER.
13351
13352'-C'
13353     Do not discard comments.  All comments are passed through to the
13354     output file, except for comments in processed directives, which are
13355     deleted along with the directive.
13356
13357     You should be prepared for side effects when using '-C'; it causes
13358     the preprocessor to treat comments as tokens in their own right.
13359     For example, comments appearing at the start of what would be a
13360     directive line have the effect of turning that line into an
13361     ordinary source line, since the first token on the line is no
13362     longer a '#'.
13363
13364'-CC'
13365     Do not discard comments, including during macro expansion.  This is
13366     like '-C', except that comments contained within macros are also
13367     passed through to the output file where the macro is expanded.
13368
13369     In addition to the side effects of the '-C' option, the '-CC'
13370     option causes all C++-style comments inside a macro to be converted
13371     to C-style comments.  This is to prevent later use of that macro
13372     from inadvertently commenting out the remainder of the source line.
13373
13374     The '-CC' option is generally used to support lint comments.
13375
13376'-P'
13377     Inhibit generation of linemarkers in the output from the
13378     preprocessor.  This might be useful when running the preprocessor
13379     on something that is not C code, and will be sent to a program
13380     which might be confused by the linemarkers.
13381
13382'-traditional'
13383'-traditional-cpp'
13384
13385     Try to imitate the behavior of pre-standard C preprocessors, as
13386     opposed to ISO C preprocessors.  See the GNU CPP manual for
13387     details.
13388
13389     Note that GCC does not otherwise attempt to emulate a pre-standard
13390     C compiler, and these options are only supported with the '-E'
13391     switch, or when invoking CPP explicitly.
13392
13393'-trigraphs'
13394     Support ISO C trigraphs.  These are three-character sequences, all
13395     starting with '??', that are defined by ISO C to stand for single
13396     characters.  For example, '??/' stands for '\', so ''??/n'' is a
13397     character constant for a newline.
13398
13399     The nine trigraphs and their replacements are
13400
13401          Trigraph:       ??(  ??)  ??<  ??>  ??=  ??/  ??'  ??!  ??-
13402          Replacement:      [    ]    {    }    #    \    ^    |    ~
13403
13404     By default, GCC ignores trigraphs, but in standard-conforming modes
13405     it converts them.  See the '-std' and '-ansi' options.
13406
13407'-remap'
13408     Enable special code to work around file systems which only permit
13409     very short file names, such as MS-DOS.
13410
13411'-H'
13412     Print the name of each header file used, in addition to other
13413     normal activities.  Each name is indented to show how deep in the
13414     '#include' stack it is.  Precompiled header files are also printed,
13415     even if they are found to be invalid; an invalid precompiled header
13416     file is printed with '...x' and a valid one with '...!' .
13417
13418'-dLETTERS'
13419     Says to make debugging dumps during compilation as specified by
13420     LETTERS.  The flags documented here are those relevant to the
13421     preprocessor.  Other LETTERS are interpreted by the compiler
13422     proper, or reserved for future versions of GCC, and so are silently
13423     ignored.  If you specify LETTERS whose behavior conflicts, the
13424     result is undefined.  *Note Developer Options::, for more
13425     information.
13426
13427     '-dM'
13428          Instead of the normal output, generate a list of '#define'
13429          directives for all the macros defined during the execution of
13430          the preprocessor, including predefined macros.  This gives you
13431          a way of finding out what is predefined in your version of the
13432          preprocessor.  Assuming you have no file 'foo.h', the command
13433
13434               touch foo.h; cpp -dM foo.h
13435
13436          shows all the predefined macros.
13437
13438          If you use '-dM' without the '-E' option, '-dM' is interpreted
13439          as a synonym for '-fdump-rtl-mach'.  *Note (gcc)Developer
13440          Options::.
13441
13442     '-dD'
13443          Like '-dM' except in two respects: it does _not_ include the
13444          predefined macros, and it outputs _both_ the '#define'
13445          directives and the result of preprocessing.  Both kinds of
13446          output go to the standard output file.
13447
13448     '-dN'
13449          Like '-dD', but emit only the macro names, not their
13450          expansions.
13451
13452     '-dI'
13453          Output '#include' directives in addition to the result of
13454          preprocessing.
13455
13456     '-dU'
13457          Like '-dD' except that only macros that are expanded, or whose
13458          definedness is tested in preprocessor directives, are output;
13459          the output is delayed until the use or test of the macro; and
13460          '#undef' directives are also output for macros tested but
13461          undefined at the time.
13462
13463'-fdebug-cpp'
13464     This option is only useful for debugging GCC. When used from CPP or
13465     with '-E', it dumps debugging information about location maps.
13466     Every token in the output is preceded by the dump of the map its
13467     location belongs to.
13468
13469     When used from GCC without '-E', this option has no effect.
13470
13471'-Wp,OPTION'
13472     You can use '-Wp,OPTION' to bypass the compiler driver and pass
13473     OPTION directly through to the preprocessor.  If OPTION contains
13474     commas, it is split into multiple options at the commas.  However,
13475     many options are modified, translated or interpreted by the
13476     compiler driver before being passed to the preprocessor, and '-Wp'
13477     forcibly bypasses this phase.  The preprocessor's direct interface
13478     is undocumented and subject to change, so whenever possible you
13479     should avoid using '-Wp' and let the driver handle the options
13480     instead.
13481
13482'-Xpreprocessor OPTION'
13483     Pass OPTION as an option to the preprocessor.  You can use this to
13484     supply system-specific preprocessor options that GCC does not
13485     recognize.
13486
13487     If you want to pass an option that takes an argument, you must use
13488     '-Xpreprocessor' twice, once for the option and once for the
13489     argument.
13490
13491'-no-integrated-cpp'
13492     Perform preprocessing as a separate pass before compilation.  By
13493     default, GCC performs preprocessing as an integrated part of input
13494     tokenization and parsing.  If this option is provided, the
13495     appropriate language front end ('cc1', 'cc1plus', or 'cc1obj' for
13496     C, C++, and Objective-C, respectively) is instead invoked twice,
13497     once for preprocessing only and once for actual compilation of the
13498     preprocessed input.  This option may be useful in conjunction with
13499     the '-B' or '-wrapper' options to specify an alternate preprocessor
13500     or perform additional processing of the program source between
13501     normal preprocessing and compilation.
13502
13503
13504File: gcc.info,  Node: Assembler Options,  Next: Link Options,  Prev: Preprocessor Options,  Up: Invoking GCC
13505
135063.14 Passing Options to the Assembler
13507=====================================
13508
13509You can pass options to the assembler.
13510
13511'-Wa,OPTION'
13512     Pass OPTION as an option to the assembler.  If OPTION contains
13513     commas, it is split into multiple options at the commas.
13514
13515'-Xassembler OPTION'
13516     Pass OPTION as an option to the assembler.  You can use this to
13517     supply system-specific assembler options that GCC does not
13518     recognize.
13519
13520     If you want to pass an option that takes an argument, you must use
13521     '-Xassembler' twice, once for the option and once for the argument.
13522
13523
13524File: gcc.info,  Node: Link Options,  Next: Directory Options,  Prev: Assembler Options,  Up: Invoking GCC
13525
135263.15 Options for Linking
13527========================
13528
13529These options come into play when the compiler links object files into
13530an executable output file.  They are meaningless if the compiler is not
13531doing a link step.
13532
13533'OBJECT-FILE-NAME'
13534     A file name that does not end in a special recognized suffix is
13535     considered to name an object file or library.  (Object files are
13536     distinguished from libraries by the linker according to the file
13537     contents.)  If linking is done, these object files are used as
13538     input to the linker.
13539
13540'-c'
13541'-S'
13542'-E'
13543     If any of these options is used, then the linker is not run, and
13544     object file names should not be used as arguments.  *Note Overall
13545     Options::.
13546
13547'-flinker-output=TYPE'
13548     This option controls code generation of the link-time optimizer.
13549     By default the linker output is automatically determined by the
13550     linker plugin.  For debugging the compiler and if incremental
13551     linking with a non-LTO object file is desired, it may be useful to
13552     control the type manually.
13553
13554     If TYPE is 'exec', code generation produces a static binary.  In
13555     this case '-fpic' and '-fpie' are both disabled.
13556
13557     If TYPE is 'dyn', code generation produces a shared library.  In
13558     this case '-fpic' or '-fPIC' is preserved, but not enabled
13559     automatically.  This allows to build shared libraries without
13560     position-independent code on architectures where this is possible,
13561     i.e. on x86.
13562
13563     If TYPE is 'pie', code generation produces an '-fpie' executable.
13564     This results in similar optimizations as 'exec' except that '-fpie'
13565     is not disabled if specified at compilation time.
13566
13567     If TYPE is 'rel', the compiler assumes that incremental linking is
13568     done.  The sections containing intermediate code for link-time
13569     optimization are merged, pre-optimized, and output to the resulting
13570     object file.  In addition, if '-ffat-lto-objects' is specified,
13571     binary code is produced for future non-LTO linking.  The object
13572     file produced by incremental linking is smaller than a static
13573     library produced from the same object files.  At link time the
13574     result of incremental linking also loads faster than a static
13575     library assuming that the majority of objects in the library are
13576     used.
13577
13578     Finally 'nolto-rel' configures the compiler for incremental linking
13579     where code generation is forced, a final binary is produced, and
13580     the intermediate code for later link-time optimization is stripped.
13581     When multiple object files are linked together the resulting code
13582     is better optimized than with link-time optimizations disabled (for
13583     example, cross-module inlining happens), but most of benefits of
13584     whole program optimizations are lost.
13585
13586     During the incremental link (by '-r') the linker plugin defaults to
13587     'rel'.  With current interfaces to GNU Binutils it is however not
13588     possible to incrementally link LTO objects and non-LTO objects into
13589     a single mixed object file.  If any of object files in incremental
13590     link cannot be used for link-time optimization, the linker plugin
13591     issues a warning and uses 'nolto-rel'.  To maintain whole program
13592     optimization, it is recommended to link such objects into static
13593     library instead.  Alternatively it is possible to use H.J. Lu's
13594     binutils with support for mixed objects.
13595
13596'-fuse-ld=bfd'
13597     Use the 'bfd' linker instead of the default linker.
13598
13599'-fuse-ld=gold'
13600     Use the 'gold' linker instead of the default linker.
13601
13602'-fuse-ld=lld'
13603     Use the LLVM 'lld' linker instead of the default linker.
13604
13605'-lLIBRARY'
13606'-l LIBRARY'
13607     Search the library named LIBRARY when linking.  (The second
13608     alternative with the library as a separate argument is only for
13609     POSIX compliance and is not recommended.)
13610
13611     The '-l' option is passed directly to the linker by GCC. Refer to
13612     your linker documentation for exact details.  The general
13613     description below applies to the GNU linker.
13614
13615     The linker searches a standard list of directories for the library.
13616     The directories searched include several standard system
13617     directories plus any that you specify with '-L'.
13618
13619     Static libraries are archives of object files, and have file names
13620     like 'libLIBRARY.a'.  Some targets also support shared libraries,
13621     which typically have names like 'libLIBRARY.so'.  If both static
13622     and shared libraries are found, the linker gives preference to
13623     linking with the shared library unless the '-static' option is
13624     used.
13625
13626     It makes a difference where in the command you write this option;
13627     the linker searches and processes libraries and object files in the
13628     order they are specified.  Thus, 'foo.o -lz bar.o' searches library
13629     'z' after file 'foo.o' but before 'bar.o'.  If 'bar.o' refers to
13630     functions in 'z', those functions may not be loaded.
13631
13632'-lobjc'
13633     You need this special case of the '-l' option in order to link an
13634     Objective-C or Objective-C++ program.
13635
13636'-nostartfiles'
13637     Do not use the standard system startup files when linking.  The
13638     standard system libraries are used normally, unless '-nostdlib',
13639     '-nolibc', or '-nodefaultlibs' is used.
13640
13641'-nodefaultlibs'
13642     Do not use the standard system libraries when linking.  Only the
13643     libraries you specify are passed to the linker, and options
13644     specifying linkage of the system libraries, such as
13645     '-static-libgcc' or '-shared-libgcc', are ignored.  The standard
13646     startup files are used normally, unless '-nostartfiles' is used.
13647
13648     The compiler may generate calls to 'memcmp', 'memset', 'memcpy' and
13649     'memmove'.  These entries are usually resolved by entries in libc.
13650     These entry points should be supplied through some other mechanism
13651     when this option is specified.
13652
13653'-nolibc'
13654     Do not use the C library or system libraries tightly coupled with
13655     it when linking.  Still link with the startup files, 'libgcc' or
13656     toolchain provided language support libraries such as 'libgnat',
13657     'libgfortran' or 'libstdc++' unless options preventing their
13658     inclusion are used as well.  This typically removes '-lc' from the
13659     link command line, as well as system libraries that normally go
13660     with it and become meaningless when absence of a C library is
13661     assumed, for example '-lpthread' or '-lm' in some configurations.
13662     This is intended for bare-board targets when there is indeed no C
13663     library available.
13664
13665'-nostdlib'
13666     Do not use the standard system startup files or libraries when
13667     linking.  No startup files and only the libraries you specify are
13668     passed to the linker, and options specifying linkage of the system
13669     libraries, such as '-static-libgcc' or '-shared-libgcc', are
13670     ignored.
13671
13672     The compiler may generate calls to 'memcmp', 'memset', 'memcpy' and
13673     'memmove'.  These entries are usually resolved by entries in libc.
13674     These entry points should be supplied through some other mechanism
13675     when this option is specified.
13676
13677     One of the standard libraries bypassed by '-nostdlib' and
13678     '-nodefaultlibs' is 'libgcc.a', a library of internal subroutines
13679     which GCC uses to overcome shortcomings of particular machines, or
13680     special needs for some languages.  (*Note Interfacing to GCC
13681     Output: (gccint)Interface, for more discussion of 'libgcc.a'.)  In
13682     most cases, you need 'libgcc.a' even when you want to avoid other
13683     standard libraries.  In other words, when you specify '-nostdlib'
13684     or '-nodefaultlibs' you should usually specify '-lgcc' as well.
13685     This ensures that you have no unresolved references to internal GCC
13686     library subroutines.  (An example of such an internal subroutine is
13687     '__main', used to ensure C++ constructors are called; *note
13688     'collect2': (gccint)Collect2.)
13689
13690'-e ENTRY'
13691'--entry=ENTRY'
13692
13693     Specify that the program entry point is ENTRY.  The argument is
13694     interpreted by the linker; the GNU linker accepts either a symbol
13695     name or an address.
13696
13697'-pie'
13698     Produce a dynamically linked position independent executable on
13699     targets that support it.  For predictable results, you must also
13700     specify the same set of options used for compilation ('-fpie',
13701     '-fPIE', or model suboptions) when you specify this linker option.
13702
13703'-no-pie'
13704     Don't produce a dynamically linked position independent executable.
13705
13706'-static-pie'
13707     Produce a static position independent executable on targets that
13708     support it.  A static position independent executable is similar to
13709     a static executable, but can be loaded at any address without a
13710     dynamic linker.  For predictable results, you must also specify the
13711     same set of options used for compilation ('-fpie', '-fPIE', or
13712     model suboptions) when you specify this linker option.
13713
13714'-pthread'
13715     Link with the POSIX threads library.  This option is supported on
13716     GNU/Linux targets, most other Unix derivatives, and also on x86
13717     Cygwin and MinGW targets.  On some targets this option also sets
13718     flags for the preprocessor, so it should be used consistently for
13719     both compilation and linking.
13720
13721'-r'
13722     Produce a relocatable object as output.  This is also known as
13723     partial linking.
13724
13725'-rdynamic'
13726     Pass the flag '-export-dynamic' to the ELF linker, on targets that
13727     support it.  This instructs the linker to add all symbols, not only
13728     used ones, to the dynamic symbol table.  This option is needed for
13729     some uses of 'dlopen' or to allow obtaining backtraces from within
13730     a program.
13731
13732'-s'
13733     Remove all symbol table and relocation information from the
13734     executable.
13735
13736'-static'
13737     On systems that support dynamic linking, this overrides '-pie' and
13738     prevents linking with the shared libraries.  On other systems, this
13739     option has no effect.
13740
13741'-shared'
13742     Produce a shared object which can then be linked with other objects
13743     to form an executable.  Not all systems support this option.  For
13744     predictable results, you must also specify the same set of options
13745     used for compilation ('-fpic', '-fPIC', or model suboptions) when
13746     you specify this linker option.(1)
13747
13748'-shared-libgcc'
13749'-static-libgcc'
13750     On systems that provide 'libgcc' as a shared library, these options
13751     force the use of either the shared or static version, respectively.
13752     If no shared version of 'libgcc' was built when the compiler was
13753     configured, these options have no effect.
13754
13755     There are several situations in which an application should use the
13756     shared 'libgcc' instead of the static version.  The most common of
13757     these is when the application wishes to throw and catch exceptions
13758     across different shared libraries.  In that case, each of the
13759     libraries as well as the application itself should use the shared
13760     'libgcc'.
13761
13762     Therefore, the G++ driver automatically adds '-shared-libgcc'
13763     whenever you build a shared library or a main executable, because
13764     C++ programs typically use exceptions, so this is the right thing
13765     to do.
13766
13767     If, instead, you use the GCC driver to create shared libraries, you
13768     may find that they are not always linked with the shared 'libgcc'.
13769     If GCC finds, at its configuration time, that you have a non-GNU
13770     linker or a GNU linker that does not support option
13771     '--eh-frame-hdr', it links the shared version of 'libgcc' into
13772     shared libraries by default.  Otherwise, it takes advantage of the
13773     linker and optimizes away the linking with the shared version of
13774     'libgcc', linking with the static version of libgcc by default.
13775     This allows exceptions to propagate through such shared libraries,
13776     without incurring relocation costs at library load time.
13777
13778     However, if a library or main executable is supposed to throw or
13779     catch exceptions, you must link it using the G++ driver, or using
13780     the option '-shared-libgcc', such that it is linked with the shared
13781     'libgcc'.
13782
13783'-static-libasan'
13784     When the '-fsanitize=address' option is used to link a program, the
13785     GCC driver automatically links against 'libasan'.  If 'libasan' is
13786     available as a shared library, and the '-static' option is not
13787     used, then this links against the shared version of 'libasan'.  The
13788     '-static-libasan' option directs the GCC driver to link 'libasan'
13789     statically, without necessarily linking other libraries statically.
13790
13791'-static-libtsan'
13792     When the '-fsanitize=thread' option is used to link a program, the
13793     GCC driver automatically links against 'libtsan'.  If 'libtsan' is
13794     available as a shared library, and the '-static' option is not
13795     used, then this links against the shared version of 'libtsan'.  The
13796     '-static-libtsan' option directs the GCC driver to link 'libtsan'
13797     statically, without necessarily linking other libraries statically.
13798
13799'-static-liblsan'
13800     When the '-fsanitize=leak' option is used to link a program, the
13801     GCC driver automatically links against 'liblsan'.  If 'liblsan' is
13802     available as a shared library, and the '-static' option is not
13803     used, then this links against the shared version of 'liblsan'.  The
13804     '-static-liblsan' option directs the GCC driver to link 'liblsan'
13805     statically, without necessarily linking other libraries statically.
13806
13807'-static-libubsan'
13808     When the '-fsanitize=undefined' option is used to link a program,
13809     the GCC driver automatically links against 'libubsan'.  If
13810     'libubsan' is available as a shared library, and the '-static'
13811     option is not used, then this links against the shared version of
13812     'libubsan'.  The '-static-libubsan' option directs the GCC driver
13813     to link 'libubsan' statically, without necessarily linking other
13814     libraries statically.
13815
13816'-static-libstdc++'
13817     When the 'g++' program is used to link a C++ program, it normally
13818     automatically links against 'libstdc++'.  If 'libstdc++' is
13819     available as a shared library, and the '-static' option is not
13820     used, then this links against the shared version of 'libstdc++'.
13821     That is normally fine.  However, it is sometimes useful to freeze
13822     the version of 'libstdc++' used by the program without going all
13823     the way to a fully static link.  The '-static-libstdc++' option
13824     directs the 'g++' driver to link 'libstdc++' statically, without
13825     necessarily linking other libraries statically.
13826
13827'-symbolic'
13828     Bind references to global symbols when building a shared object.
13829     Warn about any unresolved references (unless overridden by the link
13830     editor option '-Xlinker -z -Xlinker defs').  Only a few systems
13831     support this option.
13832
13833'-T SCRIPT'
13834     Use SCRIPT as the linker script.  This option is supported by most
13835     systems using the GNU linker.  On some targets, such as bare-board
13836     targets without an operating system, the '-T' option may be
13837     required when linking to avoid references to undefined symbols.
13838
13839'-Xlinker OPTION'
13840     Pass OPTION as an option to the linker.  You can use this to supply
13841     system-specific linker options that GCC does not recognize.
13842
13843     If you want to pass an option that takes a separate argument, you
13844     must use '-Xlinker' twice, once for the option and once for the
13845     argument.  For example, to pass '-assert definitions', you must
13846     write '-Xlinker -assert -Xlinker definitions'.  It does not work to
13847     write '-Xlinker "-assert definitions"', because this passes the
13848     entire string as a single argument, which is not what the linker
13849     expects.
13850
13851     When using the GNU linker, it is usually more convenient to pass
13852     arguments to linker options using the 'OPTION=VALUE' syntax than as
13853     separate arguments.  For example, you can specify '-Xlinker
13854     -Map=output.map' rather than '-Xlinker -Map -Xlinker output.map'.
13855     Other linkers may not support this syntax for command-line options.
13856
13857'-Wl,OPTION'
13858     Pass OPTION as an option to the linker.  If OPTION contains commas,
13859     it is split into multiple options at the commas.  You can use this
13860     syntax to pass an argument to the option.  For example,
13861     '-Wl,-Map,output.map' passes '-Map output.map' to the linker.  When
13862     using the GNU linker, you can also get the same effect with
13863     '-Wl,-Map=output.map'.
13864
13865'-u SYMBOL'
13866     Pretend the symbol SYMBOL is undefined, to force linking of library
13867     modules to define it.  You can use '-u' multiple times with
13868     different symbols to force loading of additional library modules.
13869
13870'-z KEYWORD'
13871     '-z' is passed directly on to the linker along with the keyword
13872     KEYWORD.  See the section in the documentation of your linker for
13873     permitted values and their meanings.
13874
13875   ---------- Footnotes ----------
13876
13877   (1) On some systems, 'gcc -shared' needs to build supplementary stub
13878code for constructors to work.  On multi-libbed systems, 'gcc -shared'
13879must select the correct support libraries to link against.  Failing to
13880supply the correct flags may lead to subtle defects.  Supplying them in
13881cases where they are not necessary is innocuous.
13882
13883
13884File: gcc.info,  Node: Directory Options,  Next: Code Gen Options,  Prev: Link Options,  Up: Invoking GCC
13885
138863.16 Options for Directory Search
13887=================================
13888
13889These options specify directories to search for header files, for
13890libraries and for parts of the compiler:
13891
13892'-I DIR'
13893'-iquote DIR'
13894'-isystem DIR'
13895'-idirafter DIR'
13896     Add the directory DIR to the list of directories to be searched for
13897     header files during preprocessing.  If DIR begins with '=' or
13898     '$SYSROOT', then the '=' or '$SYSROOT' is replaced by the sysroot
13899     prefix; see '--sysroot' and '-isysroot'.
13900
13901     Directories specified with '-iquote' apply only to the quote form
13902     of the directive, '#include "FILE"'.  Directories specified with
13903     '-I', '-isystem', or '-idirafter' apply to lookup for both the
13904     '#include "FILE"' and '#include <FILE>' directives.
13905
13906     You can specify any number or combination of these options on the
13907     command line to search for header files in several directories.
13908     The lookup order is as follows:
13909
13910       1. For the quote form of the include directive, the directory of
13911          the current file is searched first.
13912
13913       2. For the quote form of the include directive, the directories
13914          specified by '-iquote' options are searched in left-to-right
13915          order, as they appear on the command line.
13916
13917       3. Directories specified with '-I' options are scanned in
13918          left-to-right order.
13919
13920       4. Directories specified with '-isystem' options are scanned in
13921          left-to-right order.
13922
13923       5. Standard system directories are scanned.
13924
13925       6. Directories specified with '-idirafter' options are scanned in
13926          left-to-right order.
13927
13928     You can use '-I' to override a system header file, substituting
13929     your own version, since these directories are searched before the
13930     standard system header file directories.  However, you should not
13931     use this option to add directories that contain vendor-supplied
13932     system header files; use '-isystem' for that.
13933
13934     The '-isystem' and '-idirafter' options also mark the directory as
13935     a system directory, so that it gets the same special treatment that
13936     is applied to the standard system directories.
13937
13938     If a standard system include directory, or a directory specified
13939     with '-isystem', is also specified with '-I', the '-I' option is
13940     ignored.  The directory is still searched but as a system directory
13941     at its normal position in the system include chain.  This is to
13942     ensure that GCC's procedure to fix buggy system headers and the
13943     ordering for the '#include_next' directive are not inadvertently
13944     changed.  If you really need to change the search order for system
13945     directories, use the '-nostdinc' and/or '-isystem' options.
13946
13947'-I-'
13948     Split the include path.  This option has been deprecated.  Please
13949     use '-iquote' instead for '-I' directories before the '-I-' and
13950     remove the '-I-' option.
13951
13952     Any directories specified with '-I' options before '-I-' are
13953     searched only for headers requested with '#include "FILE"'; they
13954     are not searched for '#include <FILE>'.  If additional directories
13955     are specified with '-I' options after the '-I-', those directories
13956     are searched for all '#include' directives.
13957
13958     In addition, '-I-' inhibits the use of the directory of the current
13959     file directory as the first search directory for '#include "FILE"'.
13960     There is no way to override this effect of '-I-'.
13961
13962'-iprefix PREFIX'
13963     Specify PREFIX as the prefix for subsequent '-iwithprefix' options.
13964     If the prefix represents a directory, you should include the final
13965     '/'.
13966
13967'-iwithprefix DIR'
13968'-iwithprefixbefore DIR'
13969     Append DIR to the prefix specified previously with '-iprefix', and
13970     add the resulting directory to the include search path.
13971     '-iwithprefixbefore' puts it in the same place '-I' would;
13972     '-iwithprefix' puts it where '-idirafter' would.
13973
13974'-isysroot DIR'
13975     This option is like the '--sysroot' option, but applies only to
13976     header files (except for Darwin targets, where it applies to both
13977     header files and libraries).  See the '--sysroot' option for more
13978     information.
13979
13980'-imultilib DIR'
13981     Use DIR as a subdirectory of the directory containing
13982     target-specific C++ headers.
13983
13984'-nostdinc'
13985     Do not search the standard system directories for header files.
13986     Only the directories explicitly specified with '-I', '-iquote',
13987     '-isystem', and/or '-idirafter' options (and the directory of the
13988     current file, if appropriate) are searched.
13989
13990'-nostdinc++'
13991     Do not search for header files in the C++-specific standard
13992     directories, but do still search the other standard directories.
13993     (This option is used when building the C++ library.)
13994
13995'-iplugindir=DIR'
13996     Set the directory to search for plugins that are passed by
13997     '-fplugin=NAME' instead of '-fplugin=PATH/NAME.so'.  This option is
13998     not meant to be used by the user, but only passed by the driver.
13999
14000'-LDIR'
14001     Add directory DIR to the list of directories to be searched for
14002     '-l'.
14003
14004'-BPREFIX'
14005     This option specifies where to find the executables, libraries,
14006     include files, and data files of the compiler itself.
14007
14008     The compiler driver program runs one or more of the subprograms
14009     'cpp', 'cc1', 'as' and 'ld'.  It tries PREFIX as a prefix for each
14010     program it tries to run, both with and without 'MACHINE/VERSION/'
14011     for the corresponding target machine and compiler version.
14012
14013     For each subprogram to be run, the compiler driver first tries the
14014     '-B' prefix, if any.  If that name is not found, or if '-B' is not
14015     specified, the driver tries two standard prefixes, '/usr/lib/gcc/'
14016     and '/usr/local/lib/gcc/'.  If neither of those results in a file
14017     name that is found, the unmodified program name is searched for
14018     using the directories specified in your 'PATH' environment
14019     variable.
14020
14021     The compiler checks to see if the path provided by '-B' refers to a
14022     directory, and if necessary it adds a directory separator character
14023     at the end of the path.
14024
14025     '-B' prefixes that effectively specify directory names also apply
14026     to libraries in the linker, because the compiler translates these
14027     options into '-L' options for the linker.  They also apply to
14028     include files in the preprocessor, because the compiler translates
14029     these options into '-isystem' options for the preprocessor.  In
14030     this case, the compiler appends 'include' to the prefix.
14031
14032     The runtime support file 'libgcc.a' can also be searched for using
14033     the '-B' prefix, if needed.  If it is not found there, the two
14034     standard prefixes above are tried, and that is all.  The file is
14035     left out of the link if it is not found by those means.
14036
14037     Another way to specify a prefix much like the '-B' prefix is to use
14038     the environment variable 'GCC_EXEC_PREFIX'.  *Note Environment
14039     Variables::.
14040
14041     As a special kludge, if the path provided by '-B' is
14042     '[dir/]stageN/', where N is a number in the range 0 to 9, then it
14043     is replaced by '[dir/]include'.  This is to help with
14044     boot-strapping the compiler.
14045
14046'-no-canonical-prefixes'
14047     Do not expand any symbolic links, resolve references to '/../' or
14048     '/./', or make the path absolute when generating a relative prefix.
14049
14050'--sysroot=DIR'
14051     Use DIR as the logical root directory for headers and libraries.
14052     For example, if the compiler normally searches for headers in
14053     '/usr/include' and libraries in '/usr/lib', it instead searches
14054     'DIR/usr/include' and 'DIR/usr/lib'.
14055
14056     If you use both this option and the '-isysroot' option, then the
14057     '--sysroot' option applies to libraries, but the '-isysroot' option
14058     applies to header files.
14059
14060     The GNU linker (beginning with version 2.16) has the necessary
14061     support for this option.  If your linker does not support this
14062     option, the header file aspect of '--sysroot' still works, but the
14063     library aspect does not.
14064
14065'--no-sysroot-suffix'
14066     For some targets, a suffix is added to the root directory specified
14067     with '--sysroot', depending on the other options used, so that
14068     headers may for example be found in 'DIR/SUFFIX/usr/include'
14069     instead of 'DIR/usr/include'.  This option disables the addition of
14070     such a suffix.
14071
14072
14073File: gcc.info,  Node: Code Gen Options,  Next: Developer Options,  Prev: Directory Options,  Up: Invoking GCC
14074
140753.17 Options for Code Generation Conventions
14076============================================
14077
14078These machine-independent options control the interface conventions used
14079in code generation.
14080
14081 Most of them have both positive and negative forms; the negative form
14082of '-ffoo' is '-fno-foo'.  In the table below, only one of the forms is
14083listed--the one that is not the default.  You can figure out the other
14084form by either removing 'no-' or adding it.
14085
14086'-fstack-reuse=REUSE-LEVEL'
14087     This option controls stack space reuse for user declared local/auto
14088     variables and compiler generated temporaries.  REUSE_LEVEL can be
14089     'all', 'named_vars', or 'none'.  'all' enables stack reuse for all
14090     local variables and temporaries, 'named_vars' enables the reuse
14091     only for user defined local variables with names, and 'none'
14092     disables stack reuse completely.  The default value is 'all'.  The
14093     option is needed when the program extends the lifetime of a scoped
14094     local variable or a compiler generated temporary beyond the end
14095     point defined by the language.  When a lifetime of a variable ends,
14096     and if the variable lives in memory, the optimizing compiler has
14097     the freedom to reuse its stack space with other temporaries or
14098     scoped local variables whose live range does not overlap with it.
14099     Legacy code extending local lifetime is likely to break with the
14100     stack reuse optimization.
14101
14102     For example,
14103
14104             int *p;
14105             {
14106               int local1;
14107
14108               p = &local1;
14109               local1 = 10;
14110               ....
14111             }
14112             {
14113                int local2;
14114                local2 = 20;
14115                ...
14116             }
14117
14118             if (*p == 10)  // out of scope use of local1
14119               {
14120
14121               }
14122
14123     Another example:
14124
14125             struct A
14126             {
14127                 A(int k) : i(k), j(k) { }
14128                 int i;
14129                 int j;
14130             };
14131
14132             A *ap;
14133
14134             void foo(const A& ar)
14135             {
14136                ap = &ar;
14137             }
14138
14139             void bar()
14140             {
14141                foo(A(10)); // temp object's lifetime ends when foo returns
14142
14143                {
14144                  A a(20);
14145                  ....
14146                }
14147                ap->i+= 10;  // ap references out of scope temp whose space
14148                             // is reused with a. What is the value of ap->i?
14149             }
14150
14151
14152     The lifetime of a compiler generated temporary is well defined by
14153     the C++ standard.  When a lifetime of a temporary ends, and if the
14154     temporary lives in memory, the optimizing compiler has the freedom
14155     to reuse its stack space with other temporaries or scoped local
14156     variables whose live range does not overlap with it.  However some
14157     of the legacy code relies on the behavior of older compilers in
14158     which temporaries' stack space is not reused, the aggressive stack
14159     reuse can lead to runtime errors.  This option is used to control
14160     the temporary stack reuse optimization.
14161
14162'-ftrapv'
14163     This option generates traps for signed overflow on addition,
14164     subtraction, multiplication operations.  The options '-ftrapv' and
14165     '-fwrapv' override each other, so using '-ftrapv' '-fwrapv' on the
14166     command-line results in '-fwrapv' being effective.  Note that only
14167     active options override, so using '-ftrapv' '-fwrapv' '-fno-wrapv'
14168     on the command-line results in '-ftrapv' being effective.
14169
14170'-fwrapv'
14171     This option instructs the compiler to assume that signed arithmetic
14172     overflow of addition, subtraction and multiplication wraps around
14173     using twos-complement representation.  This flag enables some
14174     optimizations and disables others.  The options '-ftrapv' and
14175     '-fwrapv' override each other, so using '-ftrapv' '-fwrapv' on the
14176     command-line results in '-fwrapv' being effective.  Note that only
14177     active options override, so using '-ftrapv' '-fwrapv' '-fno-wrapv'
14178     on the command-line results in '-ftrapv' being effective.
14179
14180'-fwrapv-pointer'
14181     This option instructs the compiler to assume that pointer
14182     arithmetic overflow on addition and subtraction wraps around using
14183     twos-complement representation.  This flag disables some
14184     optimizations which assume pointer overflow is invalid.
14185
14186'-fstrict-overflow'
14187     This option implies '-fno-wrapv' '-fno-wrapv-pointer' and when
14188     negated implies '-fwrapv' '-fwrapv-pointer'.
14189
14190'-fexceptions'
14191     Enable exception handling.  Generates extra code needed to
14192     propagate exceptions.  For some targets, this implies GCC generates
14193     frame unwind information for all functions, which can produce
14194     significant data size overhead, although it does not affect
14195     execution.  If you do not specify this option, GCC enables it by
14196     default for languages like C++ that normally require exception
14197     handling, and disables it for languages like C that do not normally
14198     require it.  However, you may need to enable this option when
14199     compiling C code that needs to interoperate properly with exception
14200     handlers written in C++.  You may also wish to disable this option
14201     if you are compiling older C++ programs that don't use exception
14202     handling.
14203
14204'-fnon-call-exceptions'
14205     Generate code that allows trapping instructions to throw
14206     exceptions.  Note that this requires platform-specific runtime
14207     support that does not exist everywhere.  Moreover, it only allows
14208     _trapping_ instructions to throw exceptions, i.e. memory references
14209     or floating-point instructions.  It does not allow exceptions to be
14210     thrown from arbitrary signal handlers such as 'SIGALRM'.
14211
14212'-fdelete-dead-exceptions'
14213     Consider that instructions that may throw exceptions but don't
14214     otherwise contribute to the execution of the program can be
14215     optimized away.  This option is enabled by default for the Ada
14216     front end, as permitted by the Ada language specification.
14217     Optimization passes that cause dead exceptions to be removed are
14218     enabled independently at different optimization levels.
14219
14220'-funwind-tables'
14221     Similar to '-fexceptions', except that it just generates any needed
14222     static data, but does not affect the generated code in any other
14223     way.  You normally do not need to enable this option; instead, a
14224     language processor that needs this handling enables it on your
14225     behalf.
14226
14227'-fasynchronous-unwind-tables'
14228     Generate unwind table in DWARF format, if supported by target
14229     machine.  The table is exact at each instruction boundary, so it
14230     can be used for stack unwinding from asynchronous events (such as
14231     debugger or garbage collector).
14232
14233'-fno-gnu-unique'
14234     On systems with recent GNU assembler and C library, the C++
14235     compiler uses the 'STB_GNU_UNIQUE' binding to make sure that
14236     definitions of template static data members and static local
14237     variables in inline functions are unique even in the presence of
14238     'RTLD_LOCAL'; this is necessary to avoid problems with a library
14239     used by two different 'RTLD_LOCAL' plugins depending on a
14240     definition in one of them and therefore disagreeing with the other
14241     one about the binding of the symbol.  But this causes 'dlclose' to
14242     be ignored for affected DSOs; if your program relies on
14243     reinitialization of a DSO via 'dlclose' and 'dlopen', you can use
14244     '-fno-gnu-unique'.
14245
14246'-fpcc-struct-return'
14247     Return "short" 'struct' and 'union' values in memory like longer
14248     ones, rather than in registers.  This convention is less efficient,
14249     but it has the advantage of allowing intercallability between
14250     GCC-compiled files and files compiled with other compilers,
14251     particularly the Portable C Compiler (pcc).
14252
14253     The precise convention for returning structures in memory depends
14254     on the target configuration macros.
14255
14256     Short structures and unions are those whose size and alignment
14257     match that of some integer type.
14258
14259     *Warning:* code compiled with the '-fpcc-struct-return' switch is
14260     not binary compatible with code compiled with the
14261     '-freg-struct-return' switch.  Use it to conform to a non-default
14262     application binary interface.
14263
14264'-freg-struct-return'
14265     Return 'struct' and 'union' values in registers when possible.
14266     This is more efficient for small structures than
14267     '-fpcc-struct-return'.
14268
14269     If you specify neither '-fpcc-struct-return' nor
14270     '-freg-struct-return', GCC defaults to whichever convention is
14271     standard for the target.  If there is no standard convention, GCC
14272     defaults to '-fpcc-struct-return', except on targets where GCC is
14273     the principal compiler.  In those cases, we can choose the
14274     standard, and we chose the more efficient register return
14275     alternative.
14276
14277     *Warning:* code compiled with the '-freg-struct-return' switch is
14278     not binary compatible with code compiled with the
14279     '-fpcc-struct-return' switch.  Use it to conform to a non-default
14280     application binary interface.
14281
14282'-fshort-enums'
14283     Allocate to an 'enum' type only as many bytes as it needs for the
14284     declared range of possible values.  Specifically, the 'enum' type
14285     is equivalent to the smallest integer type that has enough room.
14286
14287     *Warning:* the '-fshort-enums' switch causes GCC to generate code
14288     that is not binary compatible with code generated without that
14289     switch.  Use it to conform to a non-default application binary
14290     interface.
14291
14292'-fshort-wchar'
14293     Override the underlying type for 'wchar_t' to be 'short unsigned
14294     int' instead of the default for the target.  This option is useful
14295     for building programs to run under WINE.
14296
14297     *Warning:* the '-fshort-wchar' switch causes GCC to generate code
14298     that is not binary compatible with code generated without that
14299     switch.  Use it to conform to a non-default application binary
14300     interface.
14301
14302'-fcommon'
14303     In C code, this option controls the placement of global variables
14304     defined without an initializer, known as "tentative definitions" in
14305     the C standard.  Tentative definitions are distinct from
14306     declarations of a variable with the 'extern' keyword, which do not
14307     allocate storage.
14308
14309     The default is '-fno-common', which specifies that the compiler
14310     places uninitialized global variables in the BSS section of the
14311     object file.  This inhibits the merging of tentative definitions by
14312     the linker so you get a multiple-definition error if the same
14313     variable is accidentally defined in more than one compilation unit.
14314
14315     The '-fcommon' places uninitialized global variables in a common
14316     block.  This allows the linker to resolve all tentative definitions
14317     of the same variable in different compilation units to the same
14318     object, or to a non-tentative definition.  This behavior is
14319     inconsistent with C++, and on many targets implies a speed and code
14320     size penalty on global variable references.  It is mainly useful to
14321     enable legacy code to link without errors.
14322
14323'-fno-ident'
14324     Ignore the '#ident' directive.
14325
14326'-finhibit-size-directive'
14327     Don't output a '.size' assembler directive, or anything else that
14328     would cause trouble if the function is split in the middle, and the
14329     two halves are placed at locations far apart in memory.  This
14330     option is used when compiling 'crtstuff.c'; you should not need to
14331     use it for anything else.
14332
14333'-fverbose-asm'
14334     Put extra commentary information in the generated assembly code to
14335     make it more readable.  This option is generally only of use to
14336     those who actually need to read the generated assembly code
14337     (perhaps while debugging the compiler itself).
14338
14339     '-fno-verbose-asm', the default, causes the extra information to be
14340     omitted and is useful when comparing two assembler files.
14341
14342     The added comments include:
14343
14344        * information on the compiler version and command-line options,
14345
14346        * the source code lines associated with the assembly
14347          instructions, in the form FILENAME:LINENUMBER:CONTENT OF LINE,
14348
14349        * hints on which high-level expressions correspond to the
14350          various assembly instruction operands.
14351
14352     For example, given this C source file:
14353
14354          int test (int n)
14355          {
14356            int i;
14357            int total = 0;
14358
14359            for (i = 0; i < n; i++)
14360              total += i * i;
14361
14362            return total;
14363          }
14364
14365     compiling to (x86_64) assembly via '-S' and emitting the result
14366     direct to stdout via '-o' '-'
14367
14368          gcc -S test.c -fverbose-asm -Os -o -
14369
14370     gives output similar to this:
14371
14372          	.file	"test.c"
14373          # GNU C11 (GCC) version 7.0.0 20160809 (experimental) (x86_64-pc-linux-gnu)
14374            [...snip...]
14375          # options passed:
14376            [...snip...]
14377
14378          	.text
14379          	.globl	test
14380          	.type	test, @function
14381          test:
14382          .LFB0:
14383          	.cfi_startproc
14384          # test.c:4:   int total = 0;
14385          	xorl	%eax, %eax	# <retval>
14386          # test.c:6:   for (i = 0; i < n; i++)
14387          	xorl	%edx, %edx	# i
14388          .L2:
14389          # test.c:6:   for (i = 0; i < n; i++)
14390          	cmpl	%edi, %edx	# n, i
14391          	jge	.L5	#,
14392          # test.c:7:     total += i * i;
14393          	movl	%edx, %ecx	# i, tmp92
14394          	imull	%edx, %ecx	# i, tmp92
14395          # test.c:6:   for (i = 0; i < n; i++)
14396          	incl	%edx	# i
14397          # test.c:7:     total += i * i;
14398          	addl	%ecx, %eax	# tmp92, <retval>
14399          	jmp	.L2	#
14400          .L5:
14401          # test.c:10: }
14402          	ret
14403          	.cfi_endproc
14404          .LFE0:
14405          	.size	test, .-test
14406          	.ident	"GCC: (GNU) 7.0.0 20160809 (experimental)"
14407          	.section	.note.GNU-stack,"",@progbits
14408
14409     The comments are intended for humans rather than machines and hence
14410     the precise format of the comments is subject to change.
14411
14412'-frecord-gcc-switches'
14413     This switch causes the command line used to invoke the compiler to
14414     be recorded into the object file that is being created.  This
14415     switch is only implemented on some targets and the exact format of
14416     the recording is target and binary file format dependent, but it
14417     usually takes the form of a section containing ASCII text.  This
14418     switch is related to the '-fverbose-asm' switch, but that switch
14419     only records information in the assembler output file as comments,
14420     so it never reaches the object file.  See also
14421     '-grecord-gcc-switches' for another way of storing compiler options
14422     into the object file.
14423
14424'-fpic'
14425     Generate position-independent code (PIC) suitable for use in a
14426     shared library, if supported for the target machine.  Such code
14427     accesses all constant addresses through a global offset table
14428     (GOT).  The dynamic loader resolves the GOT entries when the
14429     program starts (the dynamic loader is not part of GCC; it is part
14430     of the operating system).  If the GOT size for the linked
14431     executable exceeds a machine-specific maximum size, you get an
14432     error message from the linker indicating that '-fpic' does not
14433     work; in that case, recompile with '-fPIC' instead.  (These
14434     maximums are 8k on the SPARC, 28k on AArch64 and 32k on the m68k
14435     and RS/6000.  The x86 has no such limit.)
14436
14437     Position-independent code requires special support, and therefore
14438     works only on certain machines.  For the x86, GCC supports PIC for
14439     System V but not for the Sun 386i.  Code generated for the IBM
14440     RS/6000 is always position-independent.
14441
14442     When this flag is set, the macros '__pic__' and '__PIC__' are
14443     defined to 1.
14444
14445'-fPIC'
14446     If supported for the target machine, emit position-independent
14447     code, suitable for dynamic linking and avoiding any limit on the
14448     size of the global offset table.  This option makes a difference on
14449     AArch64, m68k, PowerPC and SPARC.
14450
14451     Position-independent code requires special support, and therefore
14452     works only on certain machines.
14453
14454     When this flag is set, the macros '__pic__' and '__PIC__' are
14455     defined to 2.
14456
14457'-fpie'
14458'-fPIE'
14459     These options are similar to '-fpic' and '-fPIC', but the generated
14460     position-independent code can be only linked into executables.
14461     Usually these options are used to compile code that will be linked
14462     using the '-pie' GCC option.
14463
14464     '-fpie' and '-fPIE' both define the macros '__pie__' and '__PIE__'.
14465     The macros have the value 1 for '-fpie' and 2 for '-fPIE'.
14466
14467'-fno-plt'
14468     Do not use the PLT for external function calls in
14469     position-independent code.  Instead, load the callee address at
14470     call sites from the GOT and branch to it.  This leads to more
14471     efficient code by eliminating PLT stubs and exposing GOT loads to
14472     optimizations.  On architectures such as 32-bit x86 where PLT stubs
14473     expect the GOT pointer in a specific register, this gives more
14474     register allocation freedom to the compiler.  Lazy binding requires
14475     use of the PLT; with '-fno-plt' all external symbols are resolved
14476     at load time.
14477
14478     Alternatively, the function attribute 'noplt' can be used to avoid
14479     calls through the PLT for specific external functions.
14480
14481     In position-dependent code, a few targets also convert calls to
14482     functions that are marked to not use the PLT to use the GOT
14483     instead.
14484
14485'-fno-jump-tables'
14486     Do not use jump tables for switch statements even where it would be
14487     more efficient than other code generation strategies.  This option
14488     is of use in conjunction with '-fpic' or '-fPIC' for building code
14489     that forms part of a dynamic linker and cannot reference the
14490     address of a jump table.  On some targets, jump tables do not
14491     require a GOT and this option is not needed.
14492
14493'-ffixed-REG'
14494     Treat the register named REG as a fixed register; generated code
14495     should never refer to it (except perhaps as a stack pointer, frame
14496     pointer or in some other fixed role).
14497
14498     REG must be the name of a register.  The register names accepted
14499     are machine-specific and are defined in the 'REGISTER_NAMES' macro
14500     in the machine description macro file.
14501
14502     This flag does not have a negative form, because it specifies a
14503     three-way choice.
14504
14505'-fcall-used-REG'
14506     Treat the register named REG as an allocable register that is
14507     clobbered by function calls.  It may be allocated for temporaries
14508     or variables that do not live across a call.  Functions compiled
14509     this way do not save and restore the register REG.
14510
14511     It is an error to use this flag with the frame pointer or stack
14512     pointer.  Use of this flag for other registers that have fixed
14513     pervasive roles in the machine's execution model produces
14514     disastrous results.
14515
14516     This flag does not have a negative form, because it specifies a
14517     three-way choice.
14518
14519'-fcall-saved-REG'
14520     Treat the register named REG as an allocable register saved by
14521     functions.  It may be allocated even for temporaries or variables
14522     that live across a call.  Functions compiled this way save and
14523     restore the register REG if they use it.
14524
14525     It is an error to use this flag with the frame pointer or stack
14526     pointer.  Use of this flag for other registers that have fixed
14527     pervasive roles in the machine's execution model produces
14528     disastrous results.
14529
14530     A different sort of disaster results from the use of this flag for
14531     a register in which function values may be returned.
14532
14533     This flag does not have a negative form, because it specifies a
14534     three-way choice.
14535
14536'-fpack-struct[=N]'
14537     Without a value specified, pack all structure members together
14538     without holes.  When a value is specified (which must be a small
14539     power of two), pack structure members according to this value,
14540     representing the maximum alignment (that is, objects with default
14541     alignment requirements larger than this are output potentially
14542     unaligned at the next fitting location.
14543
14544     *Warning:* the '-fpack-struct' switch causes GCC to generate code
14545     that is not binary compatible with code generated without that
14546     switch.  Additionally, it makes the code suboptimal.  Use it to
14547     conform to a non-default application binary interface.
14548
14549'-fleading-underscore'
14550     This option and its counterpart, '-fno-leading-underscore',
14551     forcibly change the way C symbols are represented in the object
14552     file.  One use is to help link with legacy assembly code.
14553
14554     *Warning:* the '-fleading-underscore' switch causes GCC to generate
14555     code that is not binary compatible with code generated without that
14556     switch.  Use it to conform to a non-default application binary
14557     interface.  Not all targets provide complete support for this
14558     switch.
14559
14560'-ftls-model=MODEL'
14561     Alter the thread-local storage model to be used (*note
14562     Thread-Local::).  The MODEL argument should be one of
14563     'global-dynamic', 'local-dynamic', 'initial-exec' or 'local-exec'.
14564     Note that the choice is subject to optimization: the compiler may
14565     use a more efficient model for symbols not visible outside of the
14566     translation unit, or if '-fpic' is not given on the command line.
14567
14568     The default without '-fpic' is 'initial-exec'; with '-fpic' the
14569     default is 'global-dynamic'.
14570
14571'-ftrampolines'
14572     For targets that normally need trampolines for nested functions,
14573     always generate them instead of using descriptors.  Otherwise, for
14574     targets that do not need them, like for example HP-PA or IA-64, do
14575     nothing.
14576
14577     A trampoline is a small piece of code that is created at run time
14578     on the stack when the address of a nested function is taken, and is
14579     used to call the nested function indirectly.  Therefore, it
14580     requires the stack to be made executable in order for the program
14581     to work properly.
14582
14583     '-fno-trampolines' is enabled by default on a language by language
14584     basis to let the compiler avoid generating them, if it computes
14585     that this is safe, and replace them with descriptors.  Descriptors
14586     are made up of data only, but the generated code must be prepared
14587     to deal with them.  As of this writing, '-fno-trampolines' is
14588     enabled by default only for Ada.
14589
14590     Moreover, code compiled with '-ftrampolines' and code compiled with
14591     '-fno-trampolines' are not binary compatible if nested functions
14592     are present.  This option must therefore be used on a program-wide
14593     basis and be manipulated with extreme care.
14594
14595'-fvisibility=[default|internal|hidden|protected]'
14596     Set the default ELF image symbol visibility to the specified
14597     option--all symbols are marked with this unless overridden within
14598     the code.  Using this feature can very substantially improve
14599     linking and load times of shared object libraries, produce more
14600     optimized code, provide near-perfect API export and prevent symbol
14601     clashes.  It is *strongly* recommended that you use this in any
14602     shared objects you distribute.
14603
14604     Despite the nomenclature, 'default' always means public; i.e.,
14605     available to be linked against from outside the shared object.
14606     'protected' and 'internal' are pretty useless in real-world usage
14607     so the only other commonly used option is 'hidden'.  The default if
14608     '-fvisibility' isn't specified is 'default', i.e., make every
14609     symbol public.
14610
14611     A good explanation of the benefits offered by ensuring ELF symbols
14612     have the correct visibility is given by "How To Write Shared
14613     Libraries" by Ulrich Drepper (which can be found at
14614     <https://www.akkadia.org/drepper/>)--however a superior solution
14615     made possible by this option to marking things hidden when the
14616     default is public is to make the default hidden and mark things
14617     public.  This is the norm with DLLs on Windows and with
14618     '-fvisibility=hidden' and '__attribute__ ((visibility("default")))'
14619     instead of '__declspec(dllexport)' you get almost identical
14620     semantics with identical syntax.  This is a great boon to those
14621     working with cross-platform projects.
14622
14623     For those adding visibility support to existing code, you may find
14624     '#pragma GCC visibility' of use.  This works by you enclosing the
14625     declarations you wish to set visibility for with (for example)
14626     '#pragma GCC visibility push(hidden)' and '#pragma GCC visibility
14627     pop'.  Bear in mind that symbol visibility should be viewed *as
14628     part of the API interface contract* and thus all new code should
14629     always specify visibility when it is not the default; i.e.,
14630     declarations only for use within the local DSO should *always* be
14631     marked explicitly as hidden as so to avoid PLT indirection
14632     overheads--making this abundantly clear also aids readability and
14633     self-documentation of the code.  Note that due to ISO C++
14634     specification requirements, 'operator new' and 'operator delete'
14635     must always be of default visibility.
14636
14637     Be aware that headers from outside your project, in particular
14638     system headers and headers from any other library you use, may not
14639     be expecting to be compiled with visibility other than the default.
14640     You may need to explicitly say '#pragma GCC visibility
14641     push(default)' before including any such headers.
14642
14643     'extern' declarations are not affected by '-fvisibility', so a lot
14644     of code can be recompiled with '-fvisibility=hidden' with no
14645     modifications.  However, this means that calls to 'extern'
14646     functions with no explicit visibility use the PLT, so it is more
14647     effective to use '__attribute ((visibility))' and/or '#pragma GCC
14648     visibility' to tell the compiler which 'extern' declarations should
14649     be treated as hidden.
14650
14651     Note that '-fvisibility' does affect C++ vague linkage entities.
14652     This means that, for instance, an exception class that is be thrown
14653     between DSOs must be explicitly marked with default visibility so
14654     that the 'type_info' nodes are unified between the DSOs.
14655
14656     An overview of these techniques, their benefits and how to use them
14657     is at <http://gcc.gnu.org/wiki/Visibility>.
14658
14659'-fstrict-volatile-bitfields'
14660     This option should be used if accesses to volatile bit-fields (or
14661     other structure fields, although the compiler usually honors those
14662     types anyway) should use a single access of the width of the
14663     field's type, aligned to a natural alignment if possible.  For
14664     example, targets with memory-mapped peripheral registers might
14665     require all such accesses to be 16 bits wide; with this flag you
14666     can declare all peripheral bit-fields as 'unsigned short' (assuming
14667     short is 16 bits on these targets) to force GCC to use 16-bit
14668     accesses instead of, perhaps, a more efficient 32-bit access.
14669
14670     If this option is disabled, the compiler uses the most efficient
14671     instruction.  In the previous example, that might be a 32-bit load
14672     instruction, even though that accesses bytes that do not contain
14673     any portion of the bit-field, or memory-mapped registers unrelated
14674     to the one being updated.
14675
14676     In some cases, such as when the 'packed' attribute is applied to a
14677     structure field, it may not be possible to access the field with a
14678     single read or write that is correctly aligned for the target
14679     machine.  In this case GCC falls back to generating multiple
14680     accesses rather than code that will fault or truncate the result at
14681     run time.
14682
14683     Note: Due to restrictions of the C/C++11 memory model, write
14684     accesses are not allowed to touch non bit-field members.  It is
14685     therefore recommended to define all bits of the field's type as
14686     bit-field members.
14687
14688     The default value of this option is determined by the application
14689     binary interface for the target processor.
14690
14691'-fsync-libcalls'
14692     This option controls whether any out-of-line instance of the
14693     '__sync' family of functions may be used to implement the C++11
14694     '__atomic' family of functions.
14695
14696     The default value of this option is enabled, thus the only useful
14697     form of the option is '-fno-sync-libcalls'.  This option is used in
14698     the implementation of the 'libatomic' runtime library.
14699
14700
14701File: gcc.info,  Node: Developer Options,  Next: Submodel Options,  Prev: Code Gen Options,  Up: Invoking GCC
14702
147033.18 GCC Developer Options
14704==========================
14705
14706This section describes command-line options that are primarily of
14707interest to GCC developers, including options to support compiler
14708testing and investigation of compiler bugs and compile-time performance
14709problems.  This includes options that produce debug dumps at various
14710points in the compilation; that print statistics such as memory use and
14711execution time; and that print information about GCC's configuration,
14712such as where it searches for libraries.  You should rarely need to use
14713any of these options for ordinary compilation and linking tasks.
14714
14715 Many developer options that cause GCC to dump output to a file take an
14716optional '=FILENAME' suffix.  You can specify 'stdout' or '-' to dump to
14717standard output, and 'stderr' for standard error.
14718
14719 If '=FILENAME' is omitted, a default dump file name is constructed by
14720concatenating the base dump file name, a pass number, phase letter, and
14721pass name.  The base dump file name is the name of output file produced
14722by the compiler if explicitly specified and not an executable; otherwise
14723it is the source file name.  The pass number is determined by the order
14724passes are registered with the compiler's pass manager.  This is
14725generally the same as the order of execution, but passes registered by
14726plugins, target-specific passes, or passes that are otherwise registered
14727late are numbered higher than the pass named 'final', even if they are
14728executed earlier.  The phase letter is one of 'i' (inter-procedural
14729analysis), 'l' (language-specific), 'r' (RTL), or 't' (tree).  The files
14730are created in the directory of the output file.
14731
14732'-fcallgraph-info'
14733'-fcallgraph-info=MARKERS'
14734     Makes the compiler output callgraph information for the program, on
14735     a per-object-file basis.  The information is generated in the
14736     common VCG format.  It can be decorated with additional, per-node
14737     and/or per-edge information, if a list of comma-separated markers
14738     is additionally specified.  When the 'su' marker is specified, the
14739     callgraph is decorated with stack usage information; it is
14740     equivalent to '-fstack-usage'.  When the 'da' marker is specified,
14741     the callgraph is decorated with information about dynamically
14742     allocated objects.
14743
14744     When compiling with '-flto', no callgraph information is output
14745     along with the object file.  At LTO link time, '-fcallgraph-info'
14746     may generate multiple callgraph information files next to
14747     intermediate LTO output files.
14748
14749'-dLETTERS'
14750'-fdump-rtl-PASS'
14751'-fdump-rtl-PASS=FILENAME'
14752     Says to make debugging dumps during compilation at times specified
14753     by LETTERS.  This is used for debugging the RTL-based passes of the
14754     compiler.
14755
14756     Some '-dLETTERS' switches have different meaning when '-E' is used
14757     for preprocessing.  *Note Preprocessor Options::, for information
14758     about preprocessor-specific dump options.
14759
14760     Debug dumps can be enabled with a '-fdump-rtl' switch or some '-d'
14761     option LETTERS.  Here are the possible letters for use in PASS and
14762     LETTERS, and their meanings:
14763
14764     '-fdump-rtl-alignments'
14765          Dump after branch alignments have been computed.
14766
14767     '-fdump-rtl-asmcons'
14768          Dump after fixing rtl statements that have unsatisfied in/out
14769          constraints.
14770
14771     '-fdump-rtl-auto_inc_dec'
14772          Dump after auto-inc-dec discovery.  This pass is only run on
14773          architectures that have auto inc or auto dec instructions.
14774
14775     '-fdump-rtl-barriers'
14776          Dump after cleaning up the barrier instructions.
14777
14778     '-fdump-rtl-bbpart'
14779          Dump after partitioning hot and cold basic blocks.
14780
14781     '-fdump-rtl-bbro'
14782          Dump after block reordering.
14783
14784     '-fdump-rtl-btl1'
14785     '-fdump-rtl-btl2'
14786          '-fdump-rtl-btl1' and '-fdump-rtl-btl2' enable dumping after
14787          the two branch target load optimization passes.
14788
14789     '-fdump-rtl-bypass'
14790          Dump after jump bypassing and control flow optimizations.
14791
14792     '-fdump-rtl-combine'
14793          Dump after the RTL instruction combination pass.
14794
14795     '-fdump-rtl-compgotos'
14796          Dump after duplicating the computed gotos.
14797
14798     '-fdump-rtl-ce1'
14799     '-fdump-rtl-ce2'
14800     '-fdump-rtl-ce3'
14801          '-fdump-rtl-ce1', '-fdump-rtl-ce2', and '-fdump-rtl-ce3'
14802          enable dumping after the three if conversion passes.
14803
14804     '-fdump-rtl-cprop_hardreg'
14805          Dump after hard register copy propagation.
14806
14807     '-fdump-rtl-csa'
14808          Dump after combining stack adjustments.
14809
14810     '-fdump-rtl-cse1'
14811     '-fdump-rtl-cse2'
14812          '-fdump-rtl-cse1' and '-fdump-rtl-cse2' enable dumping after
14813          the two common subexpression elimination passes.
14814
14815     '-fdump-rtl-dce'
14816          Dump after the standalone dead code elimination passes.
14817
14818     '-fdump-rtl-dbr'
14819          Dump after delayed branch scheduling.
14820
14821     '-fdump-rtl-dce1'
14822     '-fdump-rtl-dce2'
14823          '-fdump-rtl-dce1' and '-fdump-rtl-dce2' enable dumping after
14824          the two dead store elimination passes.
14825
14826     '-fdump-rtl-eh'
14827          Dump after finalization of EH handling code.
14828
14829     '-fdump-rtl-eh_ranges'
14830          Dump after conversion of EH handling range regions.
14831
14832     '-fdump-rtl-expand'
14833          Dump after RTL generation.
14834
14835     '-fdump-rtl-fwprop1'
14836     '-fdump-rtl-fwprop2'
14837          '-fdump-rtl-fwprop1' and '-fdump-rtl-fwprop2' enable dumping
14838          after the two forward propagation passes.
14839
14840     '-fdump-rtl-gcse1'
14841     '-fdump-rtl-gcse2'
14842          '-fdump-rtl-gcse1' and '-fdump-rtl-gcse2' enable dumping after
14843          global common subexpression elimination.
14844
14845     '-fdump-rtl-init-regs'
14846          Dump after the initialization of the registers.
14847
14848     '-fdump-rtl-initvals'
14849          Dump after the computation of the initial value sets.
14850
14851     '-fdump-rtl-into_cfglayout'
14852          Dump after converting to cfglayout mode.
14853
14854     '-fdump-rtl-ira'
14855          Dump after iterated register allocation.
14856
14857     '-fdump-rtl-jump'
14858          Dump after the second jump optimization.
14859
14860     '-fdump-rtl-loop2'
14861          '-fdump-rtl-loop2' enables dumping after the rtl loop
14862          optimization passes.
14863
14864     '-fdump-rtl-mach'
14865          Dump after performing the machine dependent reorganization
14866          pass, if that pass exists.
14867
14868     '-fdump-rtl-mode_sw'
14869          Dump after removing redundant mode switches.
14870
14871     '-fdump-rtl-rnreg'
14872          Dump after register renumbering.
14873
14874     '-fdump-rtl-outof_cfglayout'
14875          Dump after converting from cfglayout mode.
14876
14877     '-fdump-rtl-peephole2'
14878          Dump after the peephole pass.
14879
14880     '-fdump-rtl-postreload'
14881          Dump after post-reload optimizations.
14882
14883     '-fdump-rtl-pro_and_epilogue'
14884          Dump after generating the function prologues and epilogues.
14885
14886     '-fdump-rtl-sched1'
14887     '-fdump-rtl-sched2'
14888          '-fdump-rtl-sched1' and '-fdump-rtl-sched2' enable dumping
14889          after the basic block scheduling passes.
14890
14891     '-fdump-rtl-ree'
14892          Dump after sign/zero extension elimination.
14893
14894     '-fdump-rtl-seqabstr'
14895          Dump after common sequence discovery.
14896
14897     '-fdump-rtl-shorten'
14898          Dump after shortening branches.
14899
14900     '-fdump-rtl-sibling'
14901          Dump after sibling call optimizations.
14902
14903     '-fdump-rtl-split1'
14904     '-fdump-rtl-split2'
14905     '-fdump-rtl-split3'
14906     '-fdump-rtl-split4'
14907     '-fdump-rtl-split5'
14908          These options enable dumping after five rounds of instruction
14909          splitting.
14910
14911     '-fdump-rtl-sms'
14912          Dump after modulo scheduling.  This pass is only run on some
14913          architectures.
14914
14915     '-fdump-rtl-stack'
14916          Dump after conversion from GCC's "flat register file"
14917          registers to the x87's stack-like registers.  This pass is
14918          only run on x86 variants.
14919
14920     '-fdump-rtl-subreg1'
14921     '-fdump-rtl-subreg2'
14922          '-fdump-rtl-subreg1' and '-fdump-rtl-subreg2' enable dumping
14923          after the two subreg expansion passes.
14924
14925     '-fdump-rtl-unshare'
14926          Dump after all rtl has been unshared.
14927
14928     '-fdump-rtl-vartrack'
14929          Dump after variable tracking.
14930
14931     '-fdump-rtl-vregs'
14932          Dump after converting virtual registers to hard registers.
14933
14934     '-fdump-rtl-web'
14935          Dump after live range splitting.
14936
14937     '-fdump-rtl-regclass'
14938     '-fdump-rtl-subregs_of_mode_init'
14939     '-fdump-rtl-subregs_of_mode_finish'
14940     '-fdump-rtl-dfinit'
14941     '-fdump-rtl-dfinish'
14942          These dumps are defined but always produce empty files.
14943
14944     '-da'
14945     '-fdump-rtl-all'
14946          Produce all the dumps listed above.
14947
14948     '-dA'
14949          Annotate the assembler output with miscellaneous debugging
14950          information.
14951
14952     '-dD'
14953          Dump all macro definitions, at the end of preprocessing, in
14954          addition to normal output.
14955
14956     '-dH'
14957          Produce a core dump whenever an error occurs.
14958
14959     '-dp'
14960          Annotate the assembler output with a comment indicating which
14961          pattern and alternative is used.  The length and cost of each
14962          instruction are also printed.
14963
14964     '-dP'
14965          Dump the RTL in the assembler output as a comment before each
14966          instruction.  Also turns on '-dp' annotation.
14967
14968     '-dx'
14969          Just generate RTL for a function instead of compiling it.
14970          Usually used with '-fdump-rtl-expand'.
14971
14972'-fdump-debug'
14973     Dump debugging information generated during the debug generation
14974     phase.
14975
14976'-fdump-earlydebug'
14977     Dump debugging information generated during the early debug
14978     generation phase.
14979
14980'-fdump-noaddr'
14981     When doing debugging dumps, suppress address output.  This makes it
14982     more feasible to use diff on debugging dumps for compiler
14983     invocations with different compiler binaries and/or different text
14984     / bss / data / heap / stack / dso start locations.
14985
14986'-freport-bug'
14987     Collect and dump debug information into a temporary file if an
14988     internal compiler error (ICE) occurs.
14989
14990'-fdump-unnumbered'
14991     When doing debugging dumps, suppress instruction numbers and
14992     address output.  This makes it more feasible to use diff on
14993     debugging dumps for compiler invocations with different options, in
14994     particular with and without '-g'.
14995
14996'-fdump-unnumbered-links'
14997     When doing debugging dumps (see '-d' option above), suppress
14998     instruction numbers for the links to the previous and next
14999     instructions in a sequence.
15000
15001'-fdump-ipa-SWITCH'
15002'-fdump-ipa-SWITCH-OPTIONS'
15003     Control the dumping at various stages of inter-procedural analysis
15004     language tree to a file.  The file name is generated by appending a
15005     switch specific suffix to the source file name, and the file is
15006     created in the same directory as the output file.  The following
15007     dumps are possible:
15008
15009     'all'
15010          Enables all inter-procedural analysis dumps.
15011
15012     'cgraph'
15013          Dumps information about call-graph optimization, unused
15014          function removal, and inlining decisions.
15015
15016     'inline'
15017          Dump after function inlining.
15018
15019     Additionally, the options '-optimized', '-missed', '-note', and
15020     '-all' can be provided, with the same meaning as for '-fopt-info',
15021     defaulting to '-optimized'.
15022
15023     For example, '-fdump-ipa-inline-optimized-missed' will emit
15024     information on callsites that were inlined, along with callsites
15025     that were not inlined.
15026
15027     By default, the dump will contain messages about successful
15028     optimizations (equivalent to '-optimized') together with low-level
15029     details about the analysis.
15030
15031'-fdump-lang-all'
15032'-fdump-lang-SWITCH'
15033'-fdump-lang-SWITCH-OPTIONS'
15034'-fdump-lang-SWITCH-OPTIONS=FILENAME'
15035     Control the dumping of language-specific information.  The OPTIONS
15036     and FILENAME portions behave as described in the '-fdump-tree'
15037     option.  The following SWITCH values are accepted:
15038
15039     'all'
15040
15041          Enable all language-specific dumps.
15042
15043     'class'
15044          Dump class hierarchy information.  Virtual table information
15045          is emitted unless ''slim'' is specified.  This option is
15046          applicable to C++ only.
15047
15048     'raw'
15049          Dump the raw internal tree data.  This option is applicable to
15050          C++ only.
15051
15052'-fdump-passes'
15053     Print on 'stderr' the list of optimization passes that are turned
15054     on and off by the current command-line options.
15055
15056'-fdump-statistics-OPTION'
15057     Enable and control dumping of pass statistics in a separate file.
15058     The file name is generated by appending a suffix ending in
15059     '.statistics' to the source file name, and the file is created in
15060     the same directory as the output file.  If the '-OPTION' form is
15061     used, '-stats' causes counters to be summed over the whole
15062     compilation unit while '-details' dumps every event as the passes
15063     generate them.  The default with no option is to sum counters for
15064     each function compiled.
15065
15066'-fdump-tree-all'
15067'-fdump-tree-SWITCH'
15068'-fdump-tree-SWITCH-OPTIONS'
15069'-fdump-tree-SWITCH-OPTIONS=FILENAME'
15070     Control the dumping at various stages of processing the
15071     intermediate language tree to a file.  If the '-OPTIONS' form is
15072     used, OPTIONS is a list of '-' separated options which control the
15073     details of the dump.  Not all options are applicable to all dumps;
15074     those that are not meaningful are ignored.  The following options
15075     are available
15076
15077     'address'
15078          Print the address of each node.  Usually this is not
15079          meaningful as it changes according to the environment and
15080          source file.  Its primary use is for tying up a dump file with
15081          a debug environment.
15082     'asmname'
15083          If 'DECL_ASSEMBLER_NAME' has been set for a given decl, use
15084          that in the dump instead of 'DECL_NAME'.  Its primary use is
15085          ease of use working backward from mangled names in the
15086          assembly file.
15087     'slim'
15088          When dumping front-end intermediate representations, inhibit
15089          dumping of members of a scope or body of a function merely
15090          because that scope has been reached.  Only dump such items
15091          when they are directly reachable by some other path.
15092
15093          When dumping pretty-printed trees, this option inhibits
15094          dumping the bodies of control structures.
15095
15096          When dumping RTL, print the RTL in slim (condensed) form
15097          instead of the default LISP-like representation.
15098     'raw'
15099          Print a raw representation of the tree.  By default, trees are
15100          pretty-printed into a C-like representation.
15101     'details'
15102          Enable more detailed dumps (not honored by every dump option).
15103          Also include information from the optimization passes.
15104     'stats'
15105          Enable dumping various statistics about the pass (not honored
15106          by every dump option).
15107     'blocks'
15108          Enable showing basic block boundaries (disabled in raw dumps).
15109     'graph'
15110          For each of the other indicated dump files
15111          ('-fdump-rtl-PASS'), dump a representation of the control flow
15112          graph suitable for viewing with GraphViz to
15113          'FILE.PASSID.PASS.dot'.  Each function in the file is
15114          pretty-printed as a subgraph, so that GraphViz can render them
15115          all in a single plot.
15116
15117          This option currently only works for RTL dumps, and the RTL is
15118          always dumped in slim form.
15119     'vops'
15120          Enable showing virtual operands for every statement.
15121     'lineno'
15122          Enable showing line numbers for statements.
15123     'uid'
15124          Enable showing the unique ID ('DECL_UID') for each variable.
15125     'verbose'
15126          Enable showing the tree dump for each statement.
15127     'eh'
15128          Enable showing the EH region number holding each statement.
15129     'scev'
15130          Enable showing scalar evolution analysis details.
15131     'optimized'
15132          Enable showing optimization information (only available in
15133          certain passes).
15134     'missed'
15135          Enable showing missed optimization information (only available
15136          in certain passes).
15137     'note'
15138          Enable other detailed optimization information (only available
15139          in certain passes).
15140     'all'
15141          Turn on all options, except 'raw', 'slim', 'verbose' and
15142          'lineno'.
15143     'optall'
15144          Turn on all optimization options, i.e., 'optimized', 'missed',
15145          and 'note'.
15146
15147     To determine what tree dumps are available or find the dump for a
15148     pass of interest follow the steps below.
15149
15150       1. Invoke GCC with '-fdump-passes' and in the 'stderr' output
15151          look for a code that corresponds to the pass you are
15152          interested in.  For example, the codes 'tree-evrp',
15153          'tree-vrp1', and 'tree-vrp2' correspond to the three Value
15154          Range Propagation passes.  The number at the end distinguishes
15155          distinct invocations of the same pass.
15156       2. To enable the creation of the dump file, append the pass code
15157          to the '-fdump-' option prefix and invoke GCC with it.  For
15158          example, to enable the dump from the Early Value Range
15159          Propagation pass, invoke GCC with the '-fdump-tree-evrp'
15160          option.  Optionally, you may specify the name of the dump
15161          file.  If you don't specify one, GCC creates as described
15162          below.
15163       3. Find the pass dump in a file whose name is composed of three
15164          components separated by a period: the name of the source file
15165          GCC was invoked to compile, a numeric suffix indicating the
15166          pass number followed by the letter 't' for tree passes (and
15167          the letter 'r' for RTL passes), and finally the pass code.
15168          For example, the Early VRP pass dump might be in a file named
15169          'myfile.c.038t.evrp' in the current working directory.  Note
15170          that the numeric codes are not stable and may change from one
15171          version of GCC to another.
15172
15173'-fopt-info'
15174'-fopt-info-OPTIONS'
15175'-fopt-info-OPTIONS=FILENAME'
15176     Controls optimization dumps from various optimization passes.  If
15177     the '-OPTIONS' form is used, OPTIONS is a list of '-' separated
15178     option keywords to select the dump details and optimizations.
15179
15180     The OPTIONS can be divided into three groups:
15181       1. options describing what kinds of messages should be emitted,
15182       2. options describing the verbosity of the dump, and
15183       3. options describing which optimizations should be included.
15184     The options from each group can be freely mixed as they are
15185     non-overlapping.  However, in case of any conflicts, the later
15186     options override the earlier options on the command line.
15187
15188     The following options control which kinds of messages should be
15189     emitted:
15190
15191     'optimized'
15192          Print information when an optimization is successfully
15193          applied.  It is up to a pass to decide which information is
15194          relevant.  For example, the vectorizer passes print the source
15195          location of loops which are successfully vectorized.
15196     'missed'
15197          Print information about missed optimizations.  Individual
15198          passes control which information to include in the output.
15199     'note'
15200          Print verbose information about optimizations, such as certain
15201          transformations, more detailed messages about decisions etc.
15202     'all'
15203          Print detailed optimization information.  This includes
15204          'optimized', 'missed', and 'note'.
15205
15206     The following option controls the dump verbosity:
15207
15208     'internals'
15209          By default, only "high-level" messages are emitted.  This
15210          option enables additional, more detailed, messages, which are
15211          likely to only be of interest to GCC developers.
15212
15213     One or more of the following option keywords can be used to
15214     describe a group of optimizations:
15215
15216     'ipa'
15217          Enable dumps from all interprocedural optimizations.
15218     'loop'
15219          Enable dumps from all loop optimizations.
15220     'inline'
15221          Enable dumps from all inlining optimizations.
15222     'omp'
15223          Enable dumps from all OMP (Offloading and Multi Processing)
15224          optimizations.
15225     'vec'
15226          Enable dumps from all vectorization optimizations.
15227     'optall'
15228          Enable dumps from all optimizations.  This is a superset of
15229          the optimization groups listed above.
15230
15231     If OPTIONS is omitted, it defaults to 'optimized-optall', which
15232     means to dump messages about successful optimizations from all the
15233     passes, omitting messages that are treated as "internals".
15234
15235     If the FILENAME is provided, then the dumps from all the applicable
15236     optimizations are concatenated into the FILENAME.  Otherwise the
15237     dump is output onto 'stderr'.  Though multiple '-fopt-info' options
15238     are accepted, only one of them can include a FILENAME.  If other
15239     filenames are provided then all but the first such option are
15240     ignored.
15241
15242     Note that the output FILENAME is overwritten in case of multiple
15243     translation units.  If a combined output from multiple translation
15244     units is desired, 'stderr' should be used instead.
15245
15246     In the following example, the optimization info is output to
15247     'stderr':
15248
15249          gcc -O3 -fopt-info
15250
15251     This example:
15252          gcc -O3 -fopt-info-missed=missed.all
15253
15254     outputs missed optimization report from all the passes into
15255     'missed.all', and this one:
15256
15257          gcc -O2 -ftree-vectorize -fopt-info-vec-missed
15258
15259     prints information about missed optimization opportunities from
15260     vectorization passes on 'stderr'.  Note that
15261     '-fopt-info-vec-missed' is equivalent to '-fopt-info-missed-vec'.
15262     The order of the optimization group names and message types listed
15263     after '-fopt-info' does not matter.
15264
15265     As another example,
15266          gcc -O3 -fopt-info-inline-optimized-missed=inline.txt
15267
15268     outputs information about missed optimizations as well as optimized
15269     locations from all the inlining passes into 'inline.txt'.
15270
15271     Finally, consider:
15272
15273          gcc -fopt-info-vec-missed=vec.miss -fopt-info-loop-optimized=loop.opt
15274
15275     Here the two output filenames 'vec.miss' and 'loop.opt' are in
15276     conflict since only one output file is allowed.  In this case, only
15277     the first option takes effect and the subsequent options are
15278     ignored.  Thus only 'vec.miss' is produced which contains dumps
15279     from the vectorizer about missed opportunities.
15280
15281'-fsave-optimization-record'
15282     Write a SRCFILE.opt-record.json.gz file detailing what
15283     optimizations were performed, for those optimizations that support
15284     '-fopt-info'.
15285
15286     This option is experimental and the format of the data within the
15287     compressed JSON file is subject to change.
15288
15289     It is roughly equivalent to a machine-readable version of
15290     '-fopt-info-all', as a collection of messages with source file,
15291     line number and column number, with the following additional data
15292     for each message:
15293
15294        * the execution count of the code being optimized, along with
15295          metadata about whether this was from actual profile data, or
15296          just an estimate, allowing consumers to prioritize messages by
15297          code hotness,
15298
15299        * the function name of the code being optimized, where
15300          applicable,
15301
15302        * the "inlining chain" for the code being optimized, so that
15303          when a function is inlined into several different places
15304          (which might themselves be inlined), the reader can
15305          distinguish between the copies,
15306
15307        * objects identifying those parts of the message that refer to
15308          expressions, statements or symbol-table nodes, which of these
15309          categories they are, and, when available, their source code
15310          location,
15311
15312        * the GCC pass that emitted the message, and
15313
15314        * the location in GCC's own code from which the message was
15315          emitted
15316
15317     Additionally, some messages are logically nested within other
15318     messages, reflecting implementation details of the optimization
15319     passes.
15320
15321'-fsched-verbose=N'
15322     On targets that use instruction scheduling, this option controls
15323     the amount of debugging output the scheduler prints to the dump
15324     files.
15325
15326     For N greater than zero, '-fsched-verbose' outputs the same
15327     information as '-fdump-rtl-sched1' and '-fdump-rtl-sched2'.  For N
15328     greater than one, it also output basic block probabilities,
15329     detailed ready list information and unit/insn info.  For N greater
15330     than two, it includes RTL at abort point, control-flow and regions
15331     info.  And for N over four, '-fsched-verbose' also includes
15332     dependence info.
15333
15334'-fenable-KIND-PASS'
15335'-fdisable-KIND-PASS=RANGE-LIST'
15336
15337     This is a set of options that are used to explicitly disable/enable
15338     optimization passes.  These options are intended for use for
15339     debugging GCC. Compiler users should use regular options for
15340     enabling/disabling passes instead.
15341
15342     '-fdisable-ipa-PASS'
15343          Disable IPA pass PASS.  PASS is the pass name.  If the same
15344          pass is statically invoked in the compiler multiple times, the
15345          pass name should be appended with a sequential number starting
15346          from 1.
15347
15348     '-fdisable-rtl-PASS'
15349     '-fdisable-rtl-PASS=RANGE-LIST'
15350          Disable RTL pass PASS.  PASS is the pass name.  If the same
15351          pass is statically invoked in the compiler multiple times, the
15352          pass name should be appended with a sequential number starting
15353          from 1.  RANGE-LIST is a comma-separated list of function
15354          ranges or assembler names.  Each range is a number pair
15355          separated by a colon.  The range is inclusive in both ends.
15356          If the range is trivial, the number pair can be simplified as
15357          a single number.  If the function's call graph node's UID
15358          falls within one of the specified ranges, the PASS is disabled
15359          for that function.  The UID is shown in the function header of
15360          a dump file, and the pass names can be dumped by using option
15361          '-fdump-passes'.
15362
15363     '-fdisable-tree-PASS'
15364     '-fdisable-tree-PASS=RANGE-LIST'
15365          Disable tree pass PASS.  See '-fdisable-rtl' for the
15366          description of option arguments.
15367
15368     '-fenable-ipa-PASS'
15369          Enable IPA pass PASS.  PASS is the pass name.  If the same
15370          pass is statically invoked in the compiler multiple times, the
15371          pass name should be appended with a sequential number starting
15372          from 1.
15373
15374     '-fenable-rtl-PASS'
15375     '-fenable-rtl-PASS=RANGE-LIST'
15376          Enable RTL pass PASS.  See '-fdisable-rtl' for option argument
15377          description and examples.
15378
15379     '-fenable-tree-PASS'
15380     '-fenable-tree-PASS=RANGE-LIST'
15381          Enable tree pass PASS.  See '-fdisable-rtl' for the
15382          description of option arguments.
15383
15384     Here are some examples showing uses of these options.
15385
15386
15387          # disable ccp1 for all functions
15388             -fdisable-tree-ccp1
15389          # disable complete unroll for function whose cgraph node uid is 1
15390             -fenable-tree-cunroll=1
15391          # disable gcse2 for functions at the following ranges [1,1],
15392          # [300,400], and [400,1000]
15393          # disable gcse2 for functions foo and foo2
15394             -fdisable-rtl-gcse2=foo,foo2
15395          # disable early inlining
15396             -fdisable-tree-einline
15397          # disable ipa inlining
15398             -fdisable-ipa-inline
15399          # enable tree full unroll
15400             -fenable-tree-unroll
15401
15402
15403'-fchecking'
15404'-fchecking=N'
15405     Enable internal consistency checking.  The default depends on the
15406     compiler configuration.  '-fchecking=2' enables further internal
15407     consistency checking that might affect code generation.
15408
15409'-frandom-seed=STRING'
15410     This option provides a seed that GCC uses in place of random
15411     numbers in generating certain symbol names that have to be
15412     different in every compiled file.  It is also used to place unique
15413     stamps in coverage data files and the object files that produce
15414     them.  You can use the '-frandom-seed' option to produce
15415     reproducibly identical object files.
15416
15417     The STRING can either be a number (decimal, octal or hex) or an
15418     arbitrary string (in which case it's converted to a number by
15419     computing CRC32).
15420
15421     The STRING should be different for every file you compile.
15422
15423'-save-temps'
15424'-save-temps=cwd'
15425     Store the usual "temporary" intermediate files permanently; place
15426     them in the current directory and name them based on the source
15427     file.  Thus, compiling 'foo.c' with '-c -save-temps' produces files
15428     'foo.i' and 'foo.s', as well as 'foo.o'.  This creates a
15429     preprocessed 'foo.i' output file even though the compiler now
15430     normally uses an integrated preprocessor.
15431
15432     When used in combination with the '-x' command-line option,
15433     '-save-temps' is sensible enough to avoid over writing an input
15434     source file with the same extension as an intermediate file.  The
15435     corresponding intermediate file may be obtained by renaming the
15436     source file before using '-save-temps'.
15437
15438     If you invoke GCC in parallel, compiling several different source
15439     files that share a common base name in different subdirectories or
15440     the same source file compiled for multiple output destinations, it
15441     is likely that the different parallel compilers will interfere with
15442     each other, and overwrite the temporary files.  For instance:
15443
15444          gcc -save-temps -o outdir1/foo.o indir1/foo.c&
15445          gcc -save-temps -o outdir2/foo.o indir2/foo.c&
15446
15447     may result in 'foo.i' and 'foo.o' being written to simultaneously
15448     by both compilers.
15449
15450'-save-temps=obj'
15451     Store the usual "temporary" intermediate files permanently.  If the
15452     '-o' option is used, the temporary files are based on the object
15453     file.  If the '-o' option is not used, the '-save-temps=obj' switch
15454     behaves like '-save-temps'.
15455
15456     For example:
15457
15458          gcc -save-temps=obj -c foo.c
15459          gcc -save-temps=obj -c bar.c -o dir/xbar.o
15460          gcc -save-temps=obj foobar.c -o dir2/yfoobar
15461
15462     creates 'foo.i', 'foo.s', 'dir/xbar.i', 'dir/xbar.s',
15463     'dir2/yfoobar.i', 'dir2/yfoobar.s', and 'dir2/yfoobar.o'.
15464
15465'-time[=FILE]'
15466     Report the CPU time taken by each subprocess in the compilation
15467     sequence.  For C source files, this is the compiler proper and
15468     assembler (plus the linker if linking is done).
15469
15470     Without the specification of an output file, the output looks like
15471     this:
15472
15473          # cc1 0.12 0.01
15474          # as 0.00 0.01
15475
15476     The first number on each line is the "user time", that is time
15477     spent executing the program itself.  The second number is "system
15478     time", time spent executing operating system routines on behalf of
15479     the program.  Both numbers are in seconds.
15480
15481     With the specification of an output file, the output is appended to
15482     the named file, and it looks like this:
15483
15484          0.12 0.01 cc1 OPTIONS
15485          0.00 0.01 as OPTIONS
15486
15487     The "user time" and the "system time" are moved before the program
15488     name, and the options passed to the program are displayed, so that
15489     one can later tell what file was being compiled, and with which
15490     options.
15491
15492'-fdump-final-insns[=FILE]'
15493     Dump the final internal representation (RTL) to FILE.  If the
15494     optional argument is omitted (or if FILE is '.'), the name of the
15495     dump file is determined by appending '.gkd' to the compilation
15496     output file name.
15497
15498'-fcompare-debug[=OPTS]'
15499     If no error occurs during compilation, run the compiler a second
15500     time, adding OPTS and '-fcompare-debug-second' to the arguments
15501     passed to the second compilation.  Dump the final internal
15502     representation in both compilations, and print an error if they
15503     differ.
15504
15505     If the equal sign is omitted, the default '-gtoggle' is used.
15506
15507     The environment variable 'GCC_COMPARE_DEBUG', if defined, non-empty
15508     and nonzero, implicitly enables '-fcompare-debug'.  If
15509     'GCC_COMPARE_DEBUG' is defined to a string starting with a dash,
15510     then it is used for OPTS, otherwise the default '-gtoggle' is used.
15511
15512     '-fcompare-debug=', with the equal sign but without OPTS, is
15513     equivalent to '-fno-compare-debug', which disables the dumping of
15514     the final representation and the second compilation, preventing
15515     even 'GCC_COMPARE_DEBUG' from taking effect.
15516
15517     To verify full coverage during '-fcompare-debug' testing, set
15518     'GCC_COMPARE_DEBUG' to say '-fcompare-debug-not-overridden', which
15519     GCC rejects as an invalid option in any actual compilation (rather
15520     than preprocessing, assembly or linking).  To get just a warning,
15521     setting 'GCC_COMPARE_DEBUG' to '-w%n-fcompare-debug not overridden'
15522     will do.
15523
15524'-fcompare-debug-second'
15525     This option is implicitly passed to the compiler for the second
15526     compilation requested by '-fcompare-debug', along with options to
15527     silence warnings, and omitting other options that would cause the
15528     compiler to produce output to files or to standard output as a side
15529     effect.  Dump files and preserved temporary files are renamed so as
15530     to contain the '.gk' additional extension during the second
15531     compilation, to avoid overwriting those generated by the first.
15532
15533     When this option is passed to the compiler driver, it causes the
15534     _first_ compilation to be skipped, which makes it useful for little
15535     other than debugging the compiler proper.
15536
15537'-gtoggle'
15538     Turn off generation of debug info, if leaving out this option
15539     generates it, or turn it on at level 2 otherwise.  The position of
15540     this argument in the command line does not matter; it takes effect
15541     after all other options are processed, and it does so only once, no
15542     matter how many times it is given.  This is mainly intended to be
15543     used with '-fcompare-debug'.
15544
15545'-fvar-tracking-assignments-toggle'
15546     Toggle '-fvar-tracking-assignments', in the same way that
15547     '-gtoggle' toggles '-g'.
15548
15549'-Q'
15550     Makes the compiler print out each function name as it is compiled,
15551     and print some statistics about each pass when it finishes.
15552
15553'-ftime-report'
15554     Makes the compiler print some statistics about the time consumed by
15555     each pass when it finishes.
15556
15557'-ftime-report-details'
15558     Record the time consumed by infrastructure parts separately for
15559     each pass.
15560
15561'-fira-verbose=N'
15562     Control the verbosity of the dump file for the integrated register
15563     allocator.  The default value is 5.  If the value N is greater or
15564     equal to 10, the dump output is sent to stderr using the same
15565     format as N minus 10.
15566
15567'-flto-report'
15568     Prints a report with internal details on the workings of the
15569     link-time optimizer.  The contents of this report vary from version
15570     to version.  It is meant to be useful to GCC developers when
15571     processing object files in LTO mode (via '-flto').
15572
15573     Disabled by default.
15574
15575'-flto-report-wpa'
15576     Like '-flto-report', but only print for the WPA phase of link-time
15577     optimization.
15578
15579'-fmem-report'
15580     Makes the compiler print some statistics about permanent memory
15581     allocation when it finishes.
15582
15583'-fmem-report-wpa'
15584     Makes the compiler print some statistics about permanent memory
15585     allocation for the WPA phase only.
15586
15587'-fpre-ipa-mem-report'
15588'-fpost-ipa-mem-report'
15589     Makes the compiler print some statistics about permanent memory
15590     allocation before or after interprocedural optimization.
15591
15592'-fprofile-report'
15593     Makes the compiler print some statistics about consistency of the
15594     (estimated) profile and effect of individual passes.
15595
15596'-fstack-usage'
15597     Makes the compiler output stack usage information for the program,
15598     on a per-function basis.  The filename for the dump is made by
15599     appending '.su' to the AUXNAME.  AUXNAME is generated from the name
15600     of the output file, if explicitly specified and it is not an
15601     executable, otherwise it is the basename of the source file.  An
15602     entry is made up of three fields:
15603
15604        * The name of the function.
15605        * A number of bytes.
15606        * One or more qualifiers: 'static', 'dynamic', 'bounded'.
15607
15608     The qualifier 'static' means that the function manipulates the
15609     stack statically: a fixed number of bytes are allocated for the
15610     frame on function entry and released on function exit; no stack
15611     adjustments are otherwise made in the function.  The second field
15612     is this fixed number of bytes.
15613
15614     The qualifier 'dynamic' means that the function manipulates the
15615     stack dynamically: in addition to the static allocation described
15616     above, stack adjustments are made in the body of the function, for
15617     example to push/pop arguments around function calls.  If the
15618     qualifier 'bounded' is also present, the amount of these
15619     adjustments is bounded at compile time and the second field is an
15620     upper bound of the total amount of stack used by the function.  If
15621     it is not present, the amount of these adjustments is not bounded
15622     at compile time and the second field only represents the bounded
15623     part.
15624
15625'-fstats'
15626     Emit statistics about front-end processing at the end of the
15627     compilation.  This option is supported only by the C++ front end,
15628     and the information is generally only useful to the G++ development
15629     team.
15630
15631'-fdbg-cnt-list'
15632     Print the name and the counter upper bound for all debug counters.
15633
15634'-fdbg-cnt=COUNTER-VALUE-LIST'
15635     Set the internal debug counter lower and upper bound.
15636     COUNTER-VALUE-LIST is a comma-separated list of
15637     NAME:LOWER_BOUND1-UPPER_BOUND1 [:LOWER_BOUND2-UPPER_BOUND2...]
15638     tuples which sets the name of the counter and list of closed
15639     intervals.  The LOWER_BOUND is optional and is zero initialized if
15640     not set.  For example, with '-fdbg-cnt=dce:2-4:10-11,tail_call:10',
15641     'dbg_cnt(dce)' returns true only for second, third, fourth, tenth
15642     and eleventh invocation.  For 'dbg_cnt(tail_call)' true is returned
15643     for first 10 invocations.
15644
15645'-print-file-name=LIBRARY'
15646     Print the full absolute name of the library file LIBRARY that would
15647     be used when linking--and don't do anything else.  With this
15648     option, GCC does not compile or link anything; it just prints the
15649     file name.
15650
15651'-print-multi-directory'
15652     Print the directory name corresponding to the multilib selected by
15653     any other switches present in the command line.  This directory is
15654     supposed to exist in 'GCC_EXEC_PREFIX'.
15655
15656'-print-multi-lib'
15657     Print the mapping from multilib directory names to compiler
15658     switches that enable them.  The directory name is separated from
15659     the switches by ';', and each switch starts with an '@' instead of
15660     the '-', without spaces between multiple switches.  This is
15661     supposed to ease shell processing.
15662
15663'-print-multi-os-directory'
15664     Print the path to OS libraries for the selected multilib, relative
15665     to some 'lib' subdirectory.  If OS libraries are present in the
15666     'lib' subdirectory and no multilibs are used, this is usually just
15667     '.', if OS libraries are present in 'libSUFFIX' sibling directories
15668     this prints e.g. '../lib64', '../lib' or '../lib32', or if OS
15669     libraries are present in 'lib/SUBDIR' subdirectories it prints e.g.
15670     'amd64', 'sparcv9' or 'ev6'.
15671
15672'-print-multiarch'
15673     Print the path to OS libraries for the selected multiarch, relative
15674     to some 'lib' subdirectory.
15675
15676'-print-prog-name=PROGRAM'
15677     Like '-print-file-name', but searches for a program such as 'cpp'.
15678
15679'-print-libgcc-file-name'
15680     Same as '-print-file-name=libgcc.a'.
15681
15682     This is useful when you use '-nostdlib' or '-nodefaultlibs' but you
15683     do want to link with 'libgcc.a'.  You can do:
15684
15685          gcc -nostdlib FILES... `gcc -print-libgcc-file-name`
15686
15687'-print-search-dirs'
15688     Print the name of the configured installation directory and a list
15689     of program and library directories 'gcc' searches--and don't do
15690     anything else.
15691
15692     This is useful when 'gcc' prints the error message 'installation
15693     problem, cannot exec cpp0: No such file or directory'.  To resolve
15694     this you either need to put 'cpp0' and the other compiler
15695     components where 'gcc' expects to find them, or you can set the
15696     environment variable 'GCC_EXEC_PREFIX' to the directory where you
15697     installed them.  Don't forget the trailing '/'.  *Note Environment
15698     Variables::.
15699
15700'-print-sysroot'
15701     Print the target sysroot directory that is used during compilation.
15702     This is the target sysroot specified either at configure time or
15703     using the '--sysroot' option, possibly with an extra suffix that
15704     depends on compilation options.  If no target sysroot is specified,
15705     the option prints nothing.
15706
15707'-print-sysroot-headers-suffix'
15708     Print the suffix added to the target sysroot when searching for
15709     headers, or give an error if the compiler is not configured with
15710     such a suffix--and don't do anything else.
15711
15712'-dumpmachine'
15713     Print the compiler's target machine (for example,
15714     'i686-pc-linux-gnu')--and don't do anything else.
15715
15716'-dumpversion'
15717     Print the compiler version (for example, '3.0', '6.3.0' or
15718     '7')--and don't do anything else.  This is the compiler version
15719     used in filesystem paths and specs.  Depending on how the compiler
15720     has been configured it can be just a single number (major version),
15721     two numbers separated by a dot (major and minor version) or three
15722     numbers separated by dots (major, minor and patchlevel version).
15723
15724'-dumpfullversion'
15725     Print the full compiler version--and don't do anything else.  The
15726     output is always three numbers separated by dots, major, minor and
15727     patchlevel version.
15728
15729'-dumpspecs'
15730     Print the compiler's built-in specs--and don't do anything else.
15731     (This is used when GCC itself is being built.)  *Note Spec Files::.
15732
15733
15734File: gcc.info,  Node: Submodel Options,  Next: Spec Files,  Prev: Developer Options,  Up: Invoking GCC
15735
157363.19 Machine-Dependent Options
15737==============================
15738
15739Each target machine supported by GCC can have its own options--for
15740example, to allow you to compile for a particular processor variant or
15741ABI, or to control optimizations specific to that machine.  By
15742convention, the names of machine-specific options start with '-m'.
15743
15744 Some configurations of the compiler also support additional
15745target-specific options, usually for compatibility with other compilers
15746on the same platform.
15747
15748* Menu:
15749
15750* AArch64 Options::
15751* Adapteva Epiphany Options::
15752* AMD GCN Options::
15753* ARC Options::
15754* ARM Options::
15755* AVR Options::
15756* Blackfin Options::
15757* C6X Options::
15758* CRIS Options::
15759* CR16 Options::
15760* C-SKY Options::
15761* Darwin Options::
15762* DEC Alpha Options::
15763* eBPF Options::
15764* FR30 Options::
15765* FT32 Options::
15766* FRV Options::
15767* GNU/Linux Options::
15768* H8/300 Options::
15769* HPPA Options::
15770* IA-64 Options::
15771* LM32 Options::
15772* M32C Options::
15773* M32R/D Options::
15774* M680x0 Options::
15775* MCore Options::
15776* MeP Options::
15777* MicroBlaze Options::
15778* MIPS Options::
15779* MMIX Options::
15780* MN10300 Options::
15781* Moxie Options::
15782* MSP430 Options::
15783* NDS32 Options::
15784* Nios II Options::
15785* Nvidia PTX Options::
15786* OpenRISC Options::
15787* PDP-11 Options::
15788* picoChip Options::
15789* PowerPC Options::
15790* PRU Options::
15791* RISC-V Options::
15792* RL78 Options::
15793* RS/6000 and PowerPC Options::
15794* RX Options::
15795* S/390 and zSeries Options::
15796* Score Options::
15797* SH Options::
15798* Solaris 2 Options::
15799* SPARC Options::
15800* System V Options::
15801* TILE-Gx Options::
15802* TILEPro Options::
15803* V850 Options::
15804* VAX Options::
15805* Visium Options::
15806* VMS Options::
15807* VxWorks Options::
15808* x86 Options::
15809* x86 Windows Options::
15810* Xstormy16 Options::
15811* Xtensa Options::
15812* zSeries Options::
15813
15814
15815File: gcc.info,  Node: AArch64 Options,  Next: Adapteva Epiphany Options,  Up: Submodel Options
15816
158173.19.1 AArch64 Options
15818----------------------
15819
15820These options are defined for AArch64 implementations:
15821
15822'-mabi=NAME'
15823     Generate code for the specified data model.  Permissible values are
15824     'ilp32' for SysV-like data model where int, long int and pointers
15825     are 32 bits, and 'lp64' for SysV-like data model where int is 32
15826     bits, but long int and pointers are 64 bits.
15827
15828     The default depends on the specific target configuration.  Note
15829     that the LP64 and ILP32 ABIs are not link-compatible; you must
15830     compile your entire program with the same ABI, and link with a
15831     compatible set of libraries.
15832
15833'-mbig-endian'
15834     Generate big-endian code.  This is the default when GCC is
15835     configured for an 'aarch64_be-*-*' target.
15836
15837'-mgeneral-regs-only'
15838     Generate code which uses only the general-purpose registers.  This
15839     will prevent the compiler from using floating-point and Advanced
15840     SIMD registers but will not impose any restrictions on the
15841     assembler.
15842
15843'-mlittle-endian'
15844     Generate little-endian code.  This is the default when GCC is
15845     configured for an 'aarch64-*-*' but not an 'aarch64_be-*-*' target.
15846
15847'-mcmodel=tiny'
15848     Generate code for the tiny code model.  The program and its
15849     statically defined symbols must be within 1MB of each other.
15850     Programs can be statically or dynamically linked.
15851
15852'-mcmodel=small'
15853     Generate code for the small code model.  The program and its
15854     statically defined symbols must be within 4GB of each other.
15855     Programs can be statically or dynamically linked.  This is the
15856     default code model.
15857
15858'-mcmodel=large'
15859     Generate code for the large code model.  This makes no assumptions
15860     about addresses and sizes of sections.  Programs can be statically
15861     linked only.  The '-mcmodel=large' option is incompatible with
15862     '-mabi=ilp32', '-fpic' and '-fPIC'.
15863
15864'-mstrict-align'
15865'-mno-strict-align'
15866     Avoid or allow generating memory accesses that may not be aligned
15867     on a natural object boundary as described in the architecture
15868     specification.
15869
15870'-momit-leaf-frame-pointer'
15871'-mno-omit-leaf-frame-pointer'
15872     Omit or keep the frame pointer in leaf functions.  The former
15873     behavior is the default.
15874
15875'-mstack-protector-guard=GUARD'
15876'-mstack-protector-guard-reg=REG'
15877'-mstack-protector-guard-offset=OFFSET'
15878     Generate stack protection code using canary at GUARD.  Supported
15879     locations are 'global' for a global canary or 'sysreg' for a canary
15880     in an appropriate system register.
15881
15882     With the latter choice the options
15883     '-mstack-protector-guard-reg=REG' and
15884     '-mstack-protector-guard-offset=OFFSET' furthermore specify which
15885     system register to use as base register for reading the canary, and
15886     from what offset from that base register.  There is no default
15887     register or offset as this is entirely for use within the Linux
15888     kernel.
15889
15890'-mstack-protector-guard=GUARD'
15891'-mstack-protector-guard-reg=REG'
15892'-mstack-protector-guard-offset=OFFSET'
15893     Generate stack protection code using canary at GUARD.  Supported
15894     locations are 'global' for a global canary or 'sysreg' for a canary
15895     in an appropriate system register.
15896
15897     With the latter choice the options
15898     '-mstack-protector-guard-reg=REG' and
15899     '-mstack-protector-guard-offset=OFFSET' furthermore specify which
15900     system register to use as base register for reading the canary, and
15901     from what offset from that base register.  There is no default
15902     register or offset as this is entirely for use within the Linux
15903     kernel.
15904
15905'-mtls-dialect=desc'
15906     Use TLS descriptors as the thread-local storage mechanism for
15907     dynamic accesses of TLS variables.  This is the default.
15908
15909'-mtls-dialect=traditional'
15910     Use traditional TLS as the thread-local storage mechanism for
15911     dynamic accesses of TLS variables.
15912
15913'-mtls-size=SIZE'
15914     Specify bit size of immediate TLS offsets.  Valid values are 12,
15915     24, 32, 48.  This option requires binutils 2.26 or newer.
15916
15917'-mfix-cortex-a53-835769'
15918'-mno-fix-cortex-a53-835769'
15919     Enable or disable the workaround for the ARM Cortex-A53 erratum
15920     number 835769.  This involves inserting a NOP instruction between
15921     memory instructions and 64-bit integer multiply-accumulate
15922     instructions.
15923
15924'-mfix-cortex-a53-843419'
15925'-mno-fix-cortex-a53-843419'
15926     Enable or disable the workaround for the ARM Cortex-A53 erratum
15927     number 843419.  This erratum workaround is made at link time and
15928     this will only pass the corresponding flag to the linker.
15929
15930'-mlow-precision-recip-sqrt'
15931'-mno-low-precision-recip-sqrt'
15932     Enable or disable the reciprocal square root approximation.  This
15933     option only has an effect if '-ffast-math' or
15934     '-funsafe-math-optimizations' is used as well.  Enabling this
15935     reduces precision of reciprocal square root results to about 16
15936     bits for single precision and to 32 bits for double precision.
15937
15938'-mlow-precision-sqrt'
15939'-mno-low-precision-sqrt'
15940     Enable or disable the square root approximation.  This option only
15941     has an effect if '-ffast-math' or '-funsafe-math-optimizations' is
15942     used as well.  Enabling this reduces precision of square root
15943     results to about 16 bits for single precision and to 32 bits for
15944     double precision.  If enabled, it implies
15945     '-mlow-precision-recip-sqrt'.
15946
15947'-mlow-precision-div'
15948'-mno-low-precision-div'
15949     Enable or disable the division approximation.  This option only has
15950     an effect if '-ffast-math' or '-funsafe-math-optimizations' is used
15951     as well.  Enabling this reduces precision of division results to
15952     about 16 bits for single precision and to 32 bits for double
15953     precision.
15954
15955'-mtrack-speculation'
15956'-mno-track-speculation'
15957     Enable or disable generation of additional code to track
15958     speculative execution through conditional branches.  The tracking
15959     state can then be used by the compiler when expanding calls to
15960     '__builtin_speculation_safe_copy' to permit a more efficient code
15961     sequence to be generated.
15962
15963'-moutline-atomics'
15964'-mno-outline-atomics'
15965     Enable or disable calls to out-of-line helpers to implement atomic
15966     operations.  These helpers will, at runtime, determine if the LSE
15967     instructions from ARMv8.1-A can be used; if not, they will use the
15968     load/store-exclusive instructions that are present in the base
15969     ARMv8.0 ISA.
15970
15971     This option is only applicable when compiling for the base ARMv8.0
15972     instruction set.  If using a later revision, e.g.
15973     '-march=armv8.1-a' or '-march=armv8-a+lse', the ARMv8.1-Atomics
15974     instructions will be used directly.  The same applies when using
15975     '-mcpu=' when the selected cpu supports the 'lse' feature.  This
15976     option is on by default.
15977
15978'-march=NAME'
15979     Specify the name of the target architecture and, optionally, one or
15980     more feature modifiers.  This option has the form
15981     '-march=ARCH{+[no]FEATURE}*'.
15982
15983     The table below summarizes the permissible values for ARCH and the
15984     features that they enable by default:
15985
15986     ARCH value     Architecture   Includes by default
15987     --------------------------------------------------------------------------
15988     'armv8-a'      Armv8-A        '+fp', '+simd'
15989     'armv8.1-a'    Armv8.1-A      'armv8-a', '+crc', '+lse', '+rdma'
15990     'armv8.2-a'    Armv8.2-A      'armv8.1-a'
15991     'armv8.3-a'    Armv8.3-A      'armv8.2-a'
15992     'armv8.4-a'    Armv8.4-A      'armv8.3-a', '+fp16fml', '+dotprod'
15993     'armv8.5-a'    Armv8.5-A      'armv8.4-a', '+sb', '+ssbs', '+predres'
15994     'armv8.6-a'    Armv8.6-A      'armv8.5-a', '+bf16', '+i8mm'
15995
15996     The value 'native' is available on native AArch64 GNU/Linux and
15997     causes the compiler to pick the architecture of the host system.
15998     This option has no effect if the compiler is unable to recognize
15999     the architecture of the host system,
16000
16001     The permissible values for FEATURE are listed in the sub-section on
16002     *note '-march' and '-mcpu' Feature Modifiers:
16003     aarch64-feature-modifiers.  Where conflicting feature modifiers are
16004     specified, the right-most feature is used.
16005
16006     GCC uses NAME to determine what kind of instructions it can emit
16007     when generating assembly code.  If '-march' is specified without
16008     either of '-mtune' or '-mcpu' also being specified, the code is
16009     tuned to perform well across a range of target processors
16010     implementing the target architecture.
16011
16012'-mtune=NAME'
16013     Specify the name of the target processor for which GCC should tune
16014     the performance of the code.  Permissible values for this option
16015     are: 'generic', 'cortex-a35', 'cortex-a53', 'cortex-a55',
16016     'cortex-a57', 'cortex-a72', 'cortex-a73', 'cortex-a75',
16017     'cortex-a76', 'cortex-a76ae', 'cortex-a77', 'cortex-a65',
16018     'cortex-a65ae', 'cortex-a34', 'ares', 'exynos-m1', 'emag',
16019     'falkor', 'neoverse-e1','neoverse-n1','qdf24xx', 'saphira',
16020     'phecda', 'xgene1', 'vulcan', 'octeontx', 'octeontx81',
16021     'octeontx83', 'octeontx2', 'octeontx2t98', 'octeontx2t96'
16022     'octeontx2t93', 'octeontx2f95', 'octeontx2f95n', 'octeontx2f95mm'
16023     'thunderx', 'thunderxt88', 'thunderxt88p1', 'thunderxt81',
16024     'tsv110', 'thunderxt83', 'thunderx2t99', 'thunderx3t110', 'zeus',
16025     'cortex-a57.cortex-a53', 'cortex-a72.cortex-a53',
16026     'cortex-a73.cortex-a35', 'cortex-a73.cortex-a53',
16027     'cortex-a75.cortex-a55', 'cortex-a76.cortex-a55' 'native'.
16028
16029     The values 'cortex-a57.cortex-a53', 'cortex-a72.cortex-a53',
16030     'cortex-a73.cortex-a35', 'cortex-a73.cortex-a53',
16031     'cortex-a75.cortex-a55', 'cortex-a76.cortex-a55' specify that GCC
16032     should tune for a big.LITTLE system.
16033
16034     Additionally on native AArch64 GNU/Linux systems the value 'native'
16035     tunes performance to the host system.  This option has no effect if
16036     the compiler is unable to recognize the processor of the host
16037     system.
16038
16039     Where none of '-mtune=', '-mcpu=' or '-march=' are specified, the
16040     code is tuned to perform well across a range of target processors.
16041
16042     This option cannot be suffixed by feature modifiers.
16043
16044'-mcpu=NAME'
16045     Specify the name of the target processor, optionally suffixed by
16046     one or more feature modifiers.  This option has the form
16047     '-mcpu=CPU{+[no]FEATURE}*', where the permissible values for CPU
16048     are the same as those available for '-mtune'.  The permissible
16049     values for FEATURE are documented in the sub-section on *note
16050     '-march' and '-mcpu' Feature Modifiers: aarch64-feature-modifiers.
16051     Where conflicting feature modifiers are specified, the right-most
16052     feature is used.
16053
16054     GCC uses NAME to determine what kind of instructions it can emit
16055     when generating assembly code (as if by '-march') and to determine
16056     the target processor for which to tune for performance (as if by
16057     '-mtune').  Where this option is used in conjunction with '-march'
16058     or '-mtune', those options take precedence over the appropriate
16059     part of this option.
16060
16061'-moverride=STRING'
16062     Override tuning decisions made by the back-end in response to a
16063     '-mtune=' switch.  The syntax, semantics, and accepted values for
16064     STRING in this option are not guaranteed to be consistent across
16065     releases.
16066
16067     This option is only intended to be useful when developing GCC.
16068
16069'-mverbose-cost-dump'
16070     Enable verbose cost model dumping in the debug dump files.  This
16071     option is provided for use in debugging the compiler.
16072
16073'-mpc-relative-literal-loads'
16074'-mno-pc-relative-literal-loads'
16075     Enable or disable PC-relative literal loads.  With this option
16076     literal pools are accessed using a single instruction and emitted
16077     after each function.  This limits the maximum size of functions to
16078     1MB. This is enabled by default for '-mcmodel=tiny'.
16079
16080'-msign-return-address=SCOPE'
16081     Select the function scope on which return address signing will be
16082     applied.  Permissible values are 'none', which disables return
16083     address signing, 'non-leaf', which enables pointer signing for
16084     functions which are not leaf functions, and 'all', which enables
16085     pointer signing for all functions.  The default value is 'none'.
16086     This option has been deprecated by -mbranch-protection.
16087
16088'-mbranch-protection=NONE|STANDARD|PAC-RET[+LEAF+B-KEY]|BTI'
16089     Select the branch protection features to use.  'none' is the
16090     default and turns off all types of branch protection.  'standard'
16091     turns on all types of branch protection features.  If a feature has
16092     additional tuning options, then 'standard' sets it to its standard
16093     level.  'pac-ret[+LEAF]' turns on return address signing to its
16094     standard level: signing functions that save the return address to
16095     memory (non-leaf functions will practically always do this) using
16096     the a-key.  The optional argument 'leaf' can be used to extend the
16097     signing to include leaf functions.  The optional argument 'b-key'
16098     can be used to sign the functions with the B-key instead of the
16099     A-key.  'bti' turns on branch target identification mechanism.
16100
16101'-msve-vector-bits=BITS'
16102     Specify the number of bits in an SVE vector register.  This option
16103     only has an effect when SVE is enabled.
16104
16105     GCC supports two forms of SVE code generation: "vector-length
16106     agnostic" output that works with any size of vector register and
16107     "vector-length specific" output that allows GCC to make assumptions
16108     about the vector length when it is useful for optimization reasons.
16109     The possible values of 'bits' are: 'scalable', '128', '256', '512',
16110     '1024' and '2048'.  Specifying 'scalable' selects vector-length
16111     agnostic output.  At present '-msve-vector-bits=128' also generates
16112     vector-length agnostic output for big-endian targets.  All other
16113     values generate vector-length specific code.  The behavior of these
16114     values may change in future releases and no value except 'scalable'
16115     should be relied on for producing code that is portable across
16116     different hardware SVE vector lengths.
16117
16118     The default is '-msve-vector-bits=scalable', which produces
16119     vector-length agnostic code.
16120
161213.19.1.1 '-march' and '-mcpu' Feature Modifiers
16122...............................................
16123
16124Feature modifiers used with '-march' and '-mcpu' can be any of the
16125following and their inverses 'noFEATURE':
16126
16127'crc'
16128     Enable CRC extension.  This is on by default for
16129     '-march=armv8.1-a'.
16130'crypto'
16131     Enable Crypto extension.  This also enables Advanced SIMD and
16132     floating-point instructions.
16133'fp'
16134     Enable floating-point instructions.  This is on by default for all
16135     possible values for options '-march' and '-mcpu'.
16136'simd'
16137     Enable Advanced SIMD instructions.  This also enables
16138     floating-point instructions.  This is on by default for all
16139     possible values for options '-march' and '-mcpu'.
16140'sve'
16141     Enable Scalable Vector Extension instructions.  This also enables
16142     Advanced SIMD and floating-point instructions.
16143'lse'
16144     Enable Large System Extension instructions.  This is on by default
16145     for '-march=armv8.1-a'.
16146'rdma'
16147     Enable Round Double Multiply Accumulate instructions.  This is on
16148     by default for '-march=armv8.1-a'.
16149'fp16'
16150     Enable FP16 extension.  This also enables floating-point
16151     instructions.
16152'fp16fml'
16153     Enable FP16 fmla extension.  This also enables FP16 extensions and
16154     floating-point instructions.  This option is enabled by default for
16155     '-march=armv8.4-a'.  Use of this option with architectures prior to
16156     Armv8.2-A is not supported.
16157
16158'rcpc'
16159     Enable the RcPc extension.  This does not change code generation
16160     from GCC, but is passed on to the assembler, enabling inline asm
16161     statements to use instructions from the RcPc extension.
16162'dotprod'
16163     Enable the Dot Product extension.  This also enables Advanced SIMD
16164     instructions.
16165'aes'
16166     Enable the Armv8-a aes and pmull crypto extension.  This also
16167     enables Advanced SIMD instructions.
16168'sha2'
16169     Enable the Armv8-a sha2 crypto extension.  This also enables
16170     Advanced SIMD instructions.
16171'sha3'
16172     Enable the sha512 and sha3 crypto extension.  This also enables
16173     Advanced SIMD instructions.  Use of this option with architectures
16174     prior to Armv8.2-A is not supported.
16175'sm4'
16176     Enable the sm3 and sm4 crypto extension.  This also enables
16177     Advanced SIMD instructions.  Use of this option with architectures
16178     prior to Armv8.2-A is not supported.
16179'profile'
16180     Enable the Statistical Profiling extension.  This option is only to
16181     enable the extension at the assembler level and does not affect
16182     code generation.
16183'rng'
16184     Enable the Armv8.5-a Random Number instructions.  This option is
16185     only to enable the extension at the assembler level and does not
16186     affect code generation.
16187'memtag'
16188     Enable the Armv8.5-a Memory Tagging Extensions.  Use of this option
16189     with architectures prior to Armv8.5-A is not supported.
16190'sb'
16191     Enable the Armv8-a Speculation Barrier instruction.  This option is
16192     only to enable the extension at the assembler level and does not
16193     affect code generation.  This option is enabled by default for
16194     '-march=armv8.5-a'.
16195'ssbs'
16196     Enable the Armv8-a Speculative Store Bypass Safe instruction.  This
16197     option is only to enable the extension at the assembler level and
16198     does not affect code generation.  This option is enabled by default
16199     for '-march=armv8.5-a'.
16200'predres'
16201     Enable the Armv8-a Execution and Data Prediction Restriction
16202     instructions.  This option is only to enable the extension at the
16203     assembler level and does not affect code generation.  This option
16204     is enabled by default for '-march=armv8.5-a'.
16205'sve2'
16206     Enable the Armv8-a Scalable Vector Extension 2.  This also enables
16207     SVE instructions.
16208'sve2-bitperm'
16209     Enable SVE2 bitperm instructions.  This also enables SVE2
16210     instructions.
16211'sve2-sm4'
16212     Enable SVE2 sm4 instructions.  This also enables SVE2 instructions.
16213'sve2-aes'
16214     Enable SVE2 aes instructions.  This also enables SVE2 instructions.
16215'sve2-sha3'
16216     Enable SVE2 sha3 instructions.  This also enables SVE2
16217     instructions.
16218'tme'
16219     Enable the Transactional Memory Extension.
16220'i8mm'
16221     Enable 8-bit Integer Matrix Multiply instructions.  This also
16222     enables Advanced SIMD and floating-point instructions.  This option
16223     is enabled by default for '-march=armv8.6-a'.  Use of this option
16224     with architectures prior to Armv8.2-A is not supported.
16225'f32mm'
16226     Enable 32-bit Floating point Matrix Multiply instructions.  This
16227     also enables SVE instructions.  Use of this option with
16228     architectures prior to Armv8.2-A is not supported.
16229'f64mm'
16230     Enable 64-bit Floating point Matrix Multiply instructions.  This
16231     also enables SVE instructions.  Use of this option with
16232     architectures prior to Armv8.2-A is not supported.
16233'bf16'
16234     Enable brain half-precision floating-point instructions.  This also
16235     enables Advanced SIMD and floating-point instructions.  This option
16236     is enabled by default for '-march=armv8.6-a'.  Use of this option
16237     with architectures prior to Armv8.2-A is not supported.
16238
16239 Feature 'crypto' implies 'aes', 'sha2', and 'simd', which implies 'fp'.
16240Conversely, 'nofp' implies 'nosimd', which implies 'nocrypto', 'noaes'
16241and 'nosha2'.
16242
16243
16244File: gcc.info,  Node: Adapteva Epiphany Options,  Next: AMD GCN Options,  Prev: AArch64 Options,  Up: Submodel Options
16245
162463.19.2 Adapteva Epiphany Options
16247--------------------------------
16248
16249These '-m' options are defined for Adapteva Epiphany:
16250
16251'-mhalf-reg-file'
16252     Don't allocate any register in the range 'r32'...'r63'.  That
16253     allows code to run on hardware variants that lack these registers.
16254
16255'-mprefer-short-insn-regs'
16256     Preferentially allocate registers that allow short instruction
16257     generation.  This can result in increased instruction count, so
16258     this may either reduce or increase overall code size.
16259
16260'-mbranch-cost=NUM'
16261     Set the cost of branches to roughly NUM "simple" instructions.
16262     This cost is only a heuristic and is not guaranteed to produce
16263     consistent results across releases.
16264
16265'-mcmove'
16266     Enable the generation of conditional moves.
16267
16268'-mnops=NUM'
16269     Emit NUM NOPs before every other generated instruction.
16270
16271'-mno-soft-cmpsf'
16272     For single-precision floating-point comparisons, emit an 'fsub'
16273     instruction and test the flags.  This is faster than a software
16274     comparison, but can get incorrect results in the presence of NaNs,
16275     or when two different small numbers are compared such that their
16276     difference is calculated as zero.  The default is '-msoft-cmpsf',
16277     which uses slower, but IEEE-compliant, software comparisons.
16278
16279'-mstack-offset=NUM'
16280     Set the offset between the top of the stack and the stack pointer.
16281     E.g., a value of 8 means that the eight bytes in the range
16282     'sp+0...sp+7' can be used by leaf functions without stack
16283     allocation.  Values other than '8' or '16' are untested and
16284     unlikely to work.  Note also that this option changes the ABI;
16285     compiling a program with a different stack offset than the
16286     libraries have been compiled with generally does not work.  This
16287     option can be useful if you want to evaluate if a different stack
16288     offset would give you better code, but to actually use a different
16289     stack offset to build working programs, it is recommended to
16290     configure the toolchain with the appropriate
16291     '--with-stack-offset=NUM' option.
16292
16293'-mno-round-nearest'
16294     Make the scheduler assume that the rounding mode has been set to
16295     truncating.  The default is '-mround-nearest'.
16296
16297'-mlong-calls'
16298     If not otherwise specified by an attribute, assume all calls might
16299     be beyond the offset range of the 'b' / 'bl' instructions, and
16300     therefore load the function address into a register before
16301     performing a (otherwise direct) call.  This is the default.
16302
16303'-mshort-calls'
16304     If not otherwise specified by an attribute, assume all direct calls
16305     are in the range of the 'b' / 'bl' instructions, so use these
16306     instructions for direct calls.  The default is '-mlong-calls'.
16307
16308'-msmall16'
16309     Assume addresses can be loaded as 16-bit unsigned values.  This
16310     does not apply to function addresses for which '-mlong-calls'
16311     semantics are in effect.
16312
16313'-mfp-mode=MODE'
16314     Set the prevailing mode of the floating-point unit.  This
16315     determines the floating-point mode that is provided and expected at
16316     function call and return time.  Making this mode match the mode you
16317     predominantly need at function start can make your programs smaller
16318     and faster by avoiding unnecessary mode switches.
16319
16320     MODE can be set to one the following values:
16321
16322     'caller'
16323          Any mode at function entry is valid, and retained or restored
16324          when the function returns, and when it calls other functions.
16325          This mode is useful for compiling libraries or other
16326          compilation units you might want to incorporate into different
16327          programs with different prevailing FPU modes, and the
16328          convenience of being able to use a single object file
16329          outweighs the size and speed overhead for any extra mode
16330          switching that might be needed, compared with what would be
16331          needed with a more specific choice of prevailing FPU mode.
16332
16333     'truncate'
16334          This is the mode used for floating-point calculations with
16335          truncating (i.e. round towards zero) rounding mode.  That
16336          includes conversion from floating point to integer.
16337
16338     'round-nearest'
16339          This is the mode used for floating-point calculations with
16340          round-to-nearest-or-even rounding mode.
16341
16342     'int'
16343          This is the mode used to perform integer calculations in the
16344          FPU, e.g. integer multiply, or integer
16345          multiply-and-accumulate.
16346
16347     The default is '-mfp-mode=caller'
16348
16349'-mno-split-lohi'
16350'-mno-postinc'
16351'-mno-postmodify'
16352     Code generation tweaks that disable, respectively, splitting of
16353     32-bit loads, generation of post-increment addresses, and
16354     generation of post-modify addresses.  The defaults are
16355     'msplit-lohi', '-mpost-inc', and '-mpost-modify'.
16356
16357'-mnovect-double'
16358     Change the preferred SIMD mode to SImode.  The default is
16359     '-mvect-double', which uses DImode as preferred SIMD mode.
16360
16361'-max-vect-align=NUM'
16362     The maximum alignment for SIMD vector mode types.  NUM may be 4 or
16363     8.  The default is 8.  Note that this is an ABI change, even though
16364     many library function interfaces are unaffected if they don't use
16365     SIMD vector modes in places that affect size and/or alignment of
16366     relevant types.
16367
16368'-msplit-vecmove-early'
16369     Split vector moves into single word moves before reload.  In theory
16370     this can give better register allocation, but so far the reverse
16371     seems to be generally the case.
16372
16373'-m1reg-REG'
16374     Specify a register to hold the constant -1, which makes loading
16375     small negative constants and certain bitmasks faster.  Allowable
16376     values for REG are 'r43' and 'r63', which specify use of that
16377     register as a fixed register, and 'none', which means that no
16378     register is used for this purpose.  The default is '-m1reg-none'.
16379
16380
16381File: gcc.info,  Node: AMD GCN Options,  Next: ARC Options,  Prev: Adapteva Epiphany Options,  Up: Submodel Options
16382
163833.19.3 AMD GCN Options
16384----------------------
16385
16386These options are defined specifically for the AMD GCN port.
16387
16388'-march=GPU'
16389'-mtune=GPU'
16390     Set architecture type or tuning for GPU.  Supported values for GPU
16391     are
16392
16393     'fiji'
16394          Compile for GCN3 Fiji devices (gfx803).
16395
16396     'gfx900'
16397          Compile for GCN5 Vega 10 devices (gfx900).
16398
16399     'gfx906'
16400          Compile for GCN5 Vega 20 devices (gfx906).
16401
16402'-mstack-size=BYTES'
16403     Specify how many BYTES of stack space will be requested for each
16404     GPU thread (wave-front).  Beware that there may be many threads and
16405     limited memory available.  The size of the stack allocation may
16406     also have an impact on run-time performance.  The default is 32KB
16407     when using OpenACC or OpenMP, and 1MB otherwise.
16408
16409
16410File: gcc.info,  Node: ARC Options,  Next: ARM Options,  Prev: AMD GCN Options,  Up: Submodel Options
16411
164123.19.4 ARC Options
16413------------------
16414
16415The following options control the architecture variant for which code is
16416being compiled:
16417
16418'-mbarrel-shifter'
16419     Generate instructions supported by barrel shifter.  This is the
16420     default unless '-mcpu=ARC601' or '-mcpu=ARCEM' is in effect.
16421
16422'-mjli-always'
16423     Force to call a function using jli_s instruction.  This option is
16424     valid only for ARCv2 architecture.
16425
16426'-mcpu=CPU'
16427     Set architecture type, register usage, and instruction scheduling
16428     parameters for CPU.  There are also shortcut alias options
16429     available for backward compatibility and convenience.  Supported
16430     values for CPU are
16431
16432     'arc600'
16433          Compile for ARC600.  Aliases: '-mA6', '-mARC600'.
16434
16435     'arc601'
16436          Compile for ARC601.  Alias: '-mARC601'.
16437
16438     'arc700'
16439          Compile for ARC700.  Aliases: '-mA7', '-mARC700'.  This is the
16440          default when configured with '--with-cpu=arc700'.
16441
16442     'arcem'
16443          Compile for ARC EM.
16444
16445     'archs'
16446          Compile for ARC HS.
16447
16448     'em'
16449          Compile for ARC EM CPU with no hardware extensions.
16450
16451     'em4'
16452          Compile for ARC EM4 CPU.
16453
16454     'em4_dmips'
16455          Compile for ARC EM4 DMIPS CPU.
16456
16457     'em4_fpus'
16458          Compile for ARC EM4 DMIPS CPU with the single-precision
16459          floating-point extension.
16460
16461     'em4_fpuda'
16462          Compile for ARC EM4 DMIPS CPU with single-precision
16463          floating-point and double assist instructions.
16464
16465     'hs'
16466          Compile for ARC HS CPU with no hardware extensions except the
16467          atomic instructions.
16468
16469     'hs34'
16470          Compile for ARC HS34 CPU.
16471
16472     'hs38'
16473          Compile for ARC HS38 CPU.
16474
16475     'hs38_linux'
16476          Compile for ARC HS38 CPU with all hardware extensions on.
16477
16478     'arc600_norm'
16479          Compile for ARC 600 CPU with 'norm' instructions enabled.
16480
16481     'arc600_mul32x16'
16482          Compile for ARC 600 CPU with 'norm' and 32x16-bit multiply
16483          instructions enabled.
16484
16485     'arc600_mul64'
16486          Compile for ARC 600 CPU with 'norm' and 'mul64'-family
16487          instructions enabled.
16488
16489     'arc601_norm'
16490          Compile for ARC 601 CPU with 'norm' instructions enabled.
16491
16492     'arc601_mul32x16'
16493          Compile for ARC 601 CPU with 'norm' and 32x16-bit multiply
16494          instructions enabled.
16495
16496     'arc601_mul64'
16497          Compile for ARC 601 CPU with 'norm' and 'mul64'-family
16498          instructions enabled.
16499
16500     'nps400'
16501          Compile for ARC 700 on NPS400 chip.
16502
16503     'em_mini'
16504          Compile for ARC EM minimalist configuration featuring reduced
16505          register set.
16506
16507'-mdpfp'
16508'-mdpfp-compact'
16509     Generate double-precision FPX instructions, tuned for the compact
16510     implementation.
16511
16512'-mdpfp-fast'
16513     Generate double-precision FPX instructions, tuned for the fast
16514     implementation.
16515
16516'-mno-dpfp-lrsr'
16517     Disable 'lr' and 'sr' instructions from using FPX extension aux
16518     registers.
16519
16520'-mea'
16521     Generate extended arithmetic instructions.  Currently only 'divaw',
16522     'adds', 'subs', and 'sat16' are supported.  Only valid for
16523     '-mcpu=ARC700'.
16524
16525'-mno-mpy'
16526     Do not generate 'mpy'-family instructions for ARC700.  This option
16527     is deprecated.
16528
16529'-mmul32x16'
16530     Generate 32x16-bit multiply and multiply-accumulate instructions.
16531
16532'-mmul64'
16533     Generate 'mul64' and 'mulu64' instructions.  Only valid for
16534     '-mcpu=ARC600'.
16535
16536'-mnorm'
16537     Generate 'norm' instructions.  This is the default if
16538     '-mcpu=ARC700' is in effect.
16539
16540'-mspfp'
16541'-mspfp-compact'
16542     Generate single-precision FPX instructions, tuned for the compact
16543     implementation.
16544
16545'-mspfp-fast'
16546     Generate single-precision FPX instructions, tuned for the fast
16547     implementation.
16548
16549'-msimd'
16550     Enable generation of ARC SIMD instructions via target-specific
16551     builtins.  Only valid for '-mcpu=ARC700'.
16552
16553'-msoft-float'
16554     This option ignored; it is provided for compatibility purposes
16555     only.  Software floating-point code is emitted by default, and this
16556     default can overridden by FPX options; '-mspfp', '-mspfp-compact',
16557     or '-mspfp-fast' for single precision, and '-mdpfp',
16558     '-mdpfp-compact', or '-mdpfp-fast' for double precision.
16559
16560'-mswap'
16561     Generate 'swap' instructions.
16562
16563'-matomic'
16564     This enables use of the locked load/store conditional extension to
16565     implement atomic memory built-in functions.  Not available for ARC
16566     6xx or ARC EM cores.
16567
16568'-mdiv-rem'
16569     Enable 'div' and 'rem' instructions for ARCv2 cores.
16570
16571'-mcode-density'
16572     Enable code density instructions for ARC EM. This option is on by
16573     default for ARC HS.
16574
16575'-mll64'
16576     Enable double load/store operations for ARC HS cores.
16577
16578'-mtp-regno=REGNO'
16579     Specify thread pointer register number.
16580
16581'-mmpy-option=MULTO'
16582     Compile ARCv2 code with a multiplier design option.  You can
16583     specify the option using either a string or numeric value for
16584     MULTO.  'wlh1' is the default value.  The recognized values are:
16585
16586     '0'
16587     'none'
16588          No multiplier available.
16589
16590     '1'
16591     'w'
16592          16x16 multiplier, fully pipelined.  The following instructions
16593          are enabled: 'mpyw' and 'mpyuw'.
16594
16595     '2'
16596     'wlh1'
16597          32x32 multiplier, fully pipelined (1 stage).  The following
16598          instructions are additionally enabled: 'mpy', 'mpyu', 'mpym',
16599          'mpymu', and 'mpy_s'.
16600
16601     '3'
16602     'wlh2'
16603          32x32 multiplier, fully pipelined (2 stages).  The following
16604          instructions are additionally enabled: 'mpy', 'mpyu', 'mpym',
16605          'mpymu', and 'mpy_s'.
16606
16607     '4'
16608     'wlh3'
16609          Two 16x16 multipliers, blocking, sequential.  The following
16610          instructions are additionally enabled: 'mpy', 'mpyu', 'mpym',
16611          'mpymu', and 'mpy_s'.
16612
16613     '5'
16614     'wlh4'
16615          One 16x16 multiplier, blocking, sequential.  The following
16616          instructions are additionally enabled: 'mpy', 'mpyu', 'mpym',
16617          'mpymu', and 'mpy_s'.
16618
16619     '6'
16620     'wlh5'
16621          One 32x4 multiplier, blocking, sequential.  The following
16622          instructions are additionally enabled: 'mpy', 'mpyu', 'mpym',
16623          'mpymu', and 'mpy_s'.
16624
16625     '7'
16626     'plus_dmpy'
16627          ARC HS SIMD support.
16628
16629     '8'
16630     'plus_macd'
16631          ARC HS SIMD support.
16632
16633     '9'
16634     'plus_qmacw'
16635          ARC HS SIMD support.
16636
16637     This option is only available for ARCv2 cores.
16638
16639'-mfpu=FPU'
16640     Enables support for specific floating-point hardware extensions for
16641     ARCv2 cores.  Supported values for FPU are:
16642
16643     'fpus'
16644          Enables support for single-precision floating-point hardware
16645          extensions.
16646
16647     'fpud'
16648          Enables support for double-precision floating-point hardware
16649          extensions.  The single-precision floating-point extension is
16650          also enabled.  Not available for ARC EM.
16651
16652     'fpuda'
16653          Enables support for double-precision floating-point hardware
16654          extensions using double-precision assist instructions.  The
16655          single-precision floating-point extension is also enabled.
16656          This option is only available for ARC EM.
16657
16658     'fpuda_div'
16659          Enables support for double-precision floating-point hardware
16660          extensions using double-precision assist instructions.  The
16661          single-precision floating-point, square-root, and divide
16662          extensions are also enabled.  This option is only available
16663          for ARC EM.
16664
16665     'fpuda_fma'
16666          Enables support for double-precision floating-point hardware
16667          extensions using double-precision assist instructions.  The
16668          single-precision floating-point and fused multiply and add
16669          hardware extensions are also enabled.  This option is only
16670          available for ARC EM.
16671
16672     'fpuda_all'
16673          Enables support for double-precision floating-point hardware
16674          extensions using double-precision assist instructions.  All
16675          single-precision floating-point hardware extensions are also
16676          enabled.  This option is only available for ARC EM.
16677
16678     'fpus_div'
16679          Enables support for single-precision floating-point,
16680          square-root and divide hardware extensions.
16681
16682     'fpud_div'
16683          Enables support for double-precision floating-point,
16684          square-root and divide hardware extensions.  This option
16685          includes option 'fpus_div'.  Not available for ARC EM.
16686
16687     'fpus_fma'
16688          Enables support for single-precision floating-point and fused
16689          multiply and add hardware extensions.
16690
16691     'fpud_fma'
16692          Enables support for double-precision floating-point and fused
16693          multiply and add hardware extensions.  This option includes
16694          option 'fpus_fma'.  Not available for ARC EM.
16695
16696     'fpus_all'
16697          Enables support for all single-precision floating-point
16698          hardware extensions.
16699
16700     'fpud_all'
16701          Enables support for all single- and double-precision
16702          floating-point hardware extensions.  Not available for ARC EM.
16703
16704'-mirq-ctrl-saved=REGISTER-RANGE, BLINK, LP_COUNT'
16705     Specifies general-purposes registers that the processor
16706     automatically saves/restores on interrupt entry and exit.
16707     REGISTER-RANGE is specified as two registers separated by a dash.
16708     The register range always starts with 'r0', the upper limit is 'fp'
16709     register.  BLINK and LP_COUNT are optional.  This option is only
16710     valid for ARC EM and ARC HS cores.
16711
16712'-mrgf-banked-regs=NUMBER'
16713     Specifies the number of registers replicated in second register
16714     bank on entry to fast interrupt.  Fast interrupts are interrupts
16715     with the highest priority level P0.  These interrupts save only PC
16716     and STATUS32 registers to avoid memory transactions during
16717     interrupt entry and exit sequences.  Use this option when you are
16718     using fast interrupts in an ARC V2 family processor.  Permitted
16719     values are 4, 8, 16, and 32.
16720
16721'-mlpc-width=WIDTH'
16722     Specify the width of the 'lp_count' register.  Valid values for
16723     WIDTH are 8, 16, 20, 24, 28 and 32 bits.  The default width is
16724     fixed to 32 bits.  If the width is less than 32, the compiler does
16725     not attempt to transform loops in your program to use the
16726     zero-delay loop mechanism unless it is known that the 'lp_count'
16727     register can hold the required loop-counter value.  Depending on
16728     the width specified, the compiler and run-time library might
16729     continue to use the loop mechanism for various needs.  This option
16730     defines macro '__ARC_LPC_WIDTH__' with the value of WIDTH.
16731
16732'-mrf16'
16733     This option instructs the compiler to generate code for a 16-entry
16734     register file.  This option defines the '__ARC_RF16__' preprocessor
16735     macro.
16736
16737'-mbranch-index'
16738     Enable use of 'bi' or 'bih' instructions to implement jump tables.
16739
16740 The following options are passed through to the assembler, and also
16741define preprocessor macro symbols.
16742
16743'-mdsp-packa'
16744     Passed down to the assembler to enable the DSP Pack A extensions.
16745     Also sets the preprocessor symbol '__Xdsp_packa'.  This option is
16746     deprecated.
16747
16748'-mdvbf'
16749     Passed down to the assembler to enable the dual Viterbi butterfly
16750     extension.  Also sets the preprocessor symbol '__Xdvbf'.  This
16751     option is deprecated.
16752
16753'-mlock'
16754     Passed down to the assembler to enable the locked load/store
16755     conditional extension.  Also sets the preprocessor symbol
16756     '__Xlock'.
16757
16758'-mmac-d16'
16759     Passed down to the assembler.  Also sets the preprocessor symbol
16760     '__Xxmac_d16'.  This option is deprecated.
16761
16762'-mmac-24'
16763     Passed down to the assembler.  Also sets the preprocessor symbol
16764     '__Xxmac_24'.  This option is deprecated.
16765
16766'-mrtsc'
16767     Passed down to the assembler to enable the 64-bit time-stamp
16768     counter extension instruction.  Also sets the preprocessor symbol
16769     '__Xrtsc'.  This option is deprecated.
16770
16771'-mswape'
16772     Passed down to the assembler to enable the swap byte ordering
16773     extension instruction.  Also sets the preprocessor symbol
16774     '__Xswape'.
16775
16776'-mtelephony'
16777     Passed down to the assembler to enable dual- and single-operand
16778     instructions for telephony.  Also sets the preprocessor symbol
16779     '__Xtelephony'.  This option is deprecated.
16780
16781'-mxy'
16782     Passed down to the assembler to enable the XY memory extension.
16783     Also sets the preprocessor symbol '__Xxy'.
16784
16785 The following options control how the assembly code is annotated:
16786
16787'-misize'
16788     Annotate assembler instructions with estimated addresses.
16789
16790'-mannotate-align'
16791     Explain what alignment considerations lead to the decision to make
16792     an instruction short or long.
16793
16794 The following options are passed through to the linker:
16795
16796'-marclinux'
16797     Passed through to the linker, to specify use of the 'arclinux'
16798     emulation.  This option is enabled by default in tool chains built
16799     for 'arc-linux-uclibc' and 'arceb-linux-uclibc' targets when
16800     profiling is not requested.
16801
16802'-marclinux_prof'
16803     Passed through to the linker, to specify use of the 'arclinux_prof'
16804     emulation.  This option is enabled by default in tool chains built
16805     for 'arc-linux-uclibc' and 'arceb-linux-uclibc' targets when
16806     profiling is requested.
16807
16808 The following options control the semantics of generated code:
16809
16810'-mlong-calls'
16811     Generate calls as register indirect calls, thus providing access to
16812     the full 32-bit address range.
16813
16814'-mmedium-calls'
16815     Don't use less than 25-bit addressing range for calls, which is the
16816     offset available for an unconditional branch-and-link instruction.
16817     Conditional execution of function calls is suppressed, to allow use
16818     of the 25-bit range, rather than the 21-bit range with conditional
16819     branch-and-link.  This is the default for tool chains built for
16820     'arc-linux-uclibc' and 'arceb-linux-uclibc' targets.
16821
16822'-G NUM'
16823     Put definitions of externally-visible data in a small data section
16824     if that data is no bigger than NUM bytes.  The default value of NUM
16825     is 4 for any ARC configuration, or 8 when we have double load/store
16826     operations.
16827
16828'-mno-sdata'
16829     Do not generate sdata references.  This is the default for tool
16830     chains built for 'arc-linux-uclibc' and 'arceb-linux-uclibc'
16831     targets.
16832
16833'-mvolatile-cache'
16834     Use ordinarily cached memory accesses for volatile references.
16835     This is the default.
16836
16837'-mno-volatile-cache'
16838     Enable cache bypass for volatile references.
16839
16840 The following options fine tune code generation:
16841'-malign-call'
16842     Do alignment optimizations for call instructions.
16843
16844'-mauto-modify-reg'
16845     Enable the use of pre/post modify with register displacement.
16846
16847'-mbbit-peephole'
16848     Enable bbit peephole2.
16849
16850'-mno-brcc'
16851     This option disables a target-specific pass in 'arc_reorg' to
16852     generate compare-and-branch ('brCC') instructions.  It has no
16853     effect on generation of these instructions driven by the combiner
16854     pass.
16855
16856'-mcase-vector-pcrel'
16857     Use PC-relative switch case tables to enable case table shortening.
16858     This is the default for '-Os'.
16859
16860'-mcompact-casesi'
16861     Enable compact 'casesi' pattern.  This is the default for '-Os',
16862     and only available for ARCv1 cores.  This option is deprecated.
16863
16864'-mno-cond-exec'
16865     Disable the ARCompact-specific pass to generate conditional
16866     execution instructions.
16867
16868     Due to delay slot scheduling and interactions between operand
16869     numbers, literal sizes, instruction lengths, and the support for
16870     conditional execution, the target-independent pass to generate
16871     conditional execution is often lacking, so the ARC port has kept a
16872     special pass around that tries to find more conditional execution
16873     generation opportunities after register allocation, branch
16874     shortening, and delay slot scheduling have been done.  This pass
16875     generally, but not always, improves performance and code size, at
16876     the cost of extra compilation time, which is why there is an option
16877     to switch it off.  If you have a problem with call instructions
16878     exceeding their allowable offset range because they are
16879     conditionalized, you should consider using '-mmedium-calls'
16880     instead.
16881
16882'-mearly-cbranchsi'
16883     Enable pre-reload use of the 'cbranchsi' pattern.
16884
16885'-mexpand-adddi'
16886     Expand 'adddi3' and 'subdi3' at RTL generation time into 'add.f',
16887     'adc' etc.  This option is deprecated.
16888
16889'-mindexed-loads'
16890     Enable the use of indexed loads.  This can be problematic because
16891     some optimizers then assume that indexed stores exist, which is not
16892     the case.
16893
16894'-mlra'
16895     Enable Local Register Allocation.  This is still experimental for
16896     ARC, so by default the compiler uses standard reload (i.e.
16897     '-mno-lra').
16898
16899'-mlra-priority-none'
16900     Don't indicate any priority for target registers.
16901
16902'-mlra-priority-compact'
16903     Indicate target register priority for r0..r3 / r12..r15.
16904
16905'-mlra-priority-noncompact'
16906     Reduce target register priority for r0..r3 / r12..r15.
16907
16908'-mmillicode'
16909     When optimizing for size (using '-Os'), prologues and epilogues
16910     that have to save or restore a large number of registers are often
16911     shortened by using call to a special function in libgcc; this is
16912     referred to as a _millicode_ call.  As these calls can pose
16913     performance issues, and/or cause linking issues when linking in a
16914     nonstandard way, this option is provided to turn on or off
16915     millicode call generation.
16916
16917'-mcode-density-frame'
16918     This option enable the compiler to emit 'enter' and 'leave'
16919     instructions.  These instructions are only valid for CPUs with
16920     code-density feature.
16921
16922'-mmixed-code'
16923     Tweak register allocation to help 16-bit instruction generation.
16924     This generally has the effect of decreasing the average instruction
16925     size while increasing the instruction count.
16926
16927'-mq-class'
16928     Ths option is deprecated.  Enable 'q' instruction alternatives.
16929     This is the default for '-Os'.
16930
16931'-mRcq'
16932     Enable 'Rcq' constraint handling.  Most short code generation
16933     depends on this.  This is the default.
16934
16935'-mRcw'
16936     Enable 'Rcw' constraint handling.  Most ccfsm condexec mostly
16937     depends on this.  This is the default.
16938
16939'-msize-level=LEVEL'
16940     Fine-tune size optimization with regards to instruction lengths and
16941     alignment.  The recognized values for LEVEL are:
16942     '0'
16943          No size optimization.  This level is deprecated and treated
16944          like '1'.
16945
16946     '1'
16947          Short instructions are used opportunistically.
16948
16949     '2'
16950          In addition, alignment of loops and of code after barriers are
16951          dropped.
16952
16953     '3'
16954          In addition, optional data alignment is dropped, and the
16955          option 'Os' is enabled.
16956
16957     This defaults to '3' when '-Os' is in effect.  Otherwise, the
16958     behavior when this is not set is equivalent to level '1'.
16959
16960'-mtune=CPU'
16961     Set instruction scheduling parameters for CPU, overriding any
16962     implied by '-mcpu='.
16963
16964     Supported values for CPU are
16965
16966     'ARC600'
16967          Tune for ARC600 CPU.
16968
16969     'ARC601'
16970          Tune for ARC601 CPU.
16971
16972     'ARC700'
16973          Tune for ARC700 CPU with standard multiplier block.
16974
16975     'ARC700-xmac'
16976          Tune for ARC700 CPU with XMAC block.
16977
16978     'ARC725D'
16979          Tune for ARC725D CPU.
16980
16981     'ARC750D'
16982          Tune for ARC750D CPU.
16983
16984'-mmultcost=NUM'
16985     Cost to assume for a multiply instruction, with '4' being equal to
16986     a normal instruction.
16987
16988'-munalign-prob-threshold=PROBABILITY'
16989     Set probability threshold for unaligning branches.  When tuning for
16990     'ARC700' and optimizing for speed, branches without filled delay
16991     slot are preferably emitted unaligned and long, unless profiling
16992     indicates that the probability for the branch to be taken is below
16993     PROBABILITY.  *Note Cross-profiling::.  The default is
16994     (REG_BR_PROB_BASE/2), i.e. 5000.
16995
16996 The following options are maintained for backward compatibility, but
16997are now deprecated and will be removed in a future release:
16998
16999'-margonaut'
17000     Obsolete FPX.
17001
17002'-mbig-endian'
17003'-EB'
17004     Compile code for big-endian targets.  Use of these options is now
17005     deprecated.  Big-endian code is supported by configuring GCC to
17006     build 'arceb-elf32' and 'arceb-linux-uclibc' targets, for which big
17007     endian is the default.
17008
17009'-mlittle-endian'
17010'-EL'
17011     Compile code for little-endian targets.  Use of these options is
17012     now deprecated.  Little-endian code is supported by configuring GCC
17013     to build 'arc-elf32' and 'arc-linux-uclibc' targets, for which
17014     little endian is the default.
17015
17016'-mbarrel_shifter'
17017     Replaced by '-mbarrel-shifter'.
17018
17019'-mdpfp_compact'
17020     Replaced by '-mdpfp-compact'.
17021
17022'-mdpfp_fast'
17023     Replaced by '-mdpfp-fast'.
17024
17025'-mdsp_packa'
17026     Replaced by '-mdsp-packa'.
17027
17028'-mEA'
17029     Replaced by '-mea'.
17030
17031'-mmac_24'
17032     Replaced by '-mmac-24'.
17033
17034'-mmac_d16'
17035     Replaced by '-mmac-d16'.
17036
17037'-mspfp_compact'
17038     Replaced by '-mspfp-compact'.
17039
17040'-mspfp_fast'
17041     Replaced by '-mspfp-fast'.
17042
17043'-mtune=CPU'
17044     Values 'arc600', 'arc601', 'arc700' and 'arc700-xmac' for CPU are
17045     replaced by 'ARC600', 'ARC601', 'ARC700' and 'ARC700-xmac'
17046     respectively.
17047
17048'-multcost=NUM'
17049     Replaced by '-mmultcost'.
17050
17051
17052File: gcc.info,  Node: ARM Options,  Next: AVR Options,  Prev: ARC Options,  Up: Submodel Options
17053
170543.19.5 ARM Options
17055------------------
17056
17057These '-m' options are defined for the ARM port:
17058
17059'-mabi=NAME'
17060     Generate code for the specified ABI.  Permissible values are:
17061     'apcs-gnu', 'atpcs', 'aapcs', 'aapcs-linux' and 'iwmmxt'.
17062
17063'-mapcs-frame'
17064     Generate a stack frame that is compliant with the ARM Procedure
17065     Call Standard for all functions, even if this is not strictly
17066     necessary for correct execution of the code.  Specifying
17067     '-fomit-frame-pointer' with this option causes the stack frames not
17068     to be generated for leaf functions.  The default is
17069     '-mno-apcs-frame'.  This option is deprecated.
17070
17071'-mapcs'
17072     This is a synonym for '-mapcs-frame' and is deprecated.
17073
17074'-mthumb-interwork'
17075     Generate code that supports calling between the ARM and Thumb
17076     instruction sets.  Without this option, on pre-v5 architectures,
17077     the two instruction sets cannot be reliably used inside one
17078     program.  The default is '-mno-thumb-interwork', since slightly
17079     larger code is generated when '-mthumb-interwork' is specified.  In
17080     AAPCS configurations this option is meaningless.
17081
17082'-mno-sched-prolog'
17083     Prevent the reordering of instructions in the function prologue, or
17084     the merging of those instruction with the instructions in the
17085     function's body.  This means that all functions start with a
17086     recognizable set of instructions (or in fact one of a choice from a
17087     small set of different function prologues), and this information
17088     can be used to locate the start of functions inside an executable
17089     piece of code.  The default is '-msched-prolog'.
17090
17091'-mfloat-abi=NAME'
17092     Specifies which floating-point ABI to use.  Permissible values are:
17093     'soft', 'softfp' and 'hard'.
17094
17095     Specifying 'soft' causes GCC to generate output containing library
17096     calls for floating-point operations.  'softfp' allows the
17097     generation of code using hardware floating-point instructions, but
17098     still uses the soft-float calling conventions.  'hard' allows
17099     generation of floating-point instructions and uses FPU-specific
17100     calling conventions.
17101
17102     The default depends on the specific target configuration.  Note
17103     that the hard-float and soft-float ABIs are not link-compatible;
17104     you must compile your entire program with the same ABI, and link
17105     with a compatible set of libraries.
17106
17107'-mgeneral-regs-only'
17108     Generate code which uses only the general-purpose registers.  This
17109     will prevent the compiler from using floating-point and Advanced
17110     SIMD registers but will not impose any restrictions on the
17111     assembler.
17112
17113'-mlittle-endian'
17114     Generate code for a processor running in little-endian mode.  This
17115     is the default for all standard configurations.
17116
17117'-mbig-endian'
17118     Generate code for a processor running in big-endian mode; the
17119     default is to compile code for a little-endian processor.
17120
17121'-mbe8'
17122'-mbe32'
17123     When linking a big-endian image select between BE8 and BE32
17124     formats.  The option has no effect for little-endian images and is
17125     ignored.  The default is dependent on the selected target
17126     architecture.  For ARMv6 and later architectures the default is
17127     BE8, for older architectures the default is BE32.  BE32 format has
17128     been deprecated by ARM.
17129
17130'-march=NAME[+extension...]'
17131     This specifies the name of the target ARM architecture.  GCC uses
17132     this name to determine what kind of instructions it can emit when
17133     generating assembly code.  This option can be used in conjunction
17134     with or instead of the '-mcpu=' option.
17135
17136     Permissible names are: 'armv4t', 'armv5t', 'armv5te', 'armv6',
17137     'armv6j', 'armv6k', 'armv6kz', 'armv6t2', 'armv6z', 'armv6zk',
17138     'armv7', 'armv7-a', 'armv7ve', 'armv8-a', 'armv8.1-a', 'armv8.2-a',
17139     'armv8.3-a', 'armv8.4-a', 'armv8.5-a', 'armv8.6-a', 'armv7-r',
17140     'armv8-r', 'armv6-m', 'armv6s-m', 'armv7-m', 'armv7e-m',
17141     'armv8-m.base', 'armv8-m.main', 'armv8.1-m.main', 'iwmmxt' and
17142     'iwmmxt2'.
17143
17144     Additionally, the following architectures, which lack support for
17145     the Thumb execution state, are recognized but support is
17146     deprecated: 'armv4'.
17147
17148     Many of the architectures support extensions.  These can be added
17149     by appending '+EXTENSION' to the architecture name.  Extension
17150     options are processed in order and capabilities accumulate.  An
17151     extension will also enable any necessary base extensions upon which
17152     it depends.  For example, the '+crypto' extension will always
17153     enable the '+simd' extension.  The exception to the additive
17154     construction is for extensions that are prefixed with '+no...':
17155     these extensions disable the specified option and any other
17156     extensions that may depend on the presence of that extension.
17157
17158     For example, '-march=armv7-a+simd+nofp+vfpv4' is equivalent to
17159     writing '-march=armv7-a+vfpv4' since the '+simd' option is entirely
17160     disabled by the '+nofp' option that follows it.
17161
17162     Most extension names are generically named, but have an effect that
17163     is dependent upon the architecture to which it is applied.  For
17164     example, the '+simd' option can be applied to both 'armv7-a' and
17165     'armv8-a' architectures, but will enable the original ARMv7-A
17166     Advanced SIMD (Neon) extensions for 'armv7-a' and the ARMv8-A
17167     variant for 'armv8-a'.
17168
17169     The table below lists the supported extensions for each
17170     architecture.  Architectures not mentioned do not support any
17171     extensions.
17172
17173     'armv5te'
17174     'armv6'
17175     'armv6j'
17176     'armv6k'
17177     'armv6kz'
17178     'armv6t2'
17179     'armv6z'
17180     'armv6zk'
17181          '+fp'
17182               The VFPv2 floating-point instructions.  The extension
17183               '+vfpv2' can be used as an alias for this extension.
17184
17185          '+nofp'
17186               Disable the floating-point instructions.
17187
17188     'armv7'
17189          The common subset of the ARMv7-A, ARMv7-R and ARMv7-M
17190          architectures.
17191          '+fp'
17192               The VFPv3 floating-point instructions, with 16
17193               double-precision registers.  The extension '+vfpv3-d16'
17194               can be used as an alias for this extension.  Note that
17195               floating-point is not supported by the base ARMv7-M
17196               architecture, but is compatible with both the ARMv7-A and
17197               ARMv7-R architectures.
17198
17199          '+nofp'
17200               Disable the floating-point instructions.
17201
17202     'armv7-a'
17203          '+mp'
17204               The multiprocessing extension.
17205
17206          '+sec'
17207               The security extension.
17208
17209          '+fp'
17210               The VFPv3 floating-point instructions, with 16
17211               double-precision registers.  The extension '+vfpv3-d16'
17212               can be used as an alias for this extension.
17213
17214          '+simd'
17215               The Advanced SIMD (Neon) v1 and the VFPv3 floating-point
17216               instructions.  The extensions '+neon' and '+neon-vfpv3'
17217               can be used as aliases for this extension.
17218
17219          '+vfpv3'
17220               The VFPv3 floating-point instructions, with 32
17221               double-precision registers.
17222
17223          '+vfpv3-d16-fp16'
17224               The VFPv3 floating-point instructions, with 16
17225               double-precision registers and the half-precision
17226               floating-point conversion operations.
17227
17228          '+vfpv3-fp16'
17229               The VFPv3 floating-point instructions, with 32
17230               double-precision registers and the half-precision
17231               floating-point conversion operations.
17232
17233          '+vfpv4-d16'
17234               The VFPv4 floating-point instructions, with 16
17235               double-precision registers.
17236
17237          '+vfpv4'
17238               The VFPv4 floating-point instructions, with 32
17239               double-precision registers.
17240
17241          '+neon-fp16'
17242               The Advanced SIMD (Neon) v1 and the VFPv3 floating-point
17243               instructions, with the half-precision floating-point
17244               conversion operations.
17245
17246          '+neon-vfpv4'
17247               The Advanced SIMD (Neon) v2 and the VFPv4 floating-point
17248               instructions.
17249
17250          '+nosimd'
17251               Disable the Advanced SIMD instructions (does not disable
17252               floating point).
17253
17254          '+nofp'
17255               Disable the floating-point and Advanced SIMD
17256               instructions.
17257
17258     'armv7ve'
17259          The extended version of the ARMv7-A architecture with support
17260          for virtualization.
17261          '+fp'
17262               The VFPv4 floating-point instructions, with 16
17263               double-precision registers.  The extension '+vfpv4-d16'
17264               can be used as an alias for this extension.
17265
17266          '+simd'
17267               The Advanced SIMD (Neon) v2 and the VFPv4 floating-point
17268               instructions.  The extension '+neon-vfpv4' can be used as
17269               an alias for this extension.
17270
17271          '+vfpv3-d16'
17272               The VFPv3 floating-point instructions, with 16
17273               double-precision registers.
17274
17275          '+vfpv3'
17276               The VFPv3 floating-point instructions, with 32
17277               double-precision registers.
17278
17279          '+vfpv3-d16-fp16'
17280               The VFPv3 floating-point instructions, with 16
17281               double-precision registers and the half-precision
17282               floating-point conversion operations.
17283
17284          '+vfpv3-fp16'
17285               The VFPv3 floating-point instructions, with 32
17286               double-precision registers and the half-precision
17287               floating-point conversion operations.
17288
17289          '+vfpv4-d16'
17290               The VFPv4 floating-point instructions, with 16
17291               double-precision registers.
17292
17293          '+vfpv4'
17294               The VFPv4 floating-point instructions, with 32
17295               double-precision registers.
17296
17297          '+neon'
17298               The Advanced SIMD (Neon) v1 and the VFPv3 floating-point
17299               instructions.  The extension '+neon-vfpv3' can be used as
17300               an alias for this extension.
17301
17302          '+neon-fp16'
17303               The Advanced SIMD (Neon) v1 and the VFPv3 floating-point
17304               instructions, with the half-precision floating-point
17305               conversion operations.
17306
17307          '+nosimd'
17308               Disable the Advanced SIMD instructions (does not disable
17309               floating point).
17310
17311          '+nofp'
17312               Disable the floating-point and Advanced SIMD
17313               instructions.
17314
17315     'armv8-a'
17316          '+crc'
17317               The Cyclic Redundancy Check (CRC) instructions.
17318          '+simd'
17319               The ARMv8-A Advanced SIMD and floating-point
17320               instructions.
17321          '+crypto'
17322               The cryptographic instructions.
17323          '+nocrypto'
17324               Disable the cryptographic instructions.
17325          '+nofp'
17326               Disable the floating-point, Advanced SIMD and
17327               cryptographic instructions.
17328          '+sb'
17329               Speculation Barrier Instruction.
17330          '+predres'
17331               Execution and Data Prediction Restriction Instructions.
17332
17333     'armv8.1-a'
17334          '+simd'
17335               The ARMv8.1-A Advanced SIMD and floating-point
17336               instructions.
17337
17338          '+crypto'
17339               The cryptographic instructions.  This also enables the
17340               Advanced SIMD and floating-point instructions.
17341
17342          '+nocrypto'
17343               Disable the cryptographic instructions.
17344
17345          '+nofp'
17346               Disable the floating-point, Advanced SIMD and
17347               cryptographic instructions.
17348
17349          '+sb'
17350               Speculation Barrier Instruction.
17351
17352          '+predres'
17353               Execution and Data Prediction Restriction Instructions.
17354
17355     'armv8.2-a'
17356     'armv8.3-a'
17357          '+fp16'
17358               The half-precision floating-point data processing
17359               instructions.  This also enables the Advanced SIMD and
17360               floating-point instructions.
17361
17362          '+fp16fml'
17363               The half-precision floating-point fmla extension.  This
17364               also enables the half-precision floating-point extension
17365               and Advanced SIMD and floating-point instructions.
17366
17367          '+simd'
17368               The ARMv8.1-A Advanced SIMD and floating-point
17369               instructions.
17370
17371          '+crypto'
17372               The cryptographic instructions.  This also enables the
17373               Advanced SIMD and floating-point instructions.
17374
17375          '+dotprod'
17376               Enable the Dot Product extension.  This also enables
17377               Advanced SIMD instructions.
17378
17379          '+nocrypto'
17380               Disable the cryptographic extension.
17381
17382          '+nofp'
17383               Disable the floating-point, Advanced SIMD and
17384               cryptographic instructions.
17385
17386          '+sb'
17387               Speculation Barrier Instruction.
17388
17389          '+predres'
17390               Execution and Data Prediction Restriction Instructions.
17391
17392          '+i8mm'
17393               8-bit Integer Matrix Multiply instructions.  This also
17394               enables Advanced SIMD and floating-point instructions.
17395
17396          '+bf16'
17397               Brain half-precision floating-point instructions.  This
17398               also enables Advanced SIMD and floating-point
17399               instructions.
17400
17401     'armv8.4-a'
17402          '+fp16'
17403               The half-precision floating-point data processing
17404               instructions.  This also enables the Advanced SIMD and
17405               floating-point instructions as well as the Dot Product
17406               extension and the half-precision floating-point fmla
17407               extension.
17408
17409          '+simd'
17410               The ARMv8.3-A Advanced SIMD and floating-point
17411               instructions as well as the Dot Product extension.
17412
17413          '+crypto'
17414               The cryptographic instructions.  This also enables the
17415               Advanced SIMD and floating-point instructions as well as
17416               the Dot Product extension.
17417
17418          '+nocrypto'
17419               Disable the cryptographic extension.
17420
17421          '+nofp'
17422               Disable the floating-point, Advanced SIMD and
17423               cryptographic instructions.
17424
17425          '+sb'
17426               Speculation Barrier Instruction.
17427
17428          '+predres'
17429               Execution and Data Prediction Restriction Instructions.
17430
17431          '+i8mm'
17432               8-bit Integer Matrix Multiply instructions.  This also
17433               enables Advanced SIMD and floating-point instructions.
17434
17435          '+bf16'
17436               Brain half-precision floating-point instructions.  This
17437               also enables Advanced SIMD and floating-point
17438               instructions.
17439
17440     'armv8.5-a'
17441          '+fp16'
17442               The half-precision floating-point data processing
17443               instructions.  This also enables the Advanced SIMD and
17444               floating-point instructions as well as the Dot Product
17445               extension and the half-precision floating-point fmla
17446               extension.
17447
17448          '+simd'
17449               The ARMv8.3-A Advanced SIMD and floating-point
17450               instructions as well as the Dot Product extension.
17451
17452          '+crypto'
17453               The cryptographic instructions.  This also enables the
17454               Advanced SIMD and floating-point instructions as well as
17455               the Dot Product extension.
17456
17457          '+nocrypto'
17458               Disable the cryptographic extension.
17459
17460          '+nofp'
17461               Disable the floating-point, Advanced SIMD and
17462               cryptographic instructions.
17463
17464          '+i8mm'
17465               8-bit Integer Matrix Multiply instructions.  This also
17466               enables Advanced SIMD and floating-point instructions.
17467
17468          '+bf16'
17469               Brain half-precision floating-point instructions.  This
17470               also enables Advanced SIMD and floating-point
17471               instructions.
17472
17473     'armv8.6-a'
17474          '+fp16'
17475               The half-precision floating-point data processing
17476               instructions.  This also enables the Advanced SIMD and
17477               floating-point instructions as well as the Dot Product
17478               extension and the half-precision floating-point fmla
17479               extension.
17480
17481          '+simd'
17482               The ARMv8.3-A Advanced SIMD and floating-point
17483               instructions as well as the Dot Product extension.
17484
17485          '+crypto'
17486               The cryptographic instructions.  This also enables the
17487               Advanced SIMD and floating-point instructions as well as
17488               the Dot Product extension.
17489
17490          '+nocrypto'
17491               Disable the cryptographic extension.
17492
17493          '+nofp'
17494               Disable the floating-point, Advanced SIMD and
17495               cryptographic instructions.
17496
17497          '+i8mm'
17498               8-bit Integer Matrix Multiply instructions.  This also
17499               enables Advanced SIMD and floating-point instructions.
17500
17501          '+bf16'
17502               Brain half-precision floating-point instructions.  This
17503               also enables Advanced SIMD and floating-point
17504               instructions.
17505
17506     'armv7-r'
17507          '+fp.sp'
17508               The single-precision VFPv3 floating-point instructions.
17509               The extension '+vfpv3xd' can be used as an alias for this
17510               extension.
17511
17512          '+fp'
17513               The VFPv3 floating-point instructions with 16
17514               double-precision registers.  The extension +vfpv3-d16 can
17515               be used as an alias for this extension.
17516
17517          '+vfpv3xd-d16-fp16'
17518               The single-precision VFPv3 floating-point instructions
17519               with 16 double-precision registers and the half-precision
17520               floating-point conversion operations.
17521
17522          '+vfpv3-d16-fp16'
17523               The VFPv3 floating-point instructions with 16
17524               double-precision registers and the half-precision
17525               floating-point conversion operations.
17526
17527          '+nofp'
17528               Disable the floating-point extension.
17529
17530          '+idiv'
17531               The ARM-state integer division instructions.
17532
17533          '+noidiv'
17534               Disable the ARM-state integer division extension.
17535
17536     'armv7e-m'
17537          '+fp'
17538               The single-precision VFPv4 floating-point instructions.
17539
17540          '+fpv5'
17541               The single-precision FPv5 floating-point instructions.
17542
17543          '+fp.dp'
17544               The single- and double-precision FPv5 floating-point
17545               instructions.
17546
17547          '+nofp'
17548               Disable the floating-point extensions.
17549
17550     'armv8.1-m.main'
17551
17552          '+dsp'
17553               The DSP instructions.
17554
17555          '+mve'
17556               The M-Profile Vector Extension (MVE) integer
17557               instructions.
17558
17559          '+mve.fp'
17560               The M-Profile Vector Extension (MVE) integer and single
17561               precision floating-point instructions.
17562
17563          '+fp'
17564               The single-precision floating-point instructions.
17565
17566          '+fp.dp'
17567               The single- and double-precision floating-point
17568               instructions.
17569
17570          '+nofp'
17571               Disable the floating-point extension.
17572
17573          '+cdecp0, +cdecp1, ... , +cdecp7'
17574               Enable the Custom Datapath Extension (CDE) on selected
17575               coprocessors according to the numbers given in the
17576               options in the range 0 to 7.
17577
17578     'armv8-m.main'
17579          '+dsp'
17580               The DSP instructions.
17581
17582          '+nodsp'
17583               Disable the DSP extension.
17584
17585          '+fp'
17586               The single-precision floating-point instructions.
17587
17588          '+fp.dp'
17589               The single- and double-precision floating-point
17590               instructions.
17591
17592          '+nofp'
17593               Disable the floating-point extension.
17594
17595          '+cdecp0, +cdecp1, ... , +cdecp7'
17596               Enable the Custom Datapath Extension (CDE) on selected
17597               coprocessors according to the numbers given in the
17598               options in the range 0 to 7.
17599
17600     'armv8-r'
17601          '+crc'
17602               The Cyclic Redundancy Check (CRC) instructions.
17603          '+fp.sp'
17604               The single-precision FPv5 floating-point instructions.
17605          '+simd'
17606               The ARMv8-A Advanced SIMD and floating-point
17607               instructions.
17608          '+crypto'
17609               The cryptographic instructions.
17610          '+nocrypto'
17611               Disable the cryptographic instructions.
17612          '+nofp'
17613               Disable the floating-point, Advanced SIMD and
17614               cryptographic instructions.
17615
17616     '-march=native' causes the compiler to auto-detect the architecture
17617     of the build computer.  At present, this feature is only supported
17618     on GNU/Linux, and not all architectures are recognized.  If the
17619     auto-detect is unsuccessful the option has no effect.
17620
17621'-mtune=NAME'
17622     This option specifies the name of the target ARM processor for
17623     which GCC should tune the performance of the code.  For some ARM
17624     implementations better performance can be obtained by using this
17625     option.  Permissible names are: 'arm7tdmi', 'arm7tdmi-s',
17626     'arm710t', 'arm720t', 'arm740t', 'strongarm', 'strongarm110',
17627     'strongarm1100', 0'strongarm1110', 'arm8', 'arm810', 'arm9',
17628     'arm9e', 'arm920', 'arm920t', 'arm922t', 'arm946e-s', 'arm966e-s',
17629     'arm968e-s', 'arm926ej-s', 'arm940t', 'arm9tdmi', 'arm10tdmi',
17630     'arm1020t', 'arm1026ej-s', 'arm10e', 'arm1020e', 'arm1022e',
17631     'arm1136j-s', 'arm1136jf-s', 'mpcore', 'mpcorenovfp',
17632     'arm1156t2-s', 'arm1156t2f-s', 'arm1176jz-s', 'arm1176jzf-s',
17633     'generic-armv7-a', 'cortex-a5', 'cortex-a7', 'cortex-a8',
17634     'cortex-a9', 'cortex-a12', 'cortex-a15', 'cortex-a17',
17635     'cortex-a32', 'cortex-a35', 'cortex-a53', 'cortex-a55',
17636     'cortex-a57', 'cortex-a72', 'cortex-a73', 'cortex-a75',
17637     'cortex-a76', 'cortex-a76ae', 'cortex-a77', 'ares', 'cortex-r4',
17638     'cortex-r4f', 'cortex-r5', 'cortex-r7', 'cortex-r8', 'cortex-r52',
17639     'cortex-m0', 'cortex-m0plus', 'cortex-m1', 'cortex-m3',
17640     'cortex-m4', 'cortex-m7', 'cortex-m23', 'cortex-m33',
17641     'cortex-m35p', 'cortex-m55', 'cortex-m1.small-multiply',
17642     'cortex-m0.small-multiply', 'cortex-m0plus.small-multiply',
17643     'exynos-m1', 'marvell-pj4', 'neoverse-n1', 'xscale', 'iwmmxt',
17644     'iwmmxt2', 'ep9312', 'fa526', 'fa626', 'fa606te', 'fa626te',
17645     'fmp626', 'fa726te', 'xgene1'.
17646
17647     Additionally, this option can specify that GCC should tune the
17648     performance of the code for a big.LITTLE system.  Permissible names
17649     are: 'cortex-a15.cortex-a7', 'cortex-a17.cortex-a7',
17650     'cortex-a57.cortex-a53', 'cortex-a72.cortex-a53',
17651     'cortex-a72.cortex-a35', 'cortex-a73.cortex-a53',
17652     'cortex-a75.cortex-a55', 'cortex-a76.cortex-a55'.
17653
17654     '-mtune=generic-ARCH' specifies that GCC should tune the
17655     performance for a blend of processors within architecture ARCH.
17656     The aim is to generate code that run well on the current most
17657     popular processors, balancing between optimizations that benefit
17658     some CPUs in the range, and avoiding performance pitfalls of other
17659     CPUs.  The effects of this option may change in future GCC versions
17660     as CPU models come and go.
17661
17662     '-mtune' permits the same extension options as '-mcpu', but the
17663     extension options do not affect the tuning of the generated code.
17664
17665     '-mtune=native' causes the compiler to auto-detect the CPU of the
17666     build computer.  At present, this feature is only supported on
17667     GNU/Linux, and not all architectures are recognized.  If the
17668     auto-detect is unsuccessful the option has no effect.
17669
17670'-mcpu=NAME[+extension...]'
17671     This specifies the name of the target ARM processor.  GCC uses this
17672     name to derive the name of the target ARM architecture (as if
17673     specified by '-march') and the ARM processor type for which to tune
17674     for performance (as if specified by '-mtune').  Where this option
17675     is used in conjunction with '-march' or '-mtune', those options
17676     take precedence over the appropriate part of this option.
17677
17678     Many of the supported CPUs implement optional architectural
17679     extensions.  Where this is so the architectural extensions are
17680     normally enabled by default.  If implementations that lack the
17681     extension exist, then the extension syntax can be used to disable
17682     those extensions that have been omitted.  For floating-point and
17683     Advanced SIMD (Neon) instructions, the settings of the options
17684     '-mfloat-abi' and '-mfpu' must also be considered: floating-point
17685     and Advanced SIMD instructions will only be used if '-mfloat-abi'
17686     is not set to 'soft'; and any setting of '-mfpu' other than 'auto'
17687     will override the available floating-point and SIMD extension
17688     instructions.
17689
17690     For example, 'cortex-a9' can be found in three major
17691     configurations: integer only, with just a floating-point unit or
17692     with floating-point and Advanced SIMD. The default is to enable all
17693     the instructions, but the extensions '+nosimd' and '+nofp' can be
17694     used to disable just the SIMD or both the SIMD and floating-point
17695     instructions respectively.
17696
17697     Permissible names for this option are the same as those for
17698     '-mtune'.
17699
17700     The following extension options are common to the listed CPUs:
17701
17702     '+nodsp'
17703          Disable the DSP instructions on 'cortex-m33', 'cortex-m35p'.
17704
17705     '+nofp'
17706          Disables the floating-point instructions on 'arm9e',
17707          'arm946e-s', 'arm966e-s', 'arm968e-s', 'arm10e', 'arm1020e',
17708          'arm1022e', 'arm926ej-s', 'arm1026ej-s', 'cortex-r5',
17709          'cortex-r7', 'cortex-r8', 'cortex-m4', 'cortex-m7',
17710          'cortex-m33' and 'cortex-m35p'.  Disables the floating-point
17711          and SIMD instructions on 'generic-armv7-a', 'cortex-a5',
17712          'cortex-a7', 'cortex-a8', 'cortex-a9', 'cortex-a12',
17713          'cortex-a15', 'cortex-a17', 'cortex-a15.cortex-a7',
17714          'cortex-a17.cortex-a7', 'cortex-a32', 'cortex-a35',
17715          'cortex-a53' and 'cortex-a55'.
17716
17717     '+nofp.dp'
17718          Disables the double-precision component of the floating-point
17719          instructions on 'cortex-r5', 'cortex-r7', 'cortex-r8',
17720          'cortex-r52' and 'cortex-m7'.
17721
17722     '+nosimd'
17723          Disables the SIMD (but not floating-point) instructions on
17724          'generic-armv7-a', 'cortex-a5', 'cortex-a7' and 'cortex-a9'.
17725
17726     '+crypto'
17727          Enables the cryptographic instructions on 'cortex-a32',
17728          'cortex-a35', 'cortex-a53', 'cortex-a55', 'cortex-a57',
17729          'cortex-a72', 'cortex-a73', 'cortex-a75', 'exynos-m1',
17730          'xgene1', 'cortex-a57.cortex-a53', 'cortex-a72.cortex-a53',
17731          'cortex-a73.cortex-a35', 'cortex-a73.cortex-a53' and
17732          'cortex-a75.cortex-a55'.
17733
17734     Additionally the 'generic-armv7-a' pseudo target defaults to VFPv3
17735     with 16 double-precision registers.  It supports the following
17736     extension options: 'mp', 'sec', 'vfpv3-d16', 'vfpv3',
17737     'vfpv3-d16-fp16', 'vfpv3-fp16', 'vfpv4-d16', 'vfpv4', 'neon',
17738     'neon-vfpv3', 'neon-fp16', 'neon-vfpv4'.  The meanings are the same
17739     as for the extensions to '-march=armv7-a'.
17740
17741     '-mcpu=generic-ARCH' is also permissible, and is equivalent to
17742     '-march=ARCH -mtune=generic-ARCH'.  See '-mtune' for more
17743     information.
17744
17745     '-mcpu=native' causes the compiler to auto-detect the CPU of the
17746     build computer.  At present, this feature is only supported on
17747     GNU/Linux, and not all architectures are recognized.  If the
17748     auto-detect is unsuccessful the option has no effect.
17749
17750'-mfpu=NAME'
17751     This specifies what floating-point hardware (or hardware emulation)
17752     is available on the target.  Permissible names are: 'auto',
17753     'vfpv2', 'vfpv3', 'vfpv3-fp16', 'vfpv3-d16', 'vfpv3-d16-fp16',
17754     'vfpv3xd', 'vfpv3xd-fp16', 'neon-vfpv3', 'neon-fp16', 'vfpv4',
17755     'vfpv4-d16', 'fpv4-sp-d16', 'neon-vfpv4', 'fpv5-d16',
17756     'fpv5-sp-d16', 'fp-armv8', 'neon-fp-armv8' and
17757     'crypto-neon-fp-armv8'.  Note that 'neon' is an alias for
17758     'neon-vfpv3' and 'vfp' is an alias for 'vfpv2'.
17759
17760     The setting 'auto' is the default and is special.  It causes the
17761     compiler to select the floating-point and Advanced SIMD
17762     instructions based on the settings of '-mcpu' and '-march'.
17763
17764     If the selected floating-point hardware includes the NEON extension
17765     (e.g. '-mfpu=neon'), note that floating-point operations are not
17766     generated by GCC's auto-vectorization pass unless
17767     '-funsafe-math-optimizations' is also specified.  This is because
17768     NEON hardware does not fully implement the IEEE 754 standard for
17769     floating-point arithmetic (in particular denormal values are
17770     treated as zero), so the use of NEON instructions may lead to a
17771     loss of precision.
17772
17773     You can also set the fpu name at function level by using the
17774     'target("fpu=")' function attributes (*note ARM Function
17775     Attributes::) or pragmas (*note Function Specific Option
17776     Pragmas::).
17777
17778'-mfp16-format=NAME'
17779     Specify the format of the '__fp16' half-precision floating-point
17780     type.  Permissible names are 'none', 'ieee', and 'alternative'; the
17781     default is 'none', in which case the '__fp16' type is not defined.
17782     *Note Half-Precision::, for more information.
17783
17784'-mstructure-size-boundary=N'
17785     The sizes of all structures and unions are rounded up to a multiple
17786     of the number of bits set by this option.  Permissible values are
17787     8, 32 and 64.  The default value varies for different toolchains.
17788     For the COFF targeted toolchain the default value is 8.  A value of
17789     64 is only allowed if the underlying ABI supports it.
17790
17791     Specifying a larger number can produce faster, more efficient code,
17792     but can also increase the size of the program.  Different values
17793     are potentially incompatible.  Code compiled with one value cannot
17794     necessarily expect to work with code or libraries compiled with
17795     another value, if they exchange information using structures or
17796     unions.
17797
17798     This option is deprecated.
17799
17800'-mabort-on-noreturn'
17801     Generate a call to the function 'abort' at the end of a 'noreturn'
17802     function.  It is executed if the function tries to return.
17803
17804'-mlong-calls'
17805'-mno-long-calls'
17806     Tells the compiler to perform function calls by first loading the
17807     address of the function into a register and then performing a
17808     subroutine call on this register.  This switch is needed if the
17809     target function lies outside of the 64-megabyte addressing range of
17810     the offset-based version of subroutine call instruction.
17811
17812     Even if this switch is enabled, not all function calls are turned
17813     into long calls.  The heuristic is that static functions, functions
17814     that have the 'short_call' attribute, functions that are inside the
17815     scope of a '#pragma no_long_calls' directive, and functions whose
17816     definitions have already been compiled within the current
17817     compilation unit are not turned into long calls.  The exceptions to
17818     this rule are that weak function definitions, functions with the
17819     'long_call' attribute or the 'section' attribute, and functions
17820     that are within the scope of a '#pragma long_calls' directive are
17821     always turned into long calls.
17822
17823     This feature is not enabled by default.  Specifying
17824     '-mno-long-calls' restores the default behavior, as does placing
17825     the function calls within the scope of a '#pragma long_calls_off'
17826     directive.  Note these switches have no effect on how the compiler
17827     generates code to handle function calls via function pointers.
17828
17829'-msingle-pic-base'
17830     Treat the register used for PIC addressing as read-only, rather
17831     than loading it in the prologue for each function.  The runtime
17832     system is responsible for initializing this register with an
17833     appropriate value before execution begins.
17834
17835'-mpic-register=REG'
17836     Specify the register to be used for PIC addressing.  For standard
17837     PIC base case, the default is any suitable register determined by
17838     compiler.  For single PIC base case, the default is 'R9' if target
17839     is EABI based or stack-checking is enabled, otherwise the default
17840     is 'R10'.
17841
17842'-mpic-data-is-text-relative'
17843     Assume that the displacement between the text and data segments is
17844     fixed at static link time.  This permits using PC-relative
17845     addressing operations to access data known to be in the data
17846     segment.  For non-VxWorks RTP targets, this option is enabled by
17847     default.  When disabled on such targets, it will enable
17848     '-msingle-pic-base' by default.
17849
17850'-mpoke-function-name'
17851     Write the name of each function into the text section, directly
17852     preceding the function prologue.  The generated code is similar to
17853     this:
17854
17855               t0
17856                   .ascii "arm_poke_function_name", 0
17857                   .align
17858               t1
17859                   .word 0xff000000 + (t1 - t0)
17860               arm_poke_function_name
17861                   mov     ip, sp
17862                   stmfd   sp!, {fp, ip, lr, pc}
17863                   sub     fp, ip, #4
17864
17865     When performing a stack backtrace, code can inspect the value of
17866     'pc' stored at 'fp + 0'.  If the trace function then looks at
17867     location 'pc - 12' and the top 8 bits are set, then we know that
17868     there is a function name embedded immediately preceding this
17869     location and has length '((pc[-3]) & 0xff000000)'.
17870
17871'-mthumb'
17872'-marm'
17873
17874     Select between generating code that executes in ARM and Thumb
17875     states.  The default for most configurations is to generate code
17876     that executes in ARM state, but the default can be changed by
17877     configuring GCC with the '--with-mode='STATE configure option.
17878
17879     You can also override the ARM and Thumb mode for each function by
17880     using the 'target("thumb")' and 'target("arm")' function attributes
17881     (*note ARM Function Attributes::) or pragmas (*note Function
17882     Specific Option Pragmas::).
17883
17884'-mflip-thumb'
17885     Switch ARM/Thumb modes on alternating functions.  This option is
17886     provided for regression testing of mixed Thumb/ARM code generation,
17887     and is not intended for ordinary use in compiling code.
17888
17889'-mtpcs-frame'
17890     Generate a stack frame that is compliant with the Thumb Procedure
17891     Call Standard for all non-leaf functions.  (A leaf function is one
17892     that does not call any other functions.)  The default is
17893     '-mno-tpcs-frame'.
17894
17895'-mtpcs-leaf-frame'
17896     Generate a stack frame that is compliant with the Thumb Procedure
17897     Call Standard for all leaf functions.  (A leaf function is one that
17898     does not call any other functions.)  The default is
17899     '-mno-apcs-leaf-frame'.
17900
17901'-mcallee-super-interworking'
17902     Gives all externally visible functions in the file being compiled
17903     an ARM instruction set header which switches to Thumb mode before
17904     executing the rest of the function.  This allows these functions to
17905     be called from non-interworking code.  This option is not valid in
17906     AAPCS configurations because interworking is enabled by default.
17907
17908'-mcaller-super-interworking'
17909     Allows calls via function pointers (including virtual functions) to
17910     execute correctly regardless of whether the target code has been
17911     compiled for interworking or not.  There is a small overhead in the
17912     cost of executing a function pointer if this option is enabled.
17913     This option is not valid in AAPCS configurations because
17914     interworking is enabled by default.
17915
17916'-mtp=NAME'
17917     Specify the access model for the thread local storage pointer.  The
17918     valid models are 'soft', which generates calls to
17919     '__aeabi_read_tp', 'cp15', which fetches the thread pointer from
17920     'cp15' directly (supported in the arm6k architecture), and 'auto',
17921     which uses the best available method for the selected processor.
17922     The default setting is 'auto'.
17923
17924'-mtls-dialect=DIALECT'
17925     Specify the dialect to use for accessing thread local storage.  Two
17926     DIALECTs are supported--'gnu' and 'gnu2'.  The 'gnu' dialect
17927     selects the original GNU scheme for supporting local and global
17928     dynamic TLS models.  The 'gnu2' dialect selects the GNU descriptor
17929     scheme, which provides better performance for shared libraries.
17930     The GNU descriptor scheme is compatible with the original scheme,
17931     but does require new assembler, linker and library support.
17932     Initial and local exec TLS models are unaffected by this option and
17933     always use the original scheme.
17934
17935'-mword-relocations'
17936     Only generate absolute relocations on word-sized values (i.e.
17937     R_ARM_ABS32).  This is enabled by default on targets (uClinux,
17938     SymbianOS) where the runtime loader imposes this restriction, and
17939     when '-fpic' or '-fPIC' is specified.  This option conflicts with
17940     '-mslow-flash-data'.
17941
17942'-mfix-cortex-m3-ldrd'
17943     Some Cortex-M3 cores can cause data corruption when 'ldrd'
17944     instructions with overlapping destination and base registers are
17945     used.  This option avoids generating these instructions.  This
17946     option is enabled by default when '-mcpu=cortex-m3' is specified.
17947
17948'-munaligned-access'
17949'-mno-unaligned-access'
17950     Enables (or disables) reading and writing of 16- and 32- bit values
17951     from addresses that are not 16- or 32- bit aligned.  By default
17952     unaligned access is disabled for all pre-ARMv6, all ARMv6-M and for
17953     ARMv8-M Baseline architectures, and enabled for all other
17954     architectures.  If unaligned access is not enabled then words in
17955     packed data structures are accessed a byte at a time.
17956
17957     The ARM attribute 'Tag_CPU_unaligned_access' is set in the
17958     generated object file to either true or false, depending upon the
17959     setting of this option.  If unaligned access is enabled then the
17960     preprocessor symbol '__ARM_FEATURE_UNALIGNED' is also defined.
17961
17962'-mneon-for-64bits'
17963     This option is deprecated and has no effect.
17964
17965'-mslow-flash-data'
17966     Assume loading data from flash is slower than fetching instruction.
17967     Therefore literal load is minimized for better performance.  This
17968     option is only supported when compiling for ARMv7 M-profile and off
17969     by default.  It conflicts with '-mword-relocations'.
17970
17971'-masm-syntax-unified'
17972     Assume inline assembler is using unified asm syntax.  The default
17973     is currently off which implies divided syntax.  This option has no
17974     impact on Thumb2.  However, this may change in future releases of
17975     GCC. Divided syntax should be considered deprecated.
17976
17977'-mrestrict-it'
17978     Restricts generation of IT blocks to conform to the rules of
17979     ARMv8-A. IT blocks can only contain a single 16-bit instruction
17980     from a select set of instructions.  This option is on by default
17981     for ARMv8-A Thumb mode.
17982
17983'-mprint-tune-info'
17984     Print CPU tuning information as comment in assembler file.  This is
17985     an option used only for regression testing of the compiler and not
17986     intended for ordinary use in compiling code.  This option is
17987     disabled by default.
17988
17989'-mverbose-cost-dump'
17990     Enable verbose cost model dumping in the debug dump files.  This
17991     option is provided for use in debugging the compiler.
17992
17993'-mpure-code'
17994     Do not allow constant data to be placed in code sections.
17995     Additionally, when compiling for ELF object format give all text
17996     sections the ELF processor-specific section attribute
17997     'SHF_ARM_PURECODE'.  This option is only available when generating
17998     non-pic code for M-profile targets.
17999
18000'-mcmse'
18001     Generate secure code as per the "ARMv8-M Security Extensions:
18002     Requirements on Development Tools Engineering Specification", which
18003     can be found on
18004     <http://infocenter.arm.com/help/topic/com.arm.doc.ecm0359818/ECM0359818_armv8m_security_extensions_reqs_on_dev_tools_1_0.pdf>.
18005
18006'-mfdpic'
18007'-mno-fdpic'
18008     Select the FDPIC ABI, which uses 64-bit function descriptors to
18009     represent pointers to functions.  When the compiler is configured
18010     for 'arm-*-uclinuxfdpiceabi' targets, this option is on by default
18011     and implies '-fPIE' if none of the PIC/PIE-related options is
18012     provided.  On other targets, it only enables the FDPIC-specific
18013     code generation features, and the user should explicitly provide
18014     the PIC/PIE-related options as needed.
18015
18016     Note that static linking is not supported because it would still
18017     involve the dynamic linker when the program self-relocates.  If
18018     such behavior is acceptable, use -static and -Wl,-dynamic-linker
18019     options.
18020
18021     The opposite '-mno-fdpic' option is useful (and required) to build
18022     the Linux kernel using the same ('arm-*-uclinuxfdpiceabi')
18023     toolchain as the one used to build the userland programs.
18024
18025
18026File: gcc.info,  Node: AVR Options,  Next: Blackfin Options,  Prev: ARM Options,  Up: Submodel Options
18027
180283.19.6 AVR Options
18029------------------
18030
18031These options are defined for AVR implementations:
18032
18033'-mmcu=MCU'
18034     Specify Atmel AVR instruction set architectures (ISA) or MCU type.
18035
18036     The default for this option is 'avr2'.
18037
18038     GCC supports the following AVR devices and ISAs:
18039
18040     'avr2'
18041          "Classic" devices with up to 8 KiB of program memory.
18042          MCU = 'attiny22', 'attiny26', 'at90s2313', 'at90s2323',
18043          'at90s2333', 'at90s2343', 'at90s4414', 'at90s4433',
18044          'at90s4434', 'at90c8534', 'at90s8515', 'at90s8535'.
18045
18046     'avr25'
18047          "Classic" devices with up to 8 KiB of program memory and with
18048          the 'MOVW' instruction.
18049          MCU = 'attiny13', 'attiny13a', 'attiny24', 'attiny24a',
18050          'attiny25', 'attiny261', 'attiny261a', 'attiny2313',
18051          'attiny2313a', 'attiny43u', 'attiny44', 'attiny44a',
18052          'attiny45', 'attiny48', 'attiny441', 'attiny461',
18053          'attiny461a', 'attiny4313', 'attiny84', 'attiny84a',
18054          'attiny85', 'attiny87', 'attiny88', 'attiny828', 'attiny841',
18055          'attiny861', 'attiny861a', 'ata5272', 'ata6616c', 'at86rf401'.
18056
18057     'avr3'
18058          "Classic" devices with 16 KiB up to 64 KiB of program memory.
18059          MCU = 'at76c711', 'at43usb355'.
18060
18061     'avr31'
18062          "Classic" devices with 128 KiB of program memory.
18063          MCU = 'atmega103', 'at43usb320'.
18064
18065     'avr35'
18066          "Classic" devices with 16 KiB up to 64 KiB of program memory
18067          and with the 'MOVW' instruction.
18068          MCU = 'attiny167', 'attiny1634', 'atmega8u2', 'atmega16u2',
18069          'atmega32u2', 'ata5505', 'ata6617c', 'ata664251', 'at90usb82',
18070          'at90usb162'.
18071
18072     'avr4'
18073          "Enhanced" devices with up to 8 KiB of program memory.
18074          MCU = 'atmega48', 'atmega48a', 'atmega48p', 'atmega48pa',
18075          'atmega48pb', 'atmega8', 'atmega8a', 'atmega8hva', 'atmega88',
18076          'atmega88a', 'atmega88p', 'atmega88pa', 'atmega88pb',
18077          'atmega8515', 'atmega8535', 'ata6285', 'ata6286', 'ata6289',
18078          'ata6612c', 'at90pwm1', 'at90pwm2', 'at90pwm2b', 'at90pwm3',
18079          'at90pwm3b', 'at90pwm81'.
18080
18081     'avr5'
18082          "Enhanced" devices with 16 KiB up to 64 KiB of program memory.
18083
18084          MCU = 'atmega16', 'atmega16a', 'atmega16hva', 'atmega16hva2',
18085          'atmega16hvb', 'atmega16hvbrevb', 'atmega16m1', 'atmega16u4',
18086          'atmega161', 'atmega162', 'atmega163', 'atmega164a',
18087          'atmega164p', 'atmega164pa', 'atmega165', 'atmega165a',
18088          'atmega165p', 'atmega165pa', 'atmega168', 'atmega168a',
18089          'atmega168p', 'atmega168pa', 'atmega168pb', 'atmega169',
18090          'atmega169a', 'atmega169p', 'atmega169pa', 'atmega32',
18091          'atmega32a', 'atmega32c1', 'atmega32hvb', 'atmega32hvbrevb',
18092          'atmega32m1', 'atmega32u4', 'atmega32u6', 'atmega323',
18093          'atmega324a', 'atmega324p', 'atmega324pa', 'atmega325',
18094          'atmega325a', 'atmega325p', 'atmega325pa', 'atmega328',
18095          'atmega328p', 'atmega328pb', 'atmega329', 'atmega329a',
18096          'atmega329p', 'atmega329pa', 'atmega3250', 'atmega3250a',
18097          'atmega3250p', 'atmega3250pa', 'atmega3290', 'atmega3290a',
18098          'atmega3290p', 'atmega3290pa', 'atmega406', 'atmega64',
18099          'atmega64a', 'atmega64c1', 'atmega64hve', 'atmega64hve2',
18100          'atmega64m1', 'atmega64rfr2', 'atmega640', 'atmega644',
18101          'atmega644a', 'atmega644p', 'atmega644pa', 'atmega644rfr2',
18102          'atmega645', 'atmega645a', 'atmega645p', 'atmega649',
18103          'atmega649a', 'atmega649p', 'atmega6450', 'atmega6450a',
18104          'atmega6450p', 'atmega6490', 'atmega6490a', 'atmega6490p',
18105          'ata5795', 'ata5790', 'ata5790n', 'ata5791', 'ata6613c',
18106          'ata6614q', 'ata5782', 'ata5831', 'ata8210', 'ata8510',
18107          'ata5702m322', 'at90pwm161', 'at90pwm216', 'at90pwm316',
18108          'at90can32', 'at90can64', 'at90scr100', 'at90usb646',
18109          'at90usb647', 'at94k', 'm3000'.
18110
18111     'avr51'
18112          "Enhanced" devices with 128 KiB of program memory.
18113          MCU = 'atmega128', 'atmega128a', 'atmega128rfa1',
18114          'atmega128rfr2', 'atmega1280', 'atmega1281', 'atmega1284',
18115          'atmega1284p', 'atmega1284rfr2', 'at90can128', 'at90usb1286',
18116          'at90usb1287'.
18117
18118     'avr6'
18119          "Enhanced" devices with 3-byte PC, i.e. with more than 128 KiB
18120          of program memory.
18121          MCU = 'atmega256rfr2', 'atmega2560', 'atmega2561',
18122          'atmega2564rfr2'.
18123
18124     'avrxmega2'
18125          "XMEGA" devices with more than 8 KiB and up to 64 KiB of
18126          program memory.
18127          MCU = 'atxmega8e5', 'atxmega16a4', 'atxmega16a4u',
18128          'atxmega16c4', 'atxmega16d4', 'atxmega16e5', 'atxmega32a4',
18129          'atxmega32a4u', 'atxmega32c3', 'atxmega32c4', 'atxmega32d3',
18130          'atxmega32d4', 'atxmega32e5'.
18131
18132     'avrxmega3'
18133          "XMEGA" devices with up to 64 KiB of combined program memory
18134          and RAM, and with program memory visible in the RAM address
18135          space.
18136          MCU = 'attiny202', 'attiny204', 'attiny212', 'attiny214',
18137          'attiny402', 'attiny404', 'attiny406', 'attiny412',
18138          'attiny414', 'attiny416', 'attiny417', 'attiny804',
18139          'attiny806', 'attiny807', 'attiny814', 'attiny816',
18140          'attiny817', 'attiny1604', 'attiny1606', 'attiny1607',
18141          'attiny1614', 'attiny1616', 'attiny1617', 'attiny3214',
18142          'attiny3216', 'attiny3217', 'atmega808', 'atmega809',
18143          'atmega1608', 'atmega1609', 'atmega3208', 'atmega3209',
18144          'atmega4808', 'atmega4809'.
18145
18146     'avrxmega4'
18147          "XMEGA" devices with more than 64 KiB and up to 128 KiB of
18148          program memory.
18149          MCU = 'atxmega64a3', 'atxmega64a3u', 'atxmega64a4u',
18150          'atxmega64b1', 'atxmega64b3', 'atxmega64c3', 'atxmega64d3',
18151          'atxmega64d4'.
18152
18153     'avrxmega5'
18154          "XMEGA" devices with more than 64 KiB and up to 128 KiB of
18155          program memory and more than 64 KiB of RAM.
18156          MCU = 'atxmega64a1', 'atxmega64a1u'.
18157
18158     'avrxmega6'
18159          "XMEGA" devices with more than 128 KiB of program memory.
18160          MCU = 'atxmega128a3', 'atxmega128a3u', 'atxmega128b1',
18161          'atxmega128b3', 'atxmega128c3', 'atxmega128d3',
18162          'atxmega128d4', 'atxmega192a3', 'atxmega192a3u',
18163          'atxmega192c3', 'atxmega192d3', 'atxmega256a3',
18164          'atxmega256a3b', 'atxmega256a3bu', 'atxmega256a3u',
18165          'atxmega256c3', 'atxmega256d3', 'atxmega384c3',
18166          'atxmega384d3'.
18167
18168     'avrxmega7'
18169          "XMEGA" devices with more than 128 KiB of program memory and
18170          more than 64 KiB of RAM.
18171          MCU = 'atxmega128a1', 'atxmega128a1u', 'atxmega128a4u'.
18172
18173     'avrtiny'
18174          "TINY" Tiny core devices with 512 B up to 4 KiB of program
18175          memory.
18176          MCU = 'attiny4', 'attiny5', 'attiny9', 'attiny10', 'attiny20',
18177          'attiny40'.
18178
18179     'avr1'
18180          This ISA is implemented by the minimal AVR core and supported
18181          for assembler only.
18182          MCU = 'attiny11', 'attiny12', 'attiny15', 'attiny28',
18183          'at90s1200'.
18184
18185'-mabsdata'
18186
18187     Assume that all data in static storage can be accessed by LDS / STS
18188     instructions.  This option has only an effect on reduced Tiny
18189     devices like ATtiny40.  See also the 'absdata' *note variable
18190     attribute: AVR Variable Attributes.
18191
18192'-maccumulate-args'
18193     Accumulate outgoing function arguments and acquire/release the
18194     needed stack space for outgoing function arguments once in function
18195     prologue/epilogue.  Without this option, outgoing arguments are
18196     pushed before calling a function and popped afterwards.
18197
18198     Popping the arguments after the function call can be expensive on
18199     AVR so that accumulating the stack space might lead to smaller
18200     executables because arguments need not be removed from the stack
18201     after such a function call.
18202
18203     This option can lead to reduced code size for functions that
18204     perform several calls to functions that get their arguments on the
18205     stack like calls to printf-like functions.
18206
18207'-mbranch-cost=COST'
18208     Set the branch costs for conditional branch instructions to COST.
18209     Reasonable values for COST are small, non-negative integers.  The
18210     default branch cost is 0.
18211
18212'-mcall-prologues'
18213     Functions prologues/epilogues are expanded as calls to appropriate
18214     subroutines.  Code size is smaller.
18215
18216'-mdouble=BITS'
18217'-mlong-double=BITS'
18218     Set the size (in bits) of the 'double' or 'long double' type,
18219     respectively.  Possible values for BITS are 32 and 64.  Whether or
18220     not a specific value for BITS is allowed depends on the
18221     '--with-double=' and '--with-long-double='
18222     configure options (https://gcc.gnu.org/install/configure.html#avr),
18223     and the same applies for the default values of the options.
18224
18225'-mgas-isr-prologues'
18226     Interrupt service routines (ISRs) may use the '__gcc_isr' pseudo
18227     instruction supported by GNU Binutils.  If this option is on, the
18228     feature can still be disabled for individual ISRs by means of the
18229     *note 'no_gccisr': AVR Function Attributes. function attribute.
18230     This feature is activated per default if optimization is on (but
18231     not with '-Og', *note Optimize Options::), and if GNU Binutils
18232     support PR21683 (https://sourceware.org/PR21683).
18233
18234'-mint8'
18235     Assume 'int' to be 8-bit integer.  This affects the sizes of all
18236     types: a 'char' is 1 byte, an 'int' is 1 byte, a 'long' is 2 bytes,
18237     and 'long long' is 4 bytes.  Please note that this option does not
18238     conform to the C standards, but it results in smaller code size.
18239
18240'-mmain-is-OS_task'
18241     Do not save registers in 'main'.  The effect is the same like
18242     attaching attribute *note 'OS_task': AVR Function Attributes. to
18243     'main'.  It is activated per default if optimization is on.
18244
18245'-mn-flash=NUM'
18246     Assume that the flash memory has a size of NUM times 64 KiB.
18247
18248'-mno-interrupts'
18249     Generated code is not compatible with hardware interrupts.  Code
18250     size is smaller.
18251
18252'-mrelax'
18253     Try to replace 'CALL' resp. 'JMP' instruction by the shorter
18254     'RCALL' resp. 'RJMP' instruction if applicable.  Setting '-mrelax'
18255     just adds the '--mlink-relax' option to the assembler's command
18256     line and the '--relax' option to the linker's command line.
18257
18258     Jump relaxing is performed by the linker because jump offsets are
18259     not known before code is located.  Therefore, the assembler code
18260     generated by the compiler is the same, but the instructions in the
18261     executable may differ from instructions in the assembler code.
18262
18263     Relaxing must be turned on if linker stubs are needed, see the
18264     section on 'EIND' and linker stubs below.
18265
18266'-mrmw'
18267     Assume that the device supports the Read-Modify-Write instructions
18268     'XCH', 'LAC', 'LAS' and 'LAT'.
18269
18270'-mshort-calls'
18271
18272     Assume that 'RJMP' and 'RCALL' can target the whole program memory.
18273
18274     This option is used internally for multilib selection.  It is not
18275     an optimization option, and you don't need to set it by hand.
18276
18277'-msp8'
18278     Treat the stack pointer register as an 8-bit register, i.e. assume
18279     the high byte of the stack pointer is zero.  In general, you don't
18280     need to set this option by hand.
18281
18282     This option is used internally by the compiler to select and build
18283     multilibs for architectures 'avr2' and 'avr25'.  These
18284     architectures mix devices with and without 'SPH'.  For any setting
18285     other than '-mmcu=avr2' or '-mmcu=avr25' the compiler driver adds
18286     or removes this option from the compiler proper's command line,
18287     because the compiler then knows if the device or architecture has
18288     an 8-bit stack pointer and thus no 'SPH' register or not.
18289
18290'-mstrict-X'
18291     Use address register 'X' in a way proposed by the hardware.  This
18292     means that 'X' is only used in indirect, post-increment or
18293     pre-decrement addressing.
18294
18295     Without this option, the 'X' register may be used in the same way
18296     as 'Y' or 'Z' which then is emulated by additional instructions.
18297     For example, loading a value with 'X+const' addressing with a small
18298     non-negative 'const < 64' to a register RN is performed as
18299
18300          adiw r26, const   ; X += const
18301          ld   RN, X        ; RN = *X
18302          sbiw r26, const   ; X -= const
18303
18304'-mtiny-stack'
18305     Only change the lower 8 bits of the stack pointer.
18306
18307'-mfract-convert-truncate'
18308     Allow to use truncation instead of rounding towards zero for
18309     fractional fixed-point types.
18310
18311'-nodevicelib'
18312     Don't link against AVR-LibC's device specific library 'lib<mcu>.a'.
18313
18314'-nodevicespecs'
18315     Don't add '-specs=device-specs/specs-MCU' to the compiler driver's
18316     command line.  The user takes responsibility for supplying the
18317     sub-processes like compiler proper, assembler and linker with
18318     appropriate command line options.  This means that the user has to
18319     supply her private device specs file by means of
18320     '-specs=PATH-TO-SPECS-FILE'.  There is no more need for option
18321     '-mmcu=MCU'.
18322
18323     This option can also serve as a replacement for the older way of
18324     specifying custom device-specs files that needed '-B SOME-PATH' to
18325     point to a directory which contains a folder named 'device-specs'
18326     which contains a specs file named 'specs-MCU', where MCU was
18327     specified by '-mmcu=MCU'.
18328
18329'-Waddr-space-convert'
18330     Warn about conversions between address spaces in the case where the
18331     resulting address space is not contained in the incoming address
18332     space.
18333
18334'-Wmisspelled-isr'
18335     Warn if the ISR is misspelled, i.e. without __vector prefix.
18336     Enabled by default.
18337
183383.19.6.1 'EIND' and Devices with More Than 128 Ki Bytes of Flash
18339................................................................
18340
18341Pointers in the implementation are 16 bits wide.  The address of a
18342function or label is represented as word address so that indirect jumps
18343and calls can target any code address in the range of 64 Ki words.
18344
18345 In order to facilitate indirect jump on devices with more than 128 Ki
18346bytes of program memory space, there is a special function register
18347called 'EIND' that serves as most significant part of the target address
18348when 'EICALL' or 'EIJMP' instructions are used.
18349
18350 Indirect jumps and calls on these devices are handled as follows by the
18351compiler and are subject to some limitations:
18352
18353   * The compiler never sets 'EIND'.
18354
18355   * The compiler uses 'EIND' implicitly in 'EICALL'/'EIJMP'
18356     instructions or might read 'EIND' directly in order to emulate an
18357     indirect call/jump by means of a 'RET' instruction.
18358
18359   * The compiler assumes that 'EIND' never changes during the startup
18360     code or during the application.  In particular, 'EIND' is not
18361     saved/restored in function or interrupt service routine
18362     prologue/epilogue.
18363
18364   * For indirect calls to functions and computed goto, the linker
18365     generates _stubs_.  Stubs are jump pads sometimes also called
18366     _trampolines_.  Thus, the indirect call/jump jumps to such a stub.
18367     The stub contains a direct jump to the desired address.
18368
18369   * Linker relaxation must be turned on so that the linker generates
18370     the stubs correctly in all situations.  See the compiler option
18371     '-mrelax' and the linker option '--relax'.  There are corner cases
18372     where the linker is supposed to generate stubs but aborts without
18373     relaxation and without a helpful error message.
18374
18375   * The default linker script is arranged for code with 'EIND = 0'.  If
18376     code is supposed to work for a setup with 'EIND != 0', a custom
18377     linker script has to be used in order to place the sections whose
18378     name start with '.trampolines' into the segment where 'EIND' points
18379     to.
18380
18381   * The startup code from libgcc never sets 'EIND'.  Notice that
18382     startup code is a blend of code from libgcc and AVR-LibC. For the
18383     impact of AVR-LibC on 'EIND', see the
18384     AVR-LibC user manual (http://nongnu.org/avr-libc/user-manual/).
18385
18386   * It is legitimate for user-specific startup code to set up 'EIND'
18387     early, for example by means of initialization code located in
18388     section '.init3'.  Such code runs prior to general startup code
18389     that initializes RAM and calls constructors, but after the bit of
18390     startup code from AVR-LibC that sets 'EIND' to the segment where
18391     the vector table is located.
18392          #include <avr/io.h>
18393
18394          static void
18395          __attribute__((section(".init3"),naked,used,no_instrument_function))
18396          init3_set_eind (void)
18397          {
18398            __asm volatile ("ldi r24,pm_hh8(__trampolines_start)\n\t"
18399                            "out %i0,r24" :: "n" (&EIND) : "r24","memory");
18400          }
18401
18402     The '__trampolines_start' symbol is defined in the linker script.
18403
18404   * Stubs are generated automatically by the linker if the following
18405     two conditions are met:
18406
18407        - The address of a label is taken by means of the 'gs' modifier
18408          (short for _generate stubs_) like so:
18409               LDI r24, lo8(gs(FUNC))
18410               LDI r25, hi8(gs(FUNC))
18411        - The final location of that label is in a code segment
18412          _outside_ the segment where the stubs are located.
18413
18414   * The compiler emits such 'gs' modifiers for code labels in the
18415     following situations:
18416        - Taking address of a function or code label.
18417        - Computed goto.
18418        - If prologue-save function is used, see '-mcall-prologues'
18419          command-line option.
18420        - Switch/case dispatch tables.  If you do not want such dispatch
18421          tables you can specify the '-fno-jump-tables' command-line
18422          option.
18423        - C and C++ constructors/destructors called during
18424          startup/shutdown.
18425        - If the tools hit a 'gs()' modifier explained above.
18426
18427   * Jumping to non-symbolic addresses like so is _not_ supported:
18428
18429          int main (void)
18430          {
18431              /* Call function at word address 0x2 */
18432              return ((int(*)(void)) 0x2)();
18433          }
18434
18435     Instead, a stub has to be set up, i.e. the function has to be
18436     called through a symbol ('func_4' in the example):
18437
18438          int main (void)
18439          {
18440              extern int func_4 (void);
18441
18442              /* Call function at byte address 0x4 */
18443              return func_4();
18444          }
18445
18446     and the application be linked with '-Wl,--defsym,func_4=0x4'.
18447     Alternatively, 'func_4' can be defined in the linker script.
18448
184493.19.6.2 Handling of the 'RAMPD', 'RAMPX', 'RAMPY' and 'RAMPZ' Special Function Registers
18450.........................................................................................
18451
18452Some AVR devices support memories larger than the 64 KiB range that can
18453be accessed with 16-bit pointers.  To access memory locations outside
18454this 64 KiB range, the content of a 'RAMP' register is used as high part
18455of the address: The 'X', 'Y', 'Z' address register is concatenated with
18456the 'RAMPX', 'RAMPY', 'RAMPZ' special function register, respectively,
18457to get a wide address.  Similarly, 'RAMPD' is used together with direct
18458addressing.
18459
18460   * The startup code initializes the 'RAMP' special function registers
18461     with zero.
18462
18463   * If a *note named address space: AVR Named Address Spaces. other
18464     than generic or '__flash' is used, then 'RAMPZ' is set as needed
18465     before the operation.
18466
18467   * If the device supports RAM larger than 64 KiB and the compiler
18468     needs to change 'RAMPZ' to accomplish an operation, 'RAMPZ' is
18469     reset to zero after the operation.
18470
18471   * If the device comes with a specific 'RAMP' register, the ISR
18472     prologue/epilogue saves/restores that SFR and initializes it with
18473     zero in case the ISR code might (implicitly) use it.
18474
18475   * RAM larger than 64 KiB is not supported by GCC for AVR targets.  If
18476     you use inline assembler to read from locations outside the 16-bit
18477     address range and change one of the 'RAMP' registers, you must
18478     reset it to zero after the access.
18479
184803.19.6.3 AVR Built-in Macros
18481............................
18482
18483GCC defines several built-in macros so that the user code can test for
18484the presence or absence of features.  Almost any of the following
18485built-in macros are deduced from device capabilities and thus triggered
18486by the '-mmcu=' command-line option.
18487
18488 For even more AVR-specific built-in macros see *note AVR Named Address
18489Spaces:: and *note AVR Built-in Functions::.
18490
18491'__AVR_ARCH__'
18492     Build-in macro that resolves to a decimal number that identifies
18493     the architecture and depends on the '-mmcu=MCU' option.  Possible
18494     values are:
18495
18496     '2', '25', '3', '31', '35', '4', '5', '51', '6'
18497
18498     for MCU='avr2', 'avr25', 'avr3', 'avr31', 'avr35', 'avr4', 'avr5',
18499     'avr51', 'avr6',
18500
18501     respectively and
18502
18503     '100', '102', '103', '104', '105', '106', '107'
18504
18505     for MCU='avrtiny', 'avrxmega2', 'avrxmega3', 'avrxmega4',
18506     'avrxmega5', 'avrxmega6', 'avrxmega7', respectively.  If MCU
18507     specifies a device, this built-in macro is set accordingly.  For
18508     example, with '-mmcu=atmega8' the macro is defined to '4'.
18509
18510'__AVR_DEVICE__'
18511     Setting '-mmcu=DEVICE' defines this built-in macro which reflects
18512     the device's name.  For example, '-mmcu=atmega8' defines the
18513     built-in macro '__AVR_ATmega8__', '-mmcu=attiny261a' defines
18514     '__AVR_ATtiny261A__', etc.
18515
18516     The built-in macros' names follow the scheme '__AVR_DEVICE__' where
18517     DEVICE is the device name as from the AVR user manual.  The
18518     difference between DEVICE in the built-in macro and DEVICE in
18519     '-mmcu=DEVICE' is that the latter is always lowercase.
18520
18521     If DEVICE is not a device but only a core architecture like
18522     'avr51', this macro is not defined.
18523
18524'__AVR_DEVICE_NAME__'
18525     Setting '-mmcu=DEVICE' defines this built-in macro to the device's
18526     name.  For example, with '-mmcu=atmega8' the macro is defined to
18527     'atmega8'.
18528
18529     If DEVICE is not a device but only a core architecture like
18530     'avr51', this macro is not defined.
18531
18532'__AVR_XMEGA__'
18533     The device / architecture belongs to the XMEGA family of devices.
18534
18535'__AVR_HAVE_ELPM__'
18536     The device has the 'ELPM' instruction.
18537
18538'__AVR_HAVE_ELPMX__'
18539     The device has the 'ELPM RN,Z' and 'ELPM RN,Z+' instructions.
18540
18541'__AVR_HAVE_MOVW__'
18542     The device has the 'MOVW' instruction to perform 16-bit
18543     register-register moves.
18544
18545'__AVR_HAVE_LPMX__'
18546     The device has the 'LPM RN,Z' and 'LPM RN,Z+' instructions.
18547
18548'__AVR_HAVE_MUL__'
18549     The device has a hardware multiplier.
18550
18551'__AVR_HAVE_JMP_CALL__'
18552     The device has the 'JMP' and 'CALL' instructions.  This is the case
18553     for devices with more than 8 KiB of program memory.
18554
18555'__AVR_HAVE_EIJMP_EICALL__'
18556'__AVR_3_BYTE_PC__'
18557     The device has the 'EIJMP' and 'EICALL' instructions.  This is the
18558     case for devices with more than 128 KiB of program memory.  This
18559     also means that the program counter (PC) is 3 bytes wide.
18560
18561'__AVR_2_BYTE_PC__'
18562     The program counter (PC) is 2 bytes wide.  This is the case for
18563     devices with up to 128 KiB of program memory.
18564
18565'__AVR_HAVE_8BIT_SP__'
18566'__AVR_HAVE_16BIT_SP__'
18567     The stack pointer (SP) register is treated as 8-bit respectively
18568     16-bit register by the compiler.  The definition of these macros is
18569     affected by '-mtiny-stack'.
18570
18571'__AVR_HAVE_SPH__'
18572'__AVR_SP8__'
18573     The device has the SPH (high part of stack pointer) special
18574     function register or has an 8-bit stack pointer, respectively.  The
18575     definition of these macros is affected by '-mmcu=' and in the cases
18576     of '-mmcu=avr2' and '-mmcu=avr25' also by '-msp8'.
18577
18578'__AVR_HAVE_RAMPD__'
18579'__AVR_HAVE_RAMPX__'
18580'__AVR_HAVE_RAMPY__'
18581'__AVR_HAVE_RAMPZ__'
18582     The device has the 'RAMPD', 'RAMPX', 'RAMPY', 'RAMPZ' special
18583     function register, respectively.
18584
18585'__NO_INTERRUPTS__'
18586     This macro reflects the '-mno-interrupts' command-line option.
18587
18588'__AVR_ERRATA_SKIP__'
18589'__AVR_ERRATA_SKIP_JMP_CALL__'
18590     Some AVR devices (AT90S8515, ATmega103) must not skip 32-bit
18591     instructions because of a hardware erratum.  Skip instructions are
18592     'SBRS', 'SBRC', 'SBIS', 'SBIC' and 'CPSE'.  The second macro is
18593     only defined if '__AVR_HAVE_JMP_CALL__' is also set.
18594
18595'__AVR_ISA_RMW__'
18596     The device has Read-Modify-Write instructions (XCH, LAC, LAS and
18597     LAT).
18598
18599'__AVR_SFR_OFFSET__=OFFSET'
18600     Instructions that can address I/O special function registers
18601     directly like 'IN', 'OUT', 'SBI', etc. may use a different address
18602     as if addressed by an instruction to access RAM like 'LD' or 'STS'.
18603     This offset depends on the device architecture and has to be
18604     subtracted from the RAM address in order to get the respective
18605     I/O address.
18606
18607'__AVR_SHORT_CALLS__'
18608     The '-mshort-calls' command line option is set.
18609
18610'__AVR_PM_BASE_ADDRESS__=ADDR'
18611     Some devices support reading from flash memory by means of 'LD*'
18612     instructions.  The flash memory is seen in the data address space
18613     at an offset of '__AVR_PM_BASE_ADDRESS__'.  If this macro is not
18614     defined, this feature is not available.  If defined, the address
18615     space is linear and there is no need to put '.rodata' into RAM.
18616     This is handled by the default linker description file, and is
18617     currently available for 'avrtiny' and 'avrxmega3'.  Even more
18618     convenient, there is no need to use address spaces like '__flash'
18619     or features like attribute 'progmem' and 'pgm_read_*'.
18620
18621'__WITH_AVRLIBC__'
18622     The compiler is configured to be used together with AVR-Libc.  See
18623     the '--with-avrlibc' configure option.
18624
18625'__HAVE_DOUBLE_MULTILIB__'
18626     Defined if '-mdouble=' acts as a multilib option.
18627
18628'__HAVE_DOUBLE32__'
18629'__HAVE_DOUBLE64__'
18630     Defined if the compiler supports 32-bit double resp.  64-bit
18631     double.  The actual layout is specified by option '-mdouble='.
18632
18633'__DEFAULT_DOUBLE__'
18634     The size in bits of 'double' if '-mdouble=' is not set.  To test
18635     the layout of 'double' in a program, use the built-in macro
18636     '__SIZEOF_DOUBLE__'.
18637
18638'__HAVE_LONG_DOUBLE32__'
18639'__HAVE_LONG_DOUBLE64__'
18640'__HAVE_LONG_DOUBLE_MULTILIB__'
18641'__DEFAULT_LONG_DOUBLE__'
18642     Same as above, but for 'long double' instead of 'double'.
18643
18644'__WITH_DOUBLE_COMPARISON__'
18645     Reflects the '--with-double-comparison={tristate|bool|libf7}'
18646     configure option (https://gcc.gnu.org/install/configure.html#avr)
18647     and is defined to '2' or '3'.
18648
18649'__WITH_LIBF7_LIBGCC__'
18650'__WITH_LIBF7_MATH__'
18651'__WITH_LIBF7_MATH_SYMBOLS__'
18652     Reflects the '--with-libf7={libgcc|math|math-symbols}'
18653     configure option (https://gcc.gnu.org/install/configure.html#avr).
18654
18655
18656File: gcc.info,  Node: Blackfin Options,  Next: C6X Options,  Prev: AVR Options,  Up: Submodel Options
18657
186583.19.7 Blackfin Options
18659-----------------------
18660
18661'-mcpu=CPU[-SIREVISION]'
18662     Specifies the name of the target Blackfin processor.  Currently,
18663     CPU can be one of 'bf512', 'bf514', 'bf516', 'bf518', 'bf522',
18664     'bf523', 'bf524', 'bf525', 'bf526', 'bf527', 'bf531', 'bf532',
18665     'bf533', 'bf534', 'bf536', 'bf537', 'bf538', 'bf539', 'bf542',
18666     'bf544', 'bf547', 'bf548', 'bf549', 'bf542m', 'bf544m', 'bf547m',
18667     'bf548m', 'bf549m', 'bf561', 'bf592'.
18668
18669     The optional SIREVISION specifies the silicon revision of the
18670     target Blackfin processor.  Any workarounds available for the
18671     targeted silicon revision are enabled.  If SIREVISION is 'none', no
18672     workarounds are enabled.  If SIREVISION is 'any', all workarounds
18673     for the targeted processor are enabled.  The '__SILICON_REVISION__'
18674     macro is defined to two hexadecimal digits representing the major
18675     and minor numbers in the silicon revision.  If SIREVISION is
18676     'none', the '__SILICON_REVISION__' is not defined.  If SIREVISION
18677     is 'any', the '__SILICON_REVISION__' is defined to be '0xffff'.  If
18678     this optional SIREVISION is not used, GCC assumes the latest known
18679     silicon revision of the targeted Blackfin processor.
18680
18681     GCC defines a preprocessor macro for the specified CPU.  For the
18682     'bfin-elf' toolchain, this option causes the hardware BSP provided
18683     by libgloss to be linked in if '-msim' is not given.
18684
18685     Without this option, 'bf532' is used as the processor by default.
18686
18687     Note that support for 'bf561' is incomplete.  For 'bf561', only the
18688     preprocessor macro is defined.
18689
18690'-msim'
18691     Specifies that the program will be run on the simulator.  This
18692     causes the simulator BSP provided by libgloss to be linked in.
18693     This option has effect only for 'bfin-elf' toolchain.  Certain
18694     other options, such as '-mid-shared-library' and '-mfdpic', imply
18695     '-msim'.
18696
18697'-momit-leaf-frame-pointer'
18698     Don't keep the frame pointer in a register for leaf functions.
18699     This avoids the instructions to save, set up and restore frame
18700     pointers and makes an extra register available in leaf functions.
18701
18702'-mspecld-anomaly'
18703     When enabled, the compiler ensures that the generated code does not
18704     contain speculative loads after jump instructions.  If this option
18705     is used, '__WORKAROUND_SPECULATIVE_LOADS' is defined.
18706
18707'-mno-specld-anomaly'
18708     Don't generate extra code to prevent speculative loads from
18709     occurring.
18710
18711'-mcsync-anomaly'
18712     When enabled, the compiler ensures that the generated code does not
18713     contain CSYNC or SSYNC instructions too soon after conditional
18714     branches.  If this option is used, '__WORKAROUND_SPECULATIVE_SYNCS'
18715     is defined.
18716
18717'-mno-csync-anomaly'
18718     Don't generate extra code to prevent CSYNC or SSYNC instructions
18719     from occurring too soon after a conditional branch.
18720
18721'-mlow64k'
18722     When enabled, the compiler is free to take advantage of the
18723     knowledge that the entire program fits into the low 64k of memory.
18724
18725'-mno-low64k'
18726     Assume that the program is arbitrarily large.  This is the default.
18727
18728'-mstack-check-l1'
18729     Do stack checking using information placed into L1 scratchpad
18730     memory by the uClinux kernel.
18731
18732'-mid-shared-library'
18733     Generate code that supports shared libraries via the library ID
18734     method.  This allows for execute in place and shared libraries in
18735     an environment without virtual memory management.  This option
18736     implies '-fPIC'.  With a 'bfin-elf' target, this option implies
18737     '-msim'.
18738
18739'-mno-id-shared-library'
18740     Generate code that doesn't assume ID-based shared libraries are
18741     being used.  This is the default.
18742
18743'-mleaf-id-shared-library'
18744     Generate code that supports shared libraries via the library ID
18745     method, but assumes that this library or executable won't link
18746     against any other ID shared libraries.  That allows the compiler to
18747     use faster code for jumps and calls.
18748
18749'-mno-leaf-id-shared-library'
18750     Do not assume that the code being compiled won't link against any
18751     ID shared libraries.  Slower code is generated for jump and call
18752     insns.
18753
18754'-mshared-library-id=n'
18755     Specifies the identification number of the ID-based shared library
18756     being compiled.  Specifying a value of 0 generates more compact
18757     code; specifying other values forces the allocation of that number
18758     to the current library but is no more space- or time-efficient than
18759     omitting this option.
18760
18761'-msep-data'
18762     Generate code that allows the data segment to be located in a
18763     different area of memory from the text segment.  This allows for
18764     execute in place in an environment without virtual memory
18765     management by eliminating relocations against the text section.
18766
18767'-mno-sep-data'
18768     Generate code that assumes that the data segment follows the text
18769     segment.  This is the default.
18770
18771'-mlong-calls'
18772'-mno-long-calls'
18773     Tells the compiler to perform function calls by first loading the
18774     address of the function into a register and then performing a
18775     subroutine call on this register.  This switch is needed if the
18776     target function lies outside of the 24-bit addressing range of the
18777     offset-based version of subroutine call instruction.
18778
18779     This feature is not enabled by default.  Specifying
18780     '-mno-long-calls' restores the default behavior.  Note these
18781     switches have no effect on how the compiler generates code to
18782     handle function calls via function pointers.
18783
18784'-mfast-fp'
18785     Link with the fast floating-point library.  This library relaxes
18786     some of the IEEE floating-point standard's rules for checking
18787     inputs against Not-a-Number (NAN), in the interest of performance.
18788
18789'-minline-plt'
18790     Enable inlining of PLT entries in function calls to functions that
18791     are not known to bind locally.  It has no effect without '-mfdpic'.
18792
18793'-mmulticore'
18794     Build a standalone application for multicore Blackfin processors.
18795     This option causes proper start files and link scripts supporting
18796     multicore to be used, and defines the macro '__BFIN_MULTICORE'.  It
18797     can only be used with '-mcpu=bf561[-SIREVISION]'.
18798
18799     This option can be used with '-mcorea' or '-mcoreb', which selects
18800     the one-application-per-core programming model.  Without '-mcorea'
18801     or '-mcoreb', the single-application/dual-core programming model is
18802     used.  In this model, the main function of Core B should be named
18803     as 'coreb_main'.
18804
18805     If this option is not used, the single-core application programming
18806     model is used.
18807
18808'-mcorea'
18809     Build a standalone application for Core A of BF561 when using the
18810     one-application-per-core programming model.  Proper start files and
18811     link scripts are used to support Core A, and the macro
18812     '__BFIN_COREA' is defined.  This option can only be used in
18813     conjunction with '-mmulticore'.
18814
18815'-mcoreb'
18816     Build a standalone application for Core B of BF561 when using the
18817     one-application-per-core programming model.  Proper start files and
18818     link scripts are used to support Core B, and the macro
18819     '__BFIN_COREB' is defined.  When this option is used, 'coreb_main'
18820     should be used instead of 'main'.  This option can only be used in
18821     conjunction with '-mmulticore'.
18822
18823'-msdram'
18824     Build a standalone application for SDRAM. Proper start files and
18825     link scripts are used to put the application into SDRAM, and the
18826     macro '__BFIN_SDRAM' is defined.  The loader should initialize
18827     SDRAM before loading the application.
18828
18829'-micplb'
18830     Assume that ICPLBs are enabled at run time.  This has an effect on
18831     certain anomaly workarounds.  For Linux targets, the default is to
18832     assume ICPLBs are enabled; for standalone applications the default
18833     is off.
18834
18835
18836File: gcc.info,  Node: C6X Options,  Next: CRIS Options,  Prev: Blackfin Options,  Up: Submodel Options
18837
188383.19.8 C6X Options
18839------------------
18840
18841'-march=NAME'
18842     This specifies the name of the target architecture.  GCC uses this
18843     name to determine what kind of instructions it can emit when
18844     generating assembly code.  Permissible names are: 'c62x', 'c64x',
18845     'c64x+', 'c67x', 'c67x+', 'c674x'.
18846
18847'-mbig-endian'
18848     Generate code for a big-endian target.
18849
18850'-mlittle-endian'
18851     Generate code for a little-endian target.  This is the default.
18852
18853'-msim'
18854     Choose startup files and linker script suitable for the simulator.
18855
18856'-msdata=default'
18857     Put small global and static data in the '.neardata' section, which
18858     is pointed to by register 'B14'.  Put small uninitialized global
18859     and static data in the '.bss' section, which is adjacent to the
18860     '.neardata' section.  Put small read-only data into the '.rodata'
18861     section.  The corresponding sections used for large pieces of data
18862     are '.fardata', '.far' and '.const'.
18863
18864'-msdata=all'
18865     Put all data, not just small objects, into the sections reserved
18866     for small data, and use addressing relative to the 'B14' register
18867     to access them.
18868
18869'-msdata=none'
18870     Make no use of the sections reserved for small data, and use
18871     absolute addresses to access all data.  Put all initialized global
18872     and static data in the '.fardata' section, and all uninitialized
18873     data in the '.far' section.  Put all constant data into the
18874     '.const' section.
18875
18876
18877File: gcc.info,  Node: CRIS Options,  Next: CR16 Options,  Prev: C6X Options,  Up: Submodel Options
18878
188793.19.9 CRIS Options
18880-------------------
18881
18882These options are defined specifically for the CRIS ports.
18883
18884'-march=ARCHITECTURE-TYPE'
18885'-mcpu=ARCHITECTURE-TYPE'
18886     Generate code for the specified architecture.  The choices for
18887     ARCHITECTURE-TYPE are 'v3', 'v8' and 'v10' for respectively
18888     ETRAX 4, ETRAX 100, and ETRAX 100 LX.  Default is 'v0' except for
18889     cris-axis-linux-gnu, where the default is 'v10'.
18890
18891'-mtune=ARCHITECTURE-TYPE'
18892     Tune to ARCHITECTURE-TYPE everything applicable about the generated
18893     code, except for the ABI and the set of available instructions.
18894     The choices for ARCHITECTURE-TYPE are the same as for
18895     '-march=ARCHITECTURE-TYPE'.
18896
18897'-mmax-stack-frame=N'
18898     Warn when the stack frame of a function exceeds N bytes.
18899
18900'-metrax4'
18901'-metrax100'
18902     The options '-metrax4' and '-metrax100' are synonyms for
18903     '-march=v3' and '-march=v8' respectively.
18904
18905'-mmul-bug-workaround'
18906'-mno-mul-bug-workaround'
18907     Work around a bug in the 'muls' and 'mulu' instructions for CPU
18908     models where it applies.  This option is active by default.
18909
18910'-mpdebug'
18911     Enable CRIS-specific verbose debug-related information in the
18912     assembly code.  This option also has the effect of turning off the
18913     '#NO_APP' formatted-code indicator to the assembler at the
18914     beginning of the assembly file.
18915
18916'-mcc-init'
18917     Do not use condition-code results from previous instruction; always
18918     emit compare and test instructions before use of condition codes.
18919
18920'-mno-side-effects'
18921     Do not emit instructions with side effects in addressing modes
18922     other than post-increment.
18923
18924'-mstack-align'
18925'-mno-stack-align'
18926'-mdata-align'
18927'-mno-data-align'
18928'-mconst-align'
18929'-mno-const-align'
18930     These options ('no-' options) arrange (eliminate arrangements) for
18931     the stack frame, individual data and constants to be aligned for
18932     the maximum single data access size for the chosen CPU model.  The
18933     default is to arrange for 32-bit alignment.  ABI details such as
18934     structure layout are not affected by these options.
18935
18936'-m32-bit'
18937'-m16-bit'
18938'-m8-bit'
18939     Similar to the stack- data- and const-align options above, these
18940     options arrange for stack frame, writable data and constants to all
18941     be 32-bit, 16-bit or 8-bit aligned.  The default is 32-bit
18942     alignment.
18943
18944'-mno-prologue-epilogue'
18945'-mprologue-epilogue'
18946     With '-mno-prologue-epilogue', the normal function prologue and
18947     epilogue which set up the stack frame are omitted and no return
18948     instructions or return sequences are generated in the code.  Use
18949     this option only together with visual inspection of the compiled
18950     code: no warnings or errors are generated when call-saved registers
18951     must be saved, or storage for local variables needs to be
18952     allocated.
18953
18954'-mno-gotplt'
18955'-mgotplt'
18956     With '-fpic' and '-fPIC', don't generate (do generate) instruction
18957     sequences that load addresses for functions from the PLT part of
18958     the GOT rather than (traditional on other architectures) calls to
18959     the PLT.  The default is '-mgotplt'.
18960
18961'-melf'
18962     Legacy no-op option only recognized with the cris-axis-elf and
18963     cris-axis-linux-gnu targets.
18964
18965'-mlinux'
18966     Legacy no-op option only recognized with the cris-axis-linux-gnu
18967     target.
18968
18969'-sim'
18970     This option, recognized for the cris-axis-elf, arranges to link
18971     with input-output functions from a simulator library.  Code,
18972     initialized data and zero-initialized data are allocated
18973     consecutively.
18974
18975'-sim2'
18976     Like '-sim', but pass linker options to locate initialized data at
18977     0x40000000 and zero-initialized data at 0x80000000.
18978
18979
18980File: gcc.info,  Node: CR16 Options,  Next: C-SKY Options,  Prev: CRIS Options,  Up: Submodel Options
18981
189823.19.10 CR16 Options
18983--------------------
18984
18985These options are defined specifically for the CR16 ports.
18986
18987'-mmac'
18988     Enable the use of multiply-accumulate instructions.  Disabled by
18989     default.
18990
18991'-mcr16cplus'
18992'-mcr16c'
18993     Generate code for CR16C or CR16C+ architecture.  CR16C+
18994     architecture is default.
18995
18996'-msim'
18997     Links the library libsim.a which is in compatible with simulator.
18998     Applicable to ELF compiler only.
18999
19000'-mint32'
19001     Choose integer type as 32-bit wide.
19002
19003'-mbit-ops'
19004     Generates 'sbit'/'cbit' instructions for bit manipulations.
19005
19006'-mdata-model=MODEL'
19007     Choose a data model.  The choices for MODEL are 'near', 'far' or
19008     'medium'.  'medium' is default.  However, 'far' is not valid with
19009     '-mcr16c', as the CR16C architecture does not support the far data
19010     model.
19011
19012
19013File: gcc.info,  Node: C-SKY Options,  Next: Darwin Options,  Prev: CR16 Options,  Up: Submodel Options
19014
190153.19.11 C-SKY Options
19016---------------------
19017
19018GCC supports these options when compiling for C-SKY V2 processors.
19019
19020'-march=ARCH'
19021     Specify the C-SKY target architecture.  Valid values for ARCH are:
19022     'ck801', 'ck802', 'ck803', 'ck807', and 'ck810'.  The default is
19023     'ck810'.
19024
19025'-mcpu=CPU'
19026     Specify the C-SKY target processor.  Valid values for CPU are:
19027     'ck801', 'ck801t', 'ck802', 'ck802t', 'ck802j', 'ck803', 'ck803h',
19028     'ck803t', 'ck803ht', 'ck803f', 'ck803fh', 'ck803e', 'ck803eh',
19029     'ck803et', 'ck803eht', 'ck803ef', 'ck803efh', 'ck803ft',
19030     'ck803eft', 'ck803efht', 'ck803r1', 'ck803hr1', 'ck803tr1',
19031     'ck803htr1', 'ck803fr1', 'ck803fhr1', 'ck803er1', 'ck803ehr1',
19032     'ck803etr1', 'ck803ehtr1', 'ck803efr1', 'ck803efhr1', 'ck803ftr1',
19033     'ck803eftr1', 'ck803efhtr1', 'ck803s', 'ck803st', 'ck803se',
19034     'ck803sf', 'ck803sef', 'ck803seft', 'ck807e', 'ck807ef', 'ck807',
19035     'ck807f', 'ck810e', 'ck810et', 'ck810ef', 'ck810eft', 'ck810',
19036     'ck810v', 'ck810f', 'ck810t', 'ck810fv', 'ck810tv', 'ck810ft', and
19037     'ck810ftv'.
19038
19039'-mbig-endian'
19040'-EB'
19041'-mlittle-endian'
19042'-EL'
19043
19044     Select big- or little-endian code.  The default is little-endian.
19045
19046'-mhard-float'
19047'-msoft-float'
19048
19049     Select hardware or software floating-point implementations.  The
19050     default is soft float.
19051
19052'-mdouble-float'
19053'-mno-double-float'
19054     When '-mhard-float' is in effect, enable generation of
19055     double-precision float instructions.  This is the default except
19056     when compiling for CK803.
19057
19058'-mfdivdu'
19059'-mno-fdivdu'
19060     When '-mhard-float' is in effect, enable generation of 'frecipd',
19061     'fsqrtd', and 'fdivd' instructions.  This is the default except
19062     when compiling for CK803.
19063
19064'-mfpu=FPU'
19065     Select the floating-point processor.  This option can only be used
19066     with '-mhard-float'.  Values for FPU are 'fpv2_sf' (equivalent to
19067     '-mno-double-float -mno-fdivdu'), 'fpv2' ('-mdouble-float
19068     -mno-divdu'), and 'fpv2_divd' ('-mdouble-float -mdivdu').
19069
19070'-melrw'
19071'-mno-elrw'
19072     Enable the extended 'lrw' instruction.  This option defaults to on
19073     for CK801 and off otherwise.
19074
19075'-mistack'
19076'-mno-istack'
19077     Enable interrupt stack instructions; the default is off.
19078
19079     The '-mistack' option is required to handle the 'interrupt' and
19080     'isr' function attributes (*note C-SKY Function Attributes::).
19081
19082'-mmp'
19083     Enable multiprocessor instructions; the default is off.
19084
19085'-mcp'
19086     Enable coprocessor instructions; the default is off.
19087
19088'-mcache'
19089     Enable coprocessor instructions; the default is off.
19090
19091'-msecurity'
19092     Enable C-SKY security instructions; the default is off.
19093
19094'-mtrust'
19095     Enable C-SKY trust instructions; the default is off.
19096
19097'-mdsp'
19098'-medsp'
19099'-mvdsp'
19100     Enable C-SKY DSP, Enhanced DSP, or Vector DSP instructions,
19101     respectively.  All of these options default to off.
19102
19103'-mdiv'
19104'-mno-div'
19105     Generate divide instructions.  Default is off.
19106
19107'-msmart'
19108'-mno-smart'
19109     Generate code for Smart Mode, using only registers numbered 0-7 to
19110     allow use of 16-bit instructions.  This option is ignored for CK801
19111     where this is the required behavior, and it defaults to on for
19112     CK802.  For other targets, the default is off.
19113
19114'-mhigh-registers'
19115'-mno-high-registers'
19116     Generate code using the high registers numbered 16-31.  This option
19117     is not supported on CK801, CK802, or CK803, and is enabled by
19118     default for other processors.
19119
19120'-manchor'
19121'-mno-anchor'
19122     Generate code using global anchor symbol addresses.
19123
19124'-mpushpop'
19125'-mno-pushpop'
19126     Generate code using 'push' and 'pop' instructions.  This option
19127     defaults to on.
19128
19129'-mmultiple-stld'
19130'-mstm'
19131'-mno-multiple-stld'
19132'-mno-stm'
19133     Generate code using 'stm' and 'ldm' instructions.  This option
19134     isn't supported on CK801 but is enabled by default on other
19135     processors.
19136
19137'-mconstpool'
19138'-mno-constpool'
19139     Create constant pools in the compiler instead of deferring it to
19140     the assembler.  This option is the default and required for correct
19141     code generation on CK801 and CK802, and is optional on other
19142     processors.
19143
19144'-mstack-size'
19145'-mno-stack-size'
19146     Emit '.stack_size' directives for each function in the assembly
19147     output.  This option defaults to off.
19148
19149'-mccrt'
19150'-mno-ccrt'
19151     Generate code for the C-SKY compiler runtime instead of libgcc.
19152     This option defaults to off.
19153
19154'-mbranch-cost=N'
19155     Set the branch costs to roughly 'n' instructions.  The default is
19156     1.
19157
19158'-msched-prolog'
19159'-mno-sched-prolog'
19160     Permit scheduling of function prologue and epilogue sequences.
19161     Using this option can result in code that is not compliant with the
19162     C-SKY V2 ABI prologue requirements and that cannot be debugged or
19163     backtraced.  It is disabled by default.
19164
19165
19166File: gcc.info,  Node: Darwin Options,  Next: DEC Alpha Options,  Prev: C-SKY Options,  Up: Submodel Options
19167
191683.19.12 Darwin Options
19169----------------------
19170
19171These options are defined for all architectures running the Darwin
19172operating system.
19173
19174 FSF GCC on Darwin does not create "fat" object files; it creates an
19175object file for the single architecture that GCC was built to target.
19176Apple's GCC on Darwin does create "fat" files if multiple '-arch'
19177options are used; it does so by running the compiler or linker multiple
19178times and joining the results together with 'lipo'.
19179
19180 The subtype of the file created (like 'ppc7400' or 'ppc970' or 'i686')
19181is determined by the flags that specify the ISA that GCC is targeting,
19182like '-mcpu' or '-march'.  The '-force_cpusubtype_ALL' option can be
19183used to override this.
19184
19185 The Darwin tools vary in their behavior when presented with an ISA
19186mismatch.  The assembler, 'as', only permits instructions to be used
19187that are valid for the subtype of the file it is generating, so you
19188cannot put 64-bit instructions in a 'ppc750' object file.  The linker
19189for shared libraries, '/usr/bin/libtool', fails and prints an error if
19190asked to create a shared library with a less restrictive subtype than
19191its input files (for instance, trying to put a 'ppc970' object file in a
19192'ppc7400' library).  The linker for executables, 'ld', quietly gives the
19193executable the most restrictive subtype of any of its input files.
19194
19195'-FDIR'
19196     Add the framework directory DIR to the head of the list of
19197     directories to be searched for header files.  These directories are
19198     interleaved with those specified by '-I' options and are scanned in
19199     a left-to-right order.
19200
19201     A framework directory is a directory with frameworks in it.  A
19202     framework is a directory with a 'Headers' and/or 'PrivateHeaders'
19203     directory contained directly in it that ends in '.framework'.  The
19204     name of a framework is the name of this directory excluding the
19205     '.framework'.  Headers associated with the framework are found in
19206     one of those two directories, with 'Headers' being searched first.
19207     A subframework is a framework directory that is in a framework's
19208     'Frameworks' directory.  Includes of subframework headers can only
19209     appear in a header of a framework that contains the subframework,
19210     or in a sibling subframework header.  Two subframeworks are
19211     siblings if they occur in the same framework.  A subframework
19212     should not have the same name as a framework; a warning is issued
19213     if this is violated.  Currently a subframework cannot have
19214     subframeworks; in the future, the mechanism may be extended to
19215     support this.  The standard frameworks can be found in
19216     '/System/Library/Frameworks' and '/Library/Frameworks'.  An example
19217     include looks like '#include <Framework/header.h>', where
19218     'Framework' denotes the name of the framework and 'header.h' is
19219     found in the 'PrivateHeaders' or 'Headers' directory.
19220
19221'-iframeworkDIR'
19222     Like '-F' except the directory is a treated as a system directory.
19223     The main difference between this '-iframework' and '-F' is that
19224     with '-iframework' the compiler does not warn about constructs
19225     contained within header files found via DIR.  This option is valid
19226     only for the C family of languages.
19227
19228'-gused'
19229     Emit debugging information for symbols that are used.  For stabs
19230     debugging format, this enables '-feliminate-unused-debug-symbols'.
19231     This is by default ON.
19232
19233'-gfull'
19234     Emit debugging information for all symbols and types.
19235
19236'-mmacosx-version-min=VERSION'
19237     The earliest version of MacOS X that this executable will run on is
19238     VERSION.  Typical values of VERSION include '10.1', '10.2', and
19239     '10.3.9'.
19240
19241     If the compiler was built to use the system's headers by default,
19242     then the default for this option is the system version on which the
19243     compiler is running, otherwise the default is to make choices that
19244     are compatible with as many systems and code bases as possible.
19245
19246'-mkernel'
19247     Enable kernel development mode.  The '-mkernel' option sets
19248     '-static', '-fno-common', '-fno-use-cxa-atexit', '-fno-exceptions',
19249     '-fno-non-call-exceptions', '-fapple-kext', '-fno-weak' and
19250     '-fno-rtti' where applicable.  This mode also sets '-mno-altivec',
19251     '-msoft-float', '-fno-builtin' and '-mlong-branch' for PowerPC
19252     targets.
19253
19254'-mone-byte-bool'
19255     Override the defaults for 'bool' so that 'sizeof(bool)==1'.  By
19256     default 'sizeof(bool)' is '4' when compiling for Darwin/PowerPC and
19257     '1' when compiling for Darwin/x86, so this option has no effect on
19258     x86.
19259
19260     *Warning:* The '-mone-byte-bool' switch causes GCC to generate code
19261     that is not binary compatible with code generated without that
19262     switch.  Using this switch may require recompiling all other
19263     modules in a program, including system libraries.  Use this switch
19264     to conform to a non-default data model.
19265
19266'-mfix-and-continue'
19267'-ffix-and-continue'
19268'-findirect-data'
19269     Generate code suitable for fast turnaround development, such as to
19270     allow GDB to dynamically load '.o' files into already-running
19271     programs.  '-findirect-data' and '-ffix-and-continue' are provided
19272     for backwards compatibility.
19273
19274'-all_load'
19275     Loads all members of static archive libraries.  See man ld(1) for
19276     more information.
19277
19278'-arch_errors_fatal'
19279     Cause the errors having to do with files that have the wrong
19280     architecture to be fatal.
19281
19282'-bind_at_load'
19283     Causes the output file to be marked such that the dynamic linker
19284     will bind all undefined references when the file is loaded or
19285     launched.
19286
19287'-bundle'
19288     Produce a Mach-o bundle format file.  See man ld(1) for more
19289     information.
19290
19291'-bundle_loader EXECUTABLE'
19292     This option specifies the EXECUTABLE that will load the build
19293     output file being linked.  See man ld(1) for more information.
19294
19295'-dynamiclib'
19296     When passed this option, GCC produces a dynamic library instead of
19297     an executable when linking, using the Darwin 'libtool' command.
19298
19299'-force_cpusubtype_ALL'
19300     This causes GCC's output file to have the 'ALL' subtype, instead of
19301     one controlled by the '-mcpu' or '-march' option.
19302
19303'-allowable_client CLIENT_NAME'
19304'-client_name'
19305'-compatibility_version'
19306'-current_version'
19307'-dead_strip'
19308'-dependency-file'
19309'-dylib_file'
19310'-dylinker_install_name'
19311'-dynamic'
19312'-exported_symbols_list'
19313'-filelist'
19314'-flat_namespace'
19315'-force_flat_namespace'
19316'-headerpad_max_install_names'
19317'-image_base'
19318'-init'
19319'-install_name'
19320'-keep_private_externs'
19321'-multi_module'
19322'-multiply_defined'
19323'-multiply_defined_unused'
19324'-noall_load'
19325'-no_dead_strip_inits_and_terms'
19326'-nofixprebinding'
19327'-nomultidefs'
19328'-noprebind'
19329'-noseglinkedit'
19330'-pagezero_size'
19331'-prebind'
19332'-prebind_all_twolevel_modules'
19333'-private_bundle'
19334'-read_only_relocs'
19335'-sectalign'
19336'-sectobjectsymbols'
19337'-whyload'
19338'-seg1addr'
19339'-sectcreate'
19340'-sectobjectsymbols'
19341'-sectorder'
19342'-segaddr'
19343'-segs_read_only_addr'
19344'-segs_read_write_addr'
19345'-seg_addr_table'
19346'-seg_addr_table_filename'
19347'-seglinkedit'
19348'-segprot'
19349'-segs_read_only_addr'
19350'-segs_read_write_addr'
19351'-single_module'
19352'-static'
19353'-sub_library'
19354'-sub_umbrella'
19355'-twolevel_namespace'
19356'-umbrella'
19357'-undefined'
19358'-unexported_symbols_list'
19359'-weak_reference_mismatches'
19360'-whatsloaded'
19361     These options are passed to the Darwin linker.  The Darwin linker
19362     man page describes them in detail.
19363
19364
19365File: gcc.info,  Node: DEC Alpha Options,  Next: eBPF Options,  Prev: Darwin Options,  Up: Submodel Options
19366
193673.19.13 DEC Alpha Options
19368-------------------------
19369
19370These '-m' options are defined for the DEC Alpha implementations:
19371
19372'-mno-soft-float'
19373'-msoft-float'
19374     Use (do not use) the hardware floating-point instructions for
19375     floating-point operations.  When '-msoft-float' is specified,
19376     functions in 'libgcc.a' are used to perform floating-point
19377     operations.  Unless they are replaced by routines that emulate the
19378     floating-point operations, or compiled in such a way as to call
19379     such emulations routines, these routines issue floating-point
19380     operations.  If you are compiling for an Alpha without
19381     floating-point operations, you must ensure that the library is
19382     built so as not to call them.
19383
19384     Note that Alpha implementations without floating-point operations
19385     are required to have floating-point registers.
19386
19387'-mfp-reg'
19388'-mno-fp-regs'
19389     Generate code that uses (does not use) the floating-point register
19390     set.  '-mno-fp-regs' implies '-msoft-float'.  If the floating-point
19391     register set is not used, floating-point operands are passed in
19392     integer registers as if they were integers and floating-point
19393     results are passed in '$0' instead of '$f0'.  This is a
19394     non-standard calling sequence, so any function with a
19395     floating-point argument or return value called by code compiled
19396     with '-mno-fp-regs' must also be compiled with that option.
19397
19398     A typical use of this option is building a kernel that does not
19399     use, and hence need not save and restore, any floating-point
19400     registers.
19401
19402'-mieee'
19403     The Alpha architecture implements floating-point hardware optimized
19404     for maximum performance.  It is mostly compliant with the IEEE
19405     floating-point standard.  However, for full compliance, software
19406     assistance is required.  This option generates code fully
19407     IEEE-compliant code _except_ that the INEXACT-FLAG is not
19408     maintained (see below).  If this option is turned on, the
19409     preprocessor macro '_IEEE_FP' is defined during compilation.  The
19410     resulting code is less efficient but is able to correctly support
19411     denormalized numbers and exceptional IEEE values such as
19412     not-a-number and plus/minus infinity.  Other Alpha compilers call
19413     this option '-ieee_with_no_inexact'.
19414
19415'-mieee-with-inexact'
19416     This is like '-mieee' except the generated code also maintains the
19417     IEEE INEXACT-FLAG.  Turning on this option causes the generated
19418     code to implement fully-compliant IEEE math.  In addition to
19419     '_IEEE_FP', '_IEEE_FP_EXACT' is defined as a preprocessor macro.
19420     On some Alpha implementations the resulting code may execute
19421     significantly slower than the code generated by default.  Since
19422     there is very little code that depends on the INEXACT-FLAG, you
19423     should normally not specify this option.  Other Alpha compilers
19424     call this option '-ieee_with_inexact'.
19425
19426'-mfp-trap-mode=TRAP-MODE'
19427     This option controls what floating-point related traps are enabled.
19428     Other Alpha compilers call this option '-fptm TRAP-MODE'.  The trap
19429     mode can be set to one of four values:
19430
19431     'n'
19432          This is the default (normal) setting.  The only traps that are
19433          enabled are the ones that cannot be disabled in software
19434          (e.g., division by zero trap).
19435
19436     'u'
19437          In addition to the traps enabled by 'n', underflow traps are
19438          enabled as well.
19439
19440     'su'
19441          Like 'u', but the instructions are marked to be safe for
19442          software completion (see Alpha architecture manual for
19443          details).
19444
19445     'sui'
19446          Like 'su', but inexact traps are enabled as well.
19447
19448'-mfp-rounding-mode=ROUNDING-MODE'
19449     Selects the IEEE rounding mode.  Other Alpha compilers call this
19450     option '-fprm ROUNDING-MODE'.  The ROUNDING-MODE can be one of:
19451
19452     'n'
19453          Normal IEEE rounding mode.  Floating-point numbers are rounded
19454          towards the nearest machine number or towards the even machine
19455          number in case of a tie.
19456
19457     'm'
19458          Round towards minus infinity.
19459
19460     'c'
19461          Chopped rounding mode.  Floating-point numbers are rounded
19462          towards zero.
19463
19464     'd'
19465          Dynamic rounding mode.  A field in the floating-point control
19466          register (FPCR, see Alpha architecture reference manual)
19467          controls the rounding mode in effect.  The C library
19468          initializes this register for rounding towards plus infinity.
19469          Thus, unless your program modifies the FPCR, 'd' corresponds
19470          to round towards plus infinity.
19471
19472'-mtrap-precision=TRAP-PRECISION'
19473     In the Alpha architecture, floating-point traps are imprecise.
19474     This means without software assistance it is impossible to recover
19475     from a floating trap and program execution normally needs to be
19476     terminated.  GCC can generate code that can assist operating system
19477     trap handlers in determining the exact location that caused a
19478     floating-point trap.  Depending on the requirements of an
19479     application, different levels of precisions can be selected:
19480
19481     'p'
19482          Program precision.  This option is the default and means a
19483          trap handler can only identify which program caused a
19484          floating-point exception.
19485
19486     'f'
19487          Function precision.  The trap handler can determine the
19488          function that caused a floating-point exception.
19489
19490     'i'
19491          Instruction precision.  The trap handler can determine the
19492          exact instruction that caused a floating-point exception.
19493
19494     Other Alpha compilers provide the equivalent options called
19495     '-scope_safe' and '-resumption_safe'.
19496
19497'-mieee-conformant'
19498     This option marks the generated code as IEEE conformant.  You must
19499     not use this option unless you also specify '-mtrap-precision=i'
19500     and either '-mfp-trap-mode=su' or '-mfp-trap-mode=sui'.  Its only
19501     effect is to emit the line '.eflag 48' in the function prologue of
19502     the generated assembly file.
19503
19504'-mbuild-constants'
19505     Normally GCC examines a 32- or 64-bit integer constant to see if it
19506     can construct it from smaller constants in two or three
19507     instructions.  If it cannot, it outputs the constant as a literal
19508     and generates code to load it from the data segment at run time.
19509
19510     Use this option to require GCC to construct _all_ integer constants
19511     using code, even if it takes more instructions (the maximum is
19512     six).
19513
19514     You typically use this option to build a shared library dynamic
19515     loader.  Itself a shared library, it must relocate itself in memory
19516     before it can find the variables and constants in its own data
19517     segment.
19518
19519'-mbwx'
19520'-mno-bwx'
19521'-mcix'
19522'-mno-cix'
19523'-mfix'
19524'-mno-fix'
19525'-mmax'
19526'-mno-max'
19527     Indicate whether GCC should generate code to use the optional BWX,
19528     CIX, FIX and MAX instruction sets.  The default is to use the
19529     instruction sets supported by the CPU type specified via '-mcpu='
19530     option or that of the CPU on which GCC was built if none is
19531     specified.
19532
19533'-mfloat-vax'
19534'-mfloat-ieee'
19535     Generate code that uses (does not use) VAX F and G floating-point
19536     arithmetic instead of IEEE single and double precision.
19537
19538'-mexplicit-relocs'
19539'-mno-explicit-relocs'
19540     Older Alpha assemblers provided no way to generate symbol
19541     relocations except via assembler macros.  Use of these macros does
19542     not allow optimal instruction scheduling.  GNU binutils as of
19543     version 2.12 supports a new syntax that allows the compiler to
19544     explicitly mark which relocations should apply to which
19545     instructions.  This option is mostly useful for debugging, as GCC
19546     detects the capabilities of the assembler when it is built and sets
19547     the default accordingly.
19548
19549'-msmall-data'
19550'-mlarge-data'
19551     When '-mexplicit-relocs' is in effect, static data is accessed via
19552     "gp-relative" relocations.  When '-msmall-data' is used, objects 8
19553     bytes long or smaller are placed in a "small data area" (the
19554     '.sdata' and '.sbss' sections) and are accessed via 16-bit
19555     relocations off of the '$gp' register.  This limits the size of the
19556     small data area to 64KB, but allows the variables to be directly
19557     accessed via a single instruction.
19558
19559     The default is '-mlarge-data'.  With this option the data area is
19560     limited to just below 2GB.  Programs that require more than 2GB of
19561     data must use 'malloc' or 'mmap' to allocate the data in the heap
19562     instead of in the program's data segment.
19563
19564     When generating code for shared libraries, '-fpic' implies
19565     '-msmall-data' and '-fPIC' implies '-mlarge-data'.
19566
19567'-msmall-text'
19568'-mlarge-text'
19569     When '-msmall-text' is used, the compiler assumes that the code of
19570     the entire program (or shared library) fits in 4MB, and is thus
19571     reachable with a branch instruction.  When '-msmall-data' is used,
19572     the compiler can assume that all local symbols share the same '$gp'
19573     value, and thus reduce the number of instructions required for a
19574     function call from 4 to 1.
19575
19576     The default is '-mlarge-text'.
19577
19578'-mcpu=CPU_TYPE'
19579     Set the instruction set and instruction scheduling parameters for
19580     machine type CPU_TYPE.  You can specify either the 'EV' style name
19581     or the corresponding chip number.  GCC supports scheduling
19582     parameters for the EV4, EV5 and EV6 family of processors and
19583     chooses the default values for the instruction set from the
19584     processor you specify.  If you do not specify a processor type, GCC
19585     defaults to the processor on which the compiler was built.
19586
19587     Supported values for CPU_TYPE are
19588
19589     'ev4'
19590     'ev45'
19591     '21064'
19592          Schedules as an EV4 and has no instruction set extensions.
19593
19594     'ev5'
19595     '21164'
19596          Schedules as an EV5 and has no instruction set extensions.
19597
19598     'ev56'
19599     '21164a'
19600          Schedules as an EV5 and supports the BWX extension.
19601
19602     'pca56'
19603     '21164pc'
19604     '21164PC'
19605          Schedules as an EV5 and supports the BWX and MAX extensions.
19606
19607     'ev6'
19608     '21264'
19609          Schedules as an EV6 and supports the BWX, FIX, and MAX
19610          extensions.
19611
19612     'ev67'
19613     '21264a'
19614          Schedules as an EV6 and supports the BWX, CIX, FIX, and MAX
19615          extensions.
19616
19617     Native toolchains also support the value 'native', which selects
19618     the best architecture option for the host processor.
19619     '-mcpu=native' has no effect if GCC does not recognize the
19620     processor.
19621
19622'-mtune=CPU_TYPE'
19623     Set only the instruction scheduling parameters for machine type
19624     CPU_TYPE.  The instruction set is not changed.
19625
19626     Native toolchains also support the value 'native', which selects
19627     the best architecture option for the host processor.
19628     '-mtune=native' has no effect if GCC does not recognize the
19629     processor.
19630
19631'-mmemory-latency=TIME'
19632     Sets the latency the scheduler should assume for typical memory
19633     references as seen by the application.  This number is highly
19634     dependent on the memory access patterns used by the application and
19635     the size of the external cache on the machine.
19636
19637     Valid options for TIME are
19638
19639     'NUMBER'
19640          A decimal number representing clock cycles.
19641
19642     'L1'
19643     'L2'
19644     'L3'
19645     'main'
19646          The compiler contains estimates of the number of clock cycles
19647          for "typical" EV4 & EV5 hardware for the Level 1, 2 & 3 caches
19648          (also called Dcache, Scache, and Bcache), as well as to main
19649          memory.  Note that L3 is only valid for EV5.
19650
19651
19652File: gcc.info,  Node: eBPF Options,  Next: FR30 Options,  Prev: DEC Alpha Options,  Up: Submodel Options
19653
196543.19.14 eBPF Options
19655--------------------
19656
19657'-mframe-limit=BYTES'
19658     This specifies the hard limit for frame sizes, in bytes.
19659     Currently, the value that can be specified should be less than or
19660     equal to '32767'.  Defaults to whatever limit is imposed by the
19661     version of the Linux kernel targeted.
19662
19663'-mkernel=VERSION'
19664     This specifies the minimum version of the kernel that will run the
19665     compiled program.  GCC uses this version to determine which
19666     instructions to use, what kernel helpers to allow, etc.  Currently,
19667     VERSION can be one of '4.0', '4.1', '4.2', '4.3', '4.4', '4.5',
19668     '4.6', '4.7', '4.8', '4.9', '4.10', '4.11', '4.12', '4.13', '4.14',
19669     '4.15', '4.16', '4.17', '4.18', '4.19', '4.20', '5.0', '5.1',
19670     '5.2', 'latest' and 'native'.
19671
19672'-mbig-endian'
19673     Generate code for a big-endian target.
19674
19675'-mlittle-endian'
19676     Generate code for a little-endian target.  This is the default.
19677
19678
19679File: gcc.info,  Node: FR30 Options,  Next: FT32 Options,  Prev: eBPF Options,  Up: Submodel Options
19680
196813.19.15 FR30 Options
19682--------------------
19683
19684These options are defined specifically for the FR30 port.
19685
19686'-msmall-model'
19687     Use the small address space model.  This can produce smaller code,
19688     but it does assume that all symbolic values and addresses fit into
19689     a 20-bit range.
19690
19691'-mno-lsim'
19692     Assume that runtime support has been provided and so there is no
19693     need to include the simulator library ('libsim.a') on the linker
19694     command line.
19695
19696
19697File: gcc.info,  Node: FT32 Options,  Next: FRV Options,  Prev: FR30 Options,  Up: Submodel Options
19698
196993.19.16 FT32 Options
19700--------------------
19701
19702These options are defined specifically for the FT32 port.
19703
19704'-msim'
19705     Specifies that the program will be run on the simulator.  This
19706     causes an alternate runtime startup and library to be linked.  You
19707     must not use this option when generating programs that will run on
19708     real hardware; you must provide your own runtime library for
19709     whatever I/O functions are needed.
19710
19711'-mlra'
19712     Enable Local Register Allocation.  This is still experimental for
19713     FT32, so by default the compiler uses standard reload.
19714
19715'-mnodiv'
19716     Do not use div and mod instructions.
19717
19718'-mft32b'
19719     Enable use of the extended instructions of the FT32B processor.
19720
19721'-mcompress'
19722     Compress all code using the Ft32B code compression scheme.
19723
19724'-mnopm'
19725     Do not generate code that reads program memory.
19726
19727
19728File: gcc.info,  Node: FRV Options,  Next: GNU/Linux Options,  Prev: FT32 Options,  Up: Submodel Options
19729
197303.19.17 FRV Options
19731-------------------
19732
19733'-mgpr-32'
19734
19735     Only use the first 32 general-purpose registers.
19736
19737'-mgpr-64'
19738
19739     Use all 64 general-purpose registers.
19740
19741'-mfpr-32'
19742
19743     Use only the first 32 floating-point registers.
19744
19745'-mfpr-64'
19746
19747     Use all 64 floating-point registers.
19748
19749'-mhard-float'
19750
19751     Use hardware instructions for floating-point operations.
19752
19753'-msoft-float'
19754
19755     Use library routines for floating-point operations.
19756
19757'-malloc-cc'
19758
19759     Dynamically allocate condition code registers.
19760
19761'-mfixed-cc'
19762
19763     Do not try to dynamically allocate condition code registers, only
19764     use 'icc0' and 'fcc0'.
19765
19766'-mdword'
19767
19768     Change ABI to use double word insns.
19769
19770'-mno-dword'
19771
19772     Do not use double word instructions.
19773
19774'-mdouble'
19775
19776     Use floating-point double instructions.
19777
19778'-mno-double'
19779
19780     Do not use floating-point double instructions.
19781
19782'-mmedia'
19783
19784     Use media instructions.
19785
19786'-mno-media'
19787
19788     Do not use media instructions.
19789
19790'-mmuladd'
19791
19792     Use multiply and add/subtract instructions.
19793
19794'-mno-muladd'
19795
19796     Do not use multiply and add/subtract instructions.
19797
19798'-mfdpic'
19799
19800     Select the FDPIC ABI, which uses function descriptors to represent
19801     pointers to functions.  Without any PIC/PIE-related options, it
19802     implies '-fPIE'.  With '-fpic' or '-fpie', it assumes GOT entries
19803     and small data are within a 12-bit range from the GOT base address;
19804     with '-fPIC' or '-fPIE', GOT offsets are computed with 32 bits.
19805     With a 'bfin-elf' target, this option implies '-msim'.
19806
19807'-minline-plt'
19808
19809     Enable inlining of PLT entries in function calls to functions that
19810     are not known to bind locally.  It has no effect without '-mfdpic'.
19811     It's enabled by default if optimizing for speed and compiling for
19812     shared libraries (i.e., '-fPIC' or '-fpic'), or when an
19813     optimization option such as '-O3' or above is present in the
19814     command line.
19815
19816'-mTLS'
19817
19818     Assume a large TLS segment when generating thread-local code.
19819
19820'-mtls'
19821
19822     Do not assume a large TLS segment when generating thread-local
19823     code.
19824
19825'-mgprel-ro'
19826
19827     Enable the use of 'GPREL' relocations in the FDPIC ABI for data
19828     that is known to be in read-only sections.  It's enabled by
19829     default, except for '-fpic' or '-fpie': even though it may help
19830     make the global offset table smaller, it trades 1 instruction for
19831     4.  With '-fPIC' or '-fPIE', it trades 3 instructions for 4, one of
19832     which may be shared by multiple symbols, and it avoids the need for
19833     a GOT entry for the referenced symbol, so it's more likely to be a
19834     win.  If it is not, '-mno-gprel-ro' can be used to disable it.
19835
19836'-multilib-library-pic'
19837
19838     Link with the (library, not FD) pic libraries.  It's implied by
19839     '-mlibrary-pic', as well as by '-fPIC' and '-fpic' without
19840     '-mfdpic'.  You should never have to use it explicitly.
19841
19842'-mlinked-fp'
19843
19844     Follow the EABI requirement of always creating a frame pointer
19845     whenever a stack frame is allocated.  This option is enabled by
19846     default and can be disabled with '-mno-linked-fp'.
19847
19848'-mlong-calls'
19849
19850     Use indirect addressing to call functions outside the current
19851     compilation unit.  This allows the functions to be placed anywhere
19852     within the 32-bit address space.
19853
19854'-malign-labels'
19855
19856     Try to align labels to an 8-byte boundary by inserting NOPs into
19857     the previous packet.  This option only has an effect when VLIW
19858     packing is enabled.  It doesn't create new packets; it merely adds
19859     NOPs to existing ones.
19860
19861'-mlibrary-pic'
19862
19863     Generate position-independent EABI code.
19864
19865'-macc-4'
19866
19867     Use only the first four media accumulator registers.
19868
19869'-macc-8'
19870
19871     Use all eight media accumulator registers.
19872
19873'-mpack'
19874
19875     Pack VLIW instructions.
19876
19877'-mno-pack'
19878
19879     Do not pack VLIW instructions.
19880
19881'-mno-eflags'
19882
19883     Do not mark ABI switches in e_flags.
19884
19885'-mcond-move'
19886
19887     Enable the use of conditional-move instructions (default).
19888
19889     This switch is mainly for debugging the compiler and will likely be
19890     removed in a future version.
19891
19892'-mno-cond-move'
19893
19894     Disable the use of conditional-move instructions.
19895
19896     This switch is mainly for debugging the compiler and will likely be
19897     removed in a future version.
19898
19899'-mscc'
19900
19901     Enable the use of conditional set instructions (default).
19902
19903     This switch is mainly for debugging the compiler and will likely be
19904     removed in a future version.
19905
19906'-mno-scc'
19907
19908     Disable the use of conditional set instructions.
19909
19910     This switch is mainly for debugging the compiler and will likely be
19911     removed in a future version.
19912
19913'-mcond-exec'
19914
19915     Enable the use of conditional execution (default).
19916
19917     This switch is mainly for debugging the compiler and will likely be
19918     removed in a future version.
19919
19920'-mno-cond-exec'
19921
19922     Disable the use of conditional execution.
19923
19924     This switch is mainly for debugging the compiler and will likely be
19925     removed in a future version.
19926
19927'-mvliw-branch'
19928
19929     Run a pass to pack branches into VLIW instructions (default).
19930
19931     This switch is mainly for debugging the compiler and will likely be
19932     removed in a future version.
19933
19934'-mno-vliw-branch'
19935
19936     Do not run a pass to pack branches into VLIW instructions.
19937
19938     This switch is mainly for debugging the compiler and will likely be
19939     removed in a future version.
19940
19941'-mmulti-cond-exec'
19942
19943     Enable optimization of '&&' and '||' in conditional execution
19944     (default).
19945
19946     This switch is mainly for debugging the compiler and will likely be
19947     removed in a future version.
19948
19949'-mno-multi-cond-exec'
19950
19951     Disable optimization of '&&' and '||' in conditional execution.
19952
19953     This switch is mainly for debugging the compiler and will likely be
19954     removed in a future version.
19955
19956'-mnested-cond-exec'
19957
19958     Enable nested conditional execution optimizations (default).
19959
19960     This switch is mainly for debugging the compiler and will likely be
19961     removed in a future version.
19962
19963'-mno-nested-cond-exec'
19964
19965     Disable nested conditional execution optimizations.
19966
19967     This switch is mainly for debugging the compiler and will likely be
19968     removed in a future version.
19969
19970'-moptimize-membar'
19971
19972     This switch removes redundant 'membar' instructions from the
19973     compiler-generated code.  It is enabled by default.
19974
19975'-mno-optimize-membar'
19976
19977     This switch disables the automatic removal of redundant 'membar'
19978     instructions from the generated code.
19979
19980'-mtomcat-stats'
19981
19982     Cause gas to print out tomcat statistics.
19983
19984'-mcpu=CPU'
19985
19986     Select the processor type for which to generate code.  Possible
19987     values are 'frv', 'fr550', 'tomcat', 'fr500', 'fr450', 'fr405',
19988     'fr400', 'fr300' and 'simple'.
19989
19990
19991File: gcc.info,  Node: GNU/Linux Options,  Next: H8/300 Options,  Prev: FRV Options,  Up: Submodel Options
19992
199933.19.18 GNU/Linux Options
19994-------------------------
19995
19996These '-m' options are defined for GNU/Linux targets:
19997
19998'-mglibc'
19999     Use the GNU C library.  This is the default except on
20000     '*-*-linux-*uclibc*', '*-*-linux-*musl*' and '*-*-linux-*android*'
20001     targets.
20002
20003'-muclibc'
20004     Use uClibc C library.  This is the default on '*-*-linux-*uclibc*'
20005     targets.
20006
20007'-mmusl'
20008     Use the musl C library.  This is the default on '*-*-linux-*musl*'
20009     targets.
20010
20011'-mbionic'
20012     Use Bionic C library.  This is the default on '*-*-linux-*android*'
20013     targets.
20014
20015'-mandroid'
20016     Compile code compatible with Android platform.  This is the default
20017     on '*-*-linux-*android*' targets.
20018
20019     When compiling, this option enables '-mbionic', '-fPIC',
20020     '-fno-exceptions' and '-fno-rtti' by default.  When linking, this
20021     option makes the GCC driver pass Android-specific options to the
20022     linker.  Finally, this option causes the preprocessor macro
20023     '__ANDROID__' to be defined.
20024
20025'-tno-android-cc'
20026     Disable compilation effects of '-mandroid', i.e., do not enable
20027     '-mbionic', '-fPIC', '-fno-exceptions' and '-fno-rtti' by default.
20028
20029'-tno-android-ld'
20030     Disable linking effects of '-mandroid', i.e., pass standard Linux
20031     linking options to the linker.
20032
20033
20034File: gcc.info,  Node: H8/300 Options,  Next: HPPA Options,  Prev: GNU/Linux Options,  Up: Submodel Options
20035
200363.19.19 H8/300 Options
20037----------------------
20038
20039These '-m' options are defined for the H8/300 implementations:
20040
20041'-mrelax'
20042     Shorten some address references at link time, when possible; uses
20043     the linker option '-relax'.  *Note 'ld' and the H8/300: (ld)H8/300,
20044     for a fuller description.
20045
20046'-mh'
20047     Generate code for the H8/300H.
20048
20049'-ms'
20050     Generate code for the H8S.
20051
20052'-mn'
20053     Generate code for the H8S and H8/300H in the normal mode.  This
20054     switch must be used either with '-mh' or '-ms'.
20055
20056'-ms2600'
20057     Generate code for the H8S/2600.  This switch must be used with
20058     '-ms'.
20059
20060'-mexr'
20061     Extended registers are stored on stack before execution of function
20062     with monitor attribute.  Default option is '-mexr'.  This option is
20063     valid only for H8S targets.
20064
20065'-mno-exr'
20066     Extended registers are not stored on stack before execution of
20067     function with monitor attribute.  Default option is '-mno-exr'.
20068     This option is valid only for H8S targets.
20069
20070'-mint32'
20071     Make 'int' data 32 bits by default.
20072
20073'-malign-300'
20074     On the H8/300H and H8S, use the same alignment rules as for the
20075     H8/300.  The default for the H8/300H and H8S is to align longs and
20076     floats on 4-byte boundaries.  '-malign-300' causes them to be
20077     aligned on 2-byte boundaries.  This option has no effect on the
20078     H8/300.
20079
20080
20081File: gcc.info,  Node: HPPA Options,  Next: IA-64 Options,  Prev: H8/300 Options,  Up: Submodel Options
20082
200833.19.20 HPPA Options
20084--------------------
20085
20086These '-m' options are defined for the HPPA family of computers:
20087
20088'-march=ARCHITECTURE-TYPE'
20089     Generate code for the specified architecture.  The choices for
20090     ARCHITECTURE-TYPE are '1.0' for PA 1.0, '1.1' for PA 1.1, and '2.0'
20091     for PA 2.0 processors.  Refer to '/usr/lib/sched.models' on an
20092     HP-UX system to determine the proper architecture option for your
20093     machine.  Code compiled for lower numbered architectures runs on
20094     higher numbered architectures, but not the other way around.
20095
20096'-mpa-risc-1-0'
20097'-mpa-risc-1-1'
20098'-mpa-risc-2-0'
20099     Synonyms for '-march=1.0', '-march=1.1', and '-march=2.0'
20100     respectively.
20101
20102'-mcaller-copies'
20103     The caller copies function arguments passed by hidden reference.
20104     This option should be used with care as it is not compatible with
20105     the default 32-bit runtime.  However, only aggregates larger than
20106     eight bytes are passed by hidden reference and the option provides
20107     better compatibility with OpenMP.
20108
20109'-mjump-in-delay'
20110     This option is ignored and provided for compatibility purposes
20111     only.
20112
20113'-mdisable-fpregs'
20114     Prevent floating-point registers from being used in any manner.
20115     This is necessary for compiling kernels that perform lazy context
20116     switching of floating-point registers.  If you use this option and
20117     attempt to perform floating-point operations, the compiler aborts.
20118
20119'-mdisable-indexing'
20120     Prevent the compiler from using indexing address modes.  This
20121     avoids some rather obscure problems when compiling MIG generated
20122     code under MACH.
20123
20124'-mno-space-regs'
20125     Generate code that assumes the target has no space registers.  This
20126     allows GCC to generate faster indirect calls and use unscaled index
20127     address modes.
20128
20129     Such code is suitable for level 0 PA systems and kernels.
20130
20131'-mfast-indirect-calls'
20132     Generate code that assumes calls never cross space boundaries.
20133     This allows GCC to emit code that performs faster indirect calls.
20134
20135     This option does not work in the presence of shared libraries or
20136     nested functions.
20137
20138'-mfixed-range=REGISTER-RANGE'
20139     Generate code treating the given register range as fixed registers.
20140     A fixed register is one that the register allocator cannot use.
20141     This is useful when compiling kernel code.  A register range is
20142     specified as two registers separated by a dash.  Multiple register
20143     ranges can be specified separated by a comma.
20144
20145'-mlong-load-store'
20146     Generate 3-instruction load and store sequences as sometimes
20147     required by the HP-UX 10 linker.  This is equivalent to the '+k'
20148     option to the HP compilers.
20149
20150'-mportable-runtime'
20151     Use the portable calling conventions proposed by HP for ELF
20152     systems.
20153
20154'-mgas'
20155     Enable the use of assembler directives only GAS understands.
20156
20157'-mschedule=CPU-TYPE'
20158     Schedule code according to the constraints for the machine type
20159     CPU-TYPE.  The choices for CPU-TYPE are '700' '7100', '7100LC',
20160     '7200', '7300' and '8000'.  Refer to '/usr/lib/sched.models' on an
20161     HP-UX system to determine the proper scheduling option for your
20162     machine.  The default scheduling is '8000'.
20163
20164'-mlinker-opt'
20165     Enable the optimization pass in the HP-UX linker.  Note this makes
20166     symbolic debugging impossible.  It also triggers a bug in the HP-UX
20167     8 and HP-UX 9 linkers in which they give bogus error messages when
20168     linking some programs.
20169
20170'-msoft-float'
20171     Generate output containing library calls for floating point.
20172     *Warning:* the requisite libraries are not available for all HPPA
20173     targets.  Normally the facilities of the machine's usual C compiler
20174     are used, but this cannot be done directly in cross-compilation.
20175     You must make your own arrangements to provide suitable library
20176     functions for cross-compilation.
20177
20178     '-msoft-float' changes the calling convention in the output file;
20179     therefore, it is only useful if you compile _all_ of a program with
20180     this option.  In particular, you need to compile 'libgcc.a', the
20181     library that comes with GCC, with '-msoft-float' in order for this
20182     to work.
20183
20184'-msio'
20185     Generate the predefine, '_SIO', for server IO.  The default is
20186     '-mwsio'.  This generates the predefines, '__hp9000s700',
20187     '__hp9000s700__' and '_WSIO', for workstation IO.  These options
20188     are available under HP-UX and HI-UX.
20189
20190'-mgnu-ld'
20191     Use options specific to GNU 'ld'.  This passes '-shared' to 'ld'
20192     when building a shared library.  It is the default when GCC is
20193     configured, explicitly or implicitly, with the GNU linker.  This
20194     option does not affect which 'ld' is called; it only changes what
20195     parameters are passed to that 'ld'.  The 'ld' that is called is
20196     determined by the '--with-ld' configure option, GCC's program
20197     search path, and finally by the user's 'PATH'.  The linker used by
20198     GCC can be printed using 'which `gcc -print-prog-name=ld`'.  This
20199     option is only available on the 64-bit HP-UX GCC, i.e. configured
20200     with 'hppa*64*-*-hpux*'.
20201
20202'-mhp-ld'
20203     Use options specific to HP 'ld'.  This passes '-b' to 'ld' when
20204     building a shared library and passes '+Accept TypeMismatch' to 'ld'
20205     on all links.  It is the default when GCC is configured, explicitly
20206     or implicitly, with the HP linker.  This option does not affect
20207     which 'ld' is called; it only changes what parameters are passed to
20208     that 'ld'.  The 'ld' that is called is determined by the
20209     '--with-ld' configure option, GCC's program search path, and
20210     finally by the user's 'PATH'.  The linker used by GCC can be
20211     printed using 'which `gcc -print-prog-name=ld`'.  This option is
20212     only available on the 64-bit HP-UX GCC, i.e. configured with
20213     'hppa*64*-*-hpux*'.
20214
20215'-mlong-calls'
20216     Generate code that uses long call sequences.  This ensures that a
20217     call is always able to reach linker generated stubs.  The default
20218     is to generate long calls only when the distance from the call site
20219     to the beginning of the function or translation unit, as the case
20220     may be, exceeds a predefined limit set by the branch type being
20221     used.  The limits for normal calls are 7,600,000 and 240,000 bytes,
20222     respectively for the PA 2.0 and PA 1.X architectures.  Sibcalls are
20223     always limited at 240,000 bytes.
20224
20225     Distances are measured from the beginning of functions when using
20226     the '-ffunction-sections' option, or when using the '-mgas' and
20227     '-mno-portable-runtime' options together under HP-UX with the SOM
20228     linker.
20229
20230     It is normally not desirable to use this option as it degrades
20231     performance.  However, it may be useful in large applications,
20232     particularly when partial linking is used to build the application.
20233
20234     The types of long calls used depends on the capabilities of the
20235     assembler and linker, and the type of code being generated.  The
20236     impact on systems that support long absolute calls, and long pic
20237     symbol-difference or pc-relative calls should be relatively small.
20238     However, an indirect call is used on 32-bit ELF systems in pic code
20239     and it is quite long.
20240
20241'-munix=UNIX-STD'
20242     Generate compiler predefines and select a startfile for the
20243     specified UNIX standard.  The choices for UNIX-STD are '93', '95'
20244     and '98'.  '93' is supported on all HP-UX versions.  '95' is
20245     available on HP-UX 10.10 and later.  '98' is available on HP-UX
20246     11.11 and later.  The default values are '93' for HP-UX 10.00, '95'
20247     for HP-UX 10.10 though to 11.00, and '98' for HP-UX 11.11 and
20248     later.
20249
20250     '-munix=93' provides the same predefines as GCC 3.3 and 3.4.
20251     '-munix=95' provides additional predefines for 'XOPEN_UNIX' and
20252     '_XOPEN_SOURCE_EXTENDED', and the startfile 'unix95.o'.
20253     '-munix=98' provides additional predefines for '_XOPEN_UNIX',
20254     '_XOPEN_SOURCE_EXTENDED', '_INCLUDE__STDC_A1_SOURCE' and
20255     '_INCLUDE_XOPEN_SOURCE_500', and the startfile 'unix98.o'.
20256
20257     It is _important_ to note that this option changes the interfaces
20258     for various library routines.  It also affects the operational
20259     behavior of the C library.  Thus, _extreme_ care is needed in using
20260     this option.
20261
20262     Library code that is intended to operate with more than one UNIX
20263     standard must test, set and restore the variable
20264     '__xpg4_extended_mask' as appropriate.  Most GNU software doesn't
20265     provide this capability.
20266
20267'-nolibdld'
20268     Suppress the generation of link options to search libdld.sl when
20269     the '-static' option is specified on HP-UX 10 and later.
20270
20271'-static'
20272     The HP-UX implementation of setlocale in libc has a dependency on
20273     libdld.sl.  There isn't an archive version of libdld.sl.  Thus,
20274     when the '-static' option is specified, special link options are
20275     needed to resolve this dependency.
20276
20277     On HP-UX 10 and later, the GCC driver adds the necessary options to
20278     link with libdld.sl when the '-static' option is specified.  This
20279     causes the resulting binary to be dynamic.  On the 64-bit port, the
20280     linkers generate dynamic binaries by default in any case.  The
20281     '-nolibdld' option can be used to prevent the GCC driver from
20282     adding these link options.
20283
20284'-threads'
20285     Add support for multithreading with the "dce thread" library under
20286     HP-UX.  This option sets flags for both the preprocessor and
20287     linker.
20288
20289
20290File: gcc.info,  Node: IA-64 Options,  Next: LM32 Options,  Prev: HPPA Options,  Up: Submodel Options
20291
202923.19.21 IA-64 Options
20293---------------------
20294
20295These are the '-m' options defined for the Intel IA-64 architecture.
20296
20297'-mbig-endian'
20298     Generate code for a big-endian target.  This is the default for
20299     HP-UX.
20300
20301'-mlittle-endian'
20302     Generate code for a little-endian target.  This is the default for
20303     AIX5 and GNU/Linux.
20304
20305'-mgnu-as'
20306'-mno-gnu-as'
20307     Generate (or don't) code for the GNU assembler.  This is the
20308     default.
20309
20310'-mgnu-ld'
20311'-mno-gnu-ld'
20312     Generate (or don't) code for the GNU linker.  This is the default.
20313
20314'-mno-pic'
20315     Generate code that does not use a global pointer register.  The
20316     result is not position independent code, and violates the IA-64
20317     ABI.
20318
20319'-mvolatile-asm-stop'
20320'-mno-volatile-asm-stop'
20321     Generate (or don't) a stop bit immediately before and after
20322     volatile asm statements.
20323
20324'-mregister-names'
20325'-mno-register-names'
20326     Generate (or don't) 'in', 'loc', and 'out' register names for the
20327     stacked registers.  This may make assembler output more readable.
20328
20329'-mno-sdata'
20330'-msdata'
20331     Disable (or enable) optimizations that use the small data section.
20332     This may be useful for working around optimizer bugs.
20333
20334'-mconstant-gp'
20335     Generate code that uses a single constant global pointer value.
20336     This is useful when compiling kernel code.
20337
20338'-mauto-pic'
20339     Generate code that is self-relocatable.  This implies
20340     '-mconstant-gp'.  This is useful when compiling firmware code.
20341
20342'-minline-float-divide-min-latency'
20343     Generate code for inline divides of floating-point values using the
20344     minimum latency algorithm.
20345
20346'-minline-float-divide-max-throughput'
20347     Generate code for inline divides of floating-point values using the
20348     maximum throughput algorithm.
20349
20350'-mno-inline-float-divide'
20351     Do not generate inline code for divides of floating-point values.
20352
20353'-minline-int-divide-min-latency'
20354     Generate code for inline divides of integer values using the
20355     minimum latency algorithm.
20356
20357'-minline-int-divide-max-throughput'
20358     Generate code for inline divides of integer values using the
20359     maximum throughput algorithm.
20360
20361'-mno-inline-int-divide'
20362     Do not generate inline code for divides of integer values.
20363
20364'-minline-sqrt-min-latency'
20365     Generate code for inline square roots using the minimum latency
20366     algorithm.
20367
20368'-minline-sqrt-max-throughput'
20369     Generate code for inline square roots using the maximum throughput
20370     algorithm.
20371
20372'-mno-inline-sqrt'
20373     Do not generate inline code for 'sqrt'.
20374
20375'-mfused-madd'
20376'-mno-fused-madd'
20377     Do (don't) generate code that uses the fused multiply/add or
20378     multiply/subtract instructions.  The default is to use these
20379     instructions.
20380
20381'-mno-dwarf2-asm'
20382'-mdwarf2-asm'
20383     Don't (or do) generate assembler code for the DWARF line number
20384     debugging info.  This may be useful when not using the GNU
20385     assembler.
20386
20387'-mearly-stop-bits'
20388'-mno-early-stop-bits'
20389     Allow stop bits to be placed earlier than immediately preceding the
20390     instruction that triggered the stop bit.  This can improve
20391     instruction scheduling, but does not always do so.
20392
20393'-mfixed-range=REGISTER-RANGE'
20394     Generate code treating the given register range as fixed registers.
20395     A fixed register is one that the register allocator cannot use.
20396     This is useful when compiling kernel code.  A register range is
20397     specified as two registers separated by a dash.  Multiple register
20398     ranges can be specified separated by a comma.
20399
20400'-mtls-size=TLS-SIZE'
20401     Specify bit size of immediate TLS offsets.  Valid values are 14,
20402     22, and 64.
20403
20404'-mtune=CPU-TYPE'
20405     Tune the instruction scheduling for a particular CPU, Valid values
20406     are 'itanium', 'itanium1', 'merced', 'itanium2', and 'mckinley'.
20407
20408'-milp32'
20409'-mlp64'
20410     Generate code for a 32-bit or 64-bit environment.  The 32-bit
20411     environment sets int, long and pointer to 32 bits.  The 64-bit
20412     environment sets int to 32 bits and long and pointer to 64 bits.
20413     These are HP-UX specific flags.
20414
20415'-mno-sched-br-data-spec'
20416'-msched-br-data-spec'
20417     (Dis/En)able data speculative scheduling before reload.  This
20418     results in generation of 'ld.a' instructions and the corresponding
20419     check instructions ('ld.c' / 'chk.a').  The default setting is
20420     disabled.
20421
20422'-msched-ar-data-spec'
20423'-mno-sched-ar-data-spec'
20424     (En/Dis)able data speculative scheduling after reload.  This
20425     results in generation of 'ld.a' instructions and the corresponding
20426     check instructions ('ld.c' / 'chk.a').  The default setting is
20427     enabled.
20428
20429'-mno-sched-control-spec'
20430'-msched-control-spec'
20431     (Dis/En)able control speculative scheduling.  This feature is
20432     available only during region scheduling (i.e. before reload).  This
20433     results in generation of the 'ld.s' instructions and the
20434     corresponding check instructions 'chk.s'.  The default setting is
20435     disabled.
20436
20437'-msched-br-in-data-spec'
20438'-mno-sched-br-in-data-spec'
20439     (En/Dis)able speculative scheduling of the instructions that are
20440     dependent on the data speculative loads before reload.  This is
20441     effective only with '-msched-br-data-spec' enabled.  The default
20442     setting is enabled.
20443
20444'-msched-ar-in-data-spec'
20445'-mno-sched-ar-in-data-spec'
20446     (En/Dis)able speculative scheduling of the instructions that are
20447     dependent on the data speculative loads after reload.  This is
20448     effective only with '-msched-ar-data-spec' enabled.  The default
20449     setting is enabled.
20450
20451'-msched-in-control-spec'
20452'-mno-sched-in-control-spec'
20453     (En/Dis)able speculative scheduling of the instructions that are
20454     dependent on the control speculative loads.  This is effective only
20455     with '-msched-control-spec' enabled.  The default setting is
20456     enabled.
20457
20458'-mno-sched-prefer-non-data-spec-insns'
20459'-msched-prefer-non-data-spec-insns'
20460     If enabled, data-speculative instructions are chosen for schedule
20461     only if there are no other choices at the moment.  This makes the
20462     use of the data speculation much more conservative.  The default
20463     setting is disabled.
20464
20465'-mno-sched-prefer-non-control-spec-insns'
20466'-msched-prefer-non-control-spec-insns'
20467     If enabled, control-speculative instructions are chosen for
20468     schedule only if there are no other choices at the moment.  This
20469     makes the use of the control speculation much more conservative.
20470     The default setting is disabled.
20471
20472'-mno-sched-count-spec-in-critical-path'
20473'-msched-count-spec-in-critical-path'
20474     If enabled, speculative dependencies are considered during
20475     computation of the instructions priorities.  This makes the use of
20476     the speculation a bit more conservative.  The default setting is
20477     disabled.
20478
20479'-msched-spec-ldc'
20480     Use a simple data speculation check.  This option is on by default.
20481
20482'-msched-control-spec-ldc'
20483     Use a simple check for control speculation.  This option is on by
20484     default.
20485
20486'-msched-stop-bits-after-every-cycle'
20487     Place a stop bit after every cycle when scheduling.  This option is
20488     on by default.
20489
20490'-msched-fp-mem-deps-zero-cost'
20491     Assume that floating-point stores and loads are not likely to cause
20492     a conflict when placed into the same instruction group.  This
20493     option is disabled by default.
20494
20495'-msel-sched-dont-check-control-spec'
20496     Generate checks for control speculation in selective scheduling.
20497     This flag is disabled by default.
20498
20499'-msched-max-memory-insns=MAX-INSNS'
20500     Limit on the number of memory insns per instruction group, giving
20501     lower priority to subsequent memory insns attempting to schedule in
20502     the same instruction group.  Frequently useful to prevent cache
20503     bank conflicts.  The default value is 1.
20504
20505'-msched-max-memory-insns-hard-limit'
20506     Makes the limit specified by 'msched-max-memory-insns' a hard
20507     limit, disallowing more than that number in an instruction group.
20508     Otherwise, the limit is "soft", meaning that non-memory operations
20509     are preferred when the limit is reached, but memory operations may
20510     still be scheduled.
20511
20512
20513File: gcc.info,  Node: LM32 Options,  Next: M32C Options,  Prev: IA-64 Options,  Up: Submodel Options
20514
205153.19.22 LM32 Options
20516--------------------
20517
20518These '-m' options are defined for the LatticeMico32 architecture:
20519
20520'-mbarrel-shift-enabled'
20521     Enable barrel-shift instructions.
20522
20523'-mdivide-enabled'
20524     Enable divide and modulus instructions.
20525
20526'-mmultiply-enabled'
20527     Enable multiply instructions.
20528
20529'-msign-extend-enabled'
20530     Enable sign extend instructions.
20531
20532'-muser-enabled'
20533     Enable user-defined instructions.
20534
20535
20536File: gcc.info,  Node: M32C Options,  Next: M32R/D Options,  Prev: LM32 Options,  Up: Submodel Options
20537
205383.19.23 M32C Options
20539--------------------
20540
20541'-mcpu=NAME'
20542     Select the CPU for which code is generated.  NAME may be one of
20543     'r8c' for the R8C/Tiny series, 'm16c' for the M16C (up to /60)
20544     series, 'm32cm' for the M16C/80 series, or 'm32c' for the M32C/80
20545     series.
20546
20547'-msim'
20548     Specifies that the program will be run on the simulator.  This
20549     causes an alternate runtime library to be linked in which supports,
20550     for example, file I/O.  You must not use this option when
20551     generating programs that will run on real hardware; you must
20552     provide your own runtime library for whatever I/O functions are
20553     needed.
20554
20555'-memregs=NUMBER'
20556     Specifies the number of memory-based pseudo-registers GCC uses
20557     during code generation.  These pseudo-registers are used like real
20558     registers, so there is a tradeoff between GCC's ability to fit the
20559     code into available registers, and the performance penalty of using
20560     memory instead of registers.  Note that all modules in a program
20561     must be compiled with the same value for this option.  Because of
20562     that, you must not use this option with GCC's default runtime
20563     libraries.
20564
20565
20566File: gcc.info,  Node: M32R/D Options,  Next: M680x0 Options,  Prev: M32C Options,  Up: Submodel Options
20567
205683.19.24 M32R/D Options
20569----------------------
20570
20571These '-m' options are defined for Renesas M32R/D architectures:
20572
20573'-m32r2'
20574     Generate code for the M32R/2.
20575
20576'-m32rx'
20577     Generate code for the M32R/X.
20578
20579'-m32r'
20580     Generate code for the M32R.  This is the default.
20581
20582'-mmodel=small'
20583     Assume all objects live in the lower 16MB of memory (so that their
20584     addresses can be loaded with the 'ld24' instruction), and assume
20585     all subroutines are reachable with the 'bl' instruction.  This is
20586     the default.
20587
20588     The addressability of a particular object can be set with the
20589     'model' attribute.
20590
20591'-mmodel=medium'
20592     Assume objects may be anywhere in the 32-bit address space (the
20593     compiler generates 'seth/add3' instructions to load their
20594     addresses), and assume all subroutines are reachable with the 'bl'
20595     instruction.
20596
20597'-mmodel=large'
20598     Assume objects may be anywhere in the 32-bit address space (the
20599     compiler generates 'seth/add3' instructions to load their
20600     addresses), and assume subroutines may not be reachable with the
20601     'bl' instruction (the compiler generates the much slower
20602     'seth/add3/jl' instruction sequence).
20603
20604'-msdata=none'
20605     Disable use of the small data area.  Variables are put into one of
20606     '.data', '.bss', or '.rodata' (unless the 'section' attribute has
20607     been specified).  This is the default.
20608
20609     The small data area consists of sections '.sdata' and '.sbss'.
20610     Objects may be explicitly put in the small data area with the
20611     'section' attribute using one of these sections.
20612
20613'-msdata=sdata'
20614     Put small global and static data in the small data area, but do not
20615     generate special code to reference them.
20616
20617'-msdata=use'
20618     Put small global and static data in the small data area, and
20619     generate special instructions to reference them.
20620
20621'-G NUM'
20622     Put global and static objects less than or equal to NUM bytes into
20623     the small data or BSS sections instead of the normal data or BSS
20624     sections.  The default value of NUM is 8.  The '-msdata' option
20625     must be set to one of 'sdata' or 'use' for this option to have any
20626     effect.
20627
20628     All modules should be compiled with the same '-G NUM' value.
20629     Compiling with different values of NUM may or may not work; if it
20630     doesn't the linker gives an error message--incorrect code is not
20631     generated.
20632
20633'-mdebug'
20634     Makes the M32R-specific code in the compiler display some
20635     statistics that might help in debugging programs.
20636
20637'-malign-loops'
20638     Align all loops to a 32-byte boundary.
20639
20640'-mno-align-loops'
20641     Do not enforce a 32-byte alignment for loops.  This is the default.
20642
20643'-missue-rate=NUMBER'
20644     Issue NUMBER instructions per cycle.  NUMBER can only be 1 or 2.
20645
20646'-mbranch-cost=NUMBER'
20647     NUMBER can only be 1 or 2.  If it is 1 then branches are preferred
20648     over conditional code, if it is 2, then the opposite applies.
20649
20650'-mflush-trap=NUMBER'
20651     Specifies the trap number to use to flush the cache.  The default
20652     is 12.  Valid numbers are between 0 and 15 inclusive.
20653
20654'-mno-flush-trap'
20655     Specifies that the cache cannot be flushed by using a trap.
20656
20657'-mflush-func=NAME'
20658     Specifies the name of the operating system function to call to
20659     flush the cache.  The default is '_flush_cache', but a function
20660     call is only used if a trap is not available.
20661
20662'-mno-flush-func'
20663     Indicates that there is no OS function for flushing the cache.
20664
20665
20666File: gcc.info,  Node: M680x0 Options,  Next: MCore Options,  Prev: M32R/D Options,  Up: Submodel Options
20667
206683.19.25 M680x0 Options
20669----------------------
20670
20671These are the '-m' options defined for M680x0 and ColdFire processors.
20672The default settings depend on which architecture was selected when the
20673compiler was configured; the defaults for the most common choices are
20674given below.
20675
20676'-march=ARCH'
20677     Generate code for a specific M680x0 or ColdFire instruction set
20678     architecture.  Permissible values of ARCH for M680x0 architectures
20679     are: '68000', '68010', '68020', '68030', '68040', '68060' and
20680     'cpu32'.  ColdFire architectures are selected according to
20681     Freescale's ISA classification and the permissible values are:
20682     'isaa', 'isaaplus', 'isab' and 'isac'.
20683
20684     GCC defines a macro '__mcfARCH__' whenever it is generating code
20685     for a ColdFire target.  The ARCH in this macro is one of the
20686     '-march' arguments given above.
20687
20688     When used together, '-march' and '-mtune' select code that runs on
20689     a family of similar processors but that is optimized for a
20690     particular microarchitecture.
20691
20692'-mcpu=CPU'
20693     Generate code for a specific M680x0 or ColdFire processor.  The
20694     M680x0 CPUs are: '68000', '68010', '68020', '68030', '68040',
20695     '68060', '68302', '68332' and 'cpu32'.  The ColdFire CPUs are given
20696     by the table below, which also classifies the CPUs into families:
20697
20698     *Family*       *'-mcpu' arguments*
20699     '51'           '51' '51ac' '51ag' '51cn' '51em' '51je' '51jf' '51jg'
20700                    '51jm' '51mm' '51qe' '51qm'
20701     '5206'         '5202' '5204' '5206'
20702     '5206e'        '5206e'
20703     '5208'         '5207' '5208'
20704     '5211a'        '5210a' '5211a'
20705     '5213'         '5211' '5212' '5213'
20706     '5216'         '5214' '5216'
20707     '52235'        '52230' '52231' '52232' '52233' '52234' '52235'
20708     '5225'         '5224' '5225'
20709     '52259'        '52252' '52254' '52255' '52256' '52258' '52259'
20710     '5235'         '5232' '5233' '5234' '5235' '523x'
20711     '5249'         '5249'
20712     '5250'         '5250'
20713     '5271'         '5270' '5271'
20714     '5272'         '5272'
20715     '5275'         '5274' '5275'
20716     '5282'         '5280' '5281' '5282' '528x'
20717     '53017'        '53011' '53012' '53013' '53014' '53015' '53016' '53017'
20718     '5307'         '5307'
20719     '5329'         '5327' '5328' '5329' '532x'
20720     '5373'         '5372' '5373' '537x'
20721     '5407'         '5407'
20722     '5475'         '5470' '5471' '5472' '5473' '5474' '5475' '547x' '5480'
20723                    '5481' '5482' '5483' '5484' '5485'
20724
20725     '-mcpu=CPU' overrides '-march=ARCH' if ARCH is compatible with CPU.
20726     Other combinations of '-mcpu' and '-march' are rejected.
20727
20728     GCC defines the macro '__mcf_cpu_CPU' when ColdFire target CPU is
20729     selected.  It also defines '__mcf_family_FAMILY', where the value
20730     of FAMILY is given by the table above.
20731
20732'-mtune=TUNE'
20733     Tune the code for a particular microarchitecture within the
20734     constraints set by '-march' and '-mcpu'.  The M680x0
20735     microarchitectures are: '68000', '68010', '68020', '68030',
20736     '68040', '68060' and 'cpu32'.  The ColdFire microarchitectures are:
20737     'cfv1', 'cfv2', 'cfv3', 'cfv4' and 'cfv4e'.
20738
20739     You can also use '-mtune=68020-40' for code that needs to run
20740     relatively well on 68020, 68030 and 68040 targets.
20741     '-mtune=68020-60' is similar but includes 68060 targets as well.
20742     These two options select the same tuning decisions as '-m68020-40'
20743     and '-m68020-60' respectively.
20744
20745     GCC defines the macros '__mcARCH' and '__mcARCH__' when tuning for
20746     680x0 architecture ARCH.  It also defines 'mcARCH' unless either
20747     '-ansi' or a non-GNU '-std' option is used.  If GCC is tuning for a
20748     range of architectures, as selected by '-mtune=68020-40' or
20749     '-mtune=68020-60', it defines the macros for every architecture in
20750     the range.
20751
20752     GCC also defines the macro '__mUARCH__' when tuning for ColdFire
20753     microarchitecture UARCH, where UARCH is one of the arguments given
20754     above.
20755
20756'-m68000'
20757'-mc68000'
20758     Generate output for a 68000.  This is the default when the compiler
20759     is configured for 68000-based systems.  It is equivalent to
20760     '-march=68000'.
20761
20762     Use this option for microcontrollers with a 68000 or EC000 core,
20763     including the 68008, 68302, 68306, 68307, 68322, 68328 and 68356.
20764
20765'-m68010'
20766     Generate output for a 68010.  This is the default when the compiler
20767     is configured for 68010-based systems.  It is equivalent to
20768     '-march=68010'.
20769
20770'-m68020'
20771'-mc68020'
20772     Generate output for a 68020.  This is the default when the compiler
20773     is configured for 68020-based systems.  It is equivalent to
20774     '-march=68020'.
20775
20776'-m68030'
20777     Generate output for a 68030.  This is the default when the compiler
20778     is configured for 68030-based systems.  It is equivalent to
20779     '-march=68030'.
20780
20781'-m68040'
20782     Generate output for a 68040.  This is the default when the compiler
20783     is configured for 68040-based systems.  It is equivalent to
20784     '-march=68040'.
20785
20786     This option inhibits the use of 68881/68882 instructions that have
20787     to be emulated by software on the 68040.  Use this option if your
20788     68040 does not have code to emulate those instructions.
20789
20790'-m68060'
20791     Generate output for a 68060.  This is the default when the compiler
20792     is configured for 68060-based systems.  It is equivalent to
20793     '-march=68060'.
20794
20795     This option inhibits the use of 68020 and 68881/68882 instructions
20796     that have to be emulated by software on the 68060.  Use this option
20797     if your 68060 does not have code to emulate those instructions.
20798
20799'-mcpu32'
20800     Generate output for a CPU32.  This is the default when the compiler
20801     is configured for CPU32-based systems.  It is equivalent to
20802     '-march=cpu32'.
20803
20804     Use this option for microcontrollers with a CPU32 or CPU32+ core,
20805     including the 68330, 68331, 68332, 68333, 68334, 68336, 68340,
20806     68341, 68349 and 68360.
20807
20808'-m5200'
20809     Generate output for a 520X ColdFire CPU.  This is the default when
20810     the compiler is configured for 520X-based systems.  It is
20811     equivalent to '-mcpu=5206', and is now deprecated in favor of that
20812     option.
20813
20814     Use this option for microcontroller with a 5200 core, including the
20815     MCF5202, MCF5203, MCF5204 and MCF5206.
20816
20817'-m5206e'
20818     Generate output for a 5206e ColdFire CPU.  The option is now
20819     deprecated in favor of the equivalent '-mcpu=5206e'.
20820
20821'-m528x'
20822     Generate output for a member of the ColdFire 528X family.  The
20823     option is now deprecated in favor of the equivalent '-mcpu=528x'.
20824
20825'-m5307'
20826     Generate output for a ColdFire 5307 CPU.  The option is now
20827     deprecated in favor of the equivalent '-mcpu=5307'.
20828
20829'-m5407'
20830     Generate output for a ColdFire 5407 CPU.  The option is now
20831     deprecated in favor of the equivalent '-mcpu=5407'.
20832
20833'-mcfv4e'
20834     Generate output for a ColdFire V4e family CPU (e.g. 547x/548x).
20835     This includes use of hardware floating-point instructions.  The
20836     option is equivalent to '-mcpu=547x', and is now deprecated in
20837     favor of that option.
20838
20839'-m68020-40'
20840     Generate output for a 68040, without using any of the new
20841     instructions.  This results in code that can run relatively
20842     efficiently on either a 68020/68881 or a 68030 or a 68040.  The
20843     generated code does use the 68881 instructions that are emulated on
20844     the 68040.
20845
20846     The option is equivalent to '-march=68020' '-mtune=68020-40'.
20847
20848'-m68020-60'
20849     Generate output for a 68060, without using any of the new
20850     instructions.  This results in code that can run relatively
20851     efficiently on either a 68020/68881 or a 68030 or a 68040.  The
20852     generated code does use the 68881 instructions that are emulated on
20853     the 68060.
20854
20855     The option is equivalent to '-march=68020' '-mtune=68020-60'.
20856
20857'-mhard-float'
20858'-m68881'
20859     Generate floating-point instructions.  This is the default for
20860     68020 and above, and for ColdFire devices that have an FPU.  It
20861     defines the macro '__HAVE_68881__' on M680x0 targets and
20862     '__mcffpu__' on ColdFire targets.
20863
20864'-msoft-float'
20865     Do not generate floating-point instructions; use library calls
20866     instead.  This is the default for 68000, 68010, and 68832 targets.
20867     It is also the default for ColdFire devices that have no FPU.
20868
20869'-mdiv'
20870'-mno-div'
20871     Generate (do not generate) ColdFire hardware divide and remainder
20872     instructions.  If '-march' is used without '-mcpu', the default is
20873     "on" for ColdFire architectures and "off" for M680x0 architectures.
20874     Otherwise, the default is taken from the target CPU (either the
20875     default CPU, or the one specified by '-mcpu').  For example, the
20876     default is "off" for '-mcpu=5206' and "on" for '-mcpu=5206e'.
20877
20878     GCC defines the macro '__mcfhwdiv__' when this option is enabled.
20879
20880'-mshort'
20881     Consider type 'int' to be 16 bits wide, like 'short int'.
20882     Additionally, parameters passed on the stack are also aligned to a
20883     16-bit boundary even on targets whose API mandates promotion to
20884     32-bit.
20885
20886'-mno-short'
20887     Do not consider type 'int' to be 16 bits wide.  This is the
20888     default.
20889
20890'-mnobitfield'
20891'-mno-bitfield'
20892     Do not use the bit-field instructions.  The '-m68000', '-mcpu32'
20893     and '-m5200' options imply '-mnobitfield'.
20894
20895'-mbitfield'
20896     Do use the bit-field instructions.  The '-m68020' option implies
20897     '-mbitfield'.  This is the default if you use a configuration
20898     designed for a 68020.
20899
20900'-mrtd'
20901     Use a different function-calling convention, in which functions
20902     that take a fixed number of arguments return with the 'rtd'
20903     instruction, which pops their arguments while returning.  This
20904     saves one instruction in the caller since there is no need to pop
20905     the arguments there.
20906
20907     This calling convention is incompatible with the one normally used
20908     on Unix, so you cannot use it if you need to call libraries
20909     compiled with the Unix compiler.
20910
20911     Also, you must provide function prototypes for all functions that
20912     take variable numbers of arguments (including 'printf'); otherwise
20913     incorrect code is generated for calls to those functions.
20914
20915     In addition, seriously incorrect code results if you call a
20916     function with too many arguments.  (Normally, extra arguments are
20917     harmlessly ignored.)
20918
20919     The 'rtd' instruction is supported by the 68010, 68020, 68030,
20920     68040, 68060 and CPU32 processors, but not by the 68000 or 5200.
20921
20922     The default is '-mno-rtd'.
20923
20924'-malign-int'
20925'-mno-align-int'
20926     Control whether GCC aligns 'int', 'long', 'long long', 'float',
20927     'double', and 'long double' variables on a 32-bit boundary
20928     ('-malign-int') or a 16-bit boundary ('-mno-align-int').  Aligning
20929     variables on 32-bit boundaries produces code that runs somewhat
20930     faster on processors with 32-bit busses at the expense of more
20931     memory.
20932
20933     *Warning:* if you use the '-malign-int' switch, GCC aligns
20934     structures containing the above types differently than most
20935     published application binary interface specifications for the m68k.
20936
20937     Use the pc-relative addressing mode of the 68000 directly, instead
20938     of using a global offset table.  At present, this option implies
20939     '-fpic', allowing at most a 16-bit offset for pc-relative
20940     addressing.  '-fPIC' is not presently supported with '-mpcrel',
20941     though this could be supported for 68020 and higher processors.
20942
20943'-mno-strict-align'
20944'-mstrict-align'
20945     Do not (do) assume that unaligned memory references are handled by
20946     the system.
20947
20948'-msep-data'
20949     Generate code that allows the data segment to be located in a
20950     different area of memory from the text segment.  This allows for
20951     execute-in-place in an environment without virtual memory
20952     management.  This option implies '-fPIC'.
20953
20954'-mno-sep-data'
20955     Generate code that assumes that the data segment follows the text
20956     segment.  This is the default.
20957
20958'-mid-shared-library'
20959     Generate code that supports shared libraries via the library ID
20960     method.  This allows for execute-in-place and shared libraries in
20961     an environment without virtual memory management.  This option
20962     implies '-fPIC'.
20963
20964'-mno-id-shared-library'
20965     Generate code that doesn't assume ID-based shared libraries are
20966     being used.  This is the default.
20967
20968'-mshared-library-id=n'
20969     Specifies the identification number of the ID-based shared library
20970     being compiled.  Specifying a value of 0 generates more compact
20971     code; specifying other values forces the allocation of that number
20972     to the current library, but is no more space- or time-efficient
20973     than omitting this option.
20974
20975'-mxgot'
20976'-mno-xgot'
20977     When generating position-independent code for ColdFire, generate
20978     code that works if the GOT has more than 8192 entries.  This code
20979     is larger and slower than code generated without this option.  On
20980     M680x0 processors, this option is not needed; '-fPIC' suffices.
20981
20982     GCC normally uses a single instruction to load values from the GOT.
20983     While this is relatively efficient, it only works if the GOT is
20984     smaller than about 64k.  Anything larger causes the linker to
20985     report an error such as:
20986
20987          relocation truncated to fit: R_68K_GOT16O foobar
20988
20989     If this happens, you should recompile your code with '-mxgot'.  It
20990     should then work with very large GOTs.  However, code generated
20991     with '-mxgot' is less efficient, since it takes 4 instructions to
20992     fetch the value of a global symbol.
20993
20994     Note that some linkers, including newer versions of the GNU linker,
20995     can create multiple GOTs and sort GOT entries.  If you have such a
20996     linker, you should only need to use '-mxgot' when compiling a
20997     single object file that accesses more than 8192 GOT entries.  Very
20998     few do.
20999
21000     These options have no effect unless GCC is generating
21001     position-independent code.
21002
21003'-mlong-jump-table-offsets'
21004     Use 32-bit offsets in 'switch' tables.  The default is to use
21005     16-bit offsets.
21006
21007
21008File: gcc.info,  Node: MCore Options,  Next: MeP Options,  Prev: M680x0 Options,  Up: Submodel Options
21009
210103.19.26 MCore Options
21011---------------------
21012
21013These are the '-m' options defined for the Motorola M*Core processors.
21014
21015'-mhardlit'
21016'-mno-hardlit'
21017     Inline constants into the code stream if it can be done in two
21018     instructions or less.
21019
21020'-mdiv'
21021'-mno-div'
21022     Use the divide instruction.  (Enabled by default).
21023
21024'-mrelax-immediate'
21025'-mno-relax-immediate'
21026     Allow arbitrary-sized immediates in bit operations.
21027
21028'-mwide-bitfields'
21029'-mno-wide-bitfields'
21030     Always treat bit-fields as 'int'-sized.
21031
21032'-m4byte-functions'
21033'-mno-4byte-functions'
21034     Force all functions to be aligned to a 4-byte boundary.
21035
21036'-mcallgraph-data'
21037'-mno-callgraph-data'
21038     Emit callgraph information.
21039
21040'-mslow-bytes'
21041'-mno-slow-bytes'
21042     Prefer word access when reading byte quantities.
21043
21044'-mlittle-endian'
21045'-mbig-endian'
21046     Generate code for a little-endian target.
21047
21048'-m210'
21049'-m340'
21050     Generate code for the 210 processor.
21051
21052'-mno-lsim'
21053     Assume that runtime support has been provided and so omit the
21054     simulator library ('libsim.a)' from the linker command line.
21055
21056'-mstack-increment=SIZE'
21057     Set the maximum amount for a single stack increment operation.
21058     Large values can increase the speed of programs that contain
21059     functions that need a large amount of stack space, but they can
21060     also trigger a segmentation fault if the stack is extended too
21061     much.  The default value is 0x1000.
21062
21063
21064File: gcc.info,  Node: MeP Options,  Next: MicroBlaze Options,  Prev: MCore Options,  Up: Submodel Options
21065
210663.19.27 MeP Options
21067-------------------
21068
21069'-mabsdiff'
21070     Enables the 'abs' instruction, which is the absolute difference
21071     between two registers.
21072
21073'-mall-opts'
21074     Enables all the optional instructions--average, multiply, divide,
21075     bit operations, leading zero, absolute difference, min/max, clip,
21076     and saturation.
21077
21078'-maverage'
21079     Enables the 'ave' instruction, which computes the average of two
21080     registers.
21081
21082'-mbased=N'
21083     Variables of size N bytes or smaller are placed in the '.based'
21084     section by default.  Based variables use the '$tp' register as a
21085     base register, and there is a 128-byte limit to the '.based'
21086     section.
21087
21088'-mbitops'
21089     Enables the bit operation instructions--bit test ('btstm'), set
21090     ('bsetm'), clear ('bclrm'), invert ('bnotm'), and test-and-set
21091     ('tas').
21092
21093'-mc=NAME'
21094     Selects which section constant data is placed in.  NAME may be
21095     'tiny', 'near', or 'far'.
21096
21097'-mclip'
21098     Enables the 'clip' instruction.  Note that '-mclip' is not useful
21099     unless you also provide '-mminmax'.
21100
21101'-mconfig=NAME'
21102     Selects one of the built-in core configurations.  Each MeP chip has
21103     one or more modules in it; each module has a core CPU and a variety
21104     of coprocessors, optional instructions, and peripherals.  The
21105     'MeP-Integrator' tool, not part of GCC, provides these
21106     configurations through this option; using this option is the same
21107     as using all the corresponding command-line options.  The default
21108     configuration is 'default'.
21109
21110'-mcop'
21111     Enables the coprocessor instructions.  By default, this is a 32-bit
21112     coprocessor.  Note that the coprocessor is normally enabled via the
21113     '-mconfig=' option.
21114
21115'-mcop32'
21116     Enables the 32-bit coprocessor's instructions.
21117
21118'-mcop64'
21119     Enables the 64-bit coprocessor's instructions.
21120
21121'-mivc2'
21122     Enables IVC2 scheduling.  IVC2 is a 64-bit VLIW coprocessor.
21123
21124'-mdc'
21125     Causes constant variables to be placed in the '.near' section.
21126
21127'-mdiv'
21128     Enables the 'div' and 'divu' instructions.
21129
21130'-meb'
21131     Generate big-endian code.
21132
21133'-mel'
21134     Generate little-endian code.
21135
21136'-mio-volatile'
21137     Tells the compiler that any variable marked with the 'io' attribute
21138     is to be considered volatile.
21139
21140'-ml'
21141     Causes variables to be assigned to the '.far' section by default.
21142
21143'-mleadz'
21144     Enables the 'leadz' (leading zero) instruction.
21145
21146'-mm'
21147     Causes variables to be assigned to the '.near' section by default.
21148
21149'-mminmax'
21150     Enables the 'min' and 'max' instructions.
21151
21152'-mmult'
21153     Enables the multiplication and multiply-accumulate instructions.
21154
21155'-mno-opts'
21156     Disables all the optional instructions enabled by '-mall-opts'.
21157
21158'-mrepeat'
21159     Enables the 'repeat' and 'erepeat' instructions, used for
21160     low-overhead looping.
21161
21162'-ms'
21163     Causes all variables to default to the '.tiny' section.  Note that
21164     there is a 65536-byte limit to this section.  Accesses to these
21165     variables use the '%gp' base register.
21166
21167'-msatur'
21168     Enables the saturation instructions.  Note that the compiler does
21169     not currently generate these itself, but this option is included
21170     for compatibility with other tools, like 'as'.
21171
21172'-msdram'
21173     Link the SDRAM-based runtime instead of the default ROM-based
21174     runtime.
21175
21176'-msim'
21177     Link the simulator run-time libraries.
21178
21179'-msimnovec'
21180     Link the simulator runtime libraries, excluding built-in support
21181     for reset and exception vectors and tables.
21182
21183'-mtf'
21184     Causes all functions to default to the '.far' section.  Without
21185     this option, functions default to the '.near' section.
21186
21187'-mtiny=N'
21188     Variables that are N bytes or smaller are allocated to the '.tiny'
21189     section.  These variables use the '$gp' base register.  The default
21190     for this option is 4, but note that there's a 65536-byte limit to
21191     the '.tiny' section.
21192
21193
21194File: gcc.info,  Node: MicroBlaze Options,  Next: MIPS Options,  Prev: MeP Options,  Up: Submodel Options
21195
211963.19.28 MicroBlaze Options
21197--------------------------
21198
21199'-msoft-float'
21200     Use software emulation for floating point (default).
21201
21202'-mhard-float'
21203     Use hardware floating-point instructions.
21204
21205'-mmemcpy'
21206     Do not optimize block moves, use 'memcpy'.
21207
21208'-mno-clearbss'
21209     This option is deprecated.  Use '-fno-zero-initialized-in-bss'
21210     instead.
21211
21212'-mcpu=CPU-TYPE'
21213     Use features of, and schedule code for, the given CPU. Supported
21214     values are in the format 'vX.YY.Z', where X is a major version, YY
21215     is the minor version, and Z is compatibility code.  Example values
21216     are 'v3.00.a', 'v4.00.b', 'v5.00.a', 'v5.00.b', 'v6.00.a'.
21217
21218'-mxl-soft-mul'
21219     Use software multiply emulation (default).
21220
21221'-mxl-soft-div'
21222     Use software emulation for divides (default).
21223
21224'-mxl-barrel-shift'
21225     Use the hardware barrel shifter.
21226
21227'-mxl-pattern-compare'
21228     Use pattern compare instructions.
21229
21230'-msmall-divides'
21231     Use table lookup optimization for small signed integer divisions.
21232
21233'-mxl-stack-check'
21234     This option is deprecated.  Use '-fstack-check' instead.
21235
21236'-mxl-gp-opt'
21237     Use GP-relative '.sdata'/'.sbss' sections.
21238
21239'-mxl-multiply-high'
21240     Use multiply high instructions for high part of 32x32 multiply.
21241
21242'-mxl-float-convert'
21243     Use hardware floating-point conversion instructions.
21244
21245'-mxl-float-sqrt'
21246     Use hardware floating-point square root instruction.
21247
21248'-mbig-endian'
21249     Generate code for a big-endian target.
21250
21251'-mlittle-endian'
21252     Generate code for a little-endian target.
21253
21254'-mxl-reorder'
21255     Use reorder instructions (swap and byte reversed load/store).
21256
21257'-mxl-mode-APP-MODEL'
21258     Select application model APP-MODEL.  Valid models are
21259     'executable'
21260          normal executable (default), uses startup code 'crt0.o'.
21261
21262     '-mpic-data-is-text-relative'
21263          Assume that the displacement between the text and data
21264          segments is fixed at static link time.  This allows data to be
21265          referenced by offset from start of text address instead of GOT
21266          since PC-relative addressing is not supported.
21267
21268     'xmdstub'
21269          for use with Xilinx Microprocessor Debugger (XMD) based
21270          software intrusive debug agent called xmdstub.  This uses
21271          startup file 'crt1.o' and sets the start address of the
21272          program to 0x800.
21273
21274     'bootstrap'
21275          for applications that are loaded using a bootloader.  This
21276          model uses startup file 'crt2.o' which does not contain a
21277          processor reset vector handler.  This is suitable for
21278          transferring control on a processor reset to the bootloader
21279          rather than the application.
21280
21281     'novectors'
21282          for applications that do not require any of the MicroBlaze
21283          vectors.  This option may be useful for applications running
21284          within a monitoring application.  This model uses 'crt3.o' as
21285          a startup file.
21286
21287     Option '-xl-mode-APP-MODEL' is a deprecated alias for
21288     '-mxl-mode-APP-MODEL'.
21289
21290
21291File: gcc.info,  Node: MIPS Options,  Next: MMIX Options,  Prev: MicroBlaze Options,  Up: Submodel Options
21292
212933.19.29 MIPS Options
21294--------------------
21295
21296'-EB'
21297     Generate big-endian code.
21298
21299'-EL'
21300     Generate little-endian code.  This is the default for 'mips*el-*-*'
21301     configurations.
21302
21303'-march=ARCH'
21304     Generate code that runs on ARCH, which can be the name of a generic
21305     MIPS ISA, or the name of a particular processor.  The ISA names
21306     are: 'mips1', 'mips2', 'mips3', 'mips4', 'mips32', 'mips32r2',
21307     'mips32r3', 'mips32r5', 'mips32r6', 'mips64', 'mips64r2',
21308     'mips64r3', 'mips64r5' and 'mips64r6'.  The processor names are:
21309     '4kc', '4km', '4kp', '4ksc', '4kec', '4kem', '4kep', '4ksd', '5kc',
21310     '5kf', '20kc', '24kc', '24kf2_1', '24kf1_1', '24kec', '24kef2_1',
21311     '24kef1_1', '34kc', '34kf2_1', '34kf1_1', '34kn', '74kc',
21312     '74kf2_1', '74kf1_1', '74kf3_2', '1004kc', '1004kf2_1',
21313     '1004kf1_1', 'i6400', 'i6500', 'interaptiv', 'loongson2e',
21314     'loongson2f', 'loongson3a', 'gs464', 'gs464e', 'gs264e', 'm4k',
21315     'm14k', 'm14kc', 'm14ke', 'm14kec', 'm5100', 'm5101', 'octeon',
21316     'octeon+', 'octeon2', 'octeon3', 'orion', 'p5600', 'p6600',
21317     'r2000', 'r3000', 'r3900', 'r4000', 'r4400', 'r4600', 'r4650',
21318     'r4700', 'r5900', 'r6000', 'r8000', 'rm7000', 'rm9000', 'r10000',
21319     'r12000', 'r14000', 'r16000', 'sb1', 'sr71000', 'vr4100', 'vr4111',
21320     'vr4120', 'vr4130', 'vr4300', 'vr5000', 'vr5400', 'vr5500', 'xlr'
21321     and 'xlp'.  The special value 'from-abi' selects the most
21322     compatible architecture for the selected ABI (that is, 'mips1' for
21323     32-bit ABIs and 'mips3' for 64-bit ABIs).
21324
21325     The native Linux/GNU toolchain also supports the value 'native',
21326     which selects the best architecture option for the host processor.
21327     '-march=native' has no effect if GCC does not recognize the
21328     processor.
21329
21330     In processor names, a final '000' can be abbreviated as 'k' (for
21331     example, '-march=r2k').  Prefixes are optional, and 'vr' may be
21332     written 'r'.
21333
21334     Names of the form 'Nf2_1' refer to processors with FPUs clocked at
21335     half the rate of the core, names of the form 'Nf1_1' refer to
21336     processors with FPUs clocked at the same rate as the core, and
21337     names of the form 'Nf3_2' refer to processors with FPUs clocked a
21338     ratio of 3:2 with respect to the core.  For compatibility reasons,
21339     'Nf' is accepted as a synonym for 'Nf2_1' while 'Nx' and 'Bfx' are
21340     accepted as synonyms for 'Nf1_1'.
21341
21342     GCC defines two macros based on the value of this option.  The
21343     first is '_MIPS_ARCH', which gives the name of target architecture,
21344     as a string.  The second has the form '_MIPS_ARCH_FOO', where FOO
21345     is the capitalized value of '_MIPS_ARCH'.  For example,
21346     '-march=r2000' sets '_MIPS_ARCH' to '"r2000"' and defines the macro
21347     '_MIPS_ARCH_R2000'.
21348
21349     Note that the '_MIPS_ARCH' macro uses the processor names given
21350     above.  In other words, it has the full prefix and does not
21351     abbreviate '000' as 'k'.  In the case of 'from-abi', the macro
21352     names the resolved architecture (either '"mips1"' or '"mips3"').
21353     It names the default architecture when no '-march' option is given.
21354
21355'-mtune=ARCH'
21356     Optimize for ARCH.  Among other things, this option controls the
21357     way instructions are scheduled, and the perceived cost of
21358     arithmetic operations.  The list of ARCH values is the same as for
21359     '-march'.
21360
21361     When this option is not used, GCC optimizes for the processor
21362     specified by '-march'.  By using '-march' and '-mtune' together, it
21363     is possible to generate code that runs on a family of processors,
21364     but optimize the code for one particular member of that family.
21365
21366     '-mtune' defines the macros '_MIPS_TUNE' and '_MIPS_TUNE_FOO',
21367     which work in the same way as the '-march' ones described above.
21368
21369'-mips1'
21370     Equivalent to '-march=mips1'.
21371
21372'-mips2'
21373     Equivalent to '-march=mips2'.
21374
21375'-mips3'
21376     Equivalent to '-march=mips3'.
21377
21378'-mips4'
21379     Equivalent to '-march=mips4'.
21380
21381'-mips32'
21382     Equivalent to '-march=mips32'.
21383
21384'-mips32r3'
21385     Equivalent to '-march=mips32r3'.
21386
21387'-mips32r5'
21388     Equivalent to '-march=mips32r5'.
21389
21390'-mips32r6'
21391     Equivalent to '-march=mips32r6'.
21392
21393'-mips64'
21394     Equivalent to '-march=mips64'.
21395
21396'-mips64r2'
21397     Equivalent to '-march=mips64r2'.
21398
21399'-mips64r3'
21400     Equivalent to '-march=mips64r3'.
21401
21402'-mips64r5'
21403     Equivalent to '-march=mips64r5'.
21404
21405'-mips64r6'
21406     Equivalent to '-march=mips64r6'.
21407
21408'-mips16'
21409'-mno-mips16'
21410     Generate (do not generate) MIPS16 code.  If GCC is targeting a
21411     MIPS32 or MIPS64 architecture, it makes use of the MIPS16e ASE.
21412
21413     MIPS16 code generation can also be controlled on a per-function
21414     basis by means of 'mips16' and 'nomips16' attributes.  *Note
21415     Function Attributes::, for more information.
21416
21417'-mflip-mips16'
21418     Generate MIPS16 code on alternating functions.  This option is
21419     provided for regression testing of mixed MIPS16/non-MIPS16 code
21420     generation, and is not intended for ordinary use in compiling user
21421     code.
21422
21423'-minterlink-compressed'
21424'-mno-interlink-compressed'
21425     Require (do not require) that code using the standard
21426     (uncompressed) MIPS ISA be link-compatible with MIPS16 and
21427     microMIPS code, and vice versa.
21428
21429     For example, code using the standard ISA encoding cannot jump
21430     directly to MIPS16 or microMIPS code; it must either use a call or
21431     an indirect jump.  '-minterlink-compressed' therefore disables
21432     direct jumps unless GCC knows that the target of the jump is not
21433     compressed.
21434
21435'-minterlink-mips16'
21436'-mno-interlink-mips16'
21437     Aliases of '-minterlink-compressed' and
21438     '-mno-interlink-compressed'.  These options predate the microMIPS
21439     ASE and are retained for backwards compatibility.
21440
21441'-mabi=32'
21442'-mabi=o64'
21443'-mabi=n32'
21444'-mabi=64'
21445'-mabi=eabi'
21446     Generate code for the given ABI.
21447
21448     Note that the EABI has a 32-bit and a 64-bit variant.  GCC normally
21449     generates 64-bit code when you select a 64-bit architecture, but
21450     you can use '-mgp32' to get 32-bit code instead.
21451
21452     For information about the O64 ABI, see
21453     <http://gcc.gnu.org/projects/mipso64-abi.html>.
21454
21455     GCC supports a variant of the o32 ABI in which floating-point
21456     registers are 64 rather than 32 bits wide.  You can select this
21457     combination with '-mabi=32' '-mfp64'.  This ABI relies on the
21458     'mthc1' and 'mfhc1' instructions and is therefore only supported
21459     for MIPS32R2, MIPS32R3 and MIPS32R5 processors.
21460
21461     The register assignments for arguments and return values remain the
21462     same, but each scalar value is passed in a single 64-bit register
21463     rather than a pair of 32-bit registers.  For example, scalar
21464     floating-point values are returned in '$f0' only, not a '$f0'/'$f1'
21465     pair.  The set of call-saved registers also remains the same in
21466     that the even-numbered double-precision registers are saved.
21467
21468     Two additional variants of the o32 ABI are supported to enable a
21469     transition from 32-bit to 64-bit registers.  These are FPXX
21470     ('-mfpxx') and FP64A ('-mfp64' '-mno-odd-spreg').  The FPXX
21471     extension mandates that all code must execute correctly when run
21472     using 32-bit or 64-bit registers.  The code can be interlinked with
21473     either FP32 or FP64, but not both.  The FP64A extension is similar
21474     to the FP64 extension but forbids the use of odd-numbered
21475     single-precision registers.  This can be used in conjunction with
21476     the 'FRE' mode of FPUs in MIPS32R5 processors and allows both FP32
21477     and FP64A code to interlink and run in the same process without
21478     changing FPU modes.
21479
21480'-mabicalls'
21481'-mno-abicalls'
21482     Generate (do not generate) code that is suitable for SVR4-style
21483     dynamic objects.  '-mabicalls' is the default for SVR4-based
21484     systems.
21485
21486'-mshared'
21487'-mno-shared'
21488     Generate (do not generate) code that is fully position-independent,
21489     and that can therefore be linked into shared libraries.  This
21490     option only affects '-mabicalls'.
21491
21492     All '-mabicalls' code has traditionally been position-independent,
21493     regardless of options like '-fPIC' and '-fpic'.  However, as an
21494     extension, the GNU toolchain allows executables to use absolute
21495     accesses for locally-binding symbols.  It can also use shorter GP
21496     initialization sequences and generate direct calls to
21497     locally-defined functions.  This mode is selected by '-mno-shared'.
21498
21499     '-mno-shared' depends on binutils 2.16 or higher and generates
21500     objects that can only be linked by the GNU linker.  However, the
21501     option does not affect the ABI of the final executable; it only
21502     affects the ABI of relocatable objects.  Using '-mno-shared'
21503     generally makes executables both smaller and quicker.
21504
21505     '-mshared' is the default.
21506
21507'-mplt'
21508'-mno-plt'
21509     Assume (do not assume) that the static and dynamic linkers support
21510     PLTs and copy relocations.  This option only affects '-mno-shared
21511     -mabicalls'.  For the n64 ABI, this option has no effect without
21512     '-msym32'.
21513
21514     You can make '-mplt' the default by configuring GCC with
21515     '--with-mips-plt'.  The default is '-mno-plt' otherwise.
21516
21517'-mxgot'
21518'-mno-xgot'
21519     Lift (do not lift) the usual restrictions on the size of the global
21520     offset table.
21521
21522     GCC normally uses a single instruction to load values from the GOT.
21523     While this is relatively efficient, it only works if the GOT is
21524     smaller than about 64k.  Anything larger causes the linker to
21525     report an error such as:
21526
21527          relocation truncated to fit: R_MIPS_GOT16 foobar
21528
21529     If this happens, you should recompile your code with '-mxgot'.
21530     This works with very large GOTs, although the code is also less
21531     efficient, since it takes three instructions to fetch the value of
21532     a global symbol.
21533
21534     Note that some linkers can create multiple GOTs.  If you have such
21535     a linker, you should only need to use '-mxgot' when a single object
21536     file accesses more than 64k's worth of GOT entries.  Very few do.
21537
21538     These options have no effect unless GCC is generating position
21539     independent code.
21540
21541'-mgp32'
21542     Assume that general-purpose registers are 32 bits wide.
21543
21544'-mgp64'
21545     Assume that general-purpose registers are 64 bits wide.
21546
21547'-mfp32'
21548     Assume that floating-point registers are 32 bits wide.
21549
21550'-mfp64'
21551     Assume that floating-point registers are 64 bits wide.
21552
21553'-mfpxx'
21554     Do not assume the width of floating-point registers.
21555
21556'-mhard-float'
21557     Use floating-point coprocessor instructions.
21558
21559'-msoft-float'
21560     Do not use floating-point coprocessor instructions.  Implement
21561     floating-point calculations using library calls instead.
21562
21563'-mno-float'
21564     Equivalent to '-msoft-float', but additionally asserts that the
21565     program being compiled does not perform any floating-point
21566     operations.  This option is presently supported only by some
21567     bare-metal MIPS configurations, where it may select a special set
21568     of libraries that lack all floating-point support (including, for
21569     example, the floating-point 'printf' formats).  If code compiled
21570     with '-mno-float' accidentally contains floating-point operations,
21571     it is likely to suffer a link-time or run-time failure.
21572
21573'-msingle-float'
21574     Assume that the floating-point coprocessor only supports
21575     single-precision operations.
21576
21577'-mdouble-float'
21578     Assume that the floating-point coprocessor supports
21579     double-precision operations.  This is the default.
21580
21581'-modd-spreg'
21582'-mno-odd-spreg'
21583     Enable the use of odd-numbered single-precision floating-point
21584     registers for the o32 ABI. This is the default for processors that
21585     are known to support these registers.  When using the o32 FPXX ABI,
21586     '-mno-odd-spreg' is set by default.
21587
21588'-mabs=2008'
21589'-mabs=legacy'
21590     These options control the treatment of the special not-a-number
21591     (NaN) IEEE 754 floating-point data with the 'abs.fmt' and 'neg.fmt'
21592     machine instructions.
21593
21594     By default or when '-mabs=legacy' is used the legacy treatment is
21595     selected.  In this case these instructions are considered
21596     arithmetic and avoided where correct operation is required and the
21597     input operand might be a NaN. A longer sequence of instructions
21598     that manipulate the sign bit of floating-point datum manually is
21599     used instead unless the '-ffinite-math-only' option has also been
21600     specified.
21601
21602     The '-mabs=2008' option selects the IEEE 754-2008 treatment.  In
21603     this case these instructions are considered non-arithmetic and
21604     therefore operating correctly in all cases, including in particular
21605     where the input operand is a NaN. These instructions are therefore
21606     always used for the respective operations.
21607
21608'-mnan=2008'
21609'-mnan=legacy'
21610     These options control the encoding of the special not-a-number
21611     (NaN) IEEE 754 floating-point data.
21612
21613     The '-mnan=legacy' option selects the legacy encoding.  In this
21614     case quiet NaNs (qNaNs) are denoted by the first bit of their
21615     trailing significand field being 0, whereas signaling NaNs (sNaNs)
21616     are denoted by the first bit of their trailing significand field
21617     being 1.
21618
21619     The '-mnan=2008' option selects the IEEE 754-2008 encoding.  In
21620     this case qNaNs are denoted by the first bit of their trailing
21621     significand field being 1, whereas sNaNs are denoted by the first
21622     bit of their trailing significand field being 0.
21623
21624     The default is '-mnan=legacy' unless GCC has been configured with
21625     '--with-nan=2008'.
21626
21627'-mllsc'
21628'-mno-llsc'
21629     Use (do not use) 'll', 'sc', and 'sync' instructions to implement
21630     atomic memory built-in functions.  When neither option is
21631     specified, GCC uses the instructions if the target architecture
21632     supports them.
21633
21634     '-mllsc' is useful if the runtime environment can emulate the
21635     instructions and '-mno-llsc' can be useful when compiling for
21636     nonstandard ISAs.  You can make either option the default by
21637     configuring GCC with '--with-llsc' and '--without-llsc'
21638     respectively.  '--with-llsc' is the default for some
21639     configurations; see the installation documentation for details.
21640
21641'-mdsp'
21642'-mno-dsp'
21643     Use (do not use) revision 1 of the MIPS DSP ASE.  *Note MIPS DSP
21644     Built-in Functions::.  This option defines the preprocessor macro
21645     '__mips_dsp'.  It also defines '__mips_dsp_rev' to 1.
21646
21647'-mdspr2'
21648'-mno-dspr2'
21649     Use (do not use) revision 2 of the MIPS DSP ASE.  *Note MIPS DSP
21650     Built-in Functions::.  This option defines the preprocessor macros
21651     '__mips_dsp' and '__mips_dspr2'.  It also defines '__mips_dsp_rev'
21652     to 2.
21653
21654'-msmartmips'
21655'-mno-smartmips'
21656     Use (do not use) the MIPS SmartMIPS ASE.
21657
21658'-mpaired-single'
21659'-mno-paired-single'
21660     Use (do not use) paired-single floating-point instructions.  *Note
21661     MIPS Paired-Single Support::.  This option requires hardware
21662     floating-point support to be enabled.
21663
21664'-mdmx'
21665'-mno-mdmx'
21666     Use (do not use) MIPS Digital Media Extension instructions.  This
21667     option can only be used when generating 64-bit code and requires
21668     hardware floating-point support to be enabled.
21669
21670'-mips3d'
21671'-mno-mips3d'
21672     Use (do not use) the MIPS-3D ASE.  *Note MIPS-3D Built-in
21673     Functions::.  The option '-mips3d' implies '-mpaired-single'.
21674
21675'-mmicromips'
21676'-mno-micromips'
21677     Generate (do not generate) microMIPS code.
21678
21679     MicroMIPS code generation can also be controlled on a per-function
21680     basis by means of 'micromips' and 'nomicromips' attributes.  *Note
21681     Function Attributes::, for more information.
21682
21683'-mmt'
21684'-mno-mt'
21685     Use (do not use) MT Multithreading instructions.
21686
21687'-mmcu'
21688'-mno-mcu'
21689     Use (do not use) the MIPS MCU ASE instructions.
21690
21691'-meva'
21692'-mno-eva'
21693     Use (do not use) the MIPS Enhanced Virtual Addressing instructions.
21694
21695'-mvirt'
21696'-mno-virt'
21697     Use (do not use) the MIPS Virtualization (VZ) instructions.
21698
21699'-mxpa'
21700'-mno-xpa'
21701     Use (do not use) the MIPS eXtended Physical Address (XPA)
21702     instructions.
21703
21704'-mcrc'
21705'-mno-crc'
21706     Use (do not use) the MIPS Cyclic Redundancy Check (CRC)
21707     instructions.
21708
21709'-mginv'
21710'-mno-ginv'
21711     Use (do not use) the MIPS Global INValidate (GINV) instructions.
21712
21713'-mloongson-mmi'
21714'-mno-loongson-mmi'
21715     Use (do not use) the MIPS Loongson MultiMedia extensions
21716     Instructions (MMI).
21717
21718'-mloongson-ext'
21719'-mno-loongson-ext'
21720     Use (do not use) the MIPS Loongson EXTensions (EXT) instructions.
21721
21722'-mloongson-ext2'
21723'-mno-loongson-ext2'
21724     Use (do not use) the MIPS Loongson EXTensions r2 (EXT2)
21725     instructions.
21726
21727'-mlong64'
21728     Force 'long' types to be 64 bits wide.  See '-mlong32' for an
21729     explanation of the default and the way that the pointer size is
21730     determined.
21731
21732'-mlong32'
21733     Force 'long', 'int', and pointer types to be 32 bits wide.
21734
21735     The default size of 'int's, 'long's and pointers depends on the
21736     ABI.  All the supported ABIs use 32-bit 'int's.  The n64 ABI uses
21737     64-bit 'long's, as does the 64-bit EABI; the others use 32-bit
21738     'long's.  Pointers are the same size as 'long's, or the same size
21739     as integer registers, whichever is smaller.
21740
21741'-msym32'
21742'-mno-sym32'
21743     Assume (do not assume) that all symbols have 32-bit values,
21744     regardless of the selected ABI.  This option is useful in
21745     combination with '-mabi=64' and '-mno-abicalls' because it allows
21746     GCC to generate shorter and faster references to symbolic
21747     addresses.
21748
21749'-G NUM'
21750     Put definitions of externally-visible data in a small data section
21751     if that data is no bigger than NUM bytes.  GCC can then generate
21752     more efficient accesses to the data; see '-mgpopt' for details.
21753
21754     The default '-G' option depends on the configuration.
21755
21756'-mlocal-sdata'
21757'-mno-local-sdata'
21758     Extend (do not extend) the '-G' behavior to local data too, such as
21759     to static variables in C.  '-mlocal-sdata' is the default for all
21760     configurations.
21761
21762     If the linker complains that an application is using too much small
21763     data, you might want to try rebuilding the less
21764     performance-critical parts with '-mno-local-sdata'.  You might also
21765     want to build large libraries with '-mno-local-sdata', so that the
21766     libraries leave more room for the main program.
21767
21768'-mextern-sdata'
21769'-mno-extern-sdata'
21770     Assume (do not assume) that externally-defined data is in a small
21771     data section if the size of that data is within the '-G' limit.
21772     '-mextern-sdata' is the default for all configurations.
21773
21774     If you compile a module MOD with '-mextern-sdata' '-G NUM'
21775     '-mgpopt', and MOD references a variable VAR that is no bigger than
21776     NUM bytes, you must make sure that VAR is placed in a small data
21777     section.  If VAR is defined by another module, you must either
21778     compile that module with a high-enough '-G' setting or attach a
21779     'section' attribute to VAR's definition.  If VAR is common, you
21780     must link the application with a high-enough '-G' setting.
21781
21782     The easiest way of satisfying these restrictions is to compile and
21783     link every module with the same '-G' option.  However, you may wish
21784     to build a library that supports several different small data
21785     limits.  You can do this by compiling the library with the highest
21786     supported '-G' setting and additionally using '-mno-extern-sdata'
21787     to stop the library from making assumptions about
21788     externally-defined data.
21789
21790'-mgpopt'
21791'-mno-gpopt'
21792     Use (do not use) GP-relative accesses for symbols that are known to
21793     be in a small data section; see '-G', '-mlocal-sdata' and
21794     '-mextern-sdata'.  '-mgpopt' is the default for all configurations.
21795
21796     '-mno-gpopt' is useful for cases where the '$gp' register might not
21797     hold the value of '_gp'.  For example, if the code is part of a
21798     library that might be used in a boot monitor, programs that call
21799     boot monitor routines pass an unknown value in '$gp'.  (In such
21800     situations, the boot monitor itself is usually compiled with
21801     '-G0'.)
21802
21803     '-mno-gpopt' implies '-mno-local-sdata' and '-mno-extern-sdata'.
21804
21805'-membedded-data'
21806'-mno-embedded-data'
21807     Allocate variables to the read-only data section first if possible,
21808     then next in the small data section if possible, otherwise in data.
21809     This gives slightly slower code than the default, but reduces the
21810     amount of RAM required when executing, and thus may be preferred
21811     for some embedded systems.
21812
21813'-muninit-const-in-rodata'
21814'-mno-uninit-const-in-rodata'
21815     Put uninitialized 'const' variables in the read-only data section.
21816     This option is only meaningful in conjunction with
21817     '-membedded-data'.
21818
21819'-mcode-readable=SETTING'
21820     Specify whether GCC may generate code that reads from executable
21821     sections.  There are three possible settings:
21822
21823     '-mcode-readable=yes'
21824          Instructions may freely access executable sections.  This is
21825          the default setting.
21826
21827     '-mcode-readable=pcrel'
21828          MIPS16 PC-relative load instructions can access executable
21829          sections, but other instructions must not do so.  This option
21830          is useful on 4KSc and 4KSd processors when the code TLBs have
21831          the Read Inhibit bit set.  It is also useful on processors
21832          that can be configured to have a dual instruction/data SRAM
21833          interface and that, like the M4K, automatically redirect
21834          PC-relative loads to the instruction RAM.
21835
21836     '-mcode-readable=no'
21837          Instructions must not access executable sections.  This option
21838          can be useful on targets that are configured to have a dual
21839          instruction/data SRAM interface but that (unlike the M4K) do
21840          not automatically redirect PC-relative loads to the
21841          instruction RAM.
21842
21843'-msplit-addresses'
21844'-mno-split-addresses'
21845     Enable (disable) use of the '%hi()' and '%lo()' assembler
21846     relocation operators.  This option has been superseded by
21847     '-mexplicit-relocs' but is retained for backwards compatibility.
21848
21849'-mexplicit-relocs'
21850'-mno-explicit-relocs'
21851     Use (do not use) assembler relocation operators when dealing with
21852     symbolic addresses.  The alternative, selected by
21853     '-mno-explicit-relocs', is to use assembler macros instead.
21854
21855     '-mexplicit-relocs' is the default if GCC was configured to use an
21856     assembler that supports relocation operators.
21857
21858'-mcheck-zero-division'
21859'-mno-check-zero-division'
21860     Trap (do not trap) on integer division by zero.
21861
21862     The default is '-mcheck-zero-division'.
21863
21864'-mdivide-traps'
21865'-mdivide-breaks'
21866     MIPS systems check for division by zero by generating either a
21867     conditional trap or a break instruction.  Using traps results in
21868     smaller code, but is only supported on MIPS II and later.  Also,
21869     some versions of the Linux kernel have a bug that prevents trap
21870     from generating the proper signal ('SIGFPE').  Use '-mdivide-traps'
21871     to allow conditional traps on architectures that support them and
21872     '-mdivide-breaks' to force the use of breaks.
21873
21874     The default is usually '-mdivide-traps', but this can be overridden
21875     at configure time using '--with-divide=breaks'.  Divide-by-zero
21876     checks can be completely disabled using '-mno-check-zero-division'.
21877
21878'-mload-store-pairs'
21879'-mno-load-store-pairs'
21880     Enable (disable) an optimization that pairs consecutive load or
21881     store instructions to enable load/store bonding.  This option is
21882     enabled by default but only takes effect when the selected
21883     architecture is known to support bonding.
21884
21885'-mmemcpy'
21886'-mno-memcpy'
21887     Force (do not force) the use of 'memcpy' for non-trivial block
21888     moves.  The default is '-mno-memcpy', which allows GCC to inline
21889     most constant-sized copies.
21890
21891'-mlong-calls'
21892'-mno-long-calls'
21893     Disable (do not disable) use of the 'jal' instruction.  Calling
21894     functions using 'jal' is more efficient but requires the caller and
21895     callee to be in the same 256 megabyte segment.
21896
21897     This option has no effect on abicalls code.  The default is
21898     '-mno-long-calls'.
21899
21900'-mmad'
21901'-mno-mad'
21902     Enable (disable) use of the 'mad', 'madu' and 'mul' instructions,
21903     as provided by the R4650 ISA.
21904
21905'-mimadd'
21906'-mno-imadd'
21907     Enable (disable) use of the 'madd' and 'msub' integer instructions.
21908     The default is '-mimadd' on architectures that support 'madd' and
21909     'msub' except for the 74k architecture where it was found to
21910     generate slower code.
21911
21912'-mfused-madd'
21913'-mno-fused-madd'
21914     Enable (disable) use of the floating-point multiply-accumulate
21915     instructions, when they are available.  The default is
21916     '-mfused-madd'.
21917
21918     On the R8000 CPU when multiply-accumulate instructions are used,
21919     the intermediate product is calculated to infinite precision and is
21920     not subject to the FCSR Flush to Zero bit.  This may be undesirable
21921     in some circumstances.  On other processors the result is
21922     numerically identical to the equivalent computation using separate
21923     multiply, add, subtract and negate instructions.
21924
21925'-nocpp'
21926     Tell the MIPS assembler to not run its preprocessor over user
21927     assembler files (with a '.s' suffix) when assembling them.
21928
21929'-mfix-24k'
21930'-mno-fix-24k'
21931     Work around the 24K E48 (lost data on stores during refill) errata.
21932     The workarounds are implemented by the assembler rather than by
21933     GCC.
21934
21935'-mfix-r4000'
21936'-mno-fix-r4000'
21937     Work around certain R4000 CPU errata:
21938        - A double-word or a variable shift may give an incorrect result
21939          if executed immediately after starting an integer division.
21940        - A double-word or a variable shift may give an incorrect result
21941          if executed while an integer multiplication is in progress.
21942        - An integer division may give an incorrect result if started in
21943          a delay slot of a taken branch or a jump.
21944
21945'-mfix-r4400'
21946'-mno-fix-r4400'
21947     Work around certain R4400 CPU errata:
21948        - A double-word or a variable shift may give an incorrect result
21949          if executed immediately after starting an integer division.
21950
21951'-mfix-r10000'
21952'-mno-fix-r10000'
21953     Work around certain R10000 errata:
21954        - 'll'/'sc' sequences may not behave atomically on revisions
21955          prior to 3.0.  They may deadlock on revisions 2.6 and earlier.
21956
21957     This option can only be used if the target architecture supports
21958     branch-likely instructions.  '-mfix-r10000' is the default when
21959     '-march=r10000' is used; '-mno-fix-r10000' is the default
21960     otherwise.
21961
21962'-mfix-r5900'
21963'-mno-fix-r5900'
21964     Do not attempt to schedule the preceding instruction into the delay
21965     slot of a branch instruction placed at the end of a short loop of
21966     six instructions or fewer and always schedule a 'nop' instruction
21967     there instead.  The short loop bug under certain conditions causes
21968     loops to execute only once or twice, due to a hardware bug in the
21969     R5900 chip.  The workaround is implemented by the assembler rather
21970     than by GCC.
21971
21972'-mfix-rm7000'
21973'-mno-fix-rm7000'
21974     Work around the RM7000 'dmult'/'dmultu' errata.  The workarounds
21975     are implemented by the assembler rather than by GCC.
21976
21977'-mfix-vr4120'
21978'-mno-fix-vr4120'
21979     Work around certain VR4120 errata:
21980        - 'dmultu' does not always produce the correct result.
21981        - 'div' and 'ddiv' do not always produce the correct result if
21982          one of the operands is negative.
21983     The workarounds for the division errata rely on special functions
21984     in 'libgcc.a'.  At present, these functions are only provided by
21985     the 'mips64vr*-elf' configurations.
21986
21987     Other VR4120 errata require a NOP to be inserted between certain
21988     pairs of instructions.  These errata are handled by the assembler,
21989     not by GCC itself.
21990
21991'-mfix-vr4130'
21992     Work around the VR4130 'mflo'/'mfhi' errata.  The workarounds are
21993     implemented by the assembler rather than by GCC, although GCC
21994     avoids using 'mflo' and 'mfhi' if the VR4130 'macc', 'macchi',
21995     'dmacc' and 'dmacchi' instructions are available instead.
21996
21997'-mfix-sb1'
21998'-mno-fix-sb1'
21999     Work around certain SB-1 CPU core errata.  (This flag currently
22000     works around the SB-1 revision 2 "F1" and "F2" floating-point
22001     errata.)
22002
22003'-mr10k-cache-barrier=SETTING'
22004     Specify whether GCC should insert cache barriers to avoid the side
22005     effects of speculation on R10K processors.
22006
22007     In common with many processors, the R10K tries to predict the
22008     outcome of a conditional branch and speculatively executes
22009     instructions from the "taken" branch.  It later aborts these
22010     instructions if the predicted outcome is wrong.  However, on the
22011     R10K, even aborted instructions can have side effects.
22012
22013     This problem only affects kernel stores and, depending on the
22014     system, kernel loads.  As an example, a speculatively-executed
22015     store may load the target memory into cache and mark the cache line
22016     as dirty, even if the store itself is later aborted.  If a DMA
22017     operation writes to the same area of memory before the "dirty" line
22018     is flushed, the cached data overwrites the DMA-ed data.  See the
22019     R10K processor manual for a full description, including other
22020     potential problems.
22021
22022     One workaround is to insert cache barrier instructions before every
22023     memory access that might be speculatively executed and that might
22024     have side effects even if aborted.  '-mr10k-cache-barrier=SETTING'
22025     controls GCC's implementation of this workaround.  It assumes that
22026     aborted accesses to any byte in the following regions does not have
22027     side effects:
22028
22029       1. the memory occupied by the current function's stack frame;
22030
22031       2. the memory occupied by an incoming stack argument;
22032
22033       3. the memory occupied by an object with a link-time-constant
22034          address.
22035
22036     It is the kernel's responsibility to ensure that speculative
22037     accesses to these regions are indeed safe.
22038
22039     If the input program contains a function declaration such as:
22040
22041          void foo (void);
22042
22043     then the implementation of 'foo' must allow 'j foo' and 'jal foo'
22044     to be executed speculatively.  GCC honors this restriction for
22045     functions it compiles itself.  It expects non-GCC functions (such
22046     as hand-written assembly code) to do the same.
22047
22048     The option has three forms:
22049
22050     '-mr10k-cache-barrier=load-store'
22051          Insert a cache barrier before a load or store that might be
22052          speculatively executed and that might have side effects even
22053          if aborted.
22054
22055     '-mr10k-cache-barrier=store'
22056          Insert a cache barrier before a store that might be
22057          speculatively executed and that might have side effects even
22058          if aborted.
22059
22060     '-mr10k-cache-barrier=none'
22061          Disable the insertion of cache barriers.  This is the default
22062          setting.
22063
22064'-mflush-func=FUNC'
22065'-mno-flush-func'
22066     Specifies the function to call to flush the I and D caches, or to
22067     not call any such function.  If called, the function must take the
22068     same arguments as the common '_flush_func', that is, the address of
22069     the memory range for which the cache is being flushed, the size of
22070     the memory range, and the number 3 (to flush both caches).  The
22071     default depends on the target GCC was configured for, but commonly
22072     is either '_flush_func' or '__cpu_flush'.
22073
22074'mbranch-cost=NUM'
22075     Set the cost of branches to roughly NUM "simple" instructions.
22076     This cost is only a heuristic and is not guaranteed to produce
22077     consistent results across releases.  A zero cost redundantly
22078     selects the default, which is based on the '-mtune' setting.
22079
22080'-mbranch-likely'
22081'-mno-branch-likely'
22082     Enable or disable use of Branch Likely instructions, regardless of
22083     the default for the selected architecture.  By default, Branch
22084     Likely instructions may be generated if they are supported by the
22085     selected architecture.  An exception is for the MIPS32 and MIPS64
22086     architectures and processors that implement those architectures;
22087     for those, Branch Likely instructions are not be generated by
22088     default because the MIPS32 and MIPS64 architectures specifically
22089     deprecate their use.
22090
22091'-mcompact-branches=never'
22092'-mcompact-branches=optimal'
22093'-mcompact-branches=always'
22094     These options control which form of branches will be generated.
22095     The default is '-mcompact-branches=optimal'.
22096
22097     The '-mcompact-branches=never' option ensures that compact branch
22098     instructions will never be generated.
22099
22100     The '-mcompact-branches=always' option ensures that a compact
22101     branch instruction will be generated if available.  If a compact
22102     branch instruction is not available, a delay slot form of the
22103     branch will be used instead.
22104
22105     This option is supported from MIPS Release 6 onwards.
22106
22107     The '-mcompact-branches=optimal' option will cause a delay slot
22108     branch to be used if one is available in the current ISA and the
22109     delay slot is successfully filled.  If the delay slot is not
22110     filled, a compact branch will be chosen if one is available.
22111
22112'-mfp-exceptions'
22113'-mno-fp-exceptions'
22114     Specifies whether FP exceptions are enabled.  This affects how FP
22115     instructions are scheduled for some processors.  The default is
22116     that FP exceptions are enabled.
22117
22118     For instance, on the SB-1, if FP exceptions are disabled, and we
22119     are emitting 64-bit code, then we can use both FP pipes.
22120     Otherwise, we can only use one FP pipe.
22121
22122'-mvr4130-align'
22123'-mno-vr4130-align'
22124     The VR4130 pipeline is two-way superscalar, but can only issue two
22125     instructions together if the first one is 8-byte aligned.  When
22126     this option is enabled, GCC aligns pairs of instructions that it
22127     thinks should execute in parallel.
22128
22129     This option only has an effect when optimizing for the VR4130.  It
22130     normally makes code faster, but at the expense of making it bigger.
22131     It is enabled by default at optimization level '-O3'.
22132
22133'-msynci'
22134'-mno-synci'
22135     Enable (disable) generation of 'synci' instructions on
22136     architectures that support it.  The 'synci' instructions (if
22137     enabled) are generated when '__builtin___clear_cache' is compiled.
22138
22139     This option defaults to '-mno-synci', but the default can be
22140     overridden by configuring GCC with '--with-synci'.
22141
22142     When compiling code for single processor systems, it is generally
22143     safe to use 'synci'.  However, on many multi-core (SMP) systems, it
22144     does not invalidate the instruction caches on all cores and may
22145     lead to undefined behavior.
22146
22147'-mrelax-pic-calls'
22148'-mno-relax-pic-calls'
22149     Try to turn PIC calls that are normally dispatched via register
22150     '$25' into direct calls.  This is only possible if the linker can
22151     resolve the destination at link time and if the destination is
22152     within range for a direct call.
22153
22154     '-mrelax-pic-calls' is the default if GCC was configured to use an
22155     assembler and a linker that support the '.reloc' assembly directive
22156     and '-mexplicit-relocs' is in effect.  With '-mno-explicit-relocs',
22157     this optimization can be performed by the assembler and the linker
22158     alone without help from the compiler.
22159
22160'-mmcount-ra-address'
22161'-mno-mcount-ra-address'
22162     Emit (do not emit) code that allows '_mcount' to modify the calling
22163     function's return address.  When enabled, this option extends the
22164     usual '_mcount' interface with a new RA-ADDRESS parameter, which
22165     has type 'intptr_t *' and is passed in register '$12'.  '_mcount'
22166     can then modify the return address by doing both of the following:
22167        * Returning the new address in register '$31'.
22168        * Storing the new address in '*RA-ADDRESS', if RA-ADDRESS is
22169          nonnull.
22170
22171     The default is '-mno-mcount-ra-address'.
22172
22173'-mframe-header-opt'
22174'-mno-frame-header-opt'
22175     Enable (disable) frame header optimization in the o32 ABI. When
22176     using the o32 ABI, calling functions will allocate 16 bytes on the
22177     stack for the called function to write out register arguments.
22178     When enabled, this optimization will suppress the allocation of the
22179     frame header if it can be determined that it is unused.
22180
22181     This optimization is off by default at all optimization levels.
22182
22183'-mlxc1-sxc1'
22184'-mno-lxc1-sxc1'
22185     When applicable, enable (disable) the generation of 'lwxc1',
22186     'swxc1', 'ldxc1', 'sdxc1' instructions.  Enabled by default.
22187
22188'-mmadd4'
22189'-mno-madd4'
22190     When applicable, enable (disable) the generation of 4-operand
22191     'madd.s', 'madd.d' and related instructions.  Enabled by default.
22192
22193
22194File: gcc.info,  Node: MMIX Options,  Next: MN10300 Options,  Prev: MIPS Options,  Up: Submodel Options
22195
221963.19.30 MMIX Options
22197--------------------
22198
22199These options are defined for the MMIX:
22200
22201'-mlibfuncs'
22202'-mno-libfuncs'
22203     Specify that intrinsic library functions are being compiled,
22204     passing all values in registers, no matter the size.
22205
22206'-mepsilon'
22207'-mno-epsilon'
22208     Generate floating-point comparison instructions that compare with
22209     respect to the 'rE' epsilon register.
22210
22211'-mabi=mmixware'
22212'-mabi=gnu'
22213     Generate code that passes function parameters and return values
22214     that (in the called function) are seen as registers '$0' and up, as
22215     opposed to the GNU ABI which uses global registers '$231' and up.
22216
22217'-mzero-extend'
22218'-mno-zero-extend'
22219     When reading data from memory in sizes shorter than 64 bits, use
22220     (do not use) zero-extending load instructions by default, rather
22221     than sign-extending ones.
22222
22223'-mknuthdiv'
22224'-mno-knuthdiv'
22225     Make the result of a division yielding a remainder have the same
22226     sign as the divisor.  With the default, '-mno-knuthdiv', the sign
22227     of the remainder follows the sign of the dividend.  Both methods
22228     are arithmetically valid, the latter being almost exclusively used.
22229
22230'-mtoplevel-symbols'
22231'-mno-toplevel-symbols'
22232     Prepend (do not prepend) a ':' to all global symbols, so the
22233     assembly code can be used with the 'PREFIX' assembly directive.
22234
22235'-melf'
22236     Generate an executable in the ELF format, rather than the default
22237     'mmo' format used by the 'mmix' simulator.
22238
22239'-mbranch-predict'
22240'-mno-branch-predict'
22241     Use (do not use) the probable-branch instructions, when static
22242     branch prediction indicates a probable branch.
22243
22244'-mbase-addresses'
22245'-mno-base-addresses'
22246     Generate (do not generate) code that uses _base addresses_.  Using
22247     a base address automatically generates a request (handled by the
22248     assembler and the linker) for a constant to be set up in a global
22249     register.  The register is used for one or more base address
22250     requests within the range 0 to 255 from the value held in the
22251     register.  The generally leads to short and fast code, but the
22252     number of different data items that can be addressed is limited.
22253     This means that a program that uses lots of static data may require
22254     '-mno-base-addresses'.
22255
22256'-msingle-exit'
22257'-mno-single-exit'
22258     Force (do not force) generated code to have a single exit point in
22259     each function.
22260
22261
22262File: gcc.info,  Node: MN10300 Options,  Next: Moxie Options,  Prev: MMIX Options,  Up: Submodel Options
22263
222643.19.31 MN10300 Options
22265-----------------------
22266
22267These '-m' options are defined for Matsushita MN10300 architectures:
22268
22269'-mmult-bug'
22270     Generate code to avoid bugs in the multiply instructions for the
22271     MN10300 processors.  This is the default.
22272
22273'-mno-mult-bug'
22274     Do not generate code to avoid bugs in the multiply instructions for
22275     the MN10300 processors.
22276
22277'-mam33'
22278     Generate code using features specific to the AM33 processor.
22279
22280'-mno-am33'
22281     Do not generate code using features specific to the AM33 processor.
22282     This is the default.
22283
22284'-mam33-2'
22285     Generate code using features specific to the AM33/2.0 processor.
22286
22287'-mam34'
22288     Generate code using features specific to the AM34 processor.
22289
22290'-mtune=CPU-TYPE'
22291     Use the timing characteristics of the indicated CPU type when
22292     scheduling instructions.  This does not change the targeted
22293     processor type.  The CPU type must be one of 'mn10300', 'am33',
22294     'am33-2' or 'am34'.
22295
22296'-mreturn-pointer-on-d0'
22297     When generating a function that returns a pointer, return the
22298     pointer in both 'a0' and 'd0'.  Otherwise, the pointer is returned
22299     only in 'a0', and attempts to call such functions without a
22300     prototype result in errors.  Note that this option is on by
22301     default; use '-mno-return-pointer-on-d0' to disable it.
22302
22303'-mno-crt0'
22304     Do not link in the C run-time initialization object file.
22305
22306'-mrelax'
22307     Indicate to the linker that it should perform a relaxation
22308     optimization pass to shorten branches, calls and absolute memory
22309     addresses.  This option only has an effect when used on the command
22310     line for the final link step.
22311
22312     This option makes symbolic debugging impossible.
22313
22314'-mliw'
22315     Allow the compiler to generate _Long Instruction Word_ instructions
22316     if the target is the 'AM33' or later.  This is the default.  This
22317     option defines the preprocessor macro '__LIW__'.
22318
22319'-mno-liw'
22320     Do not allow the compiler to generate _Long Instruction Word_
22321     instructions.  This option defines the preprocessor macro
22322     '__NO_LIW__'.
22323
22324'-msetlb'
22325     Allow the compiler to generate the _SETLB_ and _Lcc_ instructions
22326     if the target is the 'AM33' or later.  This is the default.  This
22327     option defines the preprocessor macro '__SETLB__'.
22328
22329'-mno-setlb'
22330     Do not allow the compiler to generate _SETLB_ or _Lcc_
22331     instructions.  This option defines the preprocessor macro
22332     '__NO_SETLB__'.
22333
22334
22335File: gcc.info,  Node: Moxie Options,  Next: MSP430 Options,  Prev: MN10300 Options,  Up: Submodel Options
22336
223373.19.32 Moxie Options
22338---------------------
22339
22340'-meb'
22341     Generate big-endian code.  This is the default for 'moxie-*-*'
22342     configurations.
22343
22344'-mel'
22345     Generate little-endian code.
22346
22347'-mmul.x'
22348     Generate mul.x and umul.x instructions.  This is the default for
22349     'moxiebox-*-*' configurations.
22350
22351'-mno-crt0'
22352     Do not link in the C run-time initialization object file.
22353
22354
22355File: gcc.info,  Node: MSP430 Options,  Next: NDS32 Options,  Prev: Moxie Options,  Up: Submodel Options
22356
223573.19.33 MSP430 Options
22358----------------------
22359
22360These options are defined for the MSP430:
22361
22362'-masm-hex'
22363     Force assembly output to always use hex constants.  Normally such
22364     constants are signed decimals, but this option is available for
22365     testsuite and/or aesthetic purposes.
22366
22367'-mmcu='
22368     Select the MCU to target.  This is used to create a C preprocessor
22369     symbol based upon the MCU name, converted to upper case and pre-
22370     and post-fixed with '__'.  This in turn is used by the 'msp430.h'
22371     header file to select an MCU-specific supplementary header file.
22372
22373     The option also sets the ISA to use.  If the MCU name is one that
22374     is known to only support the 430 ISA then that is selected,
22375     otherwise the 430X ISA is selected.  A generic MCU name of 'msp430'
22376     can also be used to select the 430 ISA. Similarly the generic
22377     'msp430x' MCU name selects the 430X ISA.
22378
22379     In addition an MCU-specific linker script is added to the linker
22380     command line.  The script's name is the name of the MCU with '.ld'
22381     appended.  Thus specifying '-mmcu=xxx' on the 'gcc' command line
22382     defines the C preprocessor symbol '__XXX__' and cause the linker to
22383     search for a script called 'xxx.ld'.
22384
22385     The ISA and hardware multiply supported for the different MCUs is
22386     hard-coded into GCC. However, an external 'devices.csv' file can be
22387     used to extend device support beyond those that have been
22388     hard-coded.
22389
22390     GCC searches for the 'devices.csv' file using the following methods
22391     in the given precedence order, where the first method takes
22392     precendence over the second which takes precedence over the third.
22393
22394     Include path specified with '-I' and '-L'
22395          'devices.csv' will be searched for in each of the directories
22396          specified by include paths and linker library search paths.
22397     Path specified by the environment variable 'MSP430_GCC_INCLUDE_DIR'
22398          Define the value of the global environment variable
22399          'MSP430_GCC_INCLUDE_DIR' to the full path to the directory
22400          containing devices.csv, and GCC will search this directory for
22401          devices.csv.  If devices.csv is found, this directory will
22402          also be registered as an include path, and linker library
22403          path.  Header files and linker scripts in this directory can
22404          therefore be used without manually specifying '-I' and '-L' on
22405          the command line.
22406     The 'msp430-elf{,bare}/include/devices' directory
22407          Finally, GCC will examine 'msp430-elf{,bare}/include/devices'
22408          from the toolchain root directory.  This directory does not
22409          exist in a default installation, but if the user has created
22410          it and copied 'devices.csv' there, then the MCU data will be
22411          read.  As above, this directory will also be registered as an
22412          include path, and linker library path.
22413
22414     If none of the above search methods find 'devices.csv', then the
22415     hard-coded MCU data is used.
22416
22417'-mwarn-mcu'
22418'-mno-warn-mcu'
22419     This option enables or disables warnings about conflicts between
22420     the MCU name specified by the '-mmcu' option and the ISA set by the
22421     '-mcpu' option and/or the hardware multiply support set by the
22422     '-mhwmult' option.  It also toggles warnings about unrecognized MCU
22423     names.  This option is on by default.
22424
22425'-mcpu='
22426     Specifies the ISA to use.  Accepted values are 'msp430', 'msp430x'
22427     and 'msp430xv2'.  This option is deprecated.  The '-mmcu=' option
22428     should be used to select the ISA.
22429
22430'-msim'
22431     Link to the simulator runtime libraries and linker script.
22432     Overrides any scripts that would be selected by the '-mmcu='
22433     option.
22434
22435'-mlarge'
22436     Use large-model addressing (20-bit pointers, 32-bit 'size_t').
22437
22438'-msmall'
22439     Use small-model addressing (16-bit pointers, 16-bit 'size_t').
22440
22441'-mrelax'
22442     This option is passed to the assembler and linker, and allows the
22443     linker to perform certain optimizations that cannot be done until
22444     the final link.
22445
22446'mhwmult='
22447     Describes the type of hardware multiply supported by the target.
22448     Accepted values are 'none' for no hardware multiply, '16bit' for
22449     the original 16-bit-only multiply supported by early MCUs.  '32bit'
22450     for the 16/32-bit multiply supported by later MCUs and 'f5series'
22451     for the 16/32-bit multiply supported by F5-series MCUs.  A value of
22452     'auto' can also be given.  This tells GCC to deduce the hardware
22453     multiply support based upon the MCU name provided by the '-mmcu'
22454     option.  If no '-mmcu' option is specified or if the MCU name is
22455     not recognized then no hardware multiply support is assumed.
22456     'auto' is the default setting.
22457
22458     Hardware multiplies are normally performed by calling a library
22459     routine.  This saves space in the generated code.  When compiling
22460     at '-O3' or higher however the hardware multiplier is invoked
22461     inline.  This makes for bigger, but faster code.
22462
22463     The hardware multiply routines disable interrupts whilst running
22464     and restore the previous interrupt state when they finish.  This
22465     makes them safe to use inside interrupt handlers as well as in
22466     normal code.
22467
22468'-minrt'
22469     Enable the use of a minimum runtime environment - no static
22470     initializers or constructors.  This is intended for
22471     memory-constrained devices.  The compiler includes special symbols
22472     in some objects that tell the linker and runtime which code
22473     fragments are required.
22474
22475'-mtiny-printf'
22476     Enable reduced code size 'printf' and 'puts' library functions.
22477     The 'tiny' implementations of these functions are not reentrant, so
22478     must be used with caution in multi-threaded applications.
22479
22480     Support for streams has been removed and the string to be printed
22481     will always be sent to stdout via the 'write' syscall.  The string
22482     is not buffered before it is sent to write.
22483
22484     This option requires Newlib Nano IO, so GCC must be configured with
22485     '--enable-newlib-nano-formatted-io'.
22486
22487'-mcode-region='
22488'-mdata-region='
22489     These options tell the compiler where to place functions and data
22490     that do not have one of the 'lower', 'upper', 'either' or 'section'
22491     attributes.  Possible values are 'lower', 'upper', 'either' or
22492     'any'.  The first three behave like the corresponding attribute.
22493     The fourth possible value - 'any' - is the default.  It leaves
22494     placement entirely up to the linker script and how it assigns the
22495     standard sections ('.text', '.data', etc) to the memory regions.
22496
22497'-msilicon-errata='
22498     This option passes on a request to assembler to enable the fixes
22499     for the named silicon errata.
22500
22501'-msilicon-errata-warn='
22502     This option passes on a request to the assembler to enable warning
22503     messages when a silicon errata might need to be applied.
22504
22505'-mwarn-devices-csv'
22506'-mno-warn-devices-csv'
22507     Warn if 'devices.csv' is not found or there are problem parsing it
22508     (default: on).
22509
22510
22511File: gcc.info,  Node: NDS32 Options,  Next: Nios II Options,  Prev: MSP430 Options,  Up: Submodel Options
22512
225133.19.34 NDS32 Options
22514---------------------
22515
22516These options are defined for NDS32 implementations:
22517
22518'-mbig-endian'
22519     Generate code in big-endian mode.
22520
22521'-mlittle-endian'
22522     Generate code in little-endian mode.
22523
22524'-mreduced-regs'
22525     Use reduced-set registers for register allocation.
22526
22527'-mfull-regs'
22528     Use full-set registers for register allocation.
22529
22530'-mcmov'
22531     Generate conditional move instructions.
22532
22533'-mno-cmov'
22534     Do not generate conditional move instructions.
22535
22536'-mext-perf'
22537     Generate performance extension instructions.
22538
22539'-mno-ext-perf'
22540     Do not generate performance extension instructions.
22541
22542'-mext-perf2'
22543     Generate performance extension 2 instructions.
22544
22545'-mno-ext-perf2'
22546     Do not generate performance extension 2 instructions.
22547
22548'-mext-string'
22549     Generate string extension instructions.
22550
22551'-mno-ext-string'
22552     Do not generate string extension instructions.
22553
22554'-mv3push'
22555     Generate v3 push25/pop25 instructions.
22556
22557'-mno-v3push'
22558     Do not generate v3 push25/pop25 instructions.
22559
22560'-m16-bit'
22561     Generate 16-bit instructions.
22562
22563'-mno-16-bit'
22564     Do not generate 16-bit instructions.
22565
22566'-misr-vector-size=NUM'
22567     Specify the size of each interrupt vector, which must be 4 or 16.
22568
22569'-mcache-block-size=NUM'
22570     Specify the size of each cache block, which must be a power of 2
22571     between 4 and 512.
22572
22573'-march=ARCH'
22574     Specify the name of the target architecture.
22575
22576'-mcmodel=CODE-MODEL'
22577     Set the code model to one of
22578     'small'
22579          All the data and read-only data segments must be within 512KB
22580          addressing space.  The text segment must be within 16MB
22581          addressing space.
22582     'medium'
22583          The data segment must be within 512KB while the read-only data
22584          segment can be within 4GB addressing space.  The text segment
22585          should be still within 16MB addressing space.
22586     'large'
22587          All the text and data segments can be within 4GB addressing
22588          space.
22589
22590'-mctor-dtor'
22591     Enable constructor/destructor feature.
22592
22593'-mrelax'
22594     Guide linker to relax instructions.
22595
22596
22597File: gcc.info,  Node: Nios II Options,  Next: Nvidia PTX Options,  Prev: NDS32 Options,  Up: Submodel Options
22598
225993.19.35 Nios II Options
22600-----------------------
22601
22602These are the options defined for the Altera Nios II processor.
22603
22604'-G NUM'
22605     Put global and static objects less than or equal to NUM bytes into
22606     the small data or BSS sections instead of the normal data or BSS
22607     sections.  The default value of NUM is 8.
22608
22609'-mgpopt=OPTION'
22610'-mgpopt'
22611'-mno-gpopt'
22612     Generate (do not generate) GP-relative accesses.  The following
22613     OPTION names are recognized:
22614
22615     'none'
22616          Do not generate GP-relative accesses.
22617
22618     'local'
22619          Generate GP-relative accesses for small data objects that are
22620          not external, weak, or uninitialized common symbols.  Also use
22621          GP-relative addressing for objects that have been explicitly
22622          placed in a small data section via a 'section' attribute.
22623
22624     'global'
22625          As for 'local', but also generate GP-relative accesses for
22626          small data objects that are external, weak, or common.  If you
22627          use this option, you must ensure that all parts of your
22628          program (including libraries) are compiled with the same '-G'
22629          setting.
22630
22631     'data'
22632          Generate GP-relative accesses for all data objects in the
22633          program.  If you use this option, the entire data and BSS
22634          segments of your program must fit in 64K of memory and you
22635          must use an appropriate linker script to allocate them within
22636          the addressable range of the global pointer.
22637
22638     'all'
22639          Generate GP-relative addresses for function pointers as well
22640          as data pointers.  If you use this option, the entire text,
22641          data, and BSS segments of your program must fit in 64K of
22642          memory and you must use an appropriate linker script to
22643          allocate them within the addressable range of the global
22644          pointer.
22645
22646     '-mgpopt' is equivalent to '-mgpopt=local', and '-mno-gpopt' is
22647     equivalent to '-mgpopt=none'.
22648
22649     The default is '-mgpopt' except when '-fpic' or '-fPIC' is
22650     specified to generate position-independent code.  Note that the
22651     Nios II ABI does not permit GP-relative accesses from shared
22652     libraries.
22653
22654     You may need to specify '-mno-gpopt' explicitly when building
22655     programs that include large amounts of small data, including large
22656     GOT data sections.  In this case, the 16-bit offset for GP-relative
22657     addressing may not be large enough to allow access to the entire
22658     small data section.
22659
22660'-mgprel-sec=REGEXP'
22661     This option specifies additional section names that can be accessed
22662     via GP-relative addressing.  It is most useful in conjunction with
22663     'section' attributes on variable declarations (*note Common
22664     Variable Attributes::) and a custom linker script.  The REGEXP is a
22665     POSIX Extended Regular Expression.
22666
22667     This option does not affect the behavior of the '-G' option, and
22668     the specified sections are in addition to the standard '.sdata' and
22669     '.sbss' small-data sections that are recognized by '-mgpopt'.
22670
22671'-mr0rel-sec=REGEXP'
22672     This option specifies names of sections that can be accessed via a
22673     16-bit offset from 'r0'; that is, in the low 32K or high 32K of the
22674     32-bit address space.  It is most useful in conjunction with
22675     'section' attributes on variable declarations (*note Common
22676     Variable Attributes::) and a custom linker script.  The REGEXP is a
22677     POSIX Extended Regular Expression.
22678
22679     In contrast to the use of GP-relative addressing for small data,
22680     zero-based addressing is never generated by default and there are
22681     no conventional section names used in standard linker scripts for
22682     sections in the low or high areas of memory.
22683
22684'-mel'
22685'-meb'
22686     Generate little-endian (default) or big-endian (experimental) code,
22687     respectively.
22688
22689'-march=ARCH'
22690     This specifies the name of the target Nios II architecture.  GCC
22691     uses this name to determine what kind of instructions it can emit
22692     when generating assembly code.  Permissible names are: 'r1', 'r2'.
22693
22694     The preprocessor macro '__nios2_arch__' is available to programs,
22695     with value 1 or 2, indicating the targeted ISA level.
22696
22697'-mbypass-cache'
22698'-mno-bypass-cache'
22699     Force all load and store instructions to always bypass cache by
22700     using I/O variants of the instructions.  The default is not to
22701     bypass the cache.
22702
22703'-mno-cache-volatile'
22704'-mcache-volatile'
22705     Volatile memory access bypass the cache using the I/O variants of
22706     the load and store instructions.  The default is not to bypass the
22707     cache.
22708
22709'-mno-fast-sw-div'
22710'-mfast-sw-div'
22711     Do not use table-based fast divide for small numbers.  The default
22712     is to use the fast divide at '-O3' and above.
22713
22714'-mno-hw-mul'
22715'-mhw-mul'
22716'-mno-hw-mulx'
22717'-mhw-mulx'
22718'-mno-hw-div'
22719'-mhw-div'
22720     Enable or disable emitting 'mul', 'mulx' and 'div' family of
22721     instructions by the compiler.  The default is to emit 'mul' and not
22722     emit 'div' and 'mulx'.
22723
22724'-mbmx'
22725'-mno-bmx'
22726'-mcdx'
22727'-mno-cdx'
22728     Enable or disable generation of Nios II R2 BMX (bit manipulation)
22729     and CDX (code density) instructions.  Enabling these instructions
22730     also requires '-march=r2'.  Since these instructions are optional
22731     extensions to the R2 architecture, the default is not to emit them.
22732
22733'-mcustom-INSN=N'
22734'-mno-custom-INSN'
22735     Each '-mcustom-INSN=N' option enables use of a custom instruction
22736     with encoding N when generating code that uses INSN.  For example,
22737     '-mcustom-fadds=253' generates custom instruction 253 for
22738     single-precision floating-point add operations instead of the
22739     default behavior of using a library call.
22740
22741     The following values of INSN are supported.  Except as otherwise
22742     noted, floating-point operations are expected to be implemented
22743     with normal IEEE 754 semantics and correspond directly to the C
22744     operators or the equivalent GCC built-in functions (*note Other
22745     Builtins::).
22746
22747     Single-precision floating point:
22748
22749     'fadds', 'fsubs', 'fdivs', 'fmuls'
22750          Binary arithmetic operations.
22751
22752     'fnegs'
22753          Unary negation.
22754
22755     'fabss'
22756          Unary absolute value.
22757
22758     'fcmpeqs', 'fcmpges', 'fcmpgts', 'fcmples', 'fcmplts', 'fcmpnes'
22759          Comparison operations.
22760
22761     'fmins', 'fmaxs'
22762          Floating-point minimum and maximum.  These instructions are
22763          only generated if '-ffinite-math-only' is specified.
22764
22765     'fsqrts'
22766          Unary square root operation.
22767
22768     'fcoss', 'fsins', 'ftans', 'fatans', 'fexps', 'flogs'
22769          Floating-point trigonometric and exponential functions.  These
22770          instructions are only generated if
22771          '-funsafe-math-optimizations' is also specified.
22772
22773     Double-precision floating point:
22774
22775     'faddd', 'fsubd', 'fdivd', 'fmuld'
22776          Binary arithmetic operations.
22777
22778     'fnegd'
22779          Unary negation.
22780
22781     'fabsd'
22782          Unary absolute value.
22783
22784     'fcmpeqd', 'fcmpged', 'fcmpgtd', 'fcmpled', 'fcmpltd', 'fcmpned'
22785          Comparison operations.
22786
22787     'fmind', 'fmaxd'
22788          Double-precision minimum and maximum.  These instructions are
22789          only generated if '-ffinite-math-only' is specified.
22790
22791     'fsqrtd'
22792          Unary square root operation.
22793
22794     'fcosd', 'fsind', 'ftand', 'fatand', 'fexpd', 'flogd'
22795          Double-precision trigonometric and exponential functions.
22796          These instructions are only generated if
22797          '-funsafe-math-optimizations' is also specified.
22798
22799     Conversions:
22800     'fextsd'
22801          Conversion from single precision to double precision.
22802
22803     'ftruncds'
22804          Conversion from double precision to single precision.
22805
22806     'fixsi', 'fixsu', 'fixdi', 'fixdu'
22807          Conversion from floating point to signed or unsigned integer
22808          types, with truncation towards zero.
22809
22810     'round'
22811          Conversion from single-precision floating point to signed
22812          integer, rounding to the nearest integer and ties away from
22813          zero.  This corresponds to the '__builtin_lroundf' function
22814          when '-fno-math-errno' is used.
22815
22816     'floatis', 'floatus', 'floatid', 'floatud'
22817          Conversion from signed or unsigned integer types to
22818          floating-point types.
22819
22820     In addition, all of the following transfer instructions for
22821     internal registers X and Y must be provided to use any of the
22822     double-precision floating-point instructions.  Custom instructions
22823     taking two double-precision source operands expect the first
22824     operand in the 64-bit register X. The other operand (or only
22825     operand of a unary operation) is given to the custom arithmetic
22826     instruction with the least significant half in source register SRC1
22827     and the most significant half in SRC2.  A custom instruction that
22828     returns a double-precision result returns the most significant 32
22829     bits in the destination register and the other half in 32-bit
22830     register Y. GCC automatically generates the necessary code
22831     sequences to write register X and/or read register Y when
22832     double-precision floating-point instructions are used.
22833
22834     'fwrx'
22835          Write SRC1 into the least significant half of X and SRC2 into
22836          the most significant half of X.
22837
22838     'fwry'
22839          Write SRC1 into Y.
22840
22841     'frdxhi', 'frdxlo'
22842          Read the most or least (respectively) significant half of X
22843          and store it in DEST.
22844
22845     'frdy'
22846          Read the value of Y and store it into DEST.
22847
22848     Note that you can gain more local control over generation of Nios
22849     II custom instructions by using the 'target("custom-INSN=N")' and
22850     'target("no-custom-INSN")' function attributes (*note Function
22851     Attributes::) or pragmas (*note Function Specific Option
22852     Pragmas::).
22853
22854'-mcustom-fpu-cfg=NAME'
22855
22856     This option enables a predefined, named set of custom instruction
22857     encodings (see '-mcustom-INSN' above).  Currently, the following
22858     sets are defined:
22859
22860     '-mcustom-fpu-cfg=60-1' is equivalent to:
22861          -mcustom-fmuls=252
22862          -mcustom-fadds=253
22863          -mcustom-fsubs=254
22864          -fsingle-precision-constant
22865
22866     '-mcustom-fpu-cfg=60-2' is equivalent to:
22867          -mcustom-fmuls=252
22868          -mcustom-fadds=253
22869          -mcustom-fsubs=254
22870          -mcustom-fdivs=255
22871          -fsingle-precision-constant
22872
22873     '-mcustom-fpu-cfg=72-3' is equivalent to:
22874          -mcustom-floatus=243
22875          -mcustom-fixsi=244
22876          -mcustom-floatis=245
22877          -mcustom-fcmpgts=246
22878          -mcustom-fcmples=249
22879          -mcustom-fcmpeqs=250
22880          -mcustom-fcmpnes=251
22881          -mcustom-fmuls=252
22882          -mcustom-fadds=253
22883          -mcustom-fsubs=254
22884          -mcustom-fdivs=255
22885          -fsingle-precision-constant
22886
22887     Custom instruction assignments given by individual '-mcustom-INSN='
22888     options override those given by '-mcustom-fpu-cfg=', regardless of
22889     the order of the options on the command line.
22890
22891     Note that you can gain more local control over selection of a FPU
22892     configuration by using the 'target("custom-fpu-cfg=NAME")' function
22893     attribute (*note Function Attributes::) or pragma (*note Function
22894     Specific Option Pragmas::).
22895
22896 These additional '-m' options are available for the Altera Nios II ELF
22897(bare-metal) target:
22898
22899'-mhal'
22900     Link with HAL BSP. This suppresses linking with the GCC-provided C
22901     runtime startup and termination code, and is typically used in
22902     conjunction with '-msys-crt0=' to specify the location of the
22903     alternate startup code provided by the HAL BSP.
22904
22905'-msmallc'
22906     Link with a limited version of the C library, '-lsmallc', rather
22907     than Newlib.
22908
22909'-msys-crt0=STARTFILE'
22910     STARTFILE is the file name of the startfile (crt0) to use when
22911     linking.  This option is only useful in conjunction with '-mhal'.
22912
22913'-msys-lib=SYSTEMLIB'
22914     SYSTEMLIB is the library name of the library that provides
22915     low-level system calls required by the C library, e.g. 'read' and
22916     'write'.  This option is typically used to link with a library
22917     provided by a HAL BSP.
22918
22919
22920File: gcc.info,  Node: Nvidia PTX Options,  Next: OpenRISC Options,  Prev: Nios II Options,  Up: Submodel Options
22921
229223.19.36 Nvidia PTX Options
22923--------------------------
22924
22925These options are defined for Nvidia PTX:
22926
22927'-m32'
22928'-m64'
22929     Generate code for 32-bit or 64-bit ABI.
22930
22931'-misa=ISA-STRING'
22932     Generate code for given the specified PTX ISA (e.g. 'sm_35').  ISA
22933     strings must be lower-case.  Valid ISA strings include 'sm_30' and
22934     'sm_35'.  The default ISA is sm_30.
22935
22936'-mmainkernel'
22937     Link in code for a __main kernel.  This is for stand-alone instead
22938     of offloading execution.
22939
22940'-moptimize'
22941     Apply partitioned execution optimizations.  This is the default
22942     when any level of optimization is selected.
22943
22944'-msoft-stack'
22945     Generate code that does not use '.local' memory directly for stack
22946     storage.  Instead, a per-warp stack pointer is maintained
22947     explicitly.  This enables variable-length stack allocation (with
22948     variable-length arrays or 'alloca'), and when global memory is used
22949     for underlying storage, makes it possible to access automatic
22950     variables from other threads, or with atomic instructions.  This
22951     code generation variant is used for OpenMP offloading, but the
22952     option is exposed on its own for the purpose of testing the
22953     compiler; to generate code suitable for linking into programs using
22954     OpenMP offloading, use option '-mgomp'.
22955
22956'-muniform-simt'
22957     Switch to code generation variant that allows to execute all
22958     threads in each warp, while maintaining memory state and side
22959     effects as if only one thread in each warp was active outside of
22960     OpenMP SIMD regions.  All atomic operations and calls to runtime
22961     (malloc, free, vprintf) are conditionally executed (iff current
22962     lane index equals the master lane index), and the register being
22963     assigned is copied via a shuffle instruction from the master lane.
22964     Outside of SIMD regions lane 0 is the master; inside, each thread
22965     sees itself as the master.  Shared memory array 'int __nvptx_uni[]'
22966     stores all-zeros or all-ones bitmasks for each warp, indicating
22967     current mode (0 outside of SIMD regions).  Each thread can
22968     bitwise-and the bitmask at position 'tid.y' with current lane index
22969     to compute the master lane index.
22970
22971'-mgomp'
22972     Generate code for use in OpenMP offloading: enables '-msoft-stack'
22973     and '-muniform-simt' options, and selects corresponding multilib
22974     variant.
22975
22976
22977File: gcc.info,  Node: OpenRISC Options,  Next: PDP-11 Options,  Prev: Nvidia PTX Options,  Up: Submodel Options
22978
229793.19.37 OpenRISC Options
22980------------------------
22981
22982These options are defined for OpenRISC:
22983
22984'-mboard=NAME'
22985     Configure a board specific runtime.  This will be passed to the
22986     linker for newlib board library linking.  The default is 'or1ksim'.
22987
22988'-mnewlib'
22989     This option is ignored; it is for compatibility purposes only.
22990     This used to select linker and preprocessor options for use with
22991     newlib.
22992
22993'-msoft-div'
22994'-mhard-div'
22995     Select software or hardware divide ('l.div', 'l.divu')
22996     instructions.  This default is hardware divide.
22997
22998'-msoft-mul'
22999'-mhard-mul'
23000     Select software or hardware multiply ('l.mul', 'l.muli')
23001     instructions.  This default is hardware multiply.
23002
23003'-msoft-float'
23004'-mhard-float'
23005     Select software or hardware for floating point operations.  The
23006     default is software.
23007
23008'-mdouble-float'
23009     When '-mhard-float' is selected, enables generation of
23010     double-precision floating point instructions.  By default functions
23011     from 'libgcc' are used to perform double-precision floating point
23012     operations.
23013
23014'-munordered-float'
23015     When '-mhard-float' is selected, enables generation of unordered
23016     floating point compare and set flag ('lf.sfun*') instructions.  By
23017     default functions from 'libgcc' are used to perform unordered
23018     floating point compare and set flag operations.
23019
23020'-mcmov'
23021     Enable generation of conditional move ('l.cmov') instructions.  By
23022     default the equivalent will be generated using set and branch.
23023
23024'-mror'
23025     Enable generation of rotate right ('l.ror') instructions.  By
23026     default functions from 'libgcc' are used to perform rotate right
23027     operations.
23028
23029'-mrori'
23030     Enable generation of rotate right with immediate ('l.rori')
23031     instructions.  By default functions from 'libgcc' are used to
23032     perform rotate right with immediate operations.
23033
23034'-msext'
23035     Enable generation of sign extension ('l.ext*') instructions.  By
23036     default memory loads are used to perform sign extension.
23037
23038'-msfimm'
23039     Enable generation of compare and set flag with immediate ('l.sf*i')
23040     instructions.  By default extra instructions will be generated to
23041     store the immediate to a register first.
23042
23043'-mshftimm'
23044     Enable generation of shift with immediate ('l.srai', 'l.srli',
23045     'l.slli') instructions.  By default extra instructions will be
23046     generated to store the immediate to a register first.
23047
23048
23049File: gcc.info,  Node: PDP-11 Options,  Next: picoChip Options,  Prev: OpenRISC Options,  Up: Submodel Options
23050
230513.19.38 PDP-11 Options
23052----------------------
23053
23054These options are defined for the PDP-11:
23055
23056'-mfpu'
23057     Use hardware FPP floating point.  This is the default.  (FIS
23058     floating point on the PDP-11/40 is not supported.)  Implies -m45.
23059
23060'-msoft-float'
23061     Do not use hardware floating point.
23062
23063'-mac0'
23064     Return floating-point results in ac0 (fr0 in Unix assembler
23065     syntax).
23066
23067'-mno-ac0'
23068     Return floating-point results in memory.  This is the default.
23069
23070'-m40'
23071     Generate code for a PDP-11/40.  Implies -msoft-float -mno-split.
23072
23073'-m45'
23074     Generate code for a PDP-11/45.  This is the default.
23075
23076'-m10'
23077     Generate code for a PDP-11/10.  Implies -msoft-float -mno-split.
23078
23079'-mint16'
23080'-mno-int32'
23081     Use 16-bit 'int'.  This is the default.
23082
23083'-mint32'
23084'-mno-int16'
23085     Use 32-bit 'int'.
23086
23087'-msplit'
23088     Target has split instruction and data space.  Implies -m45.
23089
23090'-munix-asm'
23091     Use Unix assembler syntax.
23092
23093'-mdec-asm'
23094     Use DEC assembler syntax.
23095
23096'-mgnu-asm'
23097     Use GNU assembler syntax.  This is the default.
23098
23099'-mlra'
23100     Use the new LRA register allocator.  By default, the old "reload"
23101     allocator is used.
23102
23103
23104File: gcc.info,  Node: picoChip Options,  Next: PowerPC Options,  Prev: PDP-11 Options,  Up: Submodel Options
23105
231063.19.39 picoChip Options
23107------------------------
23108
23109These '-m' options are defined for picoChip implementations:
23110
23111'-mae=AE_TYPE'
23112     Set the instruction set, register set, and instruction scheduling
23113     parameters for array element type AE_TYPE.  Supported values for
23114     AE_TYPE are 'ANY', 'MUL', and 'MAC'.
23115
23116     '-mae=ANY' selects a completely generic AE type.  Code generated
23117     with this option runs on any of the other AE types.  The code is
23118     not as efficient as it would be if compiled for a specific AE type,
23119     and some types of operation (e.g., multiplication) do not work
23120     properly on all types of AE.
23121
23122     '-mae=MUL' selects a MUL AE type.  This is the most useful AE type
23123     for compiled code, and is the default.
23124
23125     '-mae=MAC' selects a DSP-style MAC AE. Code compiled with this
23126     option may suffer from poor performance of byte (char)
23127     manipulation, since the DSP AE does not provide hardware support
23128     for byte load/stores.
23129
23130'-msymbol-as-address'
23131     Enable the compiler to directly use a symbol name as an address in
23132     a load/store instruction, without first loading it into a register.
23133     Typically, the use of this option generates larger programs, which
23134     run faster than when the option isn't used.  However, the results
23135     vary from program to program, so it is left as a user option,
23136     rather than being permanently enabled.
23137
23138'-mno-inefficient-warnings'
23139     Disables warnings about the generation of inefficient code.  These
23140     warnings can be generated, for example, when compiling code that
23141     performs byte-level memory operations on the MAC AE type.  The MAC
23142     AE has no hardware support for byte-level memory operations, so all
23143     byte load/stores must be synthesized from word load/store
23144     operations.  This is inefficient and a warning is generated to
23145     indicate that you should rewrite the code to avoid byte operations,
23146     or to target an AE type that has the necessary hardware support.
23147     This option disables these warnings.
23148
23149
23150File: gcc.info,  Node: PowerPC Options,  Next: PRU Options,  Prev: picoChip Options,  Up: Submodel Options
23151
231523.19.40 PowerPC Options
23153-----------------------
23154
23155These are listed under *Note RS/6000 and PowerPC Options::.
23156
23157
23158File: gcc.info,  Node: PRU Options,  Next: RISC-V Options,  Prev: PowerPC Options,  Up: Submodel Options
23159
231603.19.41 PRU Options
23161-------------------
23162
23163These command-line options are defined for PRU target:
23164
23165'-minrt'
23166     Link with a minimum runtime environment, with no support for static
23167     initializers and constructors.  Using this option can significantly
23168     reduce the size of the final ELF binary.  Beware that the compiler
23169     could still generate code with static initializers and
23170     constructors.  It is up to the programmer to ensure that the source
23171     program will not use those features.
23172
23173'-mmcu=MCU'
23174     Specify the PRU MCU variant to use.  Check Newlib for the exact
23175     list of supported MCUs.
23176
23177'-mno-relax'
23178     Make GCC pass the '--no-relax' command-line option to the linker
23179     instead of the '--relax' option.
23180
23181'-mloop'
23182     Allow (or do not allow) GCC to use the LOOP instruction.
23183
23184'-mabi=VARIANT'
23185     Specify the ABI variant to output code for.  '-mabi=ti' selects the
23186     unmodified TI ABI while '-mabi=gnu' selects a GNU variant that
23187     copes more naturally with certain GCC assumptions.  These are the
23188     differences:
23189
23190     'Function Pointer Size'
23191          TI ABI specifies that function (code) pointers are 16-bit,
23192          whereas GNU supports only 32-bit data and code pointers.
23193
23194     'Optional Return Value Pointer'
23195          Function return values larger than 64 bits are passed by using
23196          a hidden pointer as the first argument of the function.  TI
23197          ABI, though, mandates that the pointer can be NULL in case the
23198          caller is not using the returned value.  GNU always passes and
23199          expects a valid return value pointer.
23200
23201     The current '-mabi=ti' implementation simply raises a compile error
23202     when any of the above code constructs is detected.  As a
23203     consequence the standard C library cannot be built and it is
23204     omitted when linking with '-mabi=ti'.
23205
23206     Relaxation is a GNU feature and for safety reasons is disabled when
23207     using '-mabi=ti'.  The TI toolchain does not emit relocations for
23208     QBBx instructions, so the GNU linker cannot adjust them when
23209     shortening adjacent LDI32 pseudo instructions.
23210
23211
23212File: gcc.info,  Node: RISC-V Options,  Next: RL78 Options,  Prev: PRU Options,  Up: Submodel Options
23213
232143.19.42 RISC-V Options
23215----------------------
23216
23217These command-line options are defined for RISC-V targets:
23218
23219'-mbranch-cost=N'
23220     Set the cost of branches to roughly N instructions.
23221
23222'-mplt'
23223'-mno-plt'
23224     When generating PIC code, do or don't allow the use of PLTs.
23225     Ignored for non-PIC. The default is '-mplt'.
23226
23227'-mabi=ABI-STRING'
23228     Specify integer and floating-point calling convention.  ABI-STRING
23229     contains two parts: the size of integer types and the registers
23230     used for floating-point types.  For example '-march=rv64ifd
23231     -mabi=lp64d' means that 'long' and pointers are 64-bit (implicitly
23232     defining 'int' to be 32-bit), and that floating-point values up to
23233     64 bits wide are passed in F registers.  Contrast this with
23234     '-march=rv64ifd -mabi=lp64f', which still allows the compiler to
23235     generate code that uses the F and D extensions but only allows
23236     floating-point values up to 32 bits long to be passed in registers;
23237     or '-march=rv64ifd -mabi=lp64', in which no floating-point
23238     arguments will be passed in registers.
23239
23240     The default for this argument is system dependent, users who want a
23241     specific calling convention should specify one explicitly.  The
23242     valid calling conventions are: 'ilp32', 'ilp32f', 'ilp32d', 'lp64',
23243     'lp64f', and 'lp64d'.  Some calling conventions are impossible to
23244     implement on some ISAs: for example, '-march=rv32if -mabi=ilp32d'
23245     is invalid because the ABI requires 64-bit values be passed in F
23246     registers, but F registers are only 32 bits wide.  There is also
23247     the 'ilp32e' ABI that can only be used with the 'rv32e'
23248     architecture.  This ABI is not well specified at present, and is
23249     subject to change.
23250
23251'-mfdiv'
23252'-mno-fdiv'
23253     Do or don't use hardware floating-point divide and square root
23254     instructions.  This requires the F or D extensions for
23255     floating-point registers.  The default is to use them if the
23256     specified architecture has these instructions.
23257
23258'-mdiv'
23259'-mno-div'
23260     Do or don't use hardware instructions for integer division.  This
23261     requires the M extension.  The default is to use them if the
23262     specified architecture has these instructions.
23263
23264'-march=ISA-STRING'
23265     Generate code for given RISC-V ISA (e.g. 'rv64im').  ISA strings
23266     must be lower-case.  Examples include 'rv64i', 'rv32g', 'rv32e',
23267     and 'rv32imaf'.
23268
23269'-mtune=PROCESSOR-STRING'
23270     Optimize the output for the given processor, specified by
23271     microarchitecture name.  Permissible values for this option are:
23272     'rocket', 'sifive-3-series', 'sifive-5-series', 'sifive-7-series',
23273     and 'size'.
23274
23275     When '-mtune=' is not specified, the default is 'rocket'.
23276
23277     The 'size' choice is not intended for use by end-users.  This is
23278     used when '-Os' is specified.  It overrides the instruction cost
23279     info provided by '-mtune=', but does not override the pipeline
23280     info.  This helps reduce code size while still giving good
23281     performance.
23282
23283'-mpreferred-stack-boundary=NUM'
23284     Attempt to keep the stack boundary aligned to a 2 raised to NUM
23285     byte boundary.  If '-mpreferred-stack-boundary' is not specified,
23286     the default is 4 (16 bytes or 128-bits).
23287
23288     *Warning:* If you use this switch, then you must build all modules
23289     with the same value, including any libraries.  This includes the
23290     system libraries and startup modules.
23291
23292'-msmall-data-limit=N'
23293     Put global and static data smaller than N bytes into a special
23294     section (on some targets).
23295
23296'-msave-restore'
23297'-mno-save-restore'
23298     Do or don't use smaller but slower prologue and epilogue code that
23299     uses library function calls.  The default is to use fast inline
23300     prologues and epilogues.
23301
23302'-mstrict-align'
23303'-mno-strict-align'
23304     Do not or do generate unaligned memory accesses.  The default is
23305     set depending on whether the processor we are optimizing for
23306     supports fast unaligned access or not.
23307
23308'-mcmodel=medlow'
23309     Generate code for the medium-low code model.  The program and its
23310     statically defined symbols must lie within a single 2 GiB address
23311     range and must lie between absolute addresses -2 GiB and +2 GiB.
23312     Programs can be statically or dynamically linked.  This is the
23313     default code model.
23314
23315'-mcmodel=medany'
23316     Generate code for the medium-any code model.  The program and its
23317     statically defined symbols must be within any single 2 GiB address
23318     range.  Programs can be statically or dynamically linked.
23319
23320'-mexplicit-relocs'
23321'-mno-exlicit-relocs'
23322     Use or do not use assembler relocation operators when dealing with
23323     symbolic addresses.  The alternative is to use assembler macros
23324     instead, which may limit optimization.
23325
23326'-mrelax'
23327'-mno-relax'
23328     Take advantage of linker relaxations to reduce the number of
23329     instructions required to materialize symbol addresses.  The default
23330     is to take advantage of linker relaxations.
23331
23332'-memit-attribute'
23333'-mno-emit-attribute'
23334     Emit (do not emit) RISC-V attribute to record extra information
23335     into ELF objects.  This feature requires at least binutils 2.32.
23336
23337'-malign-data=TYPE'
23338     Control how GCC aligns variables and constants of array, structure,
23339     or union types.  Supported values for TYPE are 'xlen' which uses x
23340     register width as the alignment value, and 'natural' which uses
23341     natural alignment.  'xlen' is the default.
23342
23343
23344File: gcc.info,  Node: RL78 Options,  Next: RS/6000 and PowerPC Options,  Prev: RISC-V Options,  Up: Submodel Options
23345
233463.19.43 RL78 Options
23347--------------------
23348
23349'-msim'
23350     Links in additional target libraries to support operation within a
23351     simulator.
23352
23353'-mmul=none'
23354'-mmul=g10'
23355'-mmul=g13'
23356'-mmul=g14'
23357'-mmul=rl78'
23358     Specifies the type of hardware multiplication and division support
23359     to be used.  The simplest is 'none', which uses software for both
23360     multiplication and division.  This is the default.  The 'g13' value
23361     is for the hardware multiply/divide peripheral found on the
23362     RL78/G13 (S2 core) targets.  The 'g14' value selects the use of the
23363     multiplication and division instructions supported by the RL78/G14
23364     (S3 core) parts.  The value 'rl78' is an alias for 'g14' and the
23365     value 'mg10' is an alias for 'none'.
23366
23367     In addition a C preprocessor macro is defined, based upon the
23368     setting of this option.  Possible values are: '__RL78_MUL_NONE__',
23369     '__RL78_MUL_G13__' or '__RL78_MUL_G14__'.
23370
23371'-mcpu=g10'
23372'-mcpu=g13'
23373'-mcpu=g14'
23374'-mcpu=rl78'
23375     Specifies the RL78 core to target.  The default is the G14 core,
23376     also known as an S3 core or just RL78.  The G13 or S2 core does not
23377     have multiply or divide instructions, instead it uses a hardware
23378     peripheral for these operations.  The G10 or S1 core does not have
23379     register banks, so it uses a different calling convention.
23380
23381     If this option is set it also selects the type of hardware multiply
23382     support to use, unless this is overridden by an explicit
23383     '-mmul=none' option on the command line.  Thus specifying
23384     '-mcpu=g13' enables the use of the G13 hardware multiply peripheral
23385     and specifying '-mcpu=g10' disables the use of hardware
23386     multiplications altogether.
23387
23388     Note, although the RL78/G14 core is the default target, specifying
23389     '-mcpu=g14' or '-mcpu=rl78' on the command line does change the
23390     behavior of the toolchain since it also enables G14 hardware
23391     multiply support.  If these options are not specified on the
23392     command line then software multiplication routines will be used
23393     even though the code targets the RL78 core.  This is for backwards
23394     compatibility with older toolchains which did not have hardware
23395     multiply and divide support.
23396
23397     In addition a C preprocessor macro is defined, based upon the
23398     setting of this option.  Possible values are: '__RL78_G10__',
23399     '__RL78_G13__' or '__RL78_G14__'.
23400
23401'-mg10'
23402'-mg13'
23403'-mg14'
23404'-mrl78'
23405     These are aliases for the corresponding '-mcpu=' option.  They are
23406     provided for backwards compatibility.
23407
23408'-mallregs'
23409     Allow the compiler to use all of the available registers.  By
23410     default registers 'r24..r31' are reserved for use in interrupt
23411     handlers.  With this option enabled these registers can be used in
23412     ordinary functions as well.
23413
23414'-m64bit-doubles'
23415'-m32bit-doubles'
23416     Make the 'double' data type be 64 bits ('-m64bit-doubles') or 32
23417     bits ('-m32bit-doubles') in size.  The default is
23418     '-m32bit-doubles'.
23419
23420'-msave-mduc-in-interrupts'
23421'-mno-save-mduc-in-interrupts'
23422     Specifies that interrupt handler functions should preserve the MDUC
23423     registers.  This is only necessary if normal code might use the
23424     MDUC registers, for example because it performs multiplication and
23425     division operations.  The default is to ignore the MDUC registers
23426     as this makes the interrupt handlers faster.  The target option
23427     -mg13 needs to be passed for this to work as this feature is only
23428     available on the G13 target (S2 core).  The MDUC registers will
23429     only be saved if the interrupt handler performs a multiplication or
23430     division operation or it calls another function.
23431
23432
23433File: gcc.info,  Node: RS/6000 and PowerPC Options,  Next: RX Options,  Prev: RL78 Options,  Up: Submodel Options
23434
234353.19.44 IBM RS/6000 and PowerPC Options
23436---------------------------------------
23437
23438These '-m' options are defined for the IBM RS/6000 and PowerPC:
23439'-mpowerpc-gpopt'
23440'-mno-powerpc-gpopt'
23441'-mpowerpc-gfxopt'
23442'-mno-powerpc-gfxopt'
23443'-mpowerpc64'
23444'-mno-powerpc64'
23445'-mmfcrf'
23446'-mno-mfcrf'
23447'-mpopcntb'
23448'-mno-popcntb'
23449'-mpopcntd'
23450'-mno-popcntd'
23451'-mfprnd'
23452'-mno-fprnd'
23453'-mcmpb'
23454'-mno-cmpb'
23455'-mhard-dfp'
23456'-mno-hard-dfp'
23457     You use these options to specify which instructions are available
23458     on the processor you are using.  The default value of these options
23459     is determined when configuring GCC.  Specifying the
23460     '-mcpu=CPU_TYPE' overrides the specification of these options.  We
23461     recommend you use the '-mcpu=CPU_TYPE' option rather than the
23462     options listed above.
23463
23464     Specifying '-mpowerpc-gpopt' allows GCC to use the optional PowerPC
23465     architecture instructions in the General Purpose group, including
23466     floating-point square root.  Specifying '-mpowerpc-gfxopt' allows
23467     GCC to use the optional PowerPC architecture instructions in the
23468     Graphics group, including floating-point select.
23469
23470     The '-mmfcrf' option allows GCC to generate the move from condition
23471     register field instruction implemented on the POWER4 processor and
23472     other processors that support the PowerPC V2.01 architecture.  The
23473     '-mpopcntb' option allows GCC to generate the popcount and
23474     double-precision FP reciprocal estimate instruction implemented on
23475     the POWER5 processor and other processors that support the PowerPC
23476     V2.02 architecture.  The '-mpopcntd' option allows GCC to generate
23477     the popcount instruction implemented on the POWER7 processor and
23478     other processors that support the PowerPC V2.06 architecture.  The
23479     '-mfprnd' option allows GCC to generate the FP round to integer
23480     instructions implemented on the POWER5+ processor and other
23481     processors that support the PowerPC V2.03 architecture.  The
23482     '-mcmpb' option allows GCC to generate the compare bytes
23483     instruction implemented on the POWER6 processor and other
23484     processors that support the PowerPC V2.05 architecture.  The
23485     '-mhard-dfp' option allows GCC to generate the decimal
23486     floating-point instructions implemented on some POWER processors.
23487
23488     The '-mpowerpc64' option allows GCC to generate the additional
23489     64-bit instructions that are found in the full PowerPC64
23490     architecture and to treat GPRs as 64-bit, doubleword quantities.
23491     GCC defaults to '-mno-powerpc64'.
23492
23493'-mcpu=CPU_TYPE'
23494     Set architecture type, register usage, and instruction scheduling
23495     parameters for machine type CPU_TYPE.  Supported values for
23496     CPU_TYPE are '401', '403', '405', '405fp', '440', '440fp', '464',
23497     '464fp', '476', '476fp', '505', '601', '602', '603', '603e', '604',
23498     '604e', '620', '630', '740', '7400', '7450', '750', '801', '821',
23499     '823', '860', '970', '8540', 'a2', 'e300c2', 'e300c3', 'e500mc',
23500     'e500mc64', 'e5500', 'e6500', 'ec603e', 'G3', 'G4', 'G5', 'titan',
23501     'power3', 'power4', 'power5', 'power5+', 'power6', 'power6x',
23502     'power7', 'power8', 'power9', 'future', 'powerpc', 'powerpc64',
23503     'powerpc64le', 'rs64', and 'native'.
23504
23505     '-mcpu=powerpc', '-mcpu=powerpc64', and '-mcpu=powerpc64le' specify
23506     pure 32-bit PowerPC (either endian), 64-bit big endian PowerPC and
23507     64-bit little endian PowerPC architecture machine types, with an
23508     appropriate, generic processor model assumed for scheduling
23509     purposes.
23510
23511     Specifying 'native' as cpu type detects and selects the
23512     architecture option that corresponds to the host processor of the
23513     system performing the compilation.  '-mcpu=native' has no effect if
23514     GCC does not recognize the processor.
23515
23516     The other options specify a specific processor.  Code generated
23517     under those options runs best on that processor, and may not run at
23518     all on others.
23519
23520     The '-mcpu' options automatically enable or disable the following
23521     options:
23522
23523          -maltivec  -mfprnd  -mhard-float  -mmfcrf  -mmultiple
23524          -mpopcntb  -mpopcntd  -mpowerpc64
23525          -mpowerpc-gpopt  -mpowerpc-gfxopt
23526          -mmulhw  -mdlmzb  -mmfpgpr  -mvsx
23527          -mcrypto  -mhtm  -mpower8-fusion  -mpower8-vector
23528          -mquad-memory  -mquad-memory-atomic  -mfloat128
23529          -mfloat128-hardware -mprefixed -mpcrel -mmma
23530
23531     The particular options set for any particular CPU varies between
23532     compiler versions, depending on what setting seems to produce
23533     optimal code for that CPU; it doesn't necessarily reflect the
23534     actual hardware's capabilities.  If you wish to set an individual
23535     option to a particular value, you may specify it after the '-mcpu'
23536     option, like '-mcpu=970 -mno-altivec'.
23537
23538     On AIX, the '-maltivec' and '-mpowerpc64' options are not enabled
23539     or disabled by the '-mcpu' option at present because AIX does not
23540     have full support for these options.  You may still enable or
23541     disable them individually if you're sure it'll work in your
23542     environment.
23543
23544'-mtune=CPU_TYPE'
23545     Set the instruction scheduling parameters for machine type
23546     CPU_TYPE, but do not set the architecture type or register usage,
23547     as '-mcpu=CPU_TYPE' does.  The same values for CPU_TYPE are used
23548     for '-mtune' as for '-mcpu'.  If both are specified, the code
23549     generated uses the architecture and registers set by '-mcpu', but
23550     the scheduling parameters set by '-mtune'.
23551
23552'-mcmodel=small'
23553     Generate PowerPC64 code for the small model: The TOC is limited to
23554     64k.
23555
23556'-mcmodel=medium'
23557     Generate PowerPC64 code for the medium model: The TOC and other
23558     static data may be up to a total of 4G in size.  This is the
23559     default for 64-bit Linux.
23560
23561'-mcmodel=large'
23562     Generate PowerPC64 code for the large model: The TOC may be up to
23563     4G in size.  Other data and code is only limited by the 64-bit
23564     address space.
23565
23566'-maltivec'
23567'-mno-altivec'
23568     Generate code that uses (does not use) AltiVec instructions, and
23569     also enable the use of built-in functions that allow more direct
23570     access to the AltiVec instruction set.  You may also need to set
23571     '-mabi=altivec' to adjust the current ABI with AltiVec ABI
23572     enhancements.
23573
23574     When '-maltivec' is used, the element order for AltiVec intrinsics
23575     such as 'vec_splat', 'vec_extract', and 'vec_insert' match array
23576     element order corresponding to the endianness of the target.  That
23577     is, element zero identifies the leftmost element in a vector
23578     register when targeting a big-endian platform, and identifies the
23579     rightmost element in a vector register when targeting a
23580     little-endian platform.
23581
23582'-mvrsave'
23583'-mno-vrsave'
23584     Generate VRSAVE instructions when generating AltiVec code.
23585
23586'-msecure-plt'
23587     Generate code that allows 'ld' and 'ld.so' to build executables and
23588     shared libraries with non-executable '.plt' and '.got' sections.
23589     This is a PowerPC 32-bit SYSV ABI option.
23590
23591'-mbss-plt'
23592     Generate code that uses a BSS '.plt' section that 'ld.so' fills in,
23593     and requires '.plt' and '.got' sections that are both writable and
23594     executable.  This is a PowerPC 32-bit SYSV ABI option.
23595
23596'-misel'
23597'-mno-isel'
23598     This switch enables or disables the generation of ISEL
23599     instructions.
23600
23601'-mvsx'
23602'-mno-vsx'
23603     Generate code that uses (does not use) vector/scalar (VSX)
23604     instructions, and also enable the use of built-in functions that
23605     allow more direct access to the VSX instruction set.
23606
23607'-mcrypto'
23608'-mno-crypto'
23609     Enable the use (disable) of the built-in functions that allow
23610     direct access to the cryptographic instructions that were added in
23611     version 2.07 of the PowerPC ISA.
23612
23613'-mhtm'
23614'-mno-htm'
23615     Enable (disable) the use of the built-in functions that allow
23616     direct access to the Hardware Transactional Memory (HTM)
23617     instructions that were added in version 2.07 of the PowerPC ISA.
23618
23619'-mpower8-fusion'
23620'-mno-power8-fusion'
23621     Generate code that keeps (does not keeps) some integer operations
23622     adjacent so that the instructions can be fused together on power8
23623     and later processors.
23624
23625'-mpower8-vector'
23626'-mno-power8-vector'
23627     Generate code that uses (does not use) the vector and scalar
23628     instructions that were added in version 2.07 of the PowerPC ISA.
23629     Also enable the use of built-in functions that allow more direct
23630     access to the vector instructions.
23631
23632'-mquad-memory'
23633'-mno-quad-memory'
23634     Generate code that uses (does not use) the non-atomic quad word
23635     memory instructions.  The '-mquad-memory' option requires use of
23636     64-bit mode.
23637
23638'-mquad-memory-atomic'
23639'-mno-quad-memory-atomic'
23640     Generate code that uses (does not use) the atomic quad word memory
23641     instructions.  The '-mquad-memory-atomic' option requires use of
23642     64-bit mode.
23643
23644'-mfloat128'
23645'-mno-float128'
23646     Enable/disable the __FLOAT128 keyword for IEEE 128-bit floating
23647     point and use either software emulation for IEEE 128-bit floating
23648     point or hardware instructions.
23649
23650     The VSX instruction set ('-mvsx', '-mcpu=power7', '-mcpu=power8'),
23651     or '-mcpu=power9' must be enabled to use the IEEE 128-bit floating
23652     point support.  The IEEE 128-bit floating point support only works
23653     on PowerPC Linux systems.
23654
23655     The default for '-mfloat128' is enabled on PowerPC Linux systems
23656     using the VSX instruction set, and disabled on other systems.
23657
23658     If you use the ISA 3.0 instruction set ('-mpower9-vector' or
23659     '-mcpu=power9') on a 64-bit system, the IEEE 128-bit floating point
23660     support will also enable the generation of ISA 3.0 IEEE 128-bit
23661     floating point instructions.  Otherwise, if you do not specify to
23662     generate ISA 3.0 instructions or you are targeting a 32-bit big
23663     endian system, IEEE 128-bit floating point will be done with
23664     software emulation.
23665
23666'-mfloat128-hardware'
23667'-mno-float128-hardware'
23668     Enable/disable using ISA 3.0 hardware instructions to support the
23669     __FLOAT128 data type.
23670
23671     The default for '-mfloat128-hardware' is enabled on PowerPC Linux
23672     systems using the ISA 3.0 instruction set, and disabled on other
23673     systems.
23674
23675'-m32'
23676'-m64'
23677     Generate code for 32-bit or 64-bit environments of Darwin and SVR4
23678     targets (including GNU/Linux).  The 32-bit environment sets int,
23679     long and pointer to 32 bits and generates code that runs on any
23680     PowerPC variant.  The 64-bit environment sets int to 32 bits and
23681     long and pointer to 64 bits, and generates code for PowerPC64, as
23682     for '-mpowerpc64'.
23683
23684'-mfull-toc'
23685'-mno-fp-in-toc'
23686'-mno-sum-in-toc'
23687'-mminimal-toc'
23688     Modify generation of the TOC (Table Of Contents), which is created
23689     for every executable file.  The '-mfull-toc' option is selected by
23690     default.  In that case, GCC allocates at least one TOC entry for
23691     each unique non-automatic variable reference in your program.  GCC
23692     also places floating-point constants in the TOC.  However, only
23693     16,384 entries are available in the TOC.
23694
23695     If you receive a linker error message that saying you have
23696     overflowed the available TOC space, you can reduce the amount of
23697     TOC space used with the '-mno-fp-in-toc' and '-mno-sum-in-toc'
23698     options.  '-mno-fp-in-toc' prevents GCC from putting floating-point
23699     constants in the TOC and '-mno-sum-in-toc' forces GCC to generate
23700     code to calculate the sum of an address and a constant at run time
23701     instead of putting that sum into the TOC.  You may specify one or
23702     both of these options.  Each causes GCC to produce very slightly
23703     slower and larger code at the expense of conserving TOC space.
23704
23705     If you still run out of space in the TOC even when you specify both
23706     of these options, specify '-mminimal-toc' instead.  This option
23707     causes GCC to make only one TOC entry for every file.  When you
23708     specify this option, GCC produces code that is slower and larger
23709     but which uses extremely little TOC space.  You may wish to use
23710     this option only on files that contain less frequently-executed
23711     code.
23712
23713'-maix64'
23714'-maix32'
23715     Enable 64-bit AIX ABI and calling convention: 64-bit pointers,
23716     64-bit 'long' type, and the infrastructure needed to support them.
23717     Specifying '-maix64' implies '-mpowerpc64', while '-maix32'
23718     disables the 64-bit ABI and implies '-mno-powerpc64'.  GCC defaults
23719     to '-maix32'.
23720
23721'-mxl-compat'
23722'-mno-xl-compat'
23723     Produce code that conforms more closely to IBM XL compiler
23724     semantics when using AIX-compatible ABI.  Pass floating-point
23725     arguments to prototyped functions beyond the register save area
23726     (RSA) on the stack in addition to argument FPRs.  Do not assume
23727     that most significant double in 128-bit long double value is
23728     properly rounded when comparing values and converting to double.
23729     Use XL symbol names for long double support routines.
23730
23731     The AIX calling convention was extended but not initially
23732     documented to handle an obscure K&R C case of calling a function
23733     that takes the address of its arguments with fewer arguments than
23734     declared.  IBM XL compilers access floating-point arguments that do
23735     not fit in the RSA from the stack when a subroutine is compiled
23736     without optimization.  Because always storing floating-point
23737     arguments on the stack is inefficient and rarely needed, this
23738     option is not enabled by default and only is necessary when calling
23739     subroutines compiled by IBM XL compilers without optimization.
23740
23741'-mpe'
23742     Support "IBM RS/6000 SP" "Parallel Environment" (PE).  Link an
23743     application written to use message passing with special startup
23744     code to enable the application to run.  The system must have PE
23745     installed in the standard location ('/usr/lpp/ppe.poe/'), or the
23746     'specs' file must be overridden with the '-specs=' option to
23747     specify the appropriate directory location.  The Parallel
23748     Environment does not support threads, so the '-mpe' option and the
23749     '-pthread' option are incompatible.
23750
23751'-malign-natural'
23752'-malign-power'
23753     On AIX, 32-bit Darwin, and 64-bit PowerPC GNU/Linux, the option
23754     '-malign-natural' overrides the ABI-defined alignment of larger
23755     types, such as floating-point doubles, on their natural size-based
23756     boundary.  The option '-malign-power' instructs GCC to follow the
23757     ABI-specified alignment rules.  GCC defaults to the standard
23758     alignment defined in the ABI.
23759
23760     On 64-bit Darwin, natural alignment is the default, and
23761     '-malign-power' is not supported.
23762
23763'-msoft-float'
23764'-mhard-float'
23765     Generate code that does not use (uses) the floating-point register
23766     set.  Software floating-point emulation is provided if you use the
23767     '-msoft-float' option, and pass the option to GCC when linking.
23768
23769'-mmultiple'
23770'-mno-multiple'
23771     Generate code that uses (does not use) the load multiple word
23772     instructions and the store multiple word instructions.  These
23773     instructions are generated by default on POWER systems, and not
23774     generated on PowerPC systems.  Do not use '-mmultiple' on
23775     little-endian PowerPC systems, since those instructions do not work
23776     when the processor is in little-endian mode.  The exceptions are
23777     PPC740 and PPC750 which permit these instructions in little-endian
23778     mode.
23779
23780'-mupdate'
23781'-mno-update'
23782     Generate code that uses (does not use) the load or store
23783     instructions that update the base register to the address of the
23784     calculated memory location.  These instructions are generated by
23785     default.  If you use '-mno-update', there is a small window between
23786     the time that the stack pointer is updated and the address of the
23787     previous frame is stored, which means code that walks the stack
23788     frame across interrupts or signals may get corrupted data.
23789
23790'-mavoid-indexed-addresses'
23791'-mno-avoid-indexed-addresses'
23792     Generate code that tries to avoid (not avoid) the use of indexed
23793     load or store instructions.  These instructions can incur a
23794     performance penalty on Power6 processors in certain situations,
23795     such as when stepping through large arrays that cross a 16M
23796     boundary.  This option is enabled by default when targeting Power6
23797     and disabled otherwise.
23798
23799'-mfused-madd'
23800'-mno-fused-madd'
23801     Generate code that uses (does not use) the floating-point multiply
23802     and accumulate instructions.  These instructions are generated by
23803     default if hardware floating point is used.  The machine-dependent
23804     '-mfused-madd' option is now mapped to the machine-independent
23805     '-ffp-contract=fast' option, and '-mno-fused-madd' is mapped to
23806     '-ffp-contract=off'.
23807
23808'-mmulhw'
23809'-mno-mulhw'
23810     Generate code that uses (does not use) the half-word multiply and
23811     multiply-accumulate instructions on the IBM 405, 440, 464 and 476
23812     processors.  These instructions are generated by default when
23813     targeting those processors.
23814
23815'-mdlmzb'
23816'-mno-dlmzb'
23817     Generate code that uses (does not use) the string-search 'dlmzb'
23818     instruction on the IBM 405, 440, 464 and 476 processors.  This
23819     instruction is generated by default when targeting those
23820     processors.
23821
23822'-mno-bit-align'
23823'-mbit-align'
23824     On System V.4 and embedded PowerPC systems do not (do) force
23825     structures and unions that contain bit-fields to be aligned to the
23826     base type of the bit-field.
23827
23828     For example, by default a structure containing nothing but 8
23829     'unsigned' bit-fields of length 1 is aligned to a 4-byte boundary
23830     and has a size of 4 bytes.  By using '-mno-bit-align', the
23831     structure is aligned to a 1-byte boundary and is 1 byte in size.
23832
23833'-mno-strict-align'
23834'-mstrict-align'
23835     On System V.4 and embedded PowerPC systems do not (do) assume that
23836     unaligned memory references are handled by the system.
23837
23838'-mrelocatable'
23839'-mno-relocatable'
23840     Generate code that allows (does not allow) a static executable to
23841     be relocated to a different address at run time.  A simple embedded
23842     PowerPC system loader should relocate the entire contents of
23843     '.got2' and 4-byte locations listed in the '.fixup' section, a
23844     table of 32-bit addresses generated by this option.  For this to
23845     work, all objects linked together must be compiled with
23846     '-mrelocatable' or '-mrelocatable-lib'.  '-mrelocatable' code
23847     aligns the stack to an 8-byte boundary.
23848
23849'-mrelocatable-lib'
23850'-mno-relocatable-lib'
23851     Like '-mrelocatable', '-mrelocatable-lib' generates a '.fixup'
23852     section to allow static executables to be relocated at run time,
23853     but '-mrelocatable-lib' does not use the smaller stack alignment of
23854     '-mrelocatable'.  Objects compiled with '-mrelocatable-lib' may be
23855     linked with objects compiled with any combination of the
23856     '-mrelocatable' options.
23857
23858'-mno-toc'
23859'-mtoc'
23860     On System V.4 and embedded PowerPC systems do not (do) assume that
23861     register 2 contains a pointer to a global area pointing to the
23862     addresses used in the program.
23863
23864'-mlittle'
23865'-mlittle-endian'
23866     On System V.4 and embedded PowerPC systems compile code for the
23867     processor in little-endian mode.  The '-mlittle-endian' option is
23868     the same as '-mlittle'.
23869
23870'-mbig'
23871'-mbig-endian'
23872     On System V.4 and embedded PowerPC systems compile code for the
23873     processor in big-endian mode.  The '-mbig-endian' option is the
23874     same as '-mbig'.
23875
23876'-mdynamic-no-pic'
23877     On Darwin and Mac OS X systems, compile code so that it is not
23878     relocatable, but that its external references are relocatable.  The
23879     resulting code is suitable for applications, but not shared
23880     libraries.
23881
23882'-msingle-pic-base'
23883     Treat the register used for PIC addressing as read-only, rather
23884     than loading it in the prologue for each function.  The runtime
23885     system is responsible for initializing this register with an
23886     appropriate value before execution begins.
23887
23888'-mprioritize-restricted-insns=PRIORITY'
23889     This option controls the priority that is assigned to dispatch-slot
23890     restricted instructions during the second scheduling pass.  The
23891     argument PRIORITY takes the value '0', '1', or '2' to assign no,
23892     highest, or second-highest (respectively) priority to dispatch-slot
23893     restricted instructions.
23894
23895'-msched-costly-dep=DEPENDENCE_TYPE'
23896     This option controls which dependences are considered costly by the
23897     target during instruction scheduling.  The argument DEPENDENCE_TYPE
23898     takes one of the following values:
23899
23900     'no'
23901          No dependence is costly.
23902
23903     'all'
23904          All dependences are costly.
23905
23906     'true_store_to_load'
23907          A true dependence from store to load is costly.
23908
23909     'store_to_load'
23910          Any dependence from store to load is costly.
23911
23912     NUMBER
23913          Any dependence for which the latency is greater than or equal
23914          to NUMBER is costly.
23915
23916'-minsert-sched-nops=SCHEME'
23917     This option controls which NOP insertion scheme is used during the
23918     second scheduling pass.  The argument SCHEME takes one of the
23919     following values:
23920
23921     'no'
23922          Don't insert NOPs.
23923
23924     'pad'
23925          Pad with NOPs any dispatch group that has vacant issue slots,
23926          according to the scheduler's grouping.
23927
23928     'regroup_exact'
23929          Insert NOPs to force costly dependent insns into separate
23930          groups.  Insert exactly as many NOPs as needed to force an
23931          insn to a new group, according to the estimated processor
23932          grouping.
23933
23934     NUMBER
23935          Insert NOPs to force costly dependent insns into separate
23936          groups.  Insert NUMBER NOPs to force an insn to a new group.
23937
23938'-mcall-sysv'
23939     On System V.4 and embedded PowerPC systems compile code using
23940     calling conventions that adhere to the March 1995 draft of the
23941     System V Application Binary Interface, PowerPC processor
23942     supplement.  This is the default unless you configured GCC using
23943     'powerpc-*-eabiaix'.
23944
23945'-mcall-sysv-eabi'
23946'-mcall-eabi'
23947     Specify both '-mcall-sysv' and '-meabi' options.
23948
23949'-mcall-sysv-noeabi'
23950     Specify both '-mcall-sysv' and '-mno-eabi' options.
23951
23952'-mcall-aixdesc'
23953     On System V.4 and embedded PowerPC systems compile code for the AIX
23954     operating system.
23955
23956'-mcall-linux'
23957     On System V.4 and embedded PowerPC systems compile code for the
23958     Linux-based GNU system.
23959
23960'-mcall-freebsd'
23961     On System V.4 and embedded PowerPC systems compile code for the
23962     FreeBSD operating system.
23963
23964'-mcall-netbsd'
23965     On System V.4 and embedded PowerPC systems compile code for the
23966     NetBSD operating system.
23967
23968'-mcall-openbsd'
23969     On System V.4 and embedded PowerPC systems compile code for the
23970     OpenBSD operating system.
23971
23972'-mtraceback=TRACEBACK_TYPE'
23973     Select the type of traceback table.  Valid values for
23974     TRACEBACK_TYPE are 'full', 'part', and 'no'.
23975
23976'-maix-struct-return'
23977     Return all structures in memory (as specified by the AIX ABI).
23978
23979'-msvr4-struct-return'
23980     Return structures smaller than 8 bytes in registers (as specified
23981     by the SVR4 ABI).
23982
23983'-mabi=ABI-TYPE'
23984     Extend the current ABI with a particular extension, or remove such
23985     extension.  Valid values are 'altivec', 'no-altivec',
23986     'ibmlongdouble', 'ieeelongdouble', 'elfv1', 'elfv2'.
23987
23988'-mabi=ibmlongdouble'
23989     Change the current ABI to use IBM extended-precision long double.
23990     This is not likely to work if your system defaults to using IEEE
23991     extended-precision long double.  If you change the long double type
23992     from IEEE extended-precision, the compiler will issue a warning
23993     unless you use the '-Wno-psabi' option.  Requires
23994     '-mlong-double-128' to be enabled.
23995
23996'-mabi=ieeelongdouble'
23997     Change the current ABI to use IEEE extended-precision long double.
23998     This is not likely to work if your system defaults to using IBM
23999     extended-precision long double.  If you change the long double type
24000     from IBM extended-precision, the compiler will issue a warning
24001     unless you use the '-Wno-psabi' option.  Requires
24002     '-mlong-double-128' to be enabled.
24003
24004'-mabi=elfv1'
24005     Change the current ABI to use the ELFv1 ABI. This is the default
24006     ABI for big-endian PowerPC 64-bit Linux.  Overriding the default
24007     ABI requires special system support and is likely to fail in
24008     spectacular ways.
24009
24010'-mabi=elfv2'
24011     Change the current ABI to use the ELFv2 ABI. This is the default
24012     ABI for little-endian PowerPC 64-bit Linux.  Overriding the default
24013     ABI requires special system support and is likely to fail in
24014     spectacular ways.
24015
24016'-mgnu-attribute'
24017'-mno-gnu-attribute'
24018     Emit .gnu_attribute assembly directives to set tag/value pairs in a
24019     .gnu.attributes section that specify ABI variations in function
24020     parameters or return values.
24021
24022'-mprototype'
24023'-mno-prototype'
24024     On System V.4 and embedded PowerPC systems assume that all calls to
24025     variable argument functions are properly prototyped.  Otherwise,
24026     the compiler must insert an instruction before every non-prototyped
24027     call to set or clear bit 6 of the condition code register ('CR') to
24028     indicate whether floating-point values are passed in the
24029     floating-point registers in case the function takes variable
24030     arguments.  With '-mprototype', only calls to prototyped variable
24031     argument functions set or clear the bit.
24032
24033'-msim'
24034     On embedded PowerPC systems, assume that the startup module is
24035     called 'sim-crt0.o' and that the standard C libraries are
24036     'libsim.a' and 'libc.a'.  This is the default for
24037     'powerpc-*-eabisim' configurations.
24038
24039'-mmvme'
24040     On embedded PowerPC systems, assume that the startup module is
24041     called 'crt0.o' and the standard C libraries are 'libmvme.a' and
24042     'libc.a'.
24043
24044'-mads'
24045     On embedded PowerPC systems, assume that the startup module is
24046     called 'crt0.o' and the standard C libraries are 'libads.a' and
24047     'libc.a'.
24048
24049'-myellowknife'
24050     On embedded PowerPC systems, assume that the startup module is
24051     called 'crt0.o' and the standard C libraries are 'libyk.a' and
24052     'libc.a'.
24053
24054'-mvxworks'
24055     On System V.4 and embedded PowerPC systems, specify that you are
24056     compiling for a VxWorks system.
24057
24058'-memb'
24059     On embedded PowerPC systems, set the 'PPC_EMB' bit in the ELF flags
24060     header to indicate that 'eabi' extended relocations are used.
24061
24062'-meabi'
24063'-mno-eabi'
24064     On System V.4 and embedded PowerPC systems do (do not) adhere to
24065     the Embedded Applications Binary Interface (EABI), which is a set
24066     of modifications to the System V.4 specifications.  Selecting
24067     '-meabi' means that the stack is aligned to an 8-byte boundary, a
24068     function '__eabi' is called from 'main' to set up the EABI
24069     environment, and the '-msdata' option can use both 'r2' and 'r13'
24070     to point to two separate small data areas.  Selecting '-mno-eabi'
24071     means that the stack is aligned to a 16-byte boundary, no EABI
24072     initialization function is called from 'main', and the '-msdata'
24073     option only uses 'r13' to point to a single small data area.  The
24074     '-meabi' option is on by default if you configured GCC using one of
24075     the 'powerpc*-*-eabi*' options.
24076
24077'-msdata=eabi'
24078     On System V.4 and embedded PowerPC systems, put small initialized
24079     'const' global and static data in the '.sdata2' section, which is
24080     pointed to by register 'r2'.  Put small initialized non-'const'
24081     global and static data in the '.sdata' section, which is pointed to
24082     by register 'r13'.  Put small uninitialized global and static data
24083     in the '.sbss' section, which is adjacent to the '.sdata' section.
24084     The '-msdata=eabi' option is incompatible with the '-mrelocatable'
24085     option.  The '-msdata=eabi' option also sets the '-memb' option.
24086
24087'-msdata=sysv'
24088     On System V.4 and embedded PowerPC systems, put small global and
24089     static data in the '.sdata' section, which is pointed to by
24090     register 'r13'.  Put small uninitialized global and static data in
24091     the '.sbss' section, which is adjacent to the '.sdata' section.
24092     The '-msdata=sysv' option is incompatible with the '-mrelocatable'
24093     option.
24094
24095'-msdata=default'
24096'-msdata'
24097     On System V.4 and embedded PowerPC systems, if '-meabi' is used,
24098     compile code the same as '-msdata=eabi', otherwise compile code the
24099     same as '-msdata=sysv'.
24100
24101'-msdata=data'
24102     On System V.4 and embedded PowerPC systems, put small global data
24103     in the '.sdata' section.  Put small uninitialized global data in
24104     the '.sbss' section.  Do not use register 'r13' to address small
24105     data however.  This is the default behavior unless other '-msdata'
24106     options are used.
24107
24108'-msdata=none'
24109'-mno-sdata'
24110     On embedded PowerPC systems, put all initialized global and static
24111     data in the '.data' section, and all uninitialized data in the
24112     '.bss' section.
24113
24114'-mreadonly-in-sdata'
24115     Put read-only objects in the '.sdata' section as well.  This is the
24116     default.
24117
24118'-mblock-move-inline-limit=NUM'
24119     Inline all block moves (such as calls to 'memcpy' or structure
24120     copies) less than or equal to NUM bytes.  The minimum value for NUM
24121     is 32 bytes on 32-bit targets and 64 bytes on 64-bit targets.  The
24122     default value is target-specific.
24123
24124'-mblock-compare-inline-limit=NUM'
24125     Generate non-looping inline code for all block compares (such as
24126     calls to 'memcmp' or structure compares) less than or equal to NUM
24127     bytes.  If NUM is 0, all inline expansion (non-loop and loop) of
24128     block compare is disabled.  The default value is target-specific.
24129
24130'-mblock-compare-inline-loop-limit=NUM'
24131     Generate an inline expansion using loop code for all block compares
24132     that are less than or equal to NUM bytes, but greater than the
24133     limit for non-loop inline block compare expansion.  If the block
24134     length is not constant, at most NUM bytes will be compared before
24135     'memcmp' is called to compare the remainder of the block.  The
24136     default value is target-specific.
24137
24138'-mstring-compare-inline-limit=NUM'
24139     Compare at most NUM string bytes with inline code.  If the
24140     difference or end of string is not found at the end of the inline
24141     compare a call to 'strcmp' or 'strncmp' will take care of the rest
24142     of the comparison.  The default is 64 bytes.
24143
24144'-G NUM'
24145     On embedded PowerPC systems, put global and static items less than
24146     or equal to NUM bytes into the small data or BSS sections instead
24147     of the normal data or BSS section.  By default, NUM is 8.  The '-G
24148     NUM' switch is also passed to the linker.  All modules should be
24149     compiled with the same '-G NUM' value.
24150
24151'-mregnames'
24152'-mno-regnames'
24153     On System V.4 and embedded PowerPC systems do (do not) emit
24154     register names in the assembly language output using symbolic
24155     forms.
24156
24157'-mlongcall'
24158'-mno-longcall'
24159     By default assume that all calls are far away so that a longer and
24160     more expensive calling sequence is required.  This is required for
24161     calls farther than 32 megabytes (33,554,432 bytes) from the current
24162     location.  A short call is generated if the compiler knows the call
24163     cannot be that far away.  This setting can be overridden by the
24164     'shortcall' function attribute, or by '#pragma longcall(0)'.
24165
24166     Some linkers are capable of detecting out-of-range calls and
24167     generating glue code on the fly.  On these systems, long calls are
24168     unnecessary and generate slower code.  As of this writing, the AIX
24169     linker can do this, as can the GNU linker for PowerPC/64.  It is
24170     planned to add this feature to the GNU linker for 32-bit PowerPC
24171     systems as well.
24172
24173     On PowerPC64 ELFv2 and 32-bit PowerPC systems with newer GNU
24174     linkers, GCC can generate long calls using an inline PLT call
24175     sequence (see '-mpltseq').  PowerPC with '-mbss-plt' and PowerPC64
24176     ELFv1 (big-endian) do not support inline PLT calls.
24177
24178     On Darwin/PPC systems, '#pragma longcall' generates 'jbsr callee,
24179     L42', plus a "branch island" (glue code).  The two target addresses
24180     represent the callee and the branch island.  The Darwin/PPC linker
24181     prefers the first address and generates a 'bl callee' if the PPC
24182     'bl' instruction reaches the callee directly; otherwise, the linker
24183     generates 'bl L42' to call the branch island.  The branch island is
24184     appended to the body of the calling function; it computes the full
24185     32-bit address of the callee and jumps to it.
24186
24187     On Mach-O (Darwin) systems, this option directs the compiler emit
24188     to the glue for every direct call, and the Darwin linker decides
24189     whether to use or discard it.
24190
24191     In the future, GCC may ignore all longcall specifications when the
24192     linker is known to generate glue.
24193
24194'-mpltseq'
24195'-mno-pltseq'
24196     Implement (do not implement) -fno-plt and long calls using an
24197     inline PLT call sequence that supports lazy linking and long calls
24198     to functions in dlopen'd shared libraries.  Inline PLT calls are
24199     only supported on PowerPC64 ELFv2 and 32-bit PowerPC systems with
24200     newer GNU linkers, and are enabled by default if the support is
24201     detected when configuring GCC, and, in the case of 32-bit PowerPC,
24202     if GCC is configured with '--enable-secureplt'.  '-mpltseq' code
24203     and '-mbss-plt' 32-bit PowerPC relocatable objects may not be
24204     linked together.
24205
24206'-mtls-markers'
24207'-mno-tls-markers'
24208     Mark (do not mark) calls to '__tls_get_addr' with a relocation
24209     specifying the function argument.  The relocation allows the linker
24210     to reliably associate function call with argument setup
24211     instructions for TLS optimization, which in turn allows GCC to
24212     better schedule the sequence.
24213
24214'-mrecip'
24215'-mno-recip'
24216     This option enables use of the reciprocal estimate and reciprocal
24217     square root estimate instructions with additional Newton-Raphson
24218     steps to increase precision instead of doing a divide or square
24219     root and divide for floating-point arguments.  You should use the
24220     '-ffast-math' option when using '-mrecip' (or at least
24221     '-funsafe-math-optimizations', '-ffinite-math-only',
24222     '-freciprocal-math' and '-fno-trapping-math').  Note that while the
24223     throughput of the sequence is generally higher than the throughput
24224     of the non-reciprocal instruction, the precision of the sequence
24225     can be decreased by up to 2 ulp (i.e. the inverse of 1.0 equals
24226     0.99999994) for reciprocal square roots.
24227
24228'-mrecip=OPT'
24229     This option controls which reciprocal estimate instructions may be
24230     used.  OPT is a comma-separated list of options, which may be
24231     preceded by a '!' to invert the option:
24232
24233     'all'
24234          Enable all estimate instructions.
24235
24236     'default'
24237          Enable the default instructions, equivalent to '-mrecip'.
24238
24239     'none'
24240          Disable all estimate instructions, equivalent to '-mno-recip'.
24241
24242     'div'
24243          Enable the reciprocal approximation instructions for both
24244          single and double precision.
24245
24246     'divf'
24247          Enable the single-precision reciprocal approximation
24248          instructions.
24249
24250     'divd'
24251          Enable the double-precision reciprocal approximation
24252          instructions.
24253
24254     'rsqrt'
24255          Enable the reciprocal square root approximation instructions
24256          for both single and double precision.
24257
24258     'rsqrtf'
24259          Enable the single-precision reciprocal square root
24260          approximation instructions.
24261
24262     'rsqrtd'
24263          Enable the double-precision reciprocal square root
24264          approximation instructions.
24265
24266     So, for example, '-mrecip=all,!rsqrtd' enables all of the
24267     reciprocal estimate instructions, except for the 'FRSQRTE',
24268     'XSRSQRTEDP', and 'XVRSQRTEDP' instructions which handle the
24269     double-precision reciprocal square root calculations.
24270
24271'-mrecip-precision'
24272'-mno-recip-precision'
24273     Assume (do not assume) that the reciprocal estimate instructions
24274     provide higher-precision estimates than is mandated by the PowerPC
24275     ABI. Selecting '-mcpu=power6', '-mcpu=power7' or '-mcpu=power8'
24276     automatically selects '-mrecip-precision'.  The double-precision
24277     square root estimate instructions are not generated by default on
24278     low-precision machines, since they do not provide an estimate that
24279     converges after three steps.
24280
24281'-mveclibabi=TYPE'
24282     Specifies the ABI type to use for vectorizing intrinsics using an
24283     external library.  The only type supported at present is 'mass',
24284     which specifies to use IBM's Mathematical Acceleration Subsystem
24285     (MASS) libraries for vectorizing intrinsics using external
24286     libraries.  GCC currently emits calls to 'acosd2', 'acosf4',
24287     'acoshd2', 'acoshf4', 'asind2', 'asinf4', 'asinhd2', 'asinhf4',
24288     'atan2d2', 'atan2f4', 'atand2', 'atanf4', 'atanhd2', 'atanhf4',
24289     'cbrtd2', 'cbrtf4', 'cosd2', 'cosf4', 'coshd2', 'coshf4', 'erfcd2',
24290     'erfcf4', 'erfd2', 'erff4', 'exp2d2', 'exp2f4', 'expd2', 'expf4',
24291     'expm1d2', 'expm1f4', 'hypotd2', 'hypotf4', 'lgammad2', 'lgammaf4',
24292     'log10d2', 'log10f4', 'log1pd2', 'log1pf4', 'log2d2', 'log2f4',
24293     'logd2', 'logf4', 'powd2', 'powf4', 'sind2', 'sinf4', 'sinhd2',
24294     'sinhf4', 'sqrtd2', 'sqrtf4', 'tand2', 'tanf4', 'tanhd2', and
24295     'tanhf4' when generating code for power7.  Both '-ftree-vectorize'
24296     and '-funsafe-math-optimizations' must also be enabled.  The MASS
24297     libraries must be specified at link time.
24298
24299'-mfriz'
24300'-mno-friz'
24301     Generate (do not generate) the 'friz' instruction when the
24302     '-funsafe-math-optimizations' option is used to optimize rounding
24303     of floating-point values to 64-bit integer and back to floating
24304     point.  The 'friz' instruction does not return the same value if
24305     the floating-point number is too large to fit in an integer.
24306
24307'-mpointers-to-nested-functions'
24308'-mno-pointers-to-nested-functions'
24309     Generate (do not generate) code to load up the static chain
24310     register ('r11') when calling through a pointer on AIX and 64-bit
24311     Linux systems where a function pointer points to a 3-word
24312     descriptor giving the function address, TOC value to be loaded in
24313     register 'r2', and static chain value to be loaded in register
24314     'r11'.  The '-mpointers-to-nested-functions' is on by default.  You
24315     cannot call through pointers to nested functions or pointers to
24316     functions compiled in other languages that use the static chain if
24317     you use '-mno-pointers-to-nested-functions'.
24318
24319'-msave-toc-indirect'
24320'-mno-save-toc-indirect'
24321     Generate (do not generate) code to save the TOC value in the
24322     reserved stack location in the function prologue if the function
24323     calls through a pointer on AIX and 64-bit Linux systems.  If the
24324     TOC value is not saved in the prologue, it is saved just before the
24325     call through the pointer.  The '-mno-save-toc-indirect' option is
24326     the default.
24327
24328'-mcompat-align-parm'
24329'-mno-compat-align-parm'
24330     Generate (do not generate) code to pass structure parameters with a
24331     maximum alignment of 64 bits, for compatibility with older versions
24332     of GCC.
24333
24334     Older versions of GCC (prior to 4.9.0) incorrectly did not align a
24335     structure parameter on a 128-bit boundary when that structure
24336     contained a member requiring 128-bit alignment.  This is corrected
24337     in more recent versions of GCC. This option may be used to generate
24338     code that is compatible with functions compiled with older versions
24339     of GCC.
24340
24341     The '-mno-compat-align-parm' option is the default.
24342
24343'-mstack-protector-guard=GUARD'
24344'-mstack-protector-guard-reg=REG'
24345'-mstack-protector-guard-offset=OFFSET'
24346'-mstack-protector-guard-symbol=SYMBOL'
24347     Generate stack protection code using canary at GUARD.  Supported
24348     locations are 'global' for global canary or 'tls' for per-thread
24349     canary in the TLS block (the default with GNU libc version 2.4 or
24350     later).
24351
24352     With the latter choice the options
24353     '-mstack-protector-guard-reg=REG' and
24354     '-mstack-protector-guard-offset=OFFSET' furthermore specify which
24355     register to use as base register for reading the canary, and from
24356     what offset from that base register.  The default for those is as
24357     specified in the relevant ABI.
24358     '-mstack-protector-guard-symbol=SYMBOL' overrides the offset with a
24359     symbol reference to a canary in the TLS block.
24360
24361'-mpcrel'
24362'-mno-pcrel'
24363     Generate (do not generate) pc-relative addressing when the option
24364     '-mcpu=future' is used.  The '-mpcrel' option requires that the
24365     medium code model ('-mcmodel=medium') and prefixed addressing
24366     ('-mprefixed') options are enabled.
24367
24368'-mprefixed'
24369'-mno-prefixed'
24370     Generate (do not generate) addressing modes using prefixed load and
24371     store instructions when the option '-mcpu=future' is used.
24372
24373'-mmma'
24374'-mno-mma'
24375     Generate (do not generate) the MMA instructions when the option
24376     '-mcpu=future' is used.
24377
24378
24379File: gcc.info,  Node: RX Options,  Next: S/390 and zSeries Options,  Prev: RS/6000 and PowerPC Options,  Up: Submodel Options
24380
243813.19.45 RX Options
24382------------------
24383
24384These command-line options are defined for RX targets:
24385
24386'-m64bit-doubles'
24387'-m32bit-doubles'
24388     Make the 'double' data type be 64 bits ('-m64bit-doubles') or 32
24389     bits ('-m32bit-doubles') in size.  The default is
24390     '-m32bit-doubles'.  _Note_ RX floating-point hardware only works on
24391     32-bit values, which is why the default is '-m32bit-doubles'.
24392
24393'-fpu'
24394'-nofpu'
24395     Enables ('-fpu') or disables ('-nofpu') the use of RX
24396     floating-point hardware.  The default is enabled for the RX600
24397     series and disabled for the RX200 series.
24398
24399     Floating-point instructions are only generated for 32-bit
24400     floating-point values, however, so the FPU hardware is not used for
24401     doubles if the '-m64bit-doubles' option is used.
24402
24403     _Note_ If the '-fpu' option is enabled then
24404     '-funsafe-math-optimizations' is also enabled automatically.  This
24405     is because the RX FPU instructions are themselves unsafe.
24406
24407'-mcpu=NAME'
24408     Selects the type of RX CPU to be targeted.  Currently three types
24409     are supported, the generic 'RX600' and 'RX200' series hardware and
24410     the specific 'RX610' CPU. The default is 'RX600'.
24411
24412     The only difference between 'RX600' and 'RX610' is that the 'RX610'
24413     does not support the 'MVTIPL' instruction.
24414
24415     The 'RX200' series does not have a hardware floating-point unit and
24416     so '-nofpu' is enabled by default when this type is selected.
24417
24418'-mbig-endian-data'
24419'-mlittle-endian-data'
24420     Store data (but not code) in the big-endian format.  The default is
24421     '-mlittle-endian-data', i.e. to store data in the little-endian
24422     format.
24423
24424'-msmall-data-limit=N'
24425     Specifies the maximum size in bytes of global and static variables
24426     which can be placed into the small data area.  Using the small data
24427     area can lead to smaller and faster code, but the size of area is
24428     limited and it is up to the programmer to ensure that the area does
24429     not overflow.  Also when the small data area is used one of the
24430     RX's registers (usually 'r13') is reserved for use pointing to this
24431     area, so it is no longer available for use by the compiler.  This
24432     could result in slower and/or larger code if variables are pushed
24433     onto the stack instead of being held in this register.
24434
24435     Note, common variables (variables that have not been initialized)
24436     and constants are not placed into the small data area as they are
24437     assigned to other sections in the output executable.
24438
24439     The default value is zero, which disables this feature.  Note, this
24440     feature is not enabled by default with higher optimization levels
24441     ('-O2' etc) because of the potentially detrimental effects of
24442     reserving a register.  It is up to the programmer to experiment and
24443     discover whether this feature is of benefit to their program.  See
24444     the description of the '-mpid' option for a description of how the
24445     actual register to hold the small data area pointer is chosen.
24446
24447'-msim'
24448'-mno-sim'
24449     Use the simulator runtime.  The default is to use the libgloss
24450     board-specific runtime.
24451
24452'-mas100-syntax'
24453'-mno-as100-syntax'
24454     When generating assembler output use a syntax that is compatible
24455     with Renesas's AS100 assembler.  This syntax can also be handled by
24456     the GAS assembler, but it has some restrictions so it is not
24457     generated by default.
24458
24459'-mmax-constant-size=N'
24460     Specifies the maximum size, in bytes, of a constant that can be
24461     used as an operand in a RX instruction.  Although the RX
24462     instruction set does allow constants of up to 4 bytes in length to
24463     be used in instructions, a longer value equates to a longer
24464     instruction.  Thus in some circumstances it can be beneficial to
24465     restrict the size of constants that are used in instructions.
24466     Constants that are too big are instead placed into a constant pool
24467     and referenced via register indirection.
24468
24469     The value N can be between 0 and 4.  A value of 0 (the default) or
24470     4 means that constants of any size are allowed.
24471
24472'-mrelax'
24473     Enable linker relaxation.  Linker relaxation is a process whereby
24474     the linker attempts to reduce the size of a program by finding
24475     shorter versions of various instructions.  Disabled by default.
24476
24477'-mint-register=N'
24478     Specify the number of registers to reserve for fast interrupt
24479     handler functions.  The value N can be between 0 and 4.  A value of
24480     1 means that register 'r13' is reserved for the exclusive use of
24481     fast interrupt handlers.  A value of 2 reserves 'r13' and 'r12'.  A
24482     value of 3 reserves 'r13', 'r12' and 'r11', and a value of 4
24483     reserves 'r13' through 'r10'.  A value of 0, the default, does not
24484     reserve any registers.
24485
24486'-msave-acc-in-interrupts'
24487     Specifies that interrupt handler functions should preserve the
24488     accumulator register.  This is only necessary if normal code might
24489     use the accumulator register, for example because it performs
24490     64-bit multiplications.  The default is to ignore the accumulator
24491     as this makes the interrupt handlers faster.
24492
24493'-mpid'
24494'-mno-pid'
24495     Enables the generation of position independent data.  When enabled
24496     any access to constant data is done via an offset from a base
24497     address held in a register.  This allows the location of constant
24498     data to be determined at run time without requiring the executable
24499     to be relocated, which is a benefit to embedded applications with
24500     tight memory constraints.  Data that can be modified is not
24501     affected by this option.
24502
24503     Note, using this feature reserves a register, usually 'r13', for
24504     the constant data base address.  This can result in slower and/or
24505     larger code, especially in complicated functions.
24506
24507     The actual register chosen to hold the constant data base address
24508     depends upon whether the '-msmall-data-limit' and/or the
24509     '-mint-register' command-line options are enabled.  Starting with
24510     register 'r13' and proceeding downwards, registers are allocated
24511     first to satisfy the requirements of '-mint-register', then '-mpid'
24512     and finally '-msmall-data-limit'.  Thus it is possible for the
24513     small data area register to be 'r8' if both '-mint-register=4' and
24514     '-mpid' are specified on the command line.
24515
24516     By default this feature is not enabled.  The default can be
24517     restored via the '-mno-pid' command-line option.
24518
24519'-mno-warn-multiple-fast-interrupts'
24520'-mwarn-multiple-fast-interrupts'
24521     Prevents GCC from issuing a warning message if it finds more than
24522     one fast interrupt handler when it is compiling a file.  The
24523     default is to issue a warning for each extra fast interrupt handler
24524     found, as the RX only supports one such interrupt.
24525
24526'-mallow-string-insns'
24527'-mno-allow-string-insns'
24528     Enables or disables the use of the string manipulation instructions
24529     'SMOVF', 'SCMPU', 'SMOVB', 'SMOVU', 'SUNTIL' 'SWHILE' and also the
24530     'RMPA' instruction.  These instructions may prefetch data, which is
24531     not safe to do if accessing an I/O register.  (See section 12.2.7
24532     of the RX62N Group User's Manual for more information).
24533
24534     The default is to allow these instructions, but it is not possible
24535     for GCC to reliably detect all circumstances where a string
24536     instruction might be used to access an I/O register, so their use
24537     cannot be disabled automatically.  Instead it is reliant upon the
24538     programmer to use the '-mno-allow-string-insns' option if their
24539     program accesses I/O space.
24540
24541     When the instructions are enabled GCC defines the C preprocessor
24542     symbol '__RX_ALLOW_STRING_INSNS__', otherwise it defines the symbol
24543     '__RX_DISALLOW_STRING_INSNS__'.
24544
24545'-mjsr'
24546'-mno-jsr'
24547     Use only (or not only) 'JSR' instructions to access functions.
24548     This option can be used when code size exceeds the range of 'BSR'
24549     instructions.  Note that '-mno-jsr' does not mean to not use 'JSR'
24550     but instead means that any type of branch may be used.
24551
24552 _Note:_ The generic GCC command-line option '-ffixed-REG' has special
24553significance to the RX port when used with the 'interrupt' function
24554attribute.  This attribute indicates a function intended to process fast
24555interrupts.  GCC ensures that it only uses the registers 'r10', 'r11',
24556'r12' and/or 'r13' and only provided that the normal use of the
24557corresponding registers have been restricted via the '-ffixed-REG' or
24558'-mint-register' command-line options.
24559
24560
24561File: gcc.info,  Node: S/390 and zSeries Options,  Next: Score Options,  Prev: RX Options,  Up: Submodel Options
24562
245633.19.46 S/390 and zSeries Options
24564---------------------------------
24565
24566These are the '-m' options defined for the S/390 and zSeries
24567architecture.
24568
24569'-mhard-float'
24570'-msoft-float'
24571     Use (do not use) the hardware floating-point instructions and
24572     registers for floating-point operations.  When '-msoft-float' is
24573     specified, functions in 'libgcc.a' are used to perform
24574     floating-point operations.  When '-mhard-float' is specified, the
24575     compiler generates IEEE floating-point instructions.  This is the
24576     default.
24577
24578'-mhard-dfp'
24579'-mno-hard-dfp'
24580     Use (do not use) the hardware decimal-floating-point instructions
24581     for decimal-floating-point operations.  When '-mno-hard-dfp' is
24582     specified, functions in 'libgcc.a' are used to perform
24583     decimal-floating-point operations.  When '-mhard-dfp' is specified,
24584     the compiler generates decimal-floating-point hardware
24585     instructions.  This is the default for '-march=z9-ec' or higher.
24586
24587'-mlong-double-64'
24588'-mlong-double-128'
24589     These switches control the size of 'long double' type.  A size of
24590     64 bits makes the 'long double' type equivalent to the 'double'
24591     type.  This is the default.
24592
24593'-mbackchain'
24594'-mno-backchain'
24595     Store (do not store) the address of the caller's frame as backchain
24596     pointer into the callee's stack frame.  A backchain may be needed
24597     to allow debugging using tools that do not understand DWARF call
24598     frame information.  When '-mno-packed-stack' is in effect, the
24599     backchain pointer is stored at the bottom of the stack frame; when
24600     '-mpacked-stack' is in effect, the backchain is placed into the
24601     topmost word of the 96/160 byte register save area.
24602
24603     In general, code compiled with '-mbackchain' is call-compatible
24604     with code compiled with '-mmo-backchain'; however, use of the
24605     backchain for debugging purposes usually requires that the whole
24606     binary is built with '-mbackchain'.  Note that the combination of
24607     '-mbackchain', '-mpacked-stack' and '-mhard-float' is not
24608     supported.  In order to build a linux kernel use '-msoft-float'.
24609
24610     The default is to not maintain the backchain.
24611
24612'-mpacked-stack'
24613'-mno-packed-stack'
24614     Use (do not use) the packed stack layout.  When '-mno-packed-stack'
24615     is specified, the compiler uses the all fields of the 96/160 byte
24616     register save area only for their default purpose; unused fields
24617     still take up stack space.  When '-mpacked-stack' is specified,
24618     register save slots are densely packed at the top of the register
24619     save area; unused space is reused for other purposes, allowing for
24620     more efficient use of the available stack space.  However, when
24621     '-mbackchain' is also in effect, the topmost word of the save area
24622     is always used to store the backchain, and the return address
24623     register is always saved two words below the backchain.
24624
24625     As long as the stack frame backchain is not used, code generated
24626     with '-mpacked-stack' is call-compatible with code generated with
24627     '-mno-packed-stack'.  Note that some non-FSF releases of GCC 2.95
24628     for S/390 or zSeries generated code that uses the stack frame
24629     backchain at run time, not just for debugging purposes.  Such code
24630     is not call-compatible with code compiled with '-mpacked-stack'.
24631     Also, note that the combination of '-mbackchain', '-mpacked-stack'
24632     and '-mhard-float' is not supported.  In order to build a linux
24633     kernel use '-msoft-float'.
24634
24635     The default is to not use the packed stack layout.
24636
24637'-msmall-exec'
24638'-mno-small-exec'
24639     Generate (or do not generate) code using the 'bras' instruction to
24640     do subroutine calls.  This only works reliably if the total
24641     executable size does not exceed 64k.  The default is to use the
24642     'basr' instruction instead, which does not have this limitation.
24643
24644'-m64'
24645'-m31'
24646     When '-m31' is specified, generate code compliant to the GNU/Linux
24647     for S/390 ABI.  When '-m64' is specified, generate code compliant
24648     to the GNU/Linux for zSeries ABI.  This allows GCC in particular to
24649     generate 64-bit instructions.  For the 's390' targets, the default
24650     is '-m31', while the 's390x' targets default to '-m64'.
24651
24652'-mzarch'
24653'-mesa'
24654     When '-mzarch' is specified, generate code using the instructions
24655     available on z/Architecture.  When '-mesa' is specified, generate
24656     code using the instructions available on ESA/390.  Note that
24657     '-mesa' is not possible with '-m64'.  When generating code
24658     compliant to the GNU/Linux for S/390 ABI, the default is '-mesa'.
24659     When generating code compliant to the GNU/Linux for zSeries ABI,
24660     the default is '-mzarch'.
24661
24662'-mhtm'
24663'-mno-htm'
24664     The '-mhtm' option enables a set of builtins making use of
24665     instructions available with the transactional execution facility
24666     introduced with the IBM zEnterprise EC12 machine generation *note
24667     S/390 System z Built-in Functions::.  '-mhtm' is enabled by default
24668     when using '-march=zEC12'.
24669
24670'-mvx'
24671'-mno-vx'
24672     When '-mvx' is specified, generate code using the instructions
24673     available with the vector extension facility introduced with the
24674     IBM z13 machine generation.  This option changes the ABI for some
24675     vector type values with regard to alignment and calling
24676     conventions.  In case vector type values are being used in an
24677     ABI-relevant context a GAS '.gnu_attribute' command will be added
24678     to mark the resulting binary with the ABI used.  '-mvx' is enabled
24679     by default when using '-march=z13'.
24680
24681'-mzvector'
24682'-mno-zvector'
24683     The '-mzvector' option enables vector language extensions and
24684     builtins using instructions available with the vector extension
24685     facility introduced with the IBM z13 machine generation.  This
24686     option adds support for 'vector' to be used as a keyword to define
24687     vector type variables and arguments.  'vector' is only available
24688     when GNU extensions are enabled.  It will not be expanded when
24689     requesting strict standard compliance e.g. with '-std=c99'.  In
24690     addition to the GCC low-level builtins '-mzvector' enables a set of
24691     builtins added for compatibility with AltiVec-style implementations
24692     like Power and Cell.  In order to make use of these builtins the
24693     header file 'vecintrin.h' needs to be included.  '-mzvector' is
24694     disabled by default.
24695
24696'-mmvcle'
24697'-mno-mvcle'
24698     Generate (or do not generate) code using the 'mvcle' instruction to
24699     perform block moves.  When '-mno-mvcle' is specified, use a 'mvc'
24700     loop instead.  This is the default unless optimizing for size.
24701
24702'-mdebug'
24703'-mno-debug'
24704     Print (or do not print) additional debug information when
24705     compiling.  The default is to not print debug information.
24706
24707'-march=CPU-TYPE'
24708     Generate code that runs on CPU-TYPE, which is the name of a system
24709     representing a certain processor type.  Possible values for
24710     CPU-TYPE are 'z900'/'arch5', 'z990'/'arch6', 'z9-109',
24711     'z9-ec'/'arch7', 'z10'/'arch8', 'z196'/'arch9', 'zEC12',
24712     'z13'/'arch11', 'z14'/'arch12', and 'native'.
24713
24714     The default is '-march=z900'.
24715
24716     Specifying 'native' as cpu type can be used to select the best
24717     architecture option for the host processor.  '-march=native' has no
24718     effect if GCC does not recognize the processor.
24719
24720'-mtune=CPU-TYPE'
24721     Tune to CPU-TYPE everything applicable about the generated code,
24722     except for the ABI and the set of available instructions.  The list
24723     of CPU-TYPE values is the same as for '-march'.  The default is the
24724     value used for '-march'.
24725
24726'-mtpf-trace'
24727'-mno-tpf-trace'
24728     Generate code that adds (does not add) in TPF OS specific branches
24729     to trace routines in the operating system.  This option is off by
24730     default, even when compiling for the TPF OS.
24731
24732'-mtpf-trace-skip'
24733'-mno-tpf-trace-skip'
24734     Generate code that changes (does not change) the default branch
24735     targets enabled by '-mtpf-trace' to point to specialized trace
24736     routines providing the ability of selectively skipping function
24737     trace entries for the TPF OS. This option is off by default, even
24738     when compiling for the TPF OS and specifying '-mtpf-trace'.
24739
24740'-mfused-madd'
24741'-mno-fused-madd'
24742     Generate code that uses (does not use) the floating-point multiply
24743     and accumulate instructions.  These instructions are generated by
24744     default if hardware floating point is used.
24745
24746'-mwarn-framesize=FRAMESIZE'
24747     Emit a warning if the current function exceeds the given frame
24748     size.  Because this is a compile-time check it doesn't need to be a
24749     real problem when the program runs.  It is intended to identify
24750     functions that most probably cause a stack overflow.  It is useful
24751     to be used in an environment with limited stack size e.g. the linux
24752     kernel.
24753
24754'-mwarn-dynamicstack'
24755     Emit a warning if the function calls 'alloca' or uses
24756     dynamically-sized arrays.  This is generally a bad idea with a
24757     limited stack size.
24758
24759'-mstack-guard=STACK-GUARD'
24760'-mstack-size=STACK-SIZE'
24761     If these options are provided the S/390 back end emits additional
24762     instructions in the function prologue that trigger a trap if the
24763     stack size is STACK-GUARD bytes above the STACK-SIZE (remember that
24764     the stack on S/390 grows downward).  If the STACK-GUARD option is
24765     omitted the smallest power of 2 larger than the frame size of the
24766     compiled function is chosen.  These options are intended to be used
24767     to help debugging stack overflow problems.  The additionally
24768     emitted code causes only little overhead and hence can also be used
24769     in production-like systems without greater performance degradation.
24770     The given values have to be exact powers of 2 and STACK-SIZE has to
24771     be greater than STACK-GUARD without exceeding 64k.  In order to be
24772     efficient the extra code makes the assumption that the stack starts
24773     at an address aligned to the value given by STACK-SIZE.  The
24774     STACK-GUARD option can only be used in conjunction with STACK-SIZE.
24775
24776'-mhotpatch=PRE-HALFWORDS,POST-HALFWORDS'
24777     If the hotpatch option is enabled, a "hot-patching" function
24778     prologue is generated for all functions in the compilation unit.
24779     The funtion label is prepended with the given number of two-byte
24780     NOP instructions (PRE-HALFWORDS, maximum 1000000).  After the
24781     label, 2 * POST-HALFWORDS bytes are appended, using the largest NOP
24782     like instructions the architecture allows (maximum 1000000).
24783
24784     If both arguments are zero, hotpatching is disabled.
24785
24786     This option can be overridden for individual functions with the
24787     'hotpatch' attribute.
24788
24789
24790File: gcc.info,  Node: Score Options,  Next: SH Options,  Prev: S/390 and zSeries Options,  Up: Submodel Options
24791
247923.19.47 Score Options
24793---------------------
24794
24795These options are defined for Score implementations:
24796
24797'-meb'
24798     Compile code for big-endian mode.  This is the default.
24799
24800'-mel'
24801     Compile code for little-endian mode.
24802
24803'-mnhwloop'
24804     Disable generation of 'bcnz' instructions.
24805
24806'-muls'
24807     Enable generation of unaligned load and store instructions.
24808
24809'-mmac'
24810     Enable the use of multiply-accumulate instructions.  Disabled by
24811     default.
24812
24813'-mscore5'
24814     Specify the SCORE5 as the target architecture.
24815
24816'-mscore5u'
24817     Specify the SCORE5U of the target architecture.
24818
24819'-mscore7'
24820     Specify the SCORE7 as the target architecture.  This is the
24821     default.
24822
24823'-mscore7d'
24824     Specify the SCORE7D as the target architecture.
24825
24826
24827File: gcc.info,  Node: SH Options,  Next: Solaris 2 Options,  Prev: Score Options,  Up: Submodel Options
24828
248293.19.48 SH Options
24830------------------
24831
24832These '-m' options are defined for the SH implementations:
24833
24834'-m1'
24835     Generate code for the SH1.
24836
24837'-m2'
24838     Generate code for the SH2.
24839
24840'-m2e'
24841     Generate code for the SH2e.
24842
24843'-m2a-nofpu'
24844     Generate code for the SH2a without FPU, or for a SH2a-FPU in such a
24845     way that the floating-point unit is not used.
24846
24847'-m2a-single-only'
24848     Generate code for the SH2a-FPU, in such a way that no
24849     double-precision floating-point operations are used.
24850
24851'-m2a-single'
24852     Generate code for the SH2a-FPU assuming the floating-point unit is
24853     in single-precision mode by default.
24854
24855'-m2a'
24856     Generate code for the SH2a-FPU assuming the floating-point unit is
24857     in double-precision mode by default.
24858
24859'-m3'
24860     Generate code for the SH3.
24861
24862'-m3e'
24863     Generate code for the SH3e.
24864
24865'-m4-nofpu'
24866     Generate code for the SH4 without a floating-point unit.
24867
24868'-m4-single-only'
24869     Generate code for the SH4 with a floating-point unit that only
24870     supports single-precision arithmetic.
24871
24872'-m4-single'
24873     Generate code for the SH4 assuming the floating-point unit is in
24874     single-precision mode by default.
24875
24876'-m4'
24877     Generate code for the SH4.
24878
24879'-m4-100'
24880     Generate code for SH4-100.
24881
24882'-m4-100-nofpu'
24883     Generate code for SH4-100 in such a way that the floating-point
24884     unit is not used.
24885
24886'-m4-100-single'
24887     Generate code for SH4-100 assuming the floating-point unit is in
24888     single-precision mode by default.
24889
24890'-m4-100-single-only'
24891     Generate code for SH4-100 in such a way that no double-precision
24892     floating-point operations are used.
24893
24894'-m4-200'
24895     Generate code for SH4-200.
24896
24897'-m4-200-nofpu'
24898     Generate code for SH4-200 without in such a way that the
24899     floating-point unit is not used.
24900
24901'-m4-200-single'
24902     Generate code for SH4-200 assuming the floating-point unit is in
24903     single-precision mode by default.
24904
24905'-m4-200-single-only'
24906     Generate code for SH4-200 in such a way that no double-precision
24907     floating-point operations are used.
24908
24909'-m4-300'
24910     Generate code for SH4-300.
24911
24912'-m4-300-nofpu'
24913     Generate code for SH4-300 without in such a way that the
24914     floating-point unit is not used.
24915
24916'-m4-300-single'
24917     Generate code for SH4-300 in such a way that no double-precision
24918     floating-point operations are used.
24919
24920'-m4-300-single-only'
24921     Generate code for SH4-300 in such a way that no double-precision
24922     floating-point operations are used.
24923
24924'-m4-340'
24925     Generate code for SH4-340 (no MMU, no FPU).
24926
24927'-m4-500'
24928     Generate code for SH4-500 (no FPU). Passes '-isa=sh4-nofpu' to the
24929     assembler.
24930
24931'-m4a-nofpu'
24932     Generate code for the SH4al-dsp, or for a SH4a in such a way that
24933     the floating-point unit is not used.
24934
24935'-m4a-single-only'
24936     Generate code for the SH4a, in such a way that no double-precision
24937     floating-point operations are used.
24938
24939'-m4a-single'
24940     Generate code for the SH4a assuming the floating-point unit is in
24941     single-precision mode by default.
24942
24943'-m4a'
24944     Generate code for the SH4a.
24945
24946'-m4al'
24947     Same as '-m4a-nofpu', except that it implicitly passes '-dsp' to
24948     the assembler.  GCC doesn't generate any DSP instructions at the
24949     moment.
24950
24951'-mb'
24952     Compile code for the processor in big-endian mode.
24953
24954'-ml'
24955     Compile code for the processor in little-endian mode.
24956
24957'-mdalign'
24958     Align doubles at 64-bit boundaries.  Note that this changes the
24959     calling conventions, and thus some functions from the standard C
24960     library do not work unless you recompile it first with '-mdalign'.
24961
24962'-mrelax'
24963     Shorten some address references at link time, when possible; uses
24964     the linker option '-relax'.
24965
24966'-mbigtable'
24967     Use 32-bit offsets in 'switch' tables.  The default is to use
24968     16-bit offsets.
24969
24970'-mbitops'
24971     Enable the use of bit manipulation instructions on SH2A.
24972
24973'-mfmovd'
24974     Enable the use of the instruction 'fmovd'.  Check '-mdalign' for
24975     alignment constraints.
24976
24977'-mrenesas'
24978     Comply with the calling conventions defined by Renesas.
24979
24980'-mno-renesas'
24981     Comply with the calling conventions defined for GCC before the
24982     Renesas conventions were available.  This option is the default for
24983     all targets of the SH toolchain.
24984
24985'-mnomacsave'
24986     Mark the 'MAC' register as call-clobbered, even if '-mrenesas' is
24987     given.
24988
24989'-mieee'
24990'-mno-ieee'
24991     Control the IEEE compliance of floating-point comparisons, which
24992     affects the handling of cases where the result of a comparison is
24993     unordered.  By default '-mieee' is implicitly enabled.  If
24994     '-ffinite-math-only' is enabled '-mno-ieee' is implicitly set,
24995     which results in faster floating-point greater-equal and less-equal
24996     comparisons.  The implicit settings can be overridden by specifying
24997     either '-mieee' or '-mno-ieee'.
24998
24999'-minline-ic_invalidate'
25000     Inline code to invalidate instruction cache entries after setting
25001     up nested function trampolines.  This option has no effect if
25002     '-musermode' is in effect and the selected code generation option
25003     (e.g. '-m4') does not allow the use of the 'icbi' instruction.  If
25004     the selected code generation option does not allow the use of the
25005     'icbi' instruction, and '-musermode' is not in effect, the inlined
25006     code manipulates the instruction cache address array directly with
25007     an associative write.  This not only requires privileged mode at
25008     run time, but it also fails if the cache line had been mapped via
25009     the TLB and has become unmapped.
25010
25011'-misize'
25012     Dump instruction size and location in the assembly code.
25013
25014'-mpadstruct'
25015     This option is deprecated.  It pads structures to multiple of 4
25016     bytes, which is incompatible with the SH ABI.
25017
25018'-matomic-model=MODEL'
25019     Sets the model of atomic operations and additional parameters as a
25020     comma separated list.  For details on the atomic built-in functions
25021     see *note __atomic Builtins::.  The following models and parameters
25022     are supported:
25023
25024     'none'
25025          Disable compiler generated atomic sequences and emit library
25026          calls for atomic operations.  This is the default if the
25027          target is not 'sh*-*-linux*'.
25028
25029     'soft-gusa'
25030          Generate GNU/Linux compatible gUSA software atomic sequences
25031          for the atomic built-in functions.  The generated atomic
25032          sequences require additional support from the
25033          interrupt/exception handling code of the system and are only
25034          suitable for SH3* and SH4* single-core systems.  This option
25035          is enabled by default when the target is 'sh*-*-linux*' and
25036          SH3* or SH4*.  When the target is SH4A, this option also
25037          partially utilizes the hardware atomic instructions 'movli.l'
25038          and 'movco.l' to create more efficient code, unless 'strict'
25039          is specified.
25040
25041     'soft-tcb'
25042          Generate software atomic sequences that use a variable in the
25043          thread control block.  This is a variation of the gUSA
25044          sequences which can also be used on SH1* and SH2* targets.
25045          The generated atomic sequences require additional support from
25046          the interrupt/exception handling code of the system and are
25047          only suitable for single-core systems.  When using this model,
25048          the 'gbr-offset=' parameter has to be specified as well.
25049
25050     'soft-imask'
25051          Generate software atomic sequences that temporarily disable
25052          interrupts by setting 'SR.IMASK = 1111'.  This model works
25053          only when the program runs in privileged mode and is only
25054          suitable for single-core systems.  Additional support from the
25055          interrupt/exception handling code of the system is not
25056          required.  This model is enabled by default when the target is
25057          'sh*-*-linux*' and SH1* or SH2*.
25058
25059     'hard-llcs'
25060          Generate hardware atomic sequences using the 'movli.l' and
25061          'movco.l' instructions only.  This is only available on SH4A
25062          and is suitable for multi-core systems.  Since the hardware
25063          instructions support only 32 bit atomic variables access to 8
25064          or 16 bit variables is emulated with 32 bit accesses.  Code
25065          compiled with this option is also compatible with other
25066          software atomic model interrupt/exception handling systems if
25067          executed on an SH4A system.  Additional support from the
25068          interrupt/exception handling code of the system is not
25069          required for this model.
25070
25071     'gbr-offset='
25072          This parameter specifies the offset in bytes of the variable
25073          in the thread control block structure that should be used by
25074          the generated atomic sequences when the 'soft-tcb' model has
25075          been selected.  For other models this parameter is ignored.
25076          The specified value must be an integer multiple of four and in
25077          the range 0-1020.
25078
25079     'strict'
25080          This parameter prevents mixed usage of multiple atomic models,
25081          even if they are compatible, and makes the compiler generate
25082          atomic sequences of the specified model only.
25083
25084'-mtas'
25085     Generate the 'tas.b' opcode for '__atomic_test_and_set'.  Notice
25086     that depending on the particular hardware and software
25087     configuration this can degrade overall performance due to the
25088     operand cache line flushes that are implied by the 'tas.b'
25089     instruction.  On multi-core SH4A processors the 'tas.b' instruction
25090     must be used with caution since it can result in data corruption
25091     for certain cache configurations.
25092
25093'-mprefergot'
25094     When generating position-independent code, emit function calls
25095     using the Global Offset Table instead of the Procedure Linkage
25096     Table.
25097
25098'-musermode'
25099'-mno-usermode'
25100     Don't allow (allow) the compiler generating privileged mode code.
25101     Specifying '-musermode' also implies '-mno-inline-ic_invalidate' if
25102     the inlined code would not work in user mode.  '-musermode' is the
25103     default when the target is 'sh*-*-linux*'.  If the target is SH1*
25104     or SH2* '-musermode' has no effect, since there is no user mode.
25105
25106'-multcost=NUMBER'
25107     Set the cost to assume for a multiply insn.
25108
25109'-mdiv=STRATEGY'
25110     Set the division strategy to be used for integer division
25111     operations.  STRATEGY can be one of:
25112
25113     'call-div1'
25114          Calls a library function that uses the single-step division
25115          instruction 'div1' to perform the operation.  Division by zero
25116          calculates an unspecified result and does not trap.  This is
25117          the default except for SH4, SH2A and SHcompact.
25118
25119     'call-fp'
25120          Calls a library function that performs the operation in double
25121          precision floating point.  Division by zero causes a
25122          floating-point exception.  This is the default for SHcompact
25123          with FPU. Specifying this for targets that do not have a
25124          double precision FPU defaults to 'call-div1'.
25125
25126     'call-table'
25127          Calls a library function that uses a lookup table for small
25128          divisors and the 'div1' instruction with case distinction for
25129          larger divisors.  Division by zero calculates an unspecified
25130          result and does not trap.  This is the default for SH4.
25131          Specifying this for targets that do not have dynamic shift
25132          instructions defaults to 'call-div1'.
25133
25134     When a division strategy has not been specified the default
25135     strategy is selected based on the current target.  For SH2A the
25136     default strategy is to use the 'divs' and 'divu' instructions
25137     instead of library function calls.
25138
25139'-maccumulate-outgoing-args'
25140     Reserve space once for outgoing arguments in the function prologue
25141     rather than around each call.  Generally beneficial for performance
25142     and size.  Also needed for unwinding to avoid changing the stack
25143     frame around conditional code.
25144
25145'-mdivsi3_libfunc=NAME'
25146     Set the name of the library function used for 32-bit signed
25147     division to NAME.  This only affects the name used in the 'call'
25148     division strategies, and the compiler still expects the same sets
25149     of input/output/clobbered registers as if this option were not
25150     present.
25151
25152'-mfixed-range=REGISTER-RANGE'
25153     Generate code treating the given register range as fixed registers.
25154     A fixed register is one that the register allocator cannot use.
25155     This is useful when compiling kernel code.  A register range is
25156     specified as two registers separated by a dash.  Multiple register
25157     ranges can be specified separated by a comma.
25158
25159'-mbranch-cost=NUM'
25160     Assume NUM to be the cost for a branch instruction.  Higher numbers
25161     make the compiler try to generate more branch-free code if
25162     possible.  If not specified the value is selected depending on the
25163     processor type that is being compiled for.
25164
25165'-mzdcbranch'
25166'-mno-zdcbranch'
25167     Assume (do not assume) that zero displacement conditional branch
25168     instructions 'bt' and 'bf' are fast.  If '-mzdcbranch' is
25169     specified, the compiler prefers zero displacement branch code
25170     sequences.  This is enabled by default when generating code for SH4
25171     and SH4A. It can be explicitly disabled by specifying
25172     '-mno-zdcbranch'.
25173
25174'-mcbranch-force-delay-slot'
25175     Force the usage of delay slots for conditional branches, which
25176     stuffs the delay slot with a 'nop' if a suitable instruction cannot
25177     be found.  By default this option is disabled.  It can be enabled
25178     to work around hardware bugs as found in the original SH7055.
25179
25180'-mfused-madd'
25181'-mno-fused-madd'
25182     Generate code that uses (does not use) the floating-point multiply
25183     and accumulate instructions.  These instructions are generated by
25184     default if hardware floating point is used.  The machine-dependent
25185     '-mfused-madd' option is now mapped to the machine-independent
25186     '-ffp-contract=fast' option, and '-mno-fused-madd' is mapped to
25187     '-ffp-contract=off'.
25188
25189'-mfsca'
25190'-mno-fsca'
25191     Allow or disallow the compiler to emit the 'fsca' instruction for
25192     sine and cosine approximations.  The option '-mfsca' must be used
25193     in combination with '-funsafe-math-optimizations'.  It is enabled
25194     by default when generating code for SH4A. Using '-mno-fsca'
25195     disables sine and cosine approximations even if
25196     '-funsafe-math-optimizations' is in effect.
25197
25198'-mfsrra'
25199'-mno-fsrra'
25200     Allow or disallow the compiler to emit the 'fsrra' instruction for
25201     reciprocal square root approximations.  The option '-mfsrra' must
25202     be used in combination with '-funsafe-math-optimizations' and
25203     '-ffinite-math-only'.  It is enabled by default when generating
25204     code for SH4A. Using '-mno-fsrra' disables reciprocal square root
25205     approximations even if '-funsafe-math-optimizations' and
25206     '-ffinite-math-only' are in effect.
25207
25208'-mpretend-cmove'
25209     Prefer zero-displacement conditional branches for conditional move
25210     instruction patterns.  This can result in faster code on the SH4
25211     processor.
25212
25213'-mfdpic'
25214     Generate code using the FDPIC ABI.
25215
25216
25217File: gcc.info,  Node: Solaris 2 Options,  Next: SPARC Options,  Prev: SH Options,  Up: Submodel Options
25218
252193.19.49 Solaris 2 Options
25220-------------------------
25221
25222These '-m' options are supported on Solaris 2:
25223
25224'-mclear-hwcap'
25225     '-mclear-hwcap' tells the compiler to remove the hardware
25226     capabilities generated by the Solaris assembler.  This is only
25227     necessary when object files use ISA extensions not supported by the
25228     current machine, but check at runtime whether or not to use them.
25229
25230'-mimpure-text'
25231     '-mimpure-text', used in addition to '-shared', tells the compiler
25232     to not pass '-z text' to the linker when linking a shared object.
25233     Using this option, you can link position-dependent code into a
25234     shared object.
25235
25236     '-mimpure-text' suppresses the "relocations remain against
25237     allocatable but non-writable sections" linker error message.
25238     However, the necessary relocations trigger copy-on-write, and the
25239     shared object is not actually shared across processes.  Instead of
25240     using '-mimpure-text', you should compile all source code with
25241     '-fpic' or '-fPIC'.
25242
25243 These switches are supported in addition to the above on Solaris 2:
25244
25245'-pthreads'
25246     This is a synonym for '-pthread'.
25247
25248
25249File: gcc.info,  Node: SPARC Options,  Next: System V Options,  Prev: Solaris 2 Options,  Up: Submodel Options
25250
252513.19.50 SPARC Options
25252---------------------
25253
25254These '-m' options are supported on the SPARC:
25255
25256'-mno-app-regs'
25257'-mapp-regs'
25258     Specify '-mapp-regs' to generate output using the global registers
25259     2 through 4, which the SPARC SVR4 ABI reserves for applications.
25260     Like the global register 1, each global register 2 through 4 is
25261     then treated as an allocable register that is clobbered by function
25262     calls.  This is the default.
25263
25264     To be fully SVR4 ABI-compliant at the cost of some performance
25265     loss, specify '-mno-app-regs'.  You should compile libraries and
25266     system software with this option.
25267
25268'-mflat'
25269'-mno-flat'
25270     With '-mflat', the compiler does not generate save/restore
25271     instructions and uses a "flat" or single register window model.
25272     This model is compatible with the regular register window model.
25273     The local registers and the input registers (0-5) are still treated
25274     as "call-saved" registers and are saved on the stack as needed.
25275
25276     With '-mno-flat' (the default), the compiler generates save/restore
25277     instructions (except for leaf functions).  This is the normal
25278     operating mode.
25279
25280'-mfpu'
25281'-mhard-float'
25282     Generate output containing floating-point instructions.  This is
25283     the default.
25284
25285'-mno-fpu'
25286'-msoft-float'
25287     Generate output containing library calls for floating point.
25288     *Warning:* the requisite libraries are not available for all SPARC
25289     targets.  Normally the facilities of the machine's usual C compiler
25290     are used, but this cannot be done directly in cross-compilation.
25291     You must make your own arrangements to provide suitable library
25292     functions for cross-compilation.  The embedded targets
25293     'sparc-*-aout' and 'sparclite-*-*' do provide software
25294     floating-point support.
25295
25296     '-msoft-float' changes the calling convention in the output file;
25297     therefore, it is only useful if you compile _all_ of a program with
25298     this option.  In particular, you need to compile 'libgcc.a', the
25299     library that comes with GCC, with '-msoft-float' in order for this
25300     to work.
25301
25302'-mhard-quad-float'
25303     Generate output containing quad-word (long double) floating-point
25304     instructions.
25305
25306'-msoft-quad-float'
25307     Generate output containing library calls for quad-word (long
25308     double) floating-point instructions.  The functions called are
25309     those specified in the SPARC ABI.  This is the default.
25310
25311     As of this writing, there are no SPARC implementations that have
25312     hardware support for the quad-word floating-point instructions.
25313     They all invoke a trap handler for one of these instructions, and
25314     then the trap handler emulates the effect of the instruction.
25315     Because of the trap handler overhead, this is much slower than
25316     calling the ABI library routines.  Thus the '-msoft-quad-float'
25317     option is the default.
25318
25319'-mno-unaligned-doubles'
25320'-munaligned-doubles'
25321     Assume that doubles have 8-byte alignment.  This is the default.
25322
25323     With '-munaligned-doubles', GCC assumes that doubles have 8-byte
25324     alignment only if they are contained in another type, or if they
25325     have an absolute address.  Otherwise, it assumes they have 4-byte
25326     alignment.  Specifying this option avoids some rare compatibility
25327     problems with code generated by other compilers.  It is not the
25328     default because it results in a performance loss, especially for
25329     floating-point code.
25330
25331'-muser-mode'
25332'-mno-user-mode'
25333     Do not generate code that can only run in supervisor mode.  This is
25334     relevant only for the 'casa' instruction emitted for the LEON3
25335     processor.  This is the default.
25336
25337'-mfaster-structs'
25338'-mno-faster-structs'
25339     With '-mfaster-structs', the compiler assumes that structures
25340     should have 8-byte alignment.  This enables the use of pairs of
25341     'ldd' and 'std' instructions for copies in structure assignment, in
25342     place of twice as many 'ld' and 'st' pairs.  However, the use of
25343     this changed alignment directly violates the SPARC ABI.  Thus, it's
25344     intended only for use on targets where the developer acknowledges
25345     that their resulting code is not directly in line with the rules of
25346     the ABI.
25347
25348'-mstd-struct-return'
25349'-mno-std-struct-return'
25350     With '-mstd-struct-return', the compiler generates checking code in
25351     functions returning structures or unions to detect size mismatches
25352     between the two sides of function calls, as per the 32-bit ABI.
25353
25354     The default is '-mno-std-struct-return'.  This option has no effect
25355     in 64-bit mode.
25356
25357'-mlra'
25358'-mno-lra'
25359     Enable Local Register Allocation.  This is the default for SPARC
25360     since GCC 7 so '-mno-lra' needs to be passed to get old Reload.
25361
25362'-mcpu=CPU_TYPE'
25363     Set the instruction set, register set, and instruction scheduling
25364     parameters for machine type CPU_TYPE.  Supported values for
25365     CPU_TYPE are 'v7', 'cypress', 'v8', 'supersparc', 'hypersparc',
25366     'leon', 'leon3', 'leon3v7', 'sparclite', 'f930', 'f934',
25367     'sparclite86x', 'sparclet', 'tsc701', 'v9', 'ultrasparc',
25368     'ultrasparc3', 'niagara', 'niagara2', 'niagara3', 'niagara4',
25369     'niagara7' and 'm8'.
25370
25371     Native Solaris and GNU/Linux toolchains also support the value
25372     'native', which selects the best architecture option for the host
25373     processor.  '-mcpu=native' has no effect if GCC does not recognize
25374     the processor.
25375
25376     Default instruction scheduling parameters are used for values that
25377     select an architecture and not an implementation.  These are 'v7',
25378     'v8', 'sparclite', 'sparclet', 'v9'.
25379
25380     Here is a list of each supported architecture and their supported
25381     implementations.
25382
25383     v7
25384          cypress, leon3v7
25385
25386     v8
25387          supersparc, hypersparc, leon, leon3
25388
25389     sparclite
25390          f930, f934, sparclite86x
25391
25392     sparclet
25393          tsc701
25394
25395     v9
25396          ultrasparc, ultrasparc3, niagara, niagara2, niagara3,
25397          niagara4, niagara7, m8
25398
25399     By default (unless configured otherwise), GCC generates code for
25400     the V7 variant of the SPARC architecture.  With '-mcpu=cypress',
25401     the compiler additionally optimizes it for the Cypress CY7C602
25402     chip, as used in the SPARCStation/SPARCServer 3xx series.  This is
25403     also appropriate for the older SPARCStation 1, 2, IPX etc.
25404
25405     With '-mcpu=v8', GCC generates code for the V8 variant of the SPARC
25406     architecture.  The only difference from V7 code is that the
25407     compiler emits the integer multiply and integer divide instructions
25408     which exist in SPARC-V8 but not in SPARC-V7.  With
25409     '-mcpu=supersparc', the compiler additionally optimizes it for the
25410     SuperSPARC chip, as used in the SPARCStation 10, 1000 and 2000
25411     series.
25412
25413     With '-mcpu=sparclite', GCC generates code for the SPARClite
25414     variant of the SPARC architecture.  This adds the integer multiply,
25415     integer divide step and scan ('ffs') instructions which exist in
25416     SPARClite but not in SPARC-V7.  With '-mcpu=f930', the compiler
25417     additionally optimizes it for the Fujitsu MB86930 chip, which is
25418     the original SPARClite, with no FPU.  With '-mcpu=f934', the
25419     compiler additionally optimizes it for the Fujitsu MB86934 chip,
25420     which is the more recent SPARClite with FPU.
25421
25422     With '-mcpu=sparclet', GCC generates code for the SPARClet variant
25423     of the SPARC architecture.  This adds the integer multiply,
25424     multiply/accumulate, integer divide step and scan ('ffs')
25425     instructions which exist in SPARClet but not in SPARC-V7.  With
25426     '-mcpu=tsc701', the compiler additionally optimizes it for the
25427     TEMIC SPARClet chip.
25428
25429     With '-mcpu=v9', GCC generates code for the V9 variant of the SPARC
25430     architecture.  This adds 64-bit integer and floating-point move
25431     instructions, 3 additional floating-point condition code registers
25432     and conditional move instructions.  With '-mcpu=ultrasparc', the
25433     compiler additionally optimizes it for the Sun UltraSPARC I/II/IIi
25434     chips.  With '-mcpu=ultrasparc3', the compiler additionally
25435     optimizes it for the Sun UltraSPARC III/III+/IIIi/IIIi+/IV/IV+
25436     chips.  With '-mcpu=niagara', the compiler additionally optimizes
25437     it for Sun UltraSPARC T1 chips.  With '-mcpu=niagara2', the
25438     compiler additionally optimizes it for Sun UltraSPARC T2 chips.
25439     With '-mcpu=niagara3', the compiler additionally optimizes it for
25440     Sun UltraSPARC T3 chips.  With '-mcpu=niagara4', the compiler
25441     additionally optimizes it for Sun UltraSPARC T4 chips.  With
25442     '-mcpu=niagara7', the compiler additionally optimizes it for Oracle
25443     SPARC M7 chips.  With '-mcpu=m8', the compiler additionally
25444     optimizes it for Oracle M8 chips.
25445
25446'-mtune=CPU_TYPE'
25447     Set the instruction scheduling parameters for machine type
25448     CPU_TYPE, but do not set the instruction set or register set that
25449     the option '-mcpu=CPU_TYPE' does.
25450
25451     The same values for '-mcpu=CPU_TYPE' can be used for
25452     '-mtune=CPU_TYPE', but the only useful values are those that select
25453     a particular CPU implementation.  Those are 'cypress',
25454     'supersparc', 'hypersparc', 'leon', 'leon3', 'leon3v7', 'f930',
25455     'f934', 'sparclite86x', 'tsc701', 'ultrasparc', 'ultrasparc3',
25456     'niagara', 'niagara2', 'niagara3', 'niagara4', 'niagara7' and 'm8'.
25457     With native Solaris and GNU/Linux toolchains, 'native' can also be
25458     used.
25459
25460'-mv8plus'
25461'-mno-v8plus'
25462     With '-mv8plus', GCC generates code for the SPARC-V8+ ABI.  The
25463     difference from the V8 ABI is that the global and out registers are
25464     considered 64 bits wide.  This is enabled by default on Solaris in
25465     32-bit mode for all SPARC-V9 processors.
25466
25467'-mvis'
25468'-mno-vis'
25469     With '-mvis', GCC generates code that takes advantage of the
25470     UltraSPARC Visual Instruction Set extensions.  The default is
25471     '-mno-vis'.
25472
25473'-mvis2'
25474'-mno-vis2'
25475     With '-mvis2', GCC generates code that takes advantage of version
25476     2.0 of the UltraSPARC Visual Instruction Set extensions.  The
25477     default is '-mvis2' when targeting a cpu that supports such
25478     instructions, such as UltraSPARC-III and later.  Setting '-mvis2'
25479     also sets '-mvis'.
25480
25481'-mvis3'
25482'-mno-vis3'
25483     With '-mvis3', GCC generates code that takes advantage of version
25484     3.0 of the UltraSPARC Visual Instruction Set extensions.  The
25485     default is '-mvis3' when targeting a cpu that supports such
25486     instructions, such as niagara-3 and later.  Setting '-mvis3' also
25487     sets '-mvis2' and '-mvis'.
25488
25489'-mvis4'
25490'-mno-vis4'
25491     With '-mvis4', GCC generates code that takes advantage of version
25492     4.0 of the UltraSPARC Visual Instruction Set extensions.  The
25493     default is '-mvis4' when targeting a cpu that supports such
25494     instructions, such as niagara-7 and later.  Setting '-mvis4' also
25495     sets '-mvis3', '-mvis2' and '-mvis'.
25496
25497'-mvis4b'
25498'-mno-vis4b'
25499     With '-mvis4b', GCC generates code that takes advantage of version
25500     4.0 of the UltraSPARC Visual Instruction Set extensions, plus the
25501     additional VIS instructions introduced in the Oracle SPARC
25502     Architecture 2017.  The default is '-mvis4b' when targeting a cpu
25503     that supports such instructions, such as m8 and later.  Setting
25504     '-mvis4b' also sets '-mvis4', '-mvis3', '-mvis2' and '-mvis'.
25505
25506'-mcbcond'
25507'-mno-cbcond'
25508     With '-mcbcond', GCC generates code that takes advantage of the
25509     UltraSPARC Compare-and-Branch-on-Condition instructions.  The
25510     default is '-mcbcond' when targeting a CPU that supports such
25511     instructions, such as Niagara-4 and later.
25512
25513'-mfmaf'
25514'-mno-fmaf'
25515     With '-mfmaf', GCC generates code that takes advantage of the
25516     UltraSPARC Fused Multiply-Add Floating-point instructions.  The
25517     default is '-mfmaf' when targeting a CPU that supports such
25518     instructions, such as Niagara-3 and later.
25519
25520'-mfsmuld'
25521'-mno-fsmuld'
25522     With '-mfsmuld', GCC generates code that takes advantage of the
25523     Floating-point Multiply Single to Double (FsMULd) instruction.  The
25524     default is '-mfsmuld' when targeting a CPU supporting the
25525     architecture versions V8 or V9 with FPU except '-mcpu=leon'.
25526
25527'-mpopc'
25528'-mno-popc'
25529     With '-mpopc', GCC generates code that takes advantage of the
25530     UltraSPARC Population Count instruction.  The default is '-mpopc'
25531     when targeting a CPU that supports such an instruction, such as
25532     Niagara-2 and later.
25533
25534'-msubxc'
25535'-mno-subxc'
25536     With '-msubxc', GCC generates code that takes advantage of the
25537     UltraSPARC Subtract-Extended-with-Carry instruction.  The default
25538     is '-msubxc' when targeting a CPU that supports such an
25539     instruction, such as Niagara-7 and later.
25540
25541'-mfix-at697f'
25542     Enable the documented workaround for the single erratum of the
25543     Atmel AT697F processor (which corresponds to erratum #13 of the
25544     AT697E processor).
25545
25546'-mfix-ut699'
25547     Enable the documented workarounds for the floating-point errata and
25548     the data cache nullify errata of the UT699 processor.
25549
25550'-mfix-ut700'
25551     Enable the documented workaround for the back-to-back store errata
25552     of the UT699E/UT700 processor.
25553
25554'-mfix-gr712rc'
25555     Enable the documented workaround for the back-to-back store errata
25556     of the GR712RC processor.
25557
25558 These '-m' options are supported in addition to the above on SPARC-V9
25559processors in 64-bit environments:
25560
25561'-m32'
25562'-m64'
25563     Generate code for a 32-bit or 64-bit environment.  The 32-bit
25564     environment sets int, long and pointer to 32 bits.  The 64-bit
25565     environment sets int to 32 bits and long and pointer to 64 bits.
25566
25567'-mcmodel=WHICH'
25568     Set the code model to one of
25569
25570     'medlow'
25571          The Medium/Low code model: 64-bit addresses, programs must be
25572          linked in the low 32 bits of memory.  Programs can be
25573          statically or dynamically linked.
25574
25575     'medmid'
25576          The Medium/Middle code model: 64-bit addresses, programs must
25577          be linked in the low 44 bits of memory, the text and data
25578          segments must be less than 2GB in size and the data segment
25579          must be located within 2GB of the text segment.
25580
25581     'medany'
25582          The Medium/Anywhere code model: 64-bit addresses, programs may
25583          be linked anywhere in memory, the text and data segments must
25584          be less than 2GB in size and the data segment must be located
25585          within 2GB of the text segment.
25586
25587     'embmedany'
25588          The Medium/Anywhere code model for embedded systems: 64-bit
25589          addresses, the text and data segments must be less than 2GB in
25590          size, both starting anywhere in memory (determined at link
25591          time).  The global register %g4 points to the base of the data
25592          segment.  Programs are statically linked and PIC is not
25593          supported.
25594
25595'-mmemory-model=MEM-MODEL'
25596     Set the memory model in force on the processor to one of
25597
25598     'default'
25599          The default memory model for the processor and operating
25600          system.
25601
25602     'rmo'
25603          Relaxed Memory Order
25604
25605     'pso'
25606          Partial Store Order
25607
25608     'tso'
25609          Total Store Order
25610
25611     'sc'
25612          Sequential Consistency
25613
25614     These memory models are formally defined in Appendix D of the
25615     SPARC-V9 architecture manual, as set in the processor's 'PSTATE.MM'
25616     field.
25617
25618'-mstack-bias'
25619'-mno-stack-bias'
25620     With '-mstack-bias', GCC assumes that the stack pointer, and frame
25621     pointer if present, are offset by -2047 which must be added back
25622     when making stack frame references.  This is the default in 64-bit
25623     mode.  Otherwise, assume no such offset is present.
25624
25625
25626File: gcc.info,  Node: System V Options,  Next: TILE-Gx Options,  Prev: SPARC Options,  Up: Submodel Options
25627
256283.19.51 Options for System V
25629----------------------------
25630
25631These additional options are available on System V Release 4 for
25632compatibility with other compilers on those systems:
25633
25634'-G'
25635     Create a shared object.  It is recommended that '-symbolic' or
25636     '-shared' be used instead.
25637
25638'-Qy'
25639     Identify the versions of each tool used by the compiler, in a
25640     '.ident' assembler directive in the output.
25641
25642'-Qn'
25643     Refrain from adding '.ident' directives to the output file (this is
25644     the default).
25645
25646'-YP,DIRS'
25647     Search the directories DIRS, and no others, for libraries specified
25648     with '-l'.
25649
25650'-Ym,DIR'
25651     Look in the directory DIR to find the M4 preprocessor.  The
25652     assembler uses this option.
25653
25654
25655File: gcc.info,  Node: TILE-Gx Options,  Next: TILEPro Options,  Prev: System V Options,  Up: Submodel Options
25656
256573.19.52 TILE-Gx Options
25658-----------------------
25659
25660These '-m' options are supported on the TILE-Gx:
25661
25662'-mcmodel=small'
25663     Generate code for the small model.  The distance for direct calls
25664     is limited to 500M in either direction.  PC-relative addresses are
25665     32 bits.  Absolute addresses support the full address range.
25666
25667'-mcmodel=large'
25668     Generate code for the large model.  There is no limitation on call
25669     distance, pc-relative addresses, or absolute addresses.
25670
25671'-mcpu=NAME'
25672     Selects the type of CPU to be targeted.  Currently the only
25673     supported type is 'tilegx'.
25674
25675'-m32'
25676'-m64'
25677     Generate code for a 32-bit or 64-bit environment.  The 32-bit
25678     environment sets int, long, and pointer to 32 bits.  The 64-bit
25679     environment sets int to 32 bits and long and pointer to 64 bits.
25680
25681'-mbig-endian'
25682'-mlittle-endian'
25683     Generate code in big/little endian mode, respectively.
25684
25685
25686File: gcc.info,  Node: TILEPro Options,  Next: V850 Options,  Prev: TILE-Gx Options,  Up: Submodel Options
25687
256883.19.53 TILEPro Options
25689-----------------------
25690
25691These '-m' options are supported on the TILEPro:
25692
25693'-mcpu=NAME'
25694     Selects the type of CPU to be targeted.  Currently the only
25695     supported type is 'tilepro'.
25696
25697'-m32'
25698     Generate code for a 32-bit environment, which sets int, long, and
25699     pointer to 32 bits.  This is the only supported behavior so the
25700     flag is essentially ignored.
25701
25702
25703File: gcc.info,  Node: V850 Options,  Next: VAX Options,  Prev: TILEPro Options,  Up: Submodel Options
25704
257053.19.54 V850 Options
25706--------------------
25707
25708These '-m' options are defined for V850 implementations:
25709
25710'-mlong-calls'
25711'-mno-long-calls'
25712     Treat all calls as being far away (near).  If calls are assumed to
25713     be far away, the compiler always loads the function's address into
25714     a register, and calls indirect through the pointer.
25715
25716'-mno-ep'
25717'-mep'
25718     Do not optimize (do optimize) basic blocks that use the same index
25719     pointer 4 or more times to copy pointer into the 'ep' register, and
25720     use the shorter 'sld' and 'sst' instructions.  The '-mep' option is
25721     on by default if you optimize.
25722
25723'-mno-prolog-function'
25724'-mprolog-function'
25725     Do not use (do use) external functions to save and restore
25726     registers at the prologue and epilogue of a function.  The external
25727     functions are slower, but use less code space if more than one
25728     function saves the same number of registers.  The
25729     '-mprolog-function' option is on by default if you optimize.
25730
25731'-mspace'
25732     Try to make the code as small as possible.  At present, this just
25733     turns on the '-mep' and '-mprolog-function' options.
25734
25735'-mtda=N'
25736     Put static or global variables whose size is N bytes or less into
25737     the tiny data area that register 'ep' points to.  The tiny data
25738     area can hold up to 256 bytes in total (128 bytes for byte
25739     references).
25740
25741'-msda=N'
25742     Put static or global variables whose size is N bytes or less into
25743     the small data area that register 'gp' points to.  The small data
25744     area can hold up to 64 kilobytes.
25745
25746'-mzda=N'
25747     Put static or global variables whose size is N bytes or less into
25748     the first 32 kilobytes of memory.
25749
25750'-mv850'
25751     Specify that the target processor is the V850.
25752
25753'-mv850e3v5'
25754     Specify that the target processor is the V850E3V5.  The
25755     preprocessor constant '__v850e3v5__' is defined if this option is
25756     used.
25757
25758'-mv850e2v4'
25759     Specify that the target processor is the V850E3V5.  This is an
25760     alias for the '-mv850e3v5' option.
25761
25762'-mv850e2v3'
25763     Specify that the target processor is the V850E2V3.  The
25764     preprocessor constant '__v850e2v3__' is defined if this option is
25765     used.
25766
25767'-mv850e2'
25768     Specify that the target processor is the V850E2.  The preprocessor
25769     constant '__v850e2__' is defined if this option is used.
25770
25771'-mv850e1'
25772     Specify that the target processor is the V850E1.  The preprocessor
25773     constants '__v850e1__' and '__v850e__' are defined if this option
25774     is used.
25775
25776'-mv850es'
25777     Specify that the target processor is the V850ES. This is an alias
25778     for the '-mv850e1' option.
25779
25780'-mv850e'
25781     Specify that the target processor is the V850E.  The preprocessor
25782     constant '__v850e__' is defined if this option is used.
25783
25784     If neither '-mv850' nor '-mv850e' nor '-mv850e1' nor '-mv850e2' nor
25785     '-mv850e2v3' nor '-mv850e3v5' are defined then a default target
25786     processor is chosen and the relevant '__v850*__' preprocessor
25787     constant is defined.
25788
25789     The preprocessor constants '__v850' and '__v851__' are always
25790     defined, regardless of which processor variant is the target.
25791
25792'-mdisable-callt'
25793'-mno-disable-callt'
25794     This option suppresses generation of the 'CALLT' instruction for
25795     the v850e, v850e1, v850e2, v850e2v3 and v850e3v5 flavors of the
25796     v850 architecture.
25797
25798     This option is enabled by default when the RH850 ABI is in use (see
25799     '-mrh850-abi'), and disabled by default when the GCC ABI is in use.
25800     If 'CALLT' instructions are being generated then the C preprocessor
25801     symbol '__V850_CALLT__' is defined.
25802
25803'-mrelax'
25804'-mno-relax'
25805     Pass on (or do not pass on) the '-mrelax' command-line option to
25806     the assembler.
25807
25808'-mlong-jumps'
25809'-mno-long-jumps'
25810     Disable (or re-enable) the generation of PC-relative jump
25811     instructions.
25812
25813'-msoft-float'
25814'-mhard-float'
25815     Disable (or re-enable) the generation of hardware floating point
25816     instructions.  This option is only significant when the target
25817     architecture is 'V850E2V3' or higher.  If hardware floating point
25818     instructions are being generated then the C preprocessor symbol
25819     '__FPU_OK__' is defined, otherwise the symbol '__NO_FPU__' is
25820     defined.
25821
25822'-mloop'
25823     Enables the use of the e3v5 LOOP instruction.  The use of this
25824     instruction is not enabled by default when the e3v5 architecture is
25825     selected because its use is still experimental.
25826
25827'-mrh850-abi'
25828'-mghs'
25829     Enables support for the RH850 version of the V850 ABI. This is the
25830     default.  With this version of the ABI the following rules apply:
25831
25832        * Integer sized structures and unions are returned via a memory
25833          pointer rather than a register.
25834
25835        * Large structures and unions (more than 8 bytes in size) are
25836          passed by value.
25837
25838        * Functions are aligned to 16-bit boundaries.
25839
25840        * The '-m8byte-align' command-line option is supported.
25841
25842        * The '-mdisable-callt' command-line option is enabled by
25843          default.  The '-mno-disable-callt' command-line option is not
25844          supported.
25845
25846     When this version of the ABI is enabled the C preprocessor symbol
25847     '__V850_RH850_ABI__' is defined.
25848
25849'-mgcc-abi'
25850     Enables support for the old GCC version of the V850 ABI. With this
25851     version of the ABI the following rules apply:
25852
25853        * Integer sized structures and unions are returned in register
25854          'r10'.
25855
25856        * Large structures and unions (more than 8 bytes in size) are
25857          passed by reference.
25858
25859        * Functions are aligned to 32-bit boundaries, unless optimizing
25860          for size.
25861
25862        * The '-m8byte-align' command-line option is not supported.
25863
25864        * The '-mdisable-callt' command-line option is supported but not
25865          enabled by default.
25866
25867     When this version of the ABI is enabled the C preprocessor symbol
25868     '__V850_GCC_ABI__' is defined.
25869
25870'-m8byte-align'
25871'-mno-8byte-align'
25872     Enables support for 'double' and 'long long' types to be aligned on
25873     8-byte boundaries.  The default is to restrict the alignment of all
25874     objects to at most 4-bytes.  When '-m8byte-align' is in effect the
25875     C preprocessor symbol '__V850_8BYTE_ALIGN__' is defined.
25876
25877'-mbig-switch'
25878     Generate code suitable for big switch tables.  Use this option only
25879     if the assembler/linker complain about out of range branches within
25880     a switch table.
25881
25882'-mapp-regs'
25883     This option causes r2 and r5 to be used in the code generated by
25884     the compiler.  This setting is the default.
25885
25886'-mno-app-regs'
25887     This option causes r2 and r5 to be treated as fixed registers.
25888
25889
25890File: gcc.info,  Node: VAX Options,  Next: Visium Options,  Prev: V850 Options,  Up: Submodel Options
25891
258923.19.55 VAX Options
25893-------------------
25894
25895These '-m' options are defined for the VAX:
25896
25897'-munix'
25898     Do not output certain jump instructions ('aobleq' and so on) that
25899     the Unix assembler for the VAX cannot handle across long ranges.
25900
25901'-mgnu'
25902     Do output those jump instructions, on the assumption that the GNU
25903     assembler is being used.
25904
25905'-mg'
25906     Output code for G-format floating-point numbers instead of
25907     D-format.
25908
25909
25910File: gcc.info,  Node: Visium Options,  Next: VMS Options,  Prev: VAX Options,  Up: Submodel Options
25911
259123.19.56 Visium Options
25913----------------------
25914
25915'-mdebug'
25916     A program which performs file I/O and is destined to run on an MCM
25917     target should be linked with this option.  It causes the libraries
25918     libc.a and libdebug.a to be linked.  The program should be run on
25919     the target under the control of the GDB remote debugging stub.
25920
25921'-msim'
25922     A program which performs file I/O and is destined to run on the
25923     simulator should be linked with option.  This causes libraries
25924     libc.a and libsim.a to be linked.
25925
25926'-mfpu'
25927'-mhard-float'
25928     Generate code containing floating-point instructions.  This is the
25929     default.
25930
25931'-mno-fpu'
25932'-msoft-float'
25933     Generate code containing library calls for floating-point.
25934
25935     '-msoft-float' changes the calling convention in the output file;
25936     therefore, it is only useful if you compile _all_ of a program with
25937     this option.  In particular, you need to compile 'libgcc.a', the
25938     library that comes with GCC, with '-msoft-float' in order for this
25939     to work.
25940
25941'-mcpu=CPU_TYPE'
25942     Set the instruction set, register set, and instruction scheduling
25943     parameters for machine type CPU_TYPE.  Supported values for
25944     CPU_TYPE are 'mcm', 'gr5' and 'gr6'.
25945
25946     'mcm' is a synonym of 'gr5' present for backward compatibility.
25947
25948     By default (unless configured otherwise), GCC generates code for
25949     the GR5 variant of the Visium architecture.
25950
25951     With '-mcpu=gr6', GCC generates code for the GR6 variant of the
25952     Visium architecture.  The only difference from GR5 code is that the
25953     compiler will generate block move instructions.
25954
25955'-mtune=CPU_TYPE'
25956     Set the instruction scheduling parameters for machine type
25957     CPU_TYPE, but do not set the instruction set or register set that
25958     the option '-mcpu=CPU_TYPE' would.
25959
25960'-msv-mode'
25961     Generate code for the supervisor mode, where there are no
25962     restrictions on the access to general registers.  This is the
25963     default.
25964
25965'-muser-mode'
25966     Generate code for the user mode, where the access to some general
25967     registers is forbidden: on the GR5, registers r24 to r31 cannot be
25968     accessed in this mode; on the GR6, only registers r29 to r31 are
25969     affected.
25970
25971
25972File: gcc.info,  Node: VMS Options,  Next: VxWorks Options,  Prev: Visium Options,  Up: Submodel Options
25973
259743.19.57 VMS Options
25975-------------------
25976
25977These '-m' options are defined for the VMS implementations:
25978
25979'-mvms-return-codes'
25980     Return VMS condition codes from 'main'.  The default is to return
25981     POSIX-style condition (e.g. error) codes.
25982
25983'-mdebug-main=PREFIX'
25984     Flag the first routine whose name starts with PREFIX as the main
25985     routine for the debugger.
25986
25987'-mmalloc64'
25988     Default to 64-bit memory allocation routines.
25989
25990'-mpointer-size=SIZE'
25991     Set the default size of pointers.  Possible options for SIZE are
25992     '32' or 'short' for 32 bit pointers, '64' or 'long' for 64 bit
25993     pointers, and 'no' for supporting only 32 bit pointers.  The later
25994     option disables 'pragma pointer_size'.
25995
25996
25997File: gcc.info,  Node: VxWorks Options,  Next: x86 Options,  Prev: VMS Options,  Up: Submodel Options
25998
259993.19.58 VxWorks Options
26000-----------------------
26001
26002The options in this section are defined for all VxWorks targets.
26003Options specific to the target hardware are listed with the other
26004options for that target.
26005
26006'-mrtp'
26007     GCC can generate code for both VxWorks kernels and real time
26008     processes (RTPs).  This option switches from the former to the
26009     latter.  It also defines the preprocessor macro '__RTP__'.
26010
26011'-non-static'
26012     Link an RTP executable against shared libraries rather than static
26013     libraries.  The options '-static' and '-shared' can also be used
26014     for RTPs (*note Link Options::); '-static' is the default.
26015
26016'-Bstatic'
26017'-Bdynamic'
26018     These options are passed down to the linker.  They are defined for
26019     compatibility with Diab.
26020
26021'-Xbind-lazy'
26022     Enable lazy binding of function calls.  This option is equivalent
26023     to '-Wl,-z,now' and is defined for compatibility with Diab.
26024
26025'-Xbind-now'
26026     Disable lazy binding of function calls.  This option is the default
26027     and is defined for compatibility with Diab.
26028
26029
26030File: gcc.info,  Node: x86 Options,  Next: x86 Windows Options,  Prev: VxWorks Options,  Up: Submodel Options
26031
260323.19.59 x86 Options
26033-------------------
26034
26035These '-m' options are defined for the x86 family of computers.
26036
26037'-march=CPU-TYPE'
26038     Generate instructions for the machine type CPU-TYPE.  In contrast
26039     to '-mtune=CPU-TYPE', which merely tunes the generated code for the
26040     specified CPU-TYPE, '-march=CPU-TYPE' allows GCC to generate code
26041     that may not run at all on processors other than the one indicated.
26042     Specifying '-march=CPU-TYPE' implies '-mtune=CPU-TYPE'.
26043
26044     The choices for CPU-TYPE are:
26045
26046     'native'
26047          This selects the CPU to generate code for at compilation time
26048          by determining the processor type of the compiling machine.
26049          Using '-march=native' enables all instruction subsets
26050          supported by the local machine (hence the result might not run
26051          on different machines).  Using '-mtune=native' produces code
26052          optimized for the local machine under the constraints of the
26053          selected instruction set.
26054
26055     'x86-64'
26056          A generic CPU with 64-bit extensions.
26057
26058     'i386'
26059          Original Intel i386 CPU.
26060
26061     'i486'
26062          Intel i486 CPU.  (No scheduling is implemented for this chip.)
26063
26064     'i586'
26065     'pentium'
26066          Intel Pentium CPU with no MMX support.
26067
26068     'lakemont'
26069          Intel Lakemont MCU, based on Intel Pentium CPU.
26070
26071     'pentium-mmx'
26072          Intel Pentium MMX CPU, based on Pentium core with MMX
26073          instruction set support.
26074
26075     'pentiumpro'
26076          Intel Pentium Pro CPU.
26077
26078     'i686'
26079          When used with '-march', the Pentium Pro instruction set is
26080          used, so the code runs on all i686 family chips.  When used
26081          with '-mtune', it has the same meaning as 'generic'.
26082
26083     'pentium2'
26084          Intel Pentium II CPU, based on Pentium Pro core with MMX
26085          instruction set support.
26086
26087     'pentium3'
26088     'pentium3m'
26089          Intel Pentium III CPU, based on Pentium Pro core with MMX and
26090          SSE instruction set support.
26091
26092     'pentium-m'
26093          Intel Pentium M; low-power version of Intel Pentium III CPU
26094          with MMX, SSE and SSE2 instruction set support.  Used by
26095          Centrino notebooks.
26096
26097     'pentium4'
26098     'pentium4m'
26099          Intel Pentium 4 CPU with MMX, SSE and SSE2 instruction set
26100          support.
26101
26102     'prescott'
26103          Improved version of Intel Pentium 4 CPU with MMX, SSE, SSE2
26104          and SSE3 instruction set support.
26105
26106     'nocona'
26107          Improved version of Intel Pentium 4 CPU with 64-bit
26108          extensions, MMX, SSE, SSE2 and SSE3 instruction set support.
26109
26110     'core2'
26111          Intel Core 2 CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3
26112          and SSSE3 instruction set support.
26113
26114     'nehalem'
26115          Intel Nehalem CPU with 64-bit extensions, MMX, SSE, SSE2,
26116          SSE3, SSSE3, SSE4.1, SSE4.2 and POPCNT instruction set
26117          support.
26118
26119     'westmere'
26120          Intel Westmere CPU with 64-bit extensions, MMX, SSE, SSE2,
26121          SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AES and PCLMUL
26122          instruction set support.
26123
26124     'sandybridge'
26125          Intel Sandy Bridge CPU with 64-bit extensions, MMX, SSE, SSE2,
26126          SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AES and PCLMUL
26127          instruction set support.
26128
26129     'ivybridge'
26130          Intel Ivy Bridge CPU with 64-bit extensions, MMX, SSE, SSE2,
26131          SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AES, PCLMUL,
26132          FSGSBASE, RDRND and F16C instruction set support.
26133
26134     'haswell'
26135          Intel Haswell CPU with 64-bit extensions, MOVBE, MMX, SSE,
26136          SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES,
26137          PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2 and F16C instruction
26138          set support.
26139
26140     'broadwell'
26141          Intel Broadwell CPU with 64-bit extensions, MOVBE, MMX, SSE,
26142          SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES,
26143          PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, F16C, RDSEED, ADCX
26144          and PREFETCHW instruction set support.
26145
26146     'skylake'
26147          Intel Skylake CPU with 64-bit extensions, MOVBE, MMX, SSE,
26148          SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES,
26149          PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, F16C, RDSEED, ADCX,
26150          PREFETCHW, CLFLUSHOPT, XSAVEC and XSAVES instruction set
26151          support.
26152
26153     'bonnell'
26154          Intel Bonnell CPU with 64-bit extensions, MOVBE, MMX, SSE,
26155          SSE2, SSE3 and SSSE3 instruction set support.
26156
26157     'silvermont'
26158          Intel Silvermont CPU with 64-bit extensions, MOVBE, MMX, SSE,
26159          SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AES, PCLMUL and
26160          RDRND instruction set support.
26161
26162     'goldmont'
26163          Intel Goldmont CPU with 64-bit extensions, MOVBE, MMX, SSE,
26164          SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AES, PCLMUL, RDRND,
26165          XSAVE, XSAVEOPT and FSGSBASE instruction set support.
26166
26167     'goldmont-plus'
26168          Intel Goldmont Plus CPU with 64-bit extensions, MOVBE, MMX,
26169          SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AES, PCLMUL,
26170          RDRND, XSAVE, XSAVEOPT, FSGSBASE, PTWRITE, RDPID, SGX and UMIP
26171          instruction set support.
26172
26173     'tremont'
26174          Intel Tremont CPU with 64-bit extensions, MOVBE, MMX, SSE,
26175          SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AES, PCLMUL, RDRND,
26176          XSAVE, XSAVEOPT, FSGSBASE, PTWRITE, RDPID, SGX, UMIP,
26177          GFNI-SSE, CLWB and ENCLV instruction set support.
26178
26179     'knl'
26180          Intel Knight's Landing CPU with 64-bit extensions, MOVBE, MMX,
26181          SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AVX2,
26182          AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, F16C, RDSEED,
26183          ADCX, PREFETCHW, AVX512F, AVX512PF, AVX512ER and AVX512CD
26184          instruction set support.
26185
26186     'knm'
26187          Intel Knights Mill CPU with 64-bit extensions, MOVBE, MMX,
26188          SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AVX2,
26189          AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, F16C, RDSEED,
26190          ADCX, PREFETCHW, AVX512F, AVX512PF, AVX512ER, AVX512CD,
26191          AVX5124VNNIW, AVX5124FMAPS and AVX512VPOPCNTDQ instruction set
26192          support.
26193
26194     'skylake-avx512'
26195          Intel Skylake Server CPU with 64-bit extensions, MOVBE, MMX,
26196          SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, PKU, AVX,
26197          AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, F16C,
26198          RDSEED, ADCX, PREFETCHW, CLFLUSHOPT, XSAVEC, XSAVES, AVX512F,
26199          CLWB, AVX512VL, AVX512BW, AVX512DQ and AVX512CD instruction
26200          set support.
26201
26202     'cannonlake'
26203          Intel Cannonlake Server CPU with 64-bit extensions, MOVBE,
26204          MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, PKU, AVX,
26205          AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, F16C,
26206          RDSEED, ADCX, PREFETCHW, CLFLUSHOPT, XSAVEC, XSAVES, AVX512F,
26207          AVX512VL, AVX512BW, AVX512DQ, AVX512CD, AVX512VBMI,
26208          AVX512IFMA, SHA and UMIP instruction set support.
26209
26210     'icelake-client'
26211          Intel Icelake Client CPU with 64-bit extensions, MOVBE, MMX,
26212          SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, PKU, AVX,
26213          AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, F16C,
26214          RDSEED, ADCX, PREFETCHW, CLFLUSHOPT, XSAVEC, XSAVES, AVX512F,
26215          AVX512VL, AVX512BW, AVX512DQ, AVX512CD, AVX512VBMI,
26216          AVX512IFMA, SHA, CLWB, UMIP, RDPID, GFNI, AVX512VBMI2,
26217          AVX512VPOPCNTDQ, AVX512BITALG, AVX512VNNI, VPCLMULQDQ, VAES
26218          instruction set support.
26219
26220     'icelake-server'
26221          Intel Icelake Server CPU with 64-bit extensions, MOVBE, MMX,
26222          SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, PKU, AVX,
26223          AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, F16C,
26224          RDSEED, ADCX, PREFETCHW, CLFLUSHOPT, XSAVEC, XSAVES, AVX512F,
26225          AVX512VL, AVX512BW, AVX512DQ, AVX512CD, AVX512VBMI,
26226          AVX512IFMA, SHA, CLWB, UMIP, RDPID, GFNI, AVX512VBMI2,
26227          AVX512VPOPCNTDQ, AVX512BITALG, AVX512VNNI, VPCLMULQDQ, VAES,
26228          PCONFIG and WBNOINVD instruction set support.
26229
26230     'cascadelake'
26231          Intel Cascadelake CPU with 64-bit extensions, MOVBE, MMX, SSE,
26232          SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, PKU, AVX, AVX2,
26233          AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, F16C, RDSEED,
26234          ADCX, PREFETCHW, CLFLUSHOPT, XSAVEC, XSAVES, AVX512F, CLWB,
26235          AVX512VL, AVX512BW, AVX512DQ, AVX512CD and AVX512VNNI
26236          instruction set support.
26237
26238     'cooperlake'
26239          Intel cooperlake CPU with 64-bit extensions, MOVBE, MMX, SSE,
26240          SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, PKU, AVX, AVX2,
26241          AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, F16C, RDSEED,
26242          ADCX, PREFETCHW, CLFLUSHOPT, XSAVEC, XSAVES, AVX512F, CLWB,
26243          AVX512VL, AVX512BW, AVX512DQ, AVX512CD, AVX512VNNI and
26244          AVX512BF16 instruction set support.
26245
26246     'tigerlake'
26247          Intel Tigerlake CPU with 64-bit extensions, MOVBE, MMX, SSE,
26248          SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, PKU, AVX, AVX2,
26249          AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, F16C, RDSEED,
26250          ADCX, PREFETCHW, CLFLUSHOPT, XSAVEC, XSAVES, AVX512F,
26251          AVX512VL, AVX512BW, AVX512DQ, AVX512CD, AVX512VBMI,
26252          AVX512IFMA, SHA, CLWB, UMIP, RDPID, GFNI, AVX512VBMI2,
26253          AVX512VPOPCNTDQ, AVX512BITALG, AVX512VNNI, VPCLMULQDQ, VAES,
26254          PCONFIG, WBNOINVD, MOVDIRI, MOVDIR64B and AVX512VP2INTERSECT
26255          instruction set support.
26256
26257     'k6'
26258          AMD K6 CPU with MMX instruction set support.
26259
26260     'k6-2'
26261     'k6-3'
26262          Improved versions of AMD K6 CPU with MMX and 3DNow!
26263          instruction set support.
26264
26265     'athlon'
26266     'athlon-tbird'
26267          AMD Athlon CPU with MMX, 3dNOW!, enhanced 3DNow! and SSE
26268          prefetch instructions support.
26269
26270     'athlon-4'
26271     'athlon-xp'
26272     'athlon-mp'
26273          Improved AMD Athlon CPU with MMX, 3DNow!, enhanced 3DNow! and
26274          full SSE instruction set support.
26275
26276     'k8'
26277     'opteron'
26278     'athlon64'
26279     'athlon-fx'
26280          Processors based on the AMD K8 core with x86-64 instruction
26281          set support, including the AMD Opteron, Athlon 64, and Athlon
26282          64 FX processors.  (This supersets MMX, SSE, SSE2, 3DNow!,
26283          enhanced 3DNow! and 64-bit instruction set extensions.)
26284
26285     'k8-sse3'
26286     'opteron-sse3'
26287     'athlon64-sse3'
26288          Improved versions of AMD K8 cores with SSE3 instruction set
26289          support.
26290
26291     'amdfam10'
26292     'barcelona'
26293          CPUs based on AMD Family 10h cores with x86-64 instruction set
26294          support.  (This supersets MMX, SSE, SSE2, SSE3, SSE4A, 3DNow!,
26295          enhanced 3DNow!, ABM and 64-bit instruction set extensions.)
26296
26297     'bdver1'
26298          CPUs based on AMD Family 15h cores with x86-64 instruction set
26299          support.  (This supersets FMA4, AVX, XOP, LWP, AES, PCLMUL,
26300          CX16, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM
26301          and 64-bit instruction set extensions.)
26302
26303     'bdver2'
26304          AMD Family 15h core based CPUs with x86-64 instruction set
26305          support.  (This supersets BMI, TBM, F16C, FMA, FMA4, AVX, XOP,
26306          LWP, AES, PCLMUL, CX16, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3,
26307          SSE4.1, SSE4.2, ABM and 64-bit instruction set extensions.)
26308
26309     'bdver3'
26310          AMD Family 15h core based CPUs with x86-64 instruction set
26311          support.  (This supersets BMI, TBM, F16C, FMA, FMA4, FSGSBASE,
26312          AVX, XOP, LWP, AES, PCLMUL, CX16, MMX, SSE, SSE2, SSE3, SSE4A,
26313          SSSE3, SSE4.1, SSE4.2, ABM and 64-bit instruction set
26314          extensions.)
26315
26316     'bdver4'
26317          AMD Family 15h core based CPUs with x86-64 instruction set
26318          support.  (This supersets BMI, BMI2, TBM, F16C, FMA, FMA4,
26319          FSGSBASE, AVX, AVX2, XOP, LWP, AES, PCLMUL, CX16, MOVBE, MMX,
26320          SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM and 64-bit
26321          instruction set extensions.)
26322
26323     'znver1'
26324          AMD Family 17h core based CPUs with x86-64 instruction set
26325          support.  (This supersets BMI, BMI2, F16C, FMA, FSGSBASE, AVX,
26326          AVX2, ADCX, RDSEED, MWAITX, SHA, CLZERO, AES, PCLMUL, CX16,
26327          MOVBE, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2,
26328          ABM, XSAVEC, XSAVES, CLFLUSHOPT, POPCNT, and 64-bit
26329          instruction set extensions.)
26330
26331     'znver2'
26332          AMD Family 17h core based CPUs with x86-64 instruction set
26333          support.  (This supersets BMI, BMI2, CLWB, F16C, FMA,
26334          FSGSBASE, AVX, AVX2, ADCX, RDSEED, MWAITX, SHA, CLZERO, AES,
26335          PCLMUL, CX16, MOVBE, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3,
26336          SSE4.1, SSE4.2, ABM, XSAVEC, XSAVES, CLFLUSHOPT, POPCNT,
26337          RDPID, WBNOINVD, and 64-bit instruction set extensions.)
26338
26339     'btver1'
26340          CPUs based on AMD Family 14h cores with x86-64 instruction set
26341          support.  (This supersets MMX, SSE, SSE2, SSE3, SSSE3, SSE4A,
26342          CX16, ABM and 64-bit instruction set extensions.)
26343
26344     'btver2'
26345          CPUs based on AMD Family 16h cores with x86-64 instruction set
26346          support.  This includes MOVBE, F16C, BMI, AVX, PCLMUL, AES,
26347          SSE4.2, SSE4.1, CX16, ABM, SSE4A, SSSE3, SSE3, SSE2, SSE, MMX
26348          and 64-bit instruction set extensions.
26349
26350     'winchip-c6'
26351          IDT WinChip C6 CPU, dealt in same way as i486 with additional
26352          MMX instruction set support.
26353
26354     'winchip2'
26355          IDT WinChip 2 CPU, dealt in same way as i486 with additional
26356          MMX and 3DNow! instruction set support.
26357
26358     'c3'
26359          VIA C3 CPU with MMX and 3DNow! instruction set support.  (No
26360          scheduling is implemented for this chip.)
26361
26362     'c3-2'
26363          VIA C3-2 (Nehemiah/C5XL) CPU with MMX and SSE instruction set
26364          support.  (No scheduling is implemented for this chip.)
26365
26366     'c7'
26367          VIA C7 (Esther) CPU with MMX, SSE, SSE2 and SSE3 instruction
26368          set support.  (No scheduling is implemented for this chip.)
26369
26370     'samuel-2'
26371          VIA Eden Samuel 2 CPU with MMX and 3DNow! instruction set
26372          support.  (No scheduling is implemented for this chip.)
26373
26374     'nehemiah'
26375          VIA Eden Nehemiah CPU with MMX and SSE instruction set
26376          support.  (No scheduling is implemented for this chip.)
26377
26378     'esther'
26379          VIA Eden Esther CPU with MMX, SSE, SSE2 and SSE3 instruction
26380          set support.  (No scheduling is implemented for this chip.)
26381
26382     'eden-x2'
26383          VIA Eden X2 CPU with x86-64, MMX, SSE, SSE2 and SSE3
26384          instruction set support.  (No scheduling is implemented for
26385          this chip.)
26386
26387     'eden-x4'
26388          VIA Eden X4 CPU with x86-64, MMX, SSE, SSE2, SSE3, SSSE3,
26389          SSE4.1, SSE4.2, AVX and AVX2 instruction set support.  (No
26390          scheduling is implemented for this chip.)
26391
26392     'nano'
26393          Generic VIA Nano CPU with x86-64, MMX, SSE, SSE2, SSE3 and
26394          SSSE3 instruction set support.  (No scheduling is implemented
26395          for this chip.)
26396
26397     'nano-1000'
26398          VIA Nano 1xxx CPU with x86-64, MMX, SSE, SSE2, SSE3 and SSSE3
26399          instruction set support.  (No scheduling is implemented for
26400          this chip.)
26401
26402     'nano-2000'
26403          VIA Nano 2xxx CPU with x86-64, MMX, SSE, SSE2, SSE3 and SSSE3
26404          instruction set support.  (No scheduling is implemented for
26405          this chip.)
26406
26407     'nano-3000'
26408          VIA Nano 3xxx CPU with x86-64, MMX, SSE, SSE2, SSE3, SSSE3 and
26409          SSE4.1 instruction set support.  (No scheduling is implemented
26410          for this chip.)
26411
26412     'nano-x2'
26413          VIA Nano Dual Core CPU with x86-64, MMX, SSE, SSE2, SSE3,
26414          SSSE3 and SSE4.1 instruction set support.  (No scheduling is
26415          implemented for this chip.)
26416
26417     'nano-x4'
26418          VIA Nano Quad Core CPU with x86-64, MMX, SSE, SSE2, SSE3,
26419          SSSE3 and SSE4.1 instruction set support.  (No scheduling is
26420          implemented for this chip.)
26421
26422     'geode'
26423          AMD Geode embedded processor with MMX and 3DNow! instruction
26424          set support.
26425
26426'-mtune=CPU-TYPE'
26427     Tune to CPU-TYPE everything applicable about the generated code,
26428     except for the ABI and the set of available instructions.  While
26429     picking a specific CPU-TYPE schedules things appropriately for that
26430     particular chip, the compiler does not generate any code that
26431     cannot run on the default machine type unless you use a
26432     '-march=CPU-TYPE' option.  For example, if GCC is configured for
26433     i686-pc-linux-gnu then '-mtune=pentium4' generates code that is
26434     tuned for Pentium 4 but still runs on i686 machines.
26435
26436     The choices for CPU-TYPE are the same as for '-march'.  In
26437     addition, '-mtune' supports 2 extra choices for CPU-TYPE:
26438
26439     'generic'
26440          Produce code optimized for the most common IA32/AMD64/EM64T
26441          processors.  If you know the CPU on which your code will run,
26442          then you should use the corresponding '-mtune' or '-march'
26443          option instead of '-mtune=generic'.  But, if you do not know
26444          exactly what CPU users of your application will have, then you
26445          should use this option.
26446
26447          As new processors are deployed in the marketplace, the
26448          behavior of this option will change.  Therefore, if you
26449          upgrade to a newer version of GCC, code generation controlled
26450          by this option will change to reflect the processors that are
26451          most common at the time that version of GCC is released.
26452
26453          There is no '-march=generic' option because '-march' indicates
26454          the instruction set the compiler can use, and there is no
26455          generic instruction set applicable to all processors.  In
26456          contrast, '-mtune' indicates the processor (or, in this case,
26457          collection of processors) for which the code is optimized.
26458
26459     'intel'
26460          Produce code optimized for the most current Intel processors,
26461          which are Haswell and Silvermont for this version of GCC. If
26462          you know the CPU on which your code will run, then you should
26463          use the corresponding '-mtune' or '-march' option instead of
26464          '-mtune=intel'.  But, if you want your application performs
26465          better on both Haswell and Silvermont, then you should use
26466          this option.
26467
26468          As new Intel processors are deployed in the marketplace, the
26469          behavior of this option will change.  Therefore, if you
26470          upgrade to a newer version of GCC, code generation controlled
26471          by this option will change to reflect the most current Intel
26472          processors at the time that version of GCC is released.
26473
26474          There is no '-march=intel' option because '-march' indicates
26475          the instruction set the compiler can use, and there is no
26476          common instruction set applicable to all processors.  In
26477          contrast, '-mtune' indicates the processor (or, in this case,
26478          collection of processors) for which the code is optimized.
26479
26480'-mcpu=CPU-TYPE'
26481     A deprecated synonym for '-mtune'.
26482
26483'-mfpmath=UNIT'
26484     Generate floating-point arithmetic for selected unit UNIT.  The
26485     choices for UNIT are:
26486
26487     '387'
26488          Use the standard 387 floating-point coprocessor present on the
26489          majority of chips and emulated otherwise.  Code compiled with
26490          this option runs almost everywhere.  The temporary results are
26491          computed in 80-bit precision instead of the precision
26492          specified by the type, resulting in slightly different results
26493          compared to most of other chips.  See '-ffloat-store' for more
26494          detailed description.
26495
26496          This is the default choice for non-Darwin x86-32 targets.
26497
26498     'sse'
26499          Use scalar floating-point instructions present in the SSE
26500          instruction set.  This instruction set is supported by Pentium
26501          III and newer chips, and in the AMD line by Athlon-4, Athlon
26502          XP and Athlon MP chips.  The earlier version of the SSE
26503          instruction set supports only single-precision arithmetic,
26504          thus the double and extended-precision arithmetic are still
26505          done using 387.  A later version, present only in Pentium 4
26506          and AMD x86-64 chips, supports double-precision arithmetic
26507          too.
26508
26509          For the x86-32 compiler, you must use '-march=CPU-TYPE',
26510          '-msse' or '-msse2' switches to enable SSE extensions and make
26511          this option effective.  For the x86-64 compiler, these
26512          extensions are enabled by default.
26513
26514          The resulting code should be considerably faster in the
26515          majority of cases and avoid the numerical instability problems
26516          of 387 code, but may break some existing code that expects
26517          temporaries to be 80 bits.
26518
26519          This is the default choice for the x86-64 compiler, Darwin
26520          x86-32 targets, and the default choice for x86-32 targets with
26521          the SSE2 instruction set when '-ffast-math' is enabled.
26522
26523     'sse,387'
26524     'sse+387'
26525     'both'
26526          Attempt to utilize both instruction sets at once.  This
26527          effectively doubles the amount of available registers, and on
26528          chips with separate execution units for 387 and SSE the
26529          execution resources too.  Use this option with care, as it is
26530          still experimental, because the GCC register allocator does
26531          not model separate functional units well, resulting in
26532          unstable performance.
26533
26534'-masm=DIALECT'
26535     Output assembly instructions using selected DIALECT.  Also affects
26536     which dialect is used for basic 'asm' (*note Basic Asm::) and
26537     extended 'asm' (*note Extended Asm::).  Supported choices (in
26538     dialect order) are 'att' or 'intel'.  The default is 'att'.  Darwin
26539     does not support 'intel'.
26540
26541'-mieee-fp'
26542'-mno-ieee-fp'
26543     Control whether or not the compiler uses IEEE floating-point
26544     comparisons.  These correctly handle the case where the result of a
26545     comparison is unordered.
26546
26547'-m80387'
26548'-mhard-float'
26549     Generate output containing 80387 instructions for floating point.
26550
26551'-mno-80387'
26552'-msoft-float'
26553     Generate output containing library calls for floating point.
26554
26555     *Warning:* the requisite libraries are not part of GCC.  Normally
26556     the facilities of the machine's usual C compiler are used, but this
26557     cannot be done directly in cross-compilation.  You must make your
26558     own arrangements to provide suitable library functions for
26559     cross-compilation.
26560
26561     On machines where a function returns floating-point results in the
26562     80387 register stack, some floating-point opcodes may be emitted
26563     even if '-msoft-float' is used.
26564
26565'-mno-fp-ret-in-387'
26566     Do not use the FPU registers for return values of functions.
26567
26568     The usual calling convention has functions return values of types
26569     'float' and 'double' in an FPU register, even if there is no FPU.
26570     The idea is that the operating system should emulate an FPU.
26571
26572     The option '-mno-fp-ret-in-387' causes such values to be returned
26573     in ordinary CPU registers instead.
26574
26575'-mno-fancy-math-387'
26576     Some 387 emulators do not support the 'sin', 'cos' and 'sqrt'
26577     instructions for the 387.  Specify this option to avoid generating
26578     those instructions.  This option is overridden when '-march'
26579     indicates that the target CPU always has an FPU and so the
26580     instruction does not need emulation.  These instructions are not
26581     generated unless you also use the '-funsafe-math-optimizations'
26582     switch.
26583
26584'-malign-double'
26585'-mno-align-double'
26586     Control whether GCC aligns 'double', 'long double', and 'long long'
26587     variables on a two-word boundary or a one-word boundary.  Aligning
26588     'double' variables on a two-word boundary produces code that runs
26589     somewhat faster on a Pentium at the expense of more memory.
26590
26591     On x86-64, '-malign-double' is enabled by default.
26592
26593     *Warning:* if you use the '-malign-double' switch, structures
26594     containing the above types are aligned differently than the
26595     published application binary interface specifications for the
26596     x86-32 and are not binary compatible with structures in code
26597     compiled without that switch.
26598
26599'-m96bit-long-double'
26600'-m128bit-long-double'
26601     These switches control the size of 'long double' type.  The x86-32
26602     application binary interface specifies the size to be 96 bits, so
26603     '-m96bit-long-double' is the default in 32-bit mode.
26604
26605     Modern architectures (Pentium and newer) prefer 'long double' to be
26606     aligned to an 8- or 16-byte boundary.  In arrays or structures
26607     conforming to the ABI, this is not possible.  So specifying
26608     '-m128bit-long-double' aligns 'long double' to a 16-byte boundary
26609     by padding the 'long double' with an additional 32-bit zero.
26610
26611     In the x86-64 compiler, '-m128bit-long-double' is the default
26612     choice as its ABI specifies that 'long double' is aligned on
26613     16-byte boundary.
26614
26615     Notice that neither of these options enable any extra precision
26616     over the x87 standard of 80 bits for a 'long double'.
26617
26618     *Warning:* if you override the default value for your target ABI,
26619     this changes the size of structures and arrays containing 'long
26620     double' variables, as well as modifying the function calling
26621     convention for functions taking 'long double'.  Hence they are not
26622     binary-compatible with code compiled without that switch.
26623
26624'-mlong-double-64'
26625'-mlong-double-80'
26626'-mlong-double-128'
26627     These switches control the size of 'long double' type.  A size of
26628     64 bits makes the 'long double' type equivalent to the 'double'
26629     type.  This is the default for 32-bit Bionic C library.  A size of
26630     128 bits makes the 'long double' type equivalent to the
26631     '__float128' type.  This is the default for 64-bit Bionic C
26632     library.
26633
26634     *Warning:* if you override the default value for your target ABI,
26635     this changes the size of structures and arrays containing 'long
26636     double' variables, as well as modifying the function calling
26637     convention for functions taking 'long double'.  Hence they are not
26638     binary-compatible with code compiled without that switch.
26639
26640'-malign-data=TYPE'
26641     Control how GCC aligns variables.  Supported values for TYPE are
26642     'compat' uses increased alignment value compatible uses GCC 4.8 and
26643     earlier, 'abi' uses alignment value as specified by the psABI, and
26644     'cacheline' uses increased alignment value to match the cache line
26645     size.  'compat' is the default.
26646
26647'-mlarge-data-threshold=THRESHOLD'
26648     When '-mcmodel=medium' is specified, data objects larger than
26649     THRESHOLD are placed in the large data section.  This value must be
26650     the same across all objects linked into the binary, and defaults to
26651     65535.
26652
26653'-mrtd'
26654     Use a different function-calling convention, in which functions
26655     that take a fixed number of arguments return with the 'ret NUM'
26656     instruction, which pops their arguments while returning.  This
26657     saves one instruction in the caller since there is no need to pop
26658     the arguments there.
26659
26660     You can specify that an individual function is called with this
26661     calling sequence with the function attribute 'stdcall'.  You can
26662     also override the '-mrtd' option by using the function attribute
26663     'cdecl'.  *Note Function Attributes::.
26664
26665     *Warning:* this calling convention is incompatible with the one
26666     normally used on Unix, so you cannot use it if you need to call
26667     libraries compiled with the Unix compiler.
26668
26669     Also, you must provide function prototypes for all functions that
26670     take variable numbers of arguments (including 'printf'); otherwise
26671     incorrect code is generated for calls to those functions.
26672
26673     In addition, seriously incorrect code results if you call a
26674     function with too many arguments.  (Normally, extra arguments are
26675     harmlessly ignored.)
26676
26677'-mregparm=NUM'
26678     Control how many registers are used to pass integer arguments.  By
26679     default, no registers are used to pass arguments, and at most 3
26680     registers can be used.  You can control this behavior for a
26681     specific function by using the function attribute 'regparm'.  *Note
26682     Function Attributes::.
26683
26684     *Warning:* if you use this switch, and NUM is nonzero, then you
26685     must build all modules with the same value, including any
26686     libraries.  This includes the system libraries and startup modules.
26687
26688'-msseregparm'
26689     Use SSE register passing conventions for float and double arguments
26690     and return values.  You can control this behavior for a specific
26691     function by using the function attribute 'sseregparm'.  *Note
26692     Function Attributes::.
26693
26694     *Warning:* if you use this switch then you must build all modules
26695     with the same value, including any libraries.  This includes the
26696     system libraries and startup modules.
26697
26698'-mvect8-ret-in-mem'
26699     Return 8-byte vectors in memory instead of MMX registers.  This is
26700     the default on VxWorks to match the ABI of the Sun Studio compilers
26701     until version 12.  _Only_ use this option if you need to remain
26702     compatible with existing code produced by those previous compiler
26703     versions or older versions of GCC.
26704
26705'-mpc32'
26706'-mpc64'
26707'-mpc80'
26708
26709     Set 80387 floating-point precision to 32, 64 or 80 bits.  When
26710     '-mpc32' is specified, the significands of results of
26711     floating-point operations are rounded to 24 bits (single
26712     precision); '-mpc64' rounds the significands of results of
26713     floating-point operations to 53 bits (double precision) and
26714     '-mpc80' rounds the significands of results of floating-point
26715     operations to 64 bits (extended double precision), which is the
26716     default.  When this option is used, floating-point operations in
26717     higher precisions are not available to the programmer without
26718     setting the FPU control word explicitly.
26719
26720     Setting the rounding of floating-point operations to less than the
26721     default 80 bits can speed some programs by 2% or more.  Note that
26722     some mathematical libraries assume that extended-precision (80-bit)
26723     floating-point operations are enabled by default; routines in such
26724     libraries could suffer significant loss of accuracy, typically
26725     through so-called "catastrophic cancellation", when this option is
26726     used to set the precision to less than extended precision.
26727
26728'-mstackrealign'
26729     Realign the stack at entry.  On the x86, the '-mstackrealign'
26730     option generates an alternate prologue and epilogue that realigns
26731     the run-time stack if necessary.  This supports mixing legacy codes
26732     that keep 4-byte stack alignment with modern codes that keep
26733     16-byte stack alignment for SSE compatibility.  See also the
26734     attribute 'force_align_arg_pointer', applicable to individual
26735     functions.
26736
26737'-mpreferred-stack-boundary=NUM'
26738     Attempt to keep the stack boundary aligned to a 2 raised to NUM
26739     byte boundary.  If '-mpreferred-stack-boundary' is not specified,
26740     the default is 4 (16 bytes or 128 bits).
26741
26742     *Warning:* When generating code for the x86-64 architecture with
26743     SSE extensions disabled, '-mpreferred-stack-boundary=3' can be used
26744     to keep the stack boundary aligned to 8 byte boundary.  Since
26745     x86-64 ABI require 16 byte stack alignment, this is ABI
26746     incompatible and intended to be used in controlled environment
26747     where stack space is important limitation.  This option leads to
26748     wrong code when functions compiled with 16 byte stack alignment
26749     (such as functions from a standard library) are called with
26750     misaligned stack.  In this case, SSE instructions may lead to
26751     misaligned memory access traps.  In addition, variable arguments
26752     are handled incorrectly for 16 byte aligned objects (including x87
26753     long double and __int128), leading to wrong results.  You must
26754     build all modules with '-mpreferred-stack-boundary=3', including
26755     any libraries.  This includes the system libraries and startup
26756     modules.
26757
26758'-mincoming-stack-boundary=NUM'
26759     Assume the incoming stack is aligned to a 2 raised to NUM byte
26760     boundary.  If '-mincoming-stack-boundary' is not specified, the one
26761     specified by '-mpreferred-stack-boundary' is used.
26762
26763     On Pentium and Pentium Pro, 'double' and 'long double' values
26764     should be aligned to an 8-byte boundary (see '-malign-double') or
26765     suffer significant run time performance penalties.  On Pentium III,
26766     the Streaming SIMD Extension (SSE) data type '__m128' may not work
26767     properly if it is not 16-byte aligned.
26768
26769     To ensure proper alignment of this values on the stack, the stack
26770     boundary must be as aligned as that required by any value stored on
26771     the stack.  Further, every function must be generated such that it
26772     keeps the stack aligned.  Thus calling a function compiled with a
26773     higher preferred stack boundary from a function compiled with a
26774     lower preferred stack boundary most likely misaligns the stack.  It
26775     is recommended that libraries that use callbacks always use the
26776     default setting.
26777
26778     This extra alignment does consume extra stack space, and generally
26779     increases code size.  Code that is sensitive to stack space usage,
26780     such as embedded systems and operating system kernels, may want to
26781     reduce the preferred alignment to '-mpreferred-stack-boundary=2'.
26782
26783'-mmmx'
26784'-msse'
26785'-msse2'
26786'-msse3'
26787'-mssse3'
26788'-msse4'
26789'-msse4a'
26790'-msse4.1'
26791'-msse4.2'
26792'-mavx'
26793'-mavx2'
26794'-mavx512f'
26795'-mavx512pf'
26796'-mavx512er'
26797'-mavx512cd'
26798'-mavx512vl'
26799'-mavx512bw'
26800'-mavx512dq'
26801'-mavx512ifma'
26802'-mavx512vbmi'
26803'-msha'
26804'-maes'
26805'-mpclmul'
26806'-mclflushopt'
26807'-mclwb'
26808'-mfsgsbase'
26809'-mptwrite'
26810'-mrdrnd'
26811'-mf16c'
26812'-mfma'
26813'-mpconfig'
26814'-mwbnoinvd'
26815'-mfma4'
26816'-mprfchw'
26817'-mrdpid'
26818'-mprefetchwt1'
26819'-mrdseed'
26820'-msgx'
26821'-mxop'
26822'-mlwp'
26823'-m3dnow'
26824'-m3dnowa'
26825'-mpopcnt'
26826'-mabm'
26827'-madx'
26828'-mbmi'
26829'-mbmi2'
26830'-mlzcnt'
26831'-mfxsr'
26832'-mxsave'
26833'-mxsaveopt'
26834'-mxsavec'
26835'-mxsaves'
26836'-mrtm'
26837'-mhle'
26838'-mtbm'
26839'-mmwaitx'
26840'-mclzero'
26841'-mpku'
26842'-mavx512vbmi2'
26843'-mavx512bf16'
26844'-mgfni'
26845'-mvaes'
26846'-mwaitpkg'
26847'-mvpclmulqdq'
26848'-mavx512bitalg'
26849'-mmovdiri'
26850'-mmovdir64b'
26851'-menqcmd'
26852'-mavx512vpopcntdq'
26853'-mavx512vp2intersect'
26854'-mavx5124fmaps'
26855'-mavx512vnni'
26856'-mavx5124vnniw'
26857'-mcldemote'
26858     These switches enable the use of instructions in the MMX, SSE,
26859     SSE2, SSE3, SSSE3, SSE4, SSE4A, SSE4.1, SSE4.2, AVX, AVX2, AVX512F,
26860     AVX512PF, AVX512ER, AVX512CD, AVX512VL, AVX512BW, AVX512DQ,
26861     AVX512IFMA, AVX512VBMI, SHA, AES, PCLMUL, CLFLUSHOPT, CLWB,
26862     FSGSBASE, PTWRITE, RDRND, F16C, FMA, PCONFIG, WBNOINVD, FMA4,
26863     PREFETCHW, RDPID, PREFETCHWT1, RDSEED, SGX, XOP, LWP, 3DNow!,
26864     enhanced 3DNow!, POPCNT, ABM, ADX, BMI, BMI2, LZCNT, FXSR, XSAVE,
26865     XSAVEOPT, XSAVEC, XSAVES, RTM, HLE, TBM, MWAITX, CLZERO, PKU,
26866     AVX512VBMI2, GFNI, VAES, WAITPKG, VPCLMULQDQ, AVX512BITALG,
26867     MOVDIRI, MOVDIR64B, AVX512BF16, ENQCMD, AVX512VPOPCNTDQ,
26868     AVX5124FMAPS, AVX512VNNI, AVX5124VNNIW, or CLDEMOTE extended
26869     instruction sets.  Each has a corresponding '-mno-' option to
26870     disable use of these instructions.
26871
26872     These extensions are also available as built-in functions: see
26873     *note x86 Built-in Functions::, for details of the functions
26874     enabled and disabled by these switches.
26875
26876     To generate SSE/SSE2 instructions automatically from floating-point
26877     code (as opposed to 387 instructions), see '-mfpmath=sse'.
26878
26879     GCC depresses SSEx instructions when '-mavx' is used.  Instead, it
26880     generates new AVX instructions or AVX equivalence for all SSEx
26881     instructions when needed.
26882
26883     These options enable GCC to use these extended instructions in
26884     generated code, even without '-mfpmath=sse'.  Applications that
26885     perform run-time CPU detection must compile separate files for each
26886     supported architecture, using the appropriate flags.  In
26887     particular, the file containing the CPU detection code should be
26888     compiled without these options.
26889
26890'-mdump-tune-features'
26891     This option instructs GCC to dump the names of the x86 performance
26892     tuning features and default settings.  The names can be used in
26893     '-mtune-ctrl=FEATURE-LIST'.
26894
26895'-mtune-ctrl=FEATURE-LIST'
26896     This option is used to do fine grain control of x86 code generation
26897     features.  FEATURE-LIST is a comma separated list of FEATURE names.
26898     See also '-mdump-tune-features'.  When specified, the FEATURE is
26899     turned on if it is not preceded with '^', otherwise, it is turned
26900     off.  '-mtune-ctrl=FEATURE-LIST' is intended to be used by GCC
26901     developers.  Using it may lead to code paths not covered by testing
26902     and can potentially result in compiler ICEs or runtime errors.
26903
26904'-mno-default'
26905     This option instructs GCC to turn off all tunable features.  See
26906     also '-mtune-ctrl=FEATURE-LIST' and '-mdump-tune-features'.
26907
26908'-mcld'
26909     This option instructs GCC to emit a 'cld' instruction in the
26910     prologue of functions that use string instructions.  String
26911     instructions depend on the DF flag to select between autoincrement
26912     or autodecrement mode.  While the ABI specifies the DF flag to be
26913     cleared on function entry, some operating systems violate this
26914     specification by not clearing the DF flag in their exception
26915     dispatchers.  The exception handler can be invoked with the DF flag
26916     set, which leads to wrong direction mode when string instructions
26917     are used.  This option can be enabled by default on 32-bit x86
26918     targets by configuring GCC with the '--enable-cld' configure
26919     option.  Generation of 'cld' instructions can be suppressed with
26920     the '-mno-cld' compiler option in this case.
26921
26922'-mvzeroupper'
26923     This option instructs GCC to emit a 'vzeroupper' instruction before
26924     a transfer of control flow out of the function to minimize the AVX
26925     to SSE transition penalty as well as remove unnecessary 'zeroupper'
26926     intrinsics.
26927
26928'-mprefer-avx128'
26929     This option instructs GCC to use 128-bit AVX instructions instead
26930     of 256-bit AVX instructions in the auto-vectorizer.
26931
26932'-mprefer-vector-width=OPT'
26933     This option instructs GCC to use OPT-bit vector width in
26934     instructions instead of default on the selected platform.
26935
26936     'none'
26937          No extra limitations applied to GCC other than defined by the
26938          selected platform.
26939
26940     '128'
26941          Prefer 128-bit vector width for instructions.
26942
26943     '256'
26944          Prefer 256-bit vector width for instructions.
26945
26946     '512'
26947          Prefer 512-bit vector width for instructions.
26948
26949'-mcx16'
26950     This option enables GCC to generate 'CMPXCHG16B' instructions in
26951     64-bit code to implement compare-and-exchange operations on 16-byte
26952     aligned 128-bit objects.  This is useful for atomic updates of data
26953     structures exceeding one machine word in size.  The compiler uses
26954     this instruction to implement *note __sync Builtins::.  However,
26955     for *note __atomic Builtins:: operating on 128-bit integers, a
26956     library call is always used.
26957
26958'-msahf'
26959     This option enables generation of 'SAHF' instructions in 64-bit
26960     code.  Early Intel Pentium 4 CPUs with Intel 64 support, prior to
26961     the introduction of Pentium 4 G1 step in December 2005, lacked the
26962     'LAHF' and 'SAHF' instructions which are supported by AMD64.  These
26963     are load and store instructions, respectively, for certain status
26964     flags.  In 64-bit mode, the 'SAHF' instruction is used to optimize
26965     'fmod', 'drem', and 'remainder' built-in functions; see *note Other
26966     Builtins:: for details.
26967
26968'-mmovbe'
26969     This option enables use of the 'movbe' instruction to implement
26970     '__builtin_bswap32' and '__builtin_bswap64'.
26971
26972'-mshstk'
26973     The '-mshstk' option enables shadow stack built-in functions from
26974     x86 Control-flow Enforcement Technology (CET).
26975
26976'-mcrc32'
26977     This option enables built-in functions '__builtin_ia32_crc32qi',
26978     '__builtin_ia32_crc32hi', '__builtin_ia32_crc32si' and
26979     '__builtin_ia32_crc32di' to generate the 'crc32' machine
26980     instruction.
26981
26982'-mrecip'
26983     This option enables use of 'RCPSS' and 'RSQRTSS' instructions (and
26984     their vectorized variants 'RCPPS' and 'RSQRTPS') with an additional
26985     Newton-Raphson step to increase precision instead of 'DIVSS' and
26986     'SQRTSS' (and their vectorized variants) for single-precision
26987     floating-point arguments.  These instructions are generated only
26988     when '-funsafe-math-optimizations' is enabled together with
26989     '-ffinite-math-only' and '-fno-trapping-math'.  Note that while the
26990     throughput of the sequence is higher than the throughput of the
26991     non-reciprocal instruction, the precision of the sequence can be
26992     decreased by up to 2 ulp (i.e. the inverse of 1.0 equals
26993     0.99999994).
26994
26995     Note that GCC implements '1.0f/sqrtf(X)' in terms of 'RSQRTSS' (or
26996     'RSQRTPS') already with '-ffast-math' (or the above option
26997     combination), and doesn't need '-mrecip'.
26998
26999     Also note that GCC emits the above sequence with additional
27000     Newton-Raphson step for vectorized single-float division and
27001     vectorized 'sqrtf(X)' already with '-ffast-math' (or the above
27002     option combination), and doesn't need '-mrecip'.
27003
27004'-mrecip=OPT'
27005     This option controls which reciprocal estimate instructions may be
27006     used.  OPT is a comma-separated list of options, which may be
27007     preceded by a '!' to invert the option:
27008
27009     'all'
27010          Enable all estimate instructions.
27011
27012     'default'
27013          Enable the default instructions, equivalent to '-mrecip'.
27014
27015     'none'
27016          Disable all estimate instructions, equivalent to '-mno-recip'.
27017
27018     'div'
27019          Enable the approximation for scalar division.
27020
27021     'vec-div'
27022          Enable the approximation for vectorized division.
27023
27024     'sqrt'
27025          Enable the approximation for scalar square root.
27026
27027     'vec-sqrt'
27028          Enable the approximation for vectorized square root.
27029
27030     So, for example, '-mrecip=all,!sqrt' enables all of the reciprocal
27031     approximations, except for square root.
27032
27033'-mveclibabi=TYPE'
27034     Specifies the ABI type to use for vectorizing intrinsics using an
27035     external library.  Supported values for TYPE are 'svml' for the
27036     Intel short vector math library and 'acml' for the AMD math core
27037     library.  To use this option, both '-ftree-vectorize' and
27038     '-funsafe-math-optimizations' have to be enabled, and an SVML or
27039     ACML ABI-compatible library must be specified at link time.
27040
27041     GCC currently emits calls to 'vmldExp2', 'vmldLn2', 'vmldLog102',
27042     'vmldPow2', 'vmldTanh2', 'vmldTan2', 'vmldAtan2', 'vmldAtanh2',
27043     'vmldCbrt2', 'vmldSinh2', 'vmldSin2', 'vmldAsinh2', 'vmldAsin2',
27044     'vmldCosh2', 'vmldCos2', 'vmldAcosh2', 'vmldAcos2', 'vmlsExp4',
27045     'vmlsLn4', 'vmlsLog104', 'vmlsPow4', 'vmlsTanh4', 'vmlsTan4',
27046     'vmlsAtan4', 'vmlsAtanh4', 'vmlsCbrt4', 'vmlsSinh4', 'vmlsSin4',
27047     'vmlsAsinh4', 'vmlsAsin4', 'vmlsCosh4', 'vmlsCos4', 'vmlsAcosh4'
27048     and 'vmlsAcos4' for corresponding function type when
27049     '-mveclibabi=svml' is used, and '__vrd2_sin', '__vrd2_cos',
27050     '__vrd2_exp', '__vrd2_log', '__vrd2_log2', '__vrd2_log10',
27051     '__vrs4_sinf', '__vrs4_cosf', '__vrs4_expf', '__vrs4_logf',
27052     '__vrs4_log2f', '__vrs4_log10f' and '__vrs4_powf' for the
27053     corresponding function type when '-mveclibabi=acml' is used.
27054
27055'-mabi=NAME'
27056     Generate code for the specified calling convention.  Permissible
27057     values are 'sysv' for the ABI used on GNU/Linux and other systems,
27058     and 'ms' for the Microsoft ABI. The default is to use the Microsoft
27059     ABI when targeting Microsoft Windows and the SysV ABI on all other
27060     systems.  You can control this behavior for specific functions by
27061     using the function attributes 'ms_abi' and 'sysv_abi'.  *Note
27062     Function Attributes::.
27063
27064'-mforce-indirect-call'
27065     Force all calls to functions to be indirect.  This is useful when
27066     using Intel Processor Trace where it generates more precise timing
27067     information for function calls.
27068
27069'-mmanual-endbr'
27070     Insert ENDBR instruction at function entry only via the 'cf_check'
27071     function attribute.  This is useful when used with the option
27072     '-fcf-protection=branch' to control ENDBR insertion at the function
27073     entry.
27074
27075'-mcall-ms2sysv-xlogues'
27076     Due to differences in 64-bit ABIs, any Microsoft ABI function that
27077     calls a System V ABI function must consider RSI, RDI and XMM6-15 as
27078     clobbered.  By default, the code for saving and restoring these
27079     registers is emitted inline, resulting in fairly lengthy prologues
27080     and epilogues.  Using '-mcall-ms2sysv-xlogues' emits prologues and
27081     epilogues that use stubs in the static portion of libgcc to perform
27082     these saves and restores, thus reducing function size at the cost
27083     of a few extra instructions.
27084
27085'-mtls-dialect=TYPE'
27086     Generate code to access thread-local storage using the 'gnu' or
27087     'gnu2' conventions.  'gnu' is the conservative default; 'gnu2' is
27088     more efficient, but it may add compile- and run-time requirements
27089     that cannot be satisfied on all systems.
27090
27091'-mpush-args'
27092'-mno-push-args'
27093     Use PUSH operations to store outgoing parameters.  This method is
27094     shorter and usually equally fast as method using SUB/MOV operations
27095     and is enabled by default.  In some cases disabling it may improve
27096     performance because of improved scheduling and reduced
27097     dependencies.
27098
27099'-maccumulate-outgoing-args'
27100     If enabled, the maximum amount of space required for outgoing
27101     arguments is computed in the function prologue.  This is faster on
27102     most modern CPUs because of reduced dependencies, improved
27103     scheduling and reduced stack usage when the preferred stack
27104     boundary is not equal to 2.  The drawback is a notable increase in
27105     code size.  This switch implies '-mno-push-args'.
27106
27107'-mthreads'
27108     Support thread-safe exception handling on MinGW. Programs that rely
27109     on thread-safe exception handling must compile and link all code
27110     with the '-mthreads' option.  When compiling, '-mthreads' defines
27111     '-D_MT'; when linking, it links in a special thread helper library
27112     '-lmingwthrd' which cleans up per-thread exception-handling data.
27113
27114'-mms-bitfields'
27115'-mno-ms-bitfields'
27116
27117     Enable/disable bit-field layout compatible with the native
27118     Microsoft Windows compiler.
27119
27120     If 'packed' is used on a structure, or if bit-fields are used, it
27121     may be that the Microsoft ABI lays out the structure differently
27122     than the way GCC normally does.  Particularly when moving packed
27123     data between functions compiled with GCC and the native Microsoft
27124     compiler (either via function call or as data in a file), it may be
27125     necessary to access either format.
27126
27127     This option is enabled by default for Microsoft Windows targets.
27128     This behavior can also be controlled locally by use of variable or
27129     type attributes.  For more information, see *note x86 Variable
27130     Attributes:: and *note x86 Type Attributes::.
27131
27132     The Microsoft structure layout algorithm is fairly simple with the
27133     exception of the bit-field packing.  The padding and alignment of
27134     members of structures and whether a bit-field can straddle a
27135     storage-unit boundary are determine by these rules:
27136
27137       1. Structure members are stored sequentially in the order in
27138          which they are declared: the first member has the lowest
27139          memory address and the last member the highest.
27140
27141       2. Every data object has an alignment requirement.  The alignment
27142          requirement for all data except structures, unions, and arrays
27143          is either the size of the object or the current packing size
27144          (specified with either the 'aligned' attribute or the 'pack'
27145          pragma), whichever is less.  For structures, unions, and
27146          arrays, the alignment requirement is the largest alignment
27147          requirement of its members.  Every object is allocated an
27148          offset so that:
27149
27150               offset % alignment_requirement == 0
27151
27152       3. Adjacent bit-fields are packed into the same 1-, 2-, or 4-byte
27153          allocation unit if the integral types are the same size and if
27154          the next bit-field fits into the current allocation unit
27155          without crossing the boundary imposed by the common alignment
27156          requirements of the bit-fields.
27157
27158     MSVC interprets zero-length bit-fields in the following ways:
27159
27160       1. If a zero-length bit-field is inserted between two bit-fields
27161          that are normally coalesced, the bit-fields are not coalesced.
27162
27163          For example:
27164
27165               struct
27166                {
27167                  unsigned long bf_1 : 12;
27168                  unsigned long : 0;
27169                  unsigned long bf_2 : 12;
27170                } t1;
27171
27172          The size of 't1' is 8 bytes with the zero-length bit-field.
27173          If the zero-length bit-field were removed, 't1''s size would
27174          be 4 bytes.
27175
27176       2. If a zero-length bit-field is inserted after a bit-field,
27177          'foo', and the alignment of the zero-length bit-field is
27178          greater than the member that follows it, 'bar', 'bar' is
27179          aligned as the type of the zero-length bit-field.
27180
27181          For example:
27182
27183               struct
27184                {
27185                  char foo : 4;
27186                  short : 0;
27187                  char bar;
27188                } t2;
27189
27190               struct
27191                {
27192                  char foo : 4;
27193                  short : 0;
27194                  double bar;
27195                } t3;
27196
27197          For 't2', 'bar' is placed at offset 2, rather than offset 1.
27198          Accordingly, the size of 't2' is 4.  For 't3', the zero-length
27199          bit-field does not affect the alignment of 'bar' or, as a
27200          result, the size of the structure.
27201
27202          Taking this into account, it is important to note the
27203          following:
27204
27205            1. If a zero-length bit-field follows a normal bit-field,
27206               the type of the zero-length bit-field may affect the
27207               alignment of the structure as whole.  For example, 't2'
27208               has a size of 4 bytes, since the zero-length bit-field
27209               follows a normal bit-field, and is of type short.
27210
27211            2. Even if a zero-length bit-field is not followed by a
27212               normal bit-field, it may still affect the alignment of
27213               the structure:
27214
27215                    struct
27216                     {
27217                       char foo : 6;
27218                       long : 0;
27219                     } t4;
27220
27221               Here, 't4' takes up 4 bytes.
27222
27223       3. Zero-length bit-fields following non-bit-field members are
27224          ignored:
27225
27226               struct
27227                {
27228                  char foo;
27229                  long : 0;
27230                  char bar;
27231                } t5;
27232
27233          Here, 't5' takes up 2 bytes.
27234
27235'-mno-align-stringops'
27236     Do not align the destination of inlined string operations.  This
27237     switch reduces code size and improves performance in case the
27238     destination is already aligned, but GCC doesn't know about it.
27239
27240'-minline-all-stringops'
27241     By default GCC inlines string operations only when the destination
27242     is known to be aligned to least a 4-byte boundary.  This enables
27243     more inlining and increases code size, but may improve performance
27244     of code that depends on fast 'memcpy' and 'memset' for short
27245     lengths.  The option enables inline expansion of 'strlen' for all
27246     pointer alignments.
27247
27248'-minline-stringops-dynamically'
27249     For string operations of unknown size, use run-time checks with
27250     inline code for small blocks and a library call for large blocks.
27251
27252'-mstringop-strategy=ALG'
27253     Override the internal decision heuristic for the particular
27254     algorithm to use for inlining string operations.  The allowed
27255     values for ALG are:
27256
27257     'rep_byte'
27258     'rep_4byte'
27259     'rep_8byte'
27260          Expand using i386 'rep' prefix of the specified size.
27261
27262     'byte_loop'
27263     'loop'
27264     'unrolled_loop'
27265          Expand into an inline loop.
27266
27267     'libcall'
27268          Always use a library call.
27269
27270'-mmemcpy-strategy=STRATEGY'
27271     Override the internal decision heuristic to decide if
27272     '__builtin_memcpy' should be inlined and what inline algorithm to
27273     use when the expected size of the copy operation is known.
27274     STRATEGY is a comma-separated list of ALG:MAX_SIZE:DEST_ALIGN
27275     triplets.  ALG is specified in '-mstringop-strategy', MAX_SIZE
27276     specifies the max byte size with which inline algorithm ALG is
27277     allowed.  For the last triplet, the MAX_SIZE must be '-1'.  The
27278     MAX_SIZE of the triplets in the list must be specified in
27279     increasing order.  The minimal byte size for ALG is '0' for the
27280     first triplet and 'MAX_SIZE + 1' of the preceding range.
27281
27282'-mmemset-strategy=STRATEGY'
27283     The option is similar to '-mmemcpy-strategy=' except that it is to
27284     control '__builtin_memset' expansion.
27285
27286'-momit-leaf-frame-pointer'
27287     Don't keep the frame pointer in a register for leaf functions.
27288     This avoids the instructions to save, set up, and restore frame
27289     pointers and makes an extra register available in leaf functions.
27290     The option '-fomit-leaf-frame-pointer' removes the frame pointer
27291     for leaf functions, which might make debugging harder.
27292
27293'-mtls-direct-seg-refs'
27294'-mno-tls-direct-seg-refs'
27295     Controls whether TLS variables may be accessed with offsets from
27296     the TLS segment register ('%gs' for 32-bit, '%fs' for 64-bit), or
27297     whether the thread base pointer must be added.  Whether or not this
27298     is valid depends on the operating system, and whether it maps the
27299     segment to cover the entire TLS area.
27300
27301     For systems that use the GNU C Library, the default is on.
27302
27303'-msse2avx'
27304'-mno-sse2avx'
27305     Specify that the assembler should encode SSE instructions with VEX
27306     prefix.  The option '-mavx' turns this on by default.
27307
27308'-mfentry'
27309'-mno-fentry'
27310     If profiling is active ('-pg'), put the profiling counter call
27311     before the prologue.  Note: On x86 architectures the attribute
27312     'ms_hook_prologue' isn't possible at the moment for '-mfentry' and
27313     '-pg'.
27314
27315'-mrecord-mcount'
27316'-mno-record-mcount'
27317     If profiling is active ('-pg'), generate a __mcount_loc section
27318     that contains pointers to each profiling call.  This is useful for
27319     automatically patching and out calls.
27320
27321'-mnop-mcount'
27322'-mno-nop-mcount'
27323     If profiling is active ('-pg'), generate the calls to the profiling
27324     functions as NOPs.  This is useful when they should be patched in
27325     later dynamically.  This is likely only useful together with
27326     '-mrecord-mcount'.
27327
27328'-minstrument-return=TYPE'
27329     Instrument function exit in -pg -mfentry instrumented functions
27330     with call to specified function.  This only instruments true
27331     returns ending with ret, but not sibling calls ending with jump.
27332     Valid types are NONE to not instrument, CALL to generate a call to
27333     __return__, or NOP5 to generate a 5 byte nop.
27334
27335'-mrecord-return'
27336'-mno-record-return'
27337     Generate a __return_loc section pointing to all return
27338     instrumentation code.
27339
27340'-mfentry-name=NAME'
27341     Set name of __fentry__ symbol called at function entry for -pg
27342     -mfentry functions.
27343
27344'-mfentry-section=NAME'
27345     Set name of section to record -mrecord-mcount calls (default
27346     __mcount_loc).
27347
27348'-mskip-rax-setup'
27349'-mno-skip-rax-setup'
27350     When generating code for the x86-64 architecture with SSE
27351     extensions disabled, '-mskip-rax-setup' can be used to skip setting
27352     up RAX register when there are no variable arguments passed in
27353     vector registers.
27354
27355     *Warning:* Since RAX register is used to avoid unnecessarily saving
27356     vector registers on stack when passing variable arguments, the
27357     impacts of this option are callees may waste some stack space,
27358     misbehave or jump to a random location.  GCC 4.4 or newer don't
27359     have those issues, regardless the RAX register value.
27360
27361'-m8bit-idiv'
27362'-mno-8bit-idiv'
27363     On some processors, like Intel Atom, 8-bit unsigned integer divide
27364     is much faster than 32-bit/64-bit integer divide.  This option
27365     generates a run-time check.  If both dividend and divisor are
27366     within range of 0 to 255, 8-bit unsigned integer divide is used
27367     instead of 32-bit/64-bit integer divide.
27368
27369'-mavx256-split-unaligned-load'
27370'-mavx256-split-unaligned-store'
27371     Split 32-byte AVX unaligned load and store.
27372
27373'-mstack-protector-guard=GUARD'
27374'-mstack-protector-guard-reg=REG'
27375'-mstack-protector-guard-offset=OFFSET'
27376     Generate stack protection code using canary at GUARD.  Supported
27377     locations are 'global' for global canary or 'tls' for per-thread
27378     canary in the TLS block (the default).  This option has effect only
27379     when '-fstack-protector' or '-fstack-protector-all' is specified.
27380
27381     With the latter choice the options
27382     '-mstack-protector-guard-reg=REG' and
27383     '-mstack-protector-guard-offset=OFFSET' furthermore specify which
27384     segment register ('%fs' or '%gs') to use as base register for
27385     reading the canary, and from what offset from that base register.
27386     The default for those is as specified in the relevant ABI.
27387
27388'-mgeneral-regs-only'
27389     Generate code that uses only the general-purpose registers.  This
27390     prevents the compiler from using floating-point, vector, mask and
27391     bound registers.
27392
27393'-mindirect-branch=CHOICE'
27394     Convert indirect call and jump with CHOICE.  The default is 'keep',
27395     which keeps indirect call and jump unmodified.  'thunk' converts
27396     indirect call and jump to call and return thunk.  'thunk-inline'
27397     converts indirect call and jump to inlined call and return thunk.
27398     'thunk-extern' converts indirect call and jump to external call and
27399     return thunk provided in a separate object file.  You can control
27400     this behavior for a specific function by using the function
27401     attribute 'indirect_branch'.  *Note Function Attributes::.
27402
27403     Note that '-mcmodel=large' is incompatible with
27404     '-mindirect-branch=thunk' and '-mindirect-branch=thunk-extern'
27405     since the thunk function may not be reachable in the large code
27406     model.
27407
27408     Note that '-mindirect-branch=thunk-extern' is compatible with
27409     '-fcf-protection=branch' since the external thunk can be made to
27410     enable control-flow check.
27411
27412'-mfunction-return=CHOICE'
27413     Convert function return with CHOICE.  The default is 'keep', which
27414     keeps function return unmodified.  'thunk' converts function return
27415     to call and return thunk.  'thunk-inline' converts function return
27416     to inlined call and return thunk.  'thunk-extern' converts function
27417     return to external call and return thunk provided in a separate
27418     object file.  You can control this behavior for a specific function
27419     by using the function attribute 'function_return'.  *Note Function
27420     Attributes::.
27421
27422     Note that '-mindirect-return=thunk-extern' is compatible with
27423     '-fcf-protection=branch' since the external thunk can be made to
27424     enable control-flow check.
27425
27426     Note that '-mcmodel=large' is incompatible with
27427     '-mfunction-return=thunk' and '-mfunction-return=thunk-extern'
27428     since the thunk function may not be reachable in the large code
27429     model.
27430
27431'-mindirect-branch-register'
27432     Force indirect call and jump via register.
27433
27434 These '-m' switches are supported in addition to the above on x86-64
27435processors in 64-bit environments.
27436
27437'-m32'
27438'-m64'
27439'-mx32'
27440'-m16'
27441'-miamcu'
27442     Generate code for a 16-bit, 32-bit or 64-bit environment.  The
27443     '-m32' option sets 'int', 'long', and pointer types to 32 bits, and
27444     generates code that runs on any i386 system.
27445
27446     The '-m64' option sets 'int' to 32 bits and 'long' and pointer
27447     types to 64 bits, and generates code for the x86-64 architecture.
27448     For Darwin only the '-m64' option also turns off the '-fno-pic' and
27449     '-mdynamic-no-pic' options.
27450
27451     The '-mx32' option sets 'int', 'long', and pointer types to 32
27452     bits, and generates code for the x86-64 architecture.
27453
27454     The '-m16' option is the same as '-m32', except for that it outputs
27455     the '.code16gcc' assembly directive at the beginning of the
27456     assembly output so that the binary can run in 16-bit mode.
27457
27458     The '-miamcu' option generates code which conforms to Intel MCU
27459     psABI. It requires the '-m32' option to be turned on.
27460
27461'-mno-red-zone'
27462     Do not use a so-called "red zone" for x86-64 code.  The red zone is
27463     mandated by the x86-64 ABI; it is a 128-byte area beyond the
27464     location of the stack pointer that is not modified by signal or
27465     interrupt handlers and therefore can be used for temporary data
27466     without adjusting the stack pointer.  The flag '-mno-red-zone'
27467     disables this red zone.
27468
27469'-mcmodel=small'
27470     Generate code for the small code model: the program and its symbols
27471     must be linked in the lower 2 GB of the address space.  Pointers
27472     are 64 bits.  Programs can be statically or dynamically linked.
27473     This is the default code model.
27474
27475'-mcmodel=kernel'
27476     Generate code for the kernel code model.  The kernel runs in the
27477     negative 2 GB of the address space.  This model has to be used for
27478     Linux kernel code.
27479
27480'-mcmodel=medium'
27481     Generate code for the medium model: the program is linked in the
27482     lower 2 GB of the address space.  Small symbols are also placed
27483     there.  Symbols with sizes larger than '-mlarge-data-threshold' are
27484     put into large data or BSS sections and can be located above 2GB.
27485     Programs can be statically or dynamically linked.
27486
27487'-mcmodel=large'
27488     Generate code for the large model.  This model makes no assumptions
27489     about addresses and sizes of sections.
27490
27491'-maddress-mode=long'
27492     Generate code for long address mode.  This is only supported for
27493     64-bit and x32 environments.  It is the default address mode for
27494     64-bit environments.
27495
27496'-maddress-mode=short'
27497     Generate code for short address mode.  This is only supported for
27498     32-bit and x32 environments.  It is the default address mode for
27499     32-bit and x32 environments.
27500
27501
27502File: gcc.info,  Node: x86 Windows Options,  Next: Xstormy16 Options,  Prev: x86 Options,  Up: Submodel Options
27503
275043.19.60 x86 Windows Options
27505---------------------------
27506
27507These additional options are available for Microsoft Windows targets:
27508
27509'-mconsole'
27510     This option specifies that a console application is to be
27511     generated, by instructing the linker to set the PE header subsystem
27512     type required for console applications.  This option is available
27513     for Cygwin and MinGW targets and is enabled by default on those
27514     targets.
27515
27516'-mdll'
27517     This option is available for Cygwin and MinGW targets.  It
27518     specifies that a DLL--a dynamic link library--is to be generated,
27519     enabling the selection of the required runtime startup object and
27520     entry point.
27521
27522'-mnop-fun-dllimport'
27523     This option is available for Cygwin and MinGW targets.  It
27524     specifies that the 'dllimport' attribute should be ignored.
27525
27526'-mthread'
27527     This option is available for MinGW targets.  It specifies that
27528     MinGW-specific thread support is to be used.
27529
27530'-municode'
27531     This option is available for MinGW-w64 targets.  It causes the
27532     'UNICODE' preprocessor macro to be predefined, and chooses
27533     Unicode-capable runtime startup code.
27534
27535'-mwin32'
27536     This option is available for Cygwin and MinGW targets.  It
27537     specifies that the typical Microsoft Windows predefined macros are
27538     to be set in the pre-processor, but does not influence the choice
27539     of runtime library/startup code.
27540
27541'-mwindows'
27542     This option is available for Cygwin and MinGW targets.  It
27543     specifies that a GUI application is to be generated by instructing
27544     the linker to set the PE header subsystem type appropriately.
27545
27546'-fno-set-stack-executable'
27547     This option is available for MinGW targets.  It specifies that the
27548     executable flag for the stack used by nested functions isn't set.
27549     This is necessary for binaries running in kernel mode of Microsoft
27550     Windows, as there the User32 API, which is used to set executable
27551     privileges, isn't available.
27552
27553'-fwritable-relocated-rdata'
27554     This option is available for MinGW and Cygwin targets.  It
27555     specifies that relocated-data in read-only section is put into the
27556     '.data' section.  This is a necessary for older runtimes not
27557     supporting modification of '.rdata' sections for pseudo-relocation.
27558
27559'-mpe-aligned-commons'
27560     This option is available for Cygwin and MinGW targets.  It
27561     specifies that the GNU extension to the PE file format that permits
27562     the correct alignment of COMMON variables should be used when
27563     generating code.  It is enabled by default if GCC detects that the
27564     target assembler found during configuration supports the feature.
27565
27566 See also under *note x86 Options:: for standard options.
27567
27568
27569File: gcc.info,  Node: Xstormy16 Options,  Next: Xtensa Options,  Prev: x86 Windows Options,  Up: Submodel Options
27570
275713.19.61 Xstormy16 Options
27572-------------------------
27573
27574These options are defined for Xstormy16:
27575
27576'-msim'
27577     Choose startup files and linker script suitable for the simulator.
27578
27579
27580File: gcc.info,  Node: Xtensa Options,  Next: zSeries Options,  Prev: Xstormy16 Options,  Up: Submodel Options
27581
275823.19.62 Xtensa Options
27583----------------------
27584
27585These options are supported for Xtensa targets:
27586
27587'-mconst16'
27588'-mno-const16'
27589     Enable or disable use of 'CONST16' instructions for loading
27590     constant values.  The 'CONST16' instruction is currently not a
27591     standard option from Tensilica.  When enabled, 'CONST16'
27592     instructions are always used in place of the standard 'L32R'
27593     instructions.  The use of 'CONST16' is enabled by default only if
27594     the 'L32R' instruction is not available.
27595
27596'-mfused-madd'
27597'-mno-fused-madd'
27598     Enable or disable use of fused multiply/add and multiply/subtract
27599     instructions in the floating-point option.  This has no effect if
27600     the floating-point option is not also enabled.  Disabling fused
27601     multiply/add and multiply/subtract instructions forces the compiler
27602     to use separate instructions for the multiply and add/subtract
27603     operations.  This may be desirable in some cases where strict IEEE
27604     754-compliant results are required: the fused multiply add/subtract
27605     instructions do not round the intermediate result, thereby
27606     producing results with _more_ bits of precision than specified by
27607     the IEEE standard.  Disabling fused multiply add/subtract
27608     instructions also ensures that the program output is not sensitive
27609     to the compiler's ability to combine multiply and add/subtract
27610     operations.
27611
27612'-mserialize-volatile'
27613'-mno-serialize-volatile'
27614     When this option is enabled, GCC inserts 'MEMW' instructions before
27615     'volatile' memory references to guarantee sequential consistency.
27616     The default is '-mserialize-volatile'.  Use
27617     '-mno-serialize-volatile' to omit the 'MEMW' instructions.
27618
27619'-mforce-no-pic'
27620     For targets, like GNU/Linux, where all user-mode Xtensa code must
27621     be position-independent code (PIC), this option disables PIC for
27622     compiling kernel code.
27623
27624'-mtext-section-literals'
27625'-mno-text-section-literals'
27626     These options control the treatment of literal pools.  The default
27627     is '-mno-text-section-literals', which places literals in a
27628     separate section in the output file.  This allows the literal pool
27629     to be placed in a data RAM/ROM, and it also allows the linker to
27630     combine literal pools from separate object files to remove
27631     redundant literals and improve code size.  With
27632     '-mtext-section-literals', the literals are interspersed in the
27633     text section in order to keep them as close as possible to their
27634     references.  This may be necessary for large assembly files.
27635     Literals for each function are placed right before that function.
27636
27637'-mauto-litpools'
27638'-mno-auto-litpools'
27639     These options control the treatment of literal pools.  The default
27640     is '-mno-auto-litpools', which places literals in a separate
27641     section in the output file unless '-mtext-section-literals' is
27642     used.  With '-mauto-litpools' the literals are interspersed in the
27643     text section by the assembler.  Compiler does not produce explicit
27644     '.literal' directives and loads literals into registers with 'MOVI'
27645     instructions instead of 'L32R' to let the assembler do relaxation
27646     and place literals as necessary.  This option allows assembler to
27647     create several literal pools per function and assemble very big
27648     functions, which may not be possible with
27649     '-mtext-section-literals'.
27650
27651'-mtarget-align'
27652'-mno-target-align'
27653     When this option is enabled, GCC instructs the assembler to
27654     automatically align instructions to reduce branch penalties at the
27655     expense of some code density.  The assembler attempts to widen
27656     density instructions to align branch targets and the instructions
27657     following call instructions.  If there are not enough preceding
27658     safe density instructions to align a target, no widening is
27659     performed.  The default is '-mtarget-align'.  These options do not
27660     affect the treatment of auto-aligned instructions like 'LOOP',
27661     which the assembler always aligns, either by widening density
27662     instructions or by inserting NOP instructions.
27663
27664'-mlongcalls'
27665'-mno-longcalls'
27666     When this option is enabled, GCC instructs the assembler to
27667     translate direct calls to indirect calls unless it can determine
27668     that the target of a direct call is in the range allowed by the
27669     call instruction.  This translation typically occurs for calls to
27670     functions in other source files.  Specifically, the assembler
27671     translates a direct 'CALL' instruction into an 'L32R' followed by a
27672     'CALLX' instruction.  The default is '-mno-longcalls'.  This option
27673     should be used in programs where the call target can potentially be
27674     out of range.  This option is implemented in the assembler, not the
27675     compiler, so the assembly code generated by GCC still shows direct
27676     call instructions--look at the disassembled object code to see the
27677     actual instructions.  Note that the assembler uses an indirect call
27678     for every cross-file call, not just those that really are out of
27679     range.
27680
27681
27682File: gcc.info,  Node: zSeries Options,  Prev: Xtensa Options,  Up: Submodel Options
27683
276843.19.63 zSeries Options
27685-----------------------
27686
27687These are listed under *Note S/390 and zSeries Options::.
27688
27689
27690File: gcc.info,  Node: Spec Files,  Next: Environment Variables,  Prev: Submodel Options,  Up: Invoking GCC
27691
276923.20 Specifying Subprocesses and the Switches to Pass to Them
27693=============================================================
27694
27695'gcc' is a driver program.  It performs its job by invoking a sequence
27696of other programs to do the work of compiling, assembling and linking.
27697GCC interprets its command-line parameters and uses these to deduce
27698which programs it should invoke, and which command-line options it ought
27699to place on their command lines.  This behavior is controlled by "spec
27700strings".  In most cases there is one spec string for each program that
27701GCC can invoke, but a few programs have multiple spec strings to control
27702their behavior.  The spec strings built into GCC can be overridden by
27703using the '-specs=' command-line switch to specify a spec file.
27704
27705 "Spec files" are plain-text files that are used to construct spec
27706strings.  They consist of a sequence of directives separated by blank
27707lines.  The type of directive is determined by the first non-whitespace
27708character on the line, which can be one of the following:
27709
27710'%COMMAND'
27711     Issues a COMMAND to the spec file processor.  The commands that can
27712     appear here are:
27713
27714     '%include <FILE>'
27715          Search for FILE and insert its text at the current point in
27716          the specs file.
27717
27718     '%include_noerr <FILE>'
27719          Just like '%include', but do not generate an error message if
27720          the include file cannot be found.
27721
27722     '%rename OLD_NAME NEW_NAME'
27723          Rename the spec string OLD_NAME to NEW_NAME.
27724
27725'*[SPEC_NAME]:'
27726     This tells the compiler to create, override or delete the named
27727     spec string.  All lines after this directive up to the next
27728     directive or blank line are considered to be the text for the spec
27729     string.  If this results in an empty string then the spec is
27730     deleted.  (Or, if the spec did not exist, then nothing happens.)
27731     Otherwise, if the spec does not currently exist a new spec is
27732     created.  If the spec does exist then its contents are overridden
27733     by the text of this directive, unless the first character of that
27734     text is the '+' character, in which case the text is appended to
27735     the spec.
27736
27737'[SUFFIX]:'
27738     Creates a new '[SUFFIX] spec' pair.  All lines after this directive
27739     and up to the next directive or blank line are considered to make
27740     up the spec string for the indicated suffix.  When the compiler
27741     encounters an input file with the named suffix, it processes the
27742     spec string in order to work out how to compile that file.  For
27743     example:
27744
27745          .ZZ:
27746          z-compile -input %i
27747
27748     This says that any input file whose name ends in '.ZZ' should be
27749     passed to the program 'z-compile', which should be invoked with the
27750     command-line switch '-input' and with the result of performing the
27751     '%i' substitution.  (See below.)
27752
27753     As an alternative to providing a spec string, the text following a
27754     suffix directive can be one of the following:
27755
27756     '@LANGUAGE'
27757          This says that the suffix is an alias for a known LANGUAGE.
27758          This is similar to using the '-x' command-line switch to GCC
27759          to specify a language explicitly.  For example:
27760
27761               .ZZ:
27762               @c++
27763
27764          Says that .ZZ files are, in fact, C++ source files.
27765
27766     '#NAME'
27767          This causes an error messages saying:
27768
27769               NAME compiler not installed on this system.
27770
27771     GCC already has an extensive list of suffixes built into it.  This
27772     directive adds an entry to the end of the list of suffixes, but
27773     since the list is searched from the end backwards, it is
27774     effectively possible to override earlier entries using this
27775     technique.
27776
27777 GCC has the following spec strings built into it.  Spec files can
27778override these strings or create their own.  Note that individual
27779targets can also add their own spec strings to this list.
27780
27781     asm          Options to pass to the assembler
27782     asm_final    Options to pass to the assembler post-processor
27783     cpp          Options to pass to the C preprocessor
27784     cc1          Options to pass to the C compiler
27785     cc1plus      Options to pass to the C++ compiler
27786     endfile      Object files to include at the end of the link
27787     link         Options to pass to the linker
27788     lib          Libraries to include on the command line to the linker
27789     libgcc       Decides which GCC support library to pass to the linker
27790     linker       Sets the name of the linker
27791     predefines   Defines to be passed to the C preprocessor
27792     signed_char  Defines to pass to CPP to say whether char is signed
27793                  by default
27794     startfile    Object files to include at the start of the link
27795
27796 Here is a small example of a spec file:
27797
27798     %rename lib                 old_lib
27799
27800     *lib:
27801     --start-group -lgcc -lc -leval1 --end-group %(old_lib)
27802
27803 This example renames the spec called 'lib' to 'old_lib' and then
27804overrides the previous definition of 'lib' with a new one.  The new
27805definition adds in some extra command-line options before including the
27806text of the old definition.
27807
27808 "Spec strings" are a list of command-line options to be passed to their
27809corresponding program.  In addition, the spec strings can contain
27810'%'-prefixed sequences to substitute variable text or to conditionally
27811insert text into the command line.  Using these constructs it is
27812possible to generate quite complex command lines.
27813
27814 Here is a table of all defined '%'-sequences for spec strings.  Note
27815that spaces are not generated automatically around the results of
27816expanding these sequences.  Therefore you can concatenate them together
27817or combine them with constant text in a single argument.
27818
27819'%%'
27820     Substitute one '%' into the program name or argument.
27821
27822'%i'
27823     Substitute the name of the input file being processed.
27824
27825'%b'
27826     Substitute the basename of the input file being processed.  This is
27827     the substring up to (and not including) the last period and not
27828     including the directory.
27829
27830'%B'
27831     This is the same as '%b', but include the file suffix (text after
27832     the last period).
27833
27834'%d'
27835     Marks the argument containing or following the '%d' as a temporary
27836     file name, so that that file is deleted if GCC exits successfully.
27837     Unlike '%g', this contributes no text to the argument.
27838
27839'%gSUFFIX'
27840     Substitute a file name that has suffix SUFFIX and is chosen once
27841     per compilation, and mark the argument in the same way as '%d'.  To
27842     reduce exposure to denial-of-service attacks, the file name is now
27843     chosen in a way that is hard to predict even when previously chosen
27844     file names are known.  For example, '%g.s ... %g.o ... %g.s' might
27845     turn into 'ccUVUUAU.s ccXYAXZ12.o ccUVUUAU.s'.  SUFFIX matches the
27846     regexp '[.A-Za-z]*' or the special string '%O', which is treated
27847     exactly as if '%O' had been preprocessed.  Previously, '%g' was
27848     simply substituted with a file name chosen once per compilation,
27849     without regard to any appended suffix (which was therefore treated
27850     just like ordinary text), making such attacks more likely to
27851     succeed.
27852
27853'%uSUFFIX'
27854     Like '%g', but generates a new temporary file name each time it
27855     appears instead of once per compilation.
27856
27857'%USUFFIX'
27858     Substitutes the last file name generated with '%uSUFFIX',
27859     generating a new one if there is no such last file name.  In the
27860     absence of any '%uSUFFIX', this is just like '%gSUFFIX', except
27861     they don't share the same suffix _space_, so '%g.s ... %U.s ...
27862     %g.s ... %U.s' involves the generation of two distinct file names,
27863     one for each '%g.s' and another for each '%U.s'.  Previously, '%U'
27864     was simply substituted with a file name chosen for the previous
27865     '%u', without regard to any appended suffix.
27866
27867'%jSUFFIX'
27868     Substitutes the name of the 'HOST_BIT_BUCKET', if any, and if it is
27869     writable, and if '-save-temps' is not used; otherwise, substitute
27870     the name of a temporary file, just like '%u'.  This temporary file
27871     is not meant for communication between processes, but rather as a
27872     junk disposal mechanism.
27873
27874'%|SUFFIX'
27875'%mSUFFIX'
27876     Like '%g', except if '-pipe' is in effect.  In that case '%|'
27877     substitutes a single dash and '%m' substitutes nothing at all.
27878     These are the two most common ways to instruct a program that it
27879     should read from standard input or write to standard output.  If
27880     you need something more elaborate you can use an '%{pipe:'X'}'
27881     construct: see for example 'gcc/fortran/lang-specs.h'.
27882
27883'%.SUFFIX'
27884     Substitutes .SUFFIX for the suffixes of a matched switch's args
27885     when it is subsequently output with '%*'.  SUFFIX is terminated by
27886     the next space or %.
27887
27888'%w'
27889     Marks the argument containing or following the '%w' as the
27890     designated output file of this compilation.  This puts the argument
27891     into the sequence of arguments that '%o' substitutes.
27892
27893'%o'
27894     Substitutes the names of all the output files, with spaces
27895     automatically placed around them.  You should write spaces around
27896     the '%o' as well or the results are undefined.  '%o' is for use in
27897     the specs for running the linker.  Input files whose names have no
27898     recognized suffix are not compiled at all, but they are included
27899     among the output files, so they are linked.
27900
27901'%O'
27902     Substitutes the suffix for object files.  Note that this is handled
27903     specially when it immediately follows '%g, %u, or %U', because of
27904     the need for those to form complete file names.  The handling is
27905     such that '%O' is treated exactly as if it had already been
27906     substituted, except that '%g, %u, and %U' do not currently support
27907     additional SUFFIX characters following '%O' as they do following,
27908     for example, '.o'.
27909
27910'%p'
27911     Substitutes the standard macro predefinitions for the current
27912     target machine.  Use this when running 'cpp'.
27913
27914'%P'
27915     Like '%p', but puts '__' before and after the name of each
27916     predefined macro, except for macros that start with '__' or with
27917     '_L', where L is an uppercase letter.  This is for ISO C.
27918
27919'%I'
27920     Substitute any of '-iprefix' (made from 'GCC_EXEC_PREFIX'),
27921     '-isysroot' (made from 'TARGET_SYSTEM_ROOT'), '-isystem' (made from
27922     'COMPILER_PATH' and '-B' options) and '-imultilib' as necessary.
27923
27924'%s'
27925     Current argument is the name of a library or startup file of some
27926     sort.  Search for that file in a standard list of directories and
27927     substitute the full name found.  The current working directory is
27928     included in the list of directories scanned.
27929
27930'%T'
27931     Current argument is the name of a linker script.  Search for that
27932     file in the current list of directories to scan for libraries.  If
27933     the file is located insert a '--script' option into the command
27934     line followed by the full path name found.  If the file is not
27935     found then generate an error message.  Note: the current working
27936     directory is not searched.
27937
27938'%eSTR'
27939     Print STR as an error message.  STR is terminated by a newline.
27940     Use this when inconsistent options are detected.
27941
27942'%(NAME)'
27943     Substitute the contents of spec string NAME at this point.
27944
27945'%x{OPTION}'
27946     Accumulate an option for '%X'.
27947
27948'%X'
27949     Output the accumulated linker options specified by '-Wl' or a '%x'
27950     spec string.
27951
27952'%Y'
27953     Output the accumulated assembler options specified by '-Wa'.
27954
27955'%Z'
27956     Output the accumulated preprocessor options specified by '-Wp'.
27957
27958'%a'
27959     Process the 'asm' spec.  This is used to compute the switches to be
27960     passed to the assembler.
27961
27962'%A'
27963     Process the 'asm_final' spec.  This is a spec string for passing
27964     switches to an assembler post-processor, if such a program is
27965     needed.
27966
27967'%l'
27968     Process the 'link' spec.  This is the spec for computing the
27969     command line passed to the linker.  Typically it makes use of the
27970     '%L %G %S %D and %E' sequences.
27971
27972'%D'
27973     Dump out a '-L' option for each directory that GCC believes might
27974     contain startup files.  If the target supports multilibs then the
27975     current multilib directory is prepended to each of these paths.
27976
27977'%L'
27978     Process the 'lib' spec.  This is a spec string for deciding which
27979     libraries are included on the command line to the linker.
27980
27981'%G'
27982     Process the 'libgcc' spec.  This is a spec string for deciding
27983     which GCC support library is included on the command line to the
27984     linker.
27985
27986'%S'
27987     Process the 'startfile' spec.  This is a spec for deciding which
27988     object files are the first ones passed to the linker.  Typically
27989     this might be a file named 'crt0.o'.
27990
27991'%E'
27992     Process the 'endfile' spec.  This is a spec string that specifies
27993     the last object files that are passed to the linker.
27994
27995'%C'
27996     Process the 'cpp' spec.  This is used to construct the arguments to
27997     be passed to the C preprocessor.
27998
27999'%1'
28000     Process the 'cc1' spec.  This is used to construct the options to
28001     be passed to the actual C compiler ('cc1').
28002
28003'%2'
28004     Process the 'cc1plus' spec.  This is used to construct the options
28005     to be passed to the actual C++ compiler ('cc1plus').
28006
28007'%*'
28008     Substitute the variable part of a matched option.  See below.  Note
28009     that each comma in the substituted string is replaced by a single
28010     space.
28011
28012'%<S'
28013     Remove all occurrences of '-S' from the command line.  Note--this
28014     command is position dependent.  '%' commands in the spec string
28015     before this one see '-S', '%' commands in the spec string after
28016     this one do not.
28017
28018'%:FUNCTION(ARGS)'
28019     Call the named function FUNCTION, passing it ARGS.  ARGS is first
28020     processed as a nested spec string, then split into an argument
28021     vector in the usual fashion.  The function returns a string which
28022     is processed as if it had appeared literally as part of the current
28023     spec.
28024
28025     The following built-in spec functions are provided:
28026
28027     'getenv'
28028          The 'getenv' spec function takes two arguments: an environment
28029          variable name and a string.  If the environment variable is
28030          not defined, a fatal error is issued.  Otherwise, the return
28031          value is the value of the environment variable concatenated
28032          with the string.  For example, if 'TOPDIR' is defined as
28033          '/path/to/top', then:
28034
28035               %:getenv(TOPDIR /include)
28036
28037          expands to '/path/to/top/include'.
28038
28039     'if-exists'
28040          The 'if-exists' spec function takes one argument, an absolute
28041          pathname to a file.  If the file exists, 'if-exists' returns
28042          the pathname.  Here is a small example of its usage:
28043
28044               *startfile:
28045               crt0%O%s %:if-exists(crti%O%s) crtbegin%O%s
28046
28047     'if-exists-else'
28048          The 'if-exists-else' spec function is similar to the
28049          'if-exists' spec function, except that it takes two arguments.
28050          The first argument is an absolute pathname to a file.  If the
28051          file exists, 'if-exists-else' returns the pathname.  If it
28052          does not exist, it returns the second argument.  This way,
28053          'if-exists-else' can be used to select one file or another,
28054          based on the existence of the first.  Here is a small example
28055          of its usage:
28056
28057               *startfile:
28058               crt0%O%s %:if-exists(crti%O%s) \
28059               %:if-exists-else(crtbeginT%O%s crtbegin%O%s)
28060
28061     'replace-outfile'
28062          The 'replace-outfile' spec function takes two arguments.  It
28063          looks for the first argument in the outfiles array and
28064          replaces it with the second argument.  Here is a small example
28065          of its usage:
28066
28067               %{fgnu-runtime:%:replace-outfile(-lobjc -lobjc-gnu)}
28068
28069     'remove-outfile'
28070          The 'remove-outfile' spec function takes one argument.  It
28071          looks for the first argument in the outfiles array and removes
28072          it.  Here is a small example its usage:
28073
28074               %:remove-outfile(-lm)
28075
28076     'pass-through-libs'
28077          The 'pass-through-libs' spec function takes any number of
28078          arguments.  It finds any '-l' options and any non-options
28079          ending in '.a' (which it assumes are the names of linker input
28080          library archive files) and returns a result containing all the
28081          found arguments each prepended by '-plugin-opt=-pass-through='
28082          and joined by spaces.  This list is intended to be passed to
28083          the LTO linker plugin.
28084
28085               %:pass-through-libs(%G %L %G)
28086
28087     'print-asm-header'
28088          The 'print-asm-header' function takes no arguments and simply
28089          prints a banner like:
28090
28091               Assembler options
28092               =================
28093
28094               Use "-Wa,OPTION" to pass "OPTION" to the assembler.
28095
28096          It is used to separate compiler options from assembler options
28097          in the '--target-help' output.
28098
28099'%{S}'
28100     Substitutes the '-S' switch, if that switch is given to GCC.  If
28101     that switch is not specified, this substitutes nothing.  Note that
28102     the leading dash is omitted when specifying this option, and it is
28103     automatically inserted if the substitution is performed.  Thus the
28104     spec string '%{foo}' matches the command-line option '-foo' and
28105     outputs the command-line option '-foo'.
28106
28107'%W{S}'
28108     Like %{'S'} but mark last argument supplied within as a file to be
28109     deleted on failure.
28110
28111'%{S*}'
28112     Substitutes all the switches specified to GCC whose names start
28113     with '-S', but which also take an argument.  This is used for
28114     switches like '-o', '-D', '-I', etc.  GCC considers '-o foo' as
28115     being one switch whose name starts with 'o'.  %{o*} substitutes
28116     this text, including the space.  Thus two arguments are generated.
28117
28118'%{S*&T*}'
28119     Like %{'S'*}, but preserve order of 'S' and 'T' options (the order
28120     of 'S' and 'T' in the spec is not significant).  There can be any
28121     number of ampersand-separated variables; for each the wild card is
28122     optional.  Useful for CPP as '%{D*&U*&A*}'.
28123
28124'%{S:X}'
28125     Substitutes 'X', if the '-S' switch is given to GCC.
28126
28127'%{!S:X}'
28128     Substitutes 'X', if the '-S' switch is _not_ given to GCC.
28129
28130'%{S*:X}'
28131     Substitutes 'X' if one or more switches whose names start with '-S'
28132     are specified to GCC.  Normally 'X' is substituted only once, no
28133     matter how many such switches appeared.  However, if '%*' appears
28134     somewhere in 'X', then 'X' is substituted once for each matching
28135     switch, with the '%*' replaced by the part of that switch matching
28136     the '*'.
28137
28138     If '%*' appears as the last part of a spec sequence then a space is
28139     added after the end of the last substitution.  If there is more
28140     text in the sequence, however, then a space is not generated.  This
28141     allows the '%*' substitution to be used as part of a larger string.
28142     For example, a spec string like this:
28143
28144          %{mcu=*:--script=%*/memory.ld}
28145
28146     when matching an option like '-mcu=newchip' produces:
28147
28148          --script=newchip/memory.ld
28149
28150'%{.S:X}'
28151     Substitutes 'X', if processing a file with suffix 'S'.
28152
28153'%{!.S:X}'
28154     Substitutes 'X', if _not_ processing a file with suffix 'S'.
28155
28156'%{,S:X}'
28157     Substitutes 'X', if processing a file for language 'S'.
28158
28159'%{!,S:X}'
28160     Substitutes 'X', if not processing a file for language 'S'.
28161
28162'%{S|P:X}'
28163     Substitutes 'X' if either '-S' or '-P' is given to GCC.  This may
28164     be combined with '!', '.', ',', and '*' sequences as well, although
28165     they have a stronger binding than the '|'.  If '%*' appears in 'X',
28166     all of the alternatives must be starred, and only the first
28167     matching alternative is substituted.
28168
28169     For example, a spec string like this:
28170
28171          %{.c:-foo} %{!.c:-bar} %{.c|d:-baz} %{!.c|d:-boggle}
28172
28173     outputs the following command-line options from the following input
28174     command-line options:
28175
28176          fred.c        -foo -baz
28177          jim.d         -bar -boggle
28178          -d fred.c     -foo -baz -boggle
28179          -d jim.d      -bar -baz -boggle
28180
28181'%{S:X; T:Y; :D}'
28182
28183     If 'S' is given to GCC, substitutes 'X'; else if 'T' is given to
28184     GCC, substitutes 'Y'; else substitutes 'D'.  There can be as many
28185     clauses as you need.  This may be combined with '.', ',', '!', '|',
28186     and '*' as needed.
28187
28188 The switch matching text 'S' in a '%{S}', '%{S:X}' or similar construct
28189can use a backslash to ignore the special meaning of the character
28190following it, thus allowing literal matching of a character that is
28191otherwise specially treated.  For example, '%{std=iso9899\:1999:X}'
28192substitutes 'X' if the '-std=iso9899:1999' option is given.
28193
28194 The conditional text 'X' in a '%{S:X}' or similar construct may contain
28195other nested '%' constructs or spaces, or even newlines.  They are
28196processed as usual, as described above.  Trailing white space in 'X' is
28197ignored.  White space may also appear anywhere on the left side of the
28198colon in these constructs, except between '.' or '*' and the
28199corresponding word.
28200
28201 The '-O', '-f', '-m', and '-W' switches are handled specifically in
28202these constructs.  If another value of '-O' or the negated form of a
28203'-f', '-m', or '-W' switch is found later in the command line, the
28204earlier switch value is ignored, except with {'S'*} where 'S' is just
28205one letter, which passes all matching options.
28206
28207 The character '|' at the beginning of the predicate text is used to
28208indicate that a command should be piped to the following command, but
28209only if '-pipe' is specified.
28210
28211 It is built into GCC which switches take arguments and which do not.
28212(You might think it would be useful to generalize this to allow each
28213compiler's spec to say which switches take arguments.  But this cannot
28214be done in a consistent fashion.  GCC cannot even decide which input
28215files have been specified without knowing which switches take arguments,
28216and it must know which input files to compile in order to tell which
28217compilers to run).
28218
28219 GCC also knows implicitly that arguments starting in '-l' are to be
28220treated as compiler output files, and passed to the linker in their
28221proper position among the other output files.
28222
28223
28224File: gcc.info,  Node: Environment Variables,  Next: Precompiled Headers,  Prev: Spec Files,  Up: Invoking GCC
28225
282263.21 Environment Variables Affecting GCC
28227========================================
28228
28229This section describes several environment variables that affect how GCC
28230operates.  Some of them work by specifying directories or prefixes to
28231use when searching for various kinds of files.  Some are used to specify
28232other aspects of the compilation environment.
28233
28234 Note that you can also specify places to search using options such as
28235'-B', '-I' and '-L' (*note Directory Options::).  These take precedence
28236over places specified using environment variables, which in turn take
28237precedence over those specified by the configuration of GCC.  *Note
28238Controlling the Compilation Driver 'gcc': (gccint)Driver.
28239
28240'LANG'
28241'LC_CTYPE'
28242'LC_MESSAGES'
28243'LC_ALL'
28244     These environment variables control the way that GCC uses
28245     localization information which allows GCC to work with different
28246     national conventions.  GCC inspects the locale categories
28247     'LC_CTYPE' and 'LC_MESSAGES' if it has been configured to do so.
28248     These locale categories can be set to any value supported by your
28249     installation.  A typical value is 'en_GB.UTF-8' for English in the
28250     United Kingdom encoded in UTF-8.
28251
28252     The 'LC_CTYPE' environment variable specifies character
28253     classification.  GCC uses it to determine the character boundaries
28254     in a string; this is needed for some multibyte encodings that
28255     contain quote and escape characters that are otherwise interpreted
28256     as a string end or escape.
28257
28258     The 'LC_MESSAGES' environment variable specifies the language to
28259     use in diagnostic messages.
28260
28261     If the 'LC_ALL' environment variable is set, it overrides the value
28262     of 'LC_CTYPE' and 'LC_MESSAGES'; otherwise, 'LC_CTYPE' and
28263     'LC_MESSAGES' default to the value of the 'LANG' environment
28264     variable.  If none of these variables are set, GCC defaults to
28265     traditional C English behavior.
28266
28267'TMPDIR'
28268     If 'TMPDIR' is set, it specifies the directory to use for temporary
28269     files.  GCC uses temporary files to hold the output of one stage of
28270     compilation which is to be used as input to the next stage: for
28271     example, the output of the preprocessor, which is the input to the
28272     compiler proper.
28273
28274'GCC_COMPARE_DEBUG'
28275     Setting 'GCC_COMPARE_DEBUG' is nearly equivalent to passing
28276     '-fcompare-debug' to the compiler driver.  See the documentation of
28277     this option for more details.
28278
28279'GCC_EXEC_PREFIX'
28280     If 'GCC_EXEC_PREFIX' is set, it specifies a prefix to use in the
28281     names of the subprograms executed by the compiler.  No slash is
28282     added when this prefix is combined with the name of a subprogram,
28283     but you can specify a prefix that ends with a slash if you wish.
28284
28285     If 'GCC_EXEC_PREFIX' is not set, GCC attempts to figure out an
28286     appropriate prefix to use based on the pathname it is invoked with.
28287
28288     If GCC cannot find the subprogram using the specified prefix, it
28289     tries looking in the usual places for the subprogram.
28290
28291     The default value of 'GCC_EXEC_PREFIX' is 'PREFIX/lib/gcc/' where
28292     PREFIX is the prefix to the installed compiler.  In many cases
28293     PREFIX is the value of 'prefix' when you ran the 'configure'
28294     script.
28295
28296     Other prefixes specified with '-B' take precedence over this
28297     prefix.
28298
28299     This prefix is also used for finding files such as 'crt0.o' that
28300     are used for linking.
28301
28302     In addition, the prefix is used in an unusual way in finding the
28303     directories to search for header files.  For each of the standard
28304     directories whose name normally begins with '/usr/local/lib/gcc'
28305     (more precisely, with the value of 'GCC_INCLUDE_DIR'), GCC tries
28306     replacing that beginning with the specified prefix to produce an
28307     alternate directory name.  Thus, with '-Bfoo/', GCC searches
28308     'foo/bar' just before it searches the standard directory
28309     '/usr/local/lib/bar'.  If a standard directory begins with the
28310     configured PREFIX then the value of PREFIX is replaced by
28311     'GCC_EXEC_PREFIX' when looking for header files.
28312
28313'COMPILER_PATH'
28314     The value of 'COMPILER_PATH' is a colon-separated list of
28315     directories, much like 'PATH'.  GCC tries the directories thus
28316     specified when searching for subprograms, if it cannot find the
28317     subprograms using 'GCC_EXEC_PREFIX'.
28318
28319'LIBRARY_PATH'
28320     The value of 'LIBRARY_PATH' is a colon-separated list of
28321     directories, much like 'PATH'.  When configured as a native
28322     compiler, GCC tries the directories thus specified when searching
28323     for special linker files, if it cannot find them using
28324     'GCC_EXEC_PREFIX'.  Linking using GCC also uses these directories
28325     when searching for ordinary libraries for the '-l' option (but
28326     directories specified with '-L' come first).
28327
28328'LANG'
28329     This variable is used to pass locale information to the compiler.
28330     One way in which this information is used is to determine the
28331     character set to be used when character literals, string literals
28332     and comments are parsed in C and C++.  When the compiler is
28333     configured to allow multibyte characters, the following values for
28334     'LANG' are recognized:
28335
28336     'C-JIS'
28337          Recognize JIS characters.
28338     'C-SJIS'
28339          Recognize SJIS characters.
28340     'C-EUCJP'
28341          Recognize EUCJP characters.
28342
28343     If 'LANG' is not defined, or if it has some other value, then the
28344     compiler uses 'mblen' and 'mbtowc' as defined by the default locale
28345     to recognize and translate multibyte characters.
28346
28347Some additional environment variables affect the behavior of the
28348preprocessor.
28349
28350'CPATH'
28351'C_INCLUDE_PATH'
28352'CPLUS_INCLUDE_PATH'
28353'OBJC_INCLUDE_PATH'
28354     Each variable's value is a list of directories separated by a
28355     special character, much like 'PATH', in which to look for header
28356     files.  The special character, 'PATH_SEPARATOR', is
28357     target-dependent and determined at GCC build time.  For Microsoft
28358     Windows-based targets it is a semicolon, and for almost all other
28359     targets it is a colon.
28360
28361     'CPATH' specifies a list of directories to be searched as if
28362     specified with '-I', but after any paths given with '-I' options on
28363     the command line.  This environment variable is used regardless of
28364     which language is being preprocessed.
28365
28366     The remaining environment variables apply only when preprocessing
28367     the particular language indicated.  Each specifies a list of
28368     directories to be searched as if specified with '-isystem', but
28369     after any paths given with '-isystem' options on the command line.
28370
28371     In all these variables, an empty element instructs the compiler to
28372     search its current working directory.  Empty elements can appear at
28373     the beginning or end of a path.  For instance, if the value of
28374     'CPATH' is ':/special/include', that has the same effect as
28375     '-I. -I/special/include'.
28376
28377'DEPENDENCIES_OUTPUT'
28378     If this variable is set, its value specifies how to output
28379     dependencies for Make based on the non-system header files
28380     processed by the compiler.  System header files are ignored in the
28381     dependency output.
28382
28383     The value of 'DEPENDENCIES_OUTPUT' can be just a file name, in
28384     which case the Make rules are written to that file, guessing the
28385     target name from the source file name.  Or the value can have the
28386     form 'FILE TARGET', in which case the rules are written to file
28387     FILE using TARGET as the target name.
28388
28389     In other words, this environment variable is equivalent to
28390     combining the options '-MM' and '-MF' (*note Preprocessor
28391     Options::), with an optional '-MT' switch too.
28392
28393'SUNPRO_DEPENDENCIES'
28394     This variable is the same as 'DEPENDENCIES_OUTPUT' (see above),
28395     except that system header files are not ignored, so it implies '-M'
28396     rather than '-MM'.  However, the dependence on the main input file
28397     is omitted.  *Note Preprocessor Options::.
28398
28399'SOURCE_DATE_EPOCH'
28400     If this variable is set, its value specifies a UNIX timestamp to be
28401     used in replacement of the current date and time in the '__DATE__'
28402     and '__TIME__' macros, so that the embedded timestamps become
28403     reproducible.
28404
28405     The value of 'SOURCE_DATE_EPOCH' must be a UNIX timestamp, defined
28406     as the number of seconds (excluding leap seconds) since 01 Jan 1970
28407     00:00:00 represented in ASCII; identical to the output of ''date
28408     +%s'' on GNU/Linux and other systems that support the '%s'
28409     extension in the 'date' command.
28410
28411     The value should be a known timestamp such as the last modification
28412     time of the source or package and it should be set by the build
28413     process.
28414
28415
28416File: gcc.info,  Node: Precompiled Headers,  Prev: Environment Variables,  Up: Invoking GCC
28417
284183.22 Using Precompiled Headers
28419==============================
28420
28421Often large projects have many header files that are included in every
28422source file.  The time the compiler takes to process these header files
28423over and over again can account for nearly all of the time required to
28424build the project.  To make builds faster, GCC allows you to
28425"precompile" a header file.
28426
28427 To create a precompiled header file, simply compile it as you would any
28428other file, if necessary using the '-x' option to make the driver treat
28429it as a C or C++ header file.  You may want to use a tool like 'make' to
28430keep the precompiled header up-to-date when the headers it contains
28431change.
28432
28433 A precompiled header file is searched for when '#include' is seen in
28434the compilation.  As it searches for the included file (*note Search
28435Path: (cpp)Search Path.) the compiler looks for a precompiled header in
28436each directory just before it looks for the include file in that
28437directory.  The name searched for is the name specified in the
28438'#include' with '.gch' appended.  If the precompiled header file cannot
28439be used, it is ignored.
28440
28441 For instance, if you have '#include "all.h"', and you have 'all.h.gch'
28442in the same directory as 'all.h', then the precompiled header file is
28443used if possible, and the original header is used otherwise.
28444
28445 Alternatively, you might decide to put the precompiled header file in a
28446directory and use '-I' to ensure that directory is searched before (or
28447instead of) the directory containing the original header.  Then, if you
28448want to check that the precompiled header file is always used, you can
28449put a file of the same name as the original header in this directory
28450containing an '#error' command.
28451
28452 This also works with '-include'.  So yet another way to use precompiled
28453headers, good for projects not designed with precompiled header files in
28454mind, is to simply take most of the header files used by a project,
28455include them from another header file, precompile that header file, and
28456'-include' the precompiled header.  If the header files have guards
28457against multiple inclusion, they are skipped because they've already
28458been included (in the precompiled header).
28459
28460 If you need to precompile the same header file for different languages,
28461targets, or compiler options, you can instead make a _directory_ named
28462like 'all.h.gch', and put each precompiled header in the directory,
28463perhaps using '-o'.  It doesn't matter what you call the files in the
28464directory; every precompiled header in the directory is considered.  The
28465first precompiled header encountered in the directory that is valid for
28466this compilation is used; they're searched in no particular order.
28467
28468 There are many other possibilities, limited only by your imagination,
28469good sense, and the constraints of your build system.
28470
28471 A precompiled header file can be used only when these conditions apply:
28472
28473   * Only one precompiled header can be used in a particular
28474     compilation.
28475
28476   * A precompiled header cannot be used once the first C token is seen.
28477     You can have preprocessor directives before a precompiled header;
28478     you cannot include a precompiled header from inside another header.
28479
28480   * The precompiled header file must be produced for the same language
28481     as the current compilation.  You cannot use a C precompiled header
28482     for a C++ compilation.
28483
28484   * The precompiled header file must have been produced by the same
28485     compiler binary as the current compilation is using.
28486
28487   * Any macros defined before the precompiled header is included must
28488     either be defined in the same way as when the precompiled header
28489     was generated, or must not affect the precompiled header, which
28490     usually means that they don't appear in the precompiled header at
28491     all.
28492
28493     The '-D' option is one way to define a macro before a precompiled
28494     header is included; using a '#define' can also do it.  There are
28495     also some options that define macros implicitly, like '-O' and
28496     '-Wdeprecated'; the same rule applies to macros defined this way.
28497
28498   * If debugging information is output when using the precompiled
28499     header, using '-g' or similar, the same kind of debugging
28500     information must have been output when building the precompiled
28501     header.  However, a precompiled header built using '-g' can be used
28502     in a compilation when no debugging information is being output.
28503
28504   * The same '-m' options must generally be used when building and
28505     using the precompiled header.  *Note Submodel Options::, for any
28506     cases where this rule is relaxed.
28507
28508   * Each of the following options must be the same when building and
28509     using the precompiled header:
28510
28511          -fexceptions
28512
28513   * Some other command-line options starting with '-f', '-p', or '-O'
28514     must be defined in the same way as when the precompiled header was
28515     generated.  At present, it's not clear which options are safe to
28516     change and which are not; the safest choice is to use exactly the
28517     same options when generating and using the precompiled header.  The
28518     following are known to be safe:
28519
28520          -fmessage-length=  -fpreprocessed  -fsched-interblock
28521          -fsched-spec  -fsched-spec-load  -fsched-spec-load-dangerous
28522          -fsched-verbose=NUMBER  -fschedule-insns  -fvisibility=
28523          -pedantic-errors
28524
28525   * Address space layout randomization (ASLR) can lead to not binary
28526     identical PCH files.  If you rely on stable PCH file contents
28527     disable ASLR when generating PCH files.
28528
28529 For all of these except the last, the compiler automatically ignores
28530the precompiled header if the conditions aren't met.  If you find an
28531option combination that doesn't work and doesn't cause the precompiled
28532header to be ignored, please consider filing a bug report, see *note
28533Bugs::.
28534
28535 If you do use differing options when generating and using the
28536precompiled header, the actual behavior is a mixture of the behavior for
28537the options.  For instance, if you use '-g' to generate the precompiled
28538header but not when using it, you may or may not get debugging
28539information for routines in the precompiled header.
28540
28541
28542File: gcc.info,  Node: C Implementation,  Next: C++ Implementation,  Prev: Invoking GCC,  Up: Top
28543
285444 C Implementation-Defined Behavior
28545***********************************
28546
28547A conforming implementation of ISO C is required to document its choice
28548of behavior in each of the areas that are designated "implementation
28549defined".  The following lists all such areas, along with the section
28550numbers from the ISO/IEC 9899:1990, ISO/IEC 9899:1999 and ISO/IEC
285519899:2011 standards.  Some areas are only implementation-defined in one
28552version of the standard.
28553
28554 Some choices depend on the externally determined ABI for the platform
28555(including standard character encodings) which GCC follows; these are
28556listed as "determined by ABI" below.  *Note Binary Compatibility:
28557Compatibility, and <http://gcc.gnu.org/readings.html>.  Some choices are
28558documented in the preprocessor manual.  *Note Implementation-defined
28559behavior: (cpp)Implementation-defined behavior.  Some choices are made
28560by the library and operating system (or other environment when compiling
28561for a freestanding environment); refer to their documentation for
28562details.
28563
28564* Menu:
28565
28566* Translation implementation::
28567* Environment implementation::
28568* Identifiers implementation::
28569* Characters implementation::
28570* Integers implementation::
28571* Floating point implementation::
28572* Arrays and pointers implementation::
28573* Hints implementation::
28574* Structures unions enumerations and bit-fields implementation::
28575* Qualifiers implementation::
28576* Declarators implementation::
28577* Statements implementation::
28578* Preprocessing directives implementation::
28579* Library functions implementation::
28580* Architecture implementation::
28581* Locale-specific behavior implementation::
28582
28583
28584File: gcc.info,  Node: Translation implementation,  Next: Environment implementation,  Up: C Implementation
28585
285864.1 Translation
28587===============
28588
28589   * 'How a diagnostic is identified (C90 3.7, C99 and C11 3.10, C90,
28590     C99 and C11 5.1.1.3).'
28591
28592     Diagnostics consist of all the output sent to stderr by GCC.
28593
28594   * 'Whether each nonempty sequence of white-space characters other
28595     than new-line is retained or replaced by one space character in
28596     translation phase 3 (C90, C99 and C11 5.1.1.2).'
28597
28598     *Note Implementation-defined behavior: (cpp)Implementation-defined
28599     behavior.
28600
28601
28602File: gcc.info,  Node: Environment implementation,  Next: Identifiers implementation,  Prev: Translation implementation,  Up: C Implementation
28603
286044.2 Environment
28605===============
28606
28607The behavior of most of these points are dependent on the implementation
28608of the C library, and are not defined by GCC itself.
28609
28610   * 'The mapping between physical source file multibyte characters and
28611     the source character set in translation phase 1 (C90, C99 and C11
28612     5.1.1.2).'
28613
28614     *Note Implementation-defined behavior: (cpp)Implementation-defined
28615     behavior.
28616
28617
28618File: gcc.info,  Node: Identifiers implementation,  Next: Characters implementation,  Prev: Environment implementation,  Up: C Implementation
28619
286204.3 Identifiers
28621===============
28622
28623   * 'Which additional multibyte characters may appear in identifiers
28624     and their correspondence to universal character names (C99 and C11
28625     6.4.2).'
28626
28627     *Note Implementation-defined behavior: (cpp)Implementation-defined
28628     behavior.
28629
28630   * 'The number of significant initial characters in an identifier (C90
28631     6.1.2, C90, C99 and C11 5.2.4.1, C99 and C11 6.4.2).'
28632
28633     For internal names, all characters are significant.  For external
28634     names, the number of significant characters are defined by the
28635     linker; for almost all targets, all characters are significant.
28636
28637   * 'Whether case distinctions are significant in an identifier with
28638     external linkage (C90 6.1.2).'
28639
28640     This is a property of the linker.  C99 and C11 require that case
28641     distinctions are always significant in identifiers with external
28642     linkage and systems without this property are not supported by GCC.
28643
28644
28645File: gcc.info,  Node: Characters implementation,  Next: Integers implementation,  Prev: Identifiers implementation,  Up: C Implementation
28646
286474.4 Characters
28648==============
28649
28650   * 'The number of bits in a byte (C90 3.4, C99 and C11 3.6).'
28651
28652     Determined by ABI.
28653
28654   * 'The values of the members of the execution character set (C90, C99
28655     and C11 5.2.1).'
28656
28657     Determined by ABI.
28658
28659   * 'The unique value of the member of the execution character set
28660     produced for each of the standard alphabetic escape sequences (C90,
28661     C99 and C11 5.2.2).'
28662
28663     Determined by ABI.
28664
28665   * 'The value of a 'char' object into which has been stored any
28666     character other than a member of the basic execution character set
28667     (C90 6.1.2.5, C99 and C11 6.2.5).'
28668
28669     Determined by ABI.
28670
28671   * 'Which of 'signed char' or 'unsigned char' has the same range,
28672     representation, and behavior as "plain" 'char' (C90 6.1.2.5, C90
28673     6.2.1.1, C99 and C11 6.2.5, C99 and C11 6.3.1.1).'
28674
28675     Determined by ABI.  The options '-funsigned-char' and
28676     '-fsigned-char' change the default.  *Note Options Controlling C
28677     Dialect: C Dialect Options.
28678
28679   * 'The mapping of members of the source character set (in character
28680     constants and string literals) to members of the execution
28681     character set (C90 6.1.3.4, C99 and C11 6.4.4.4, C90, C99 and C11
28682     5.1.1.2).'
28683
28684     Determined by ABI.
28685
28686   * 'The value of an integer character constant containing more than
28687     one character or containing a character or escape sequence that
28688     does not map to a single-byte execution character (C90 6.1.3.4, C99
28689     and C11 6.4.4.4).'
28690
28691     *Note Implementation-defined behavior: (cpp)Implementation-defined
28692     behavior.
28693
28694   * 'The value of a wide character constant containing more than one
28695     multibyte character or a single multibyte character that maps to
28696     multiple members of the extended execution character set, or
28697     containing a multibyte character or escape sequence not represented
28698     in the extended execution character set (C90 6.1.3.4, C99 and C11
28699     6.4.4.4).'
28700
28701     *Note Implementation-defined behavior: (cpp)Implementation-defined
28702     behavior.
28703
28704   * 'The current locale used to convert a wide character constant
28705     consisting of a single multibyte character that maps to a member of
28706     the extended execution character set into a corresponding wide
28707     character code (C90 6.1.3.4, C99 and C11 6.4.4.4).'
28708
28709     *Note Implementation-defined behavior: (cpp)Implementation-defined
28710     behavior.
28711
28712   * 'Whether differently-prefixed wide string literal tokens can be
28713     concatenated and, if so, the treatment of the resulting multibyte
28714     character sequence (C11 6.4.5).'
28715
28716     Such tokens may not be concatenated.
28717
28718   * 'The current locale used to convert a wide string literal into
28719     corresponding wide character codes (C90 6.1.4, C99 and C11 6.4.5).'
28720
28721     *Note Implementation-defined behavior: (cpp)Implementation-defined
28722     behavior.
28723
28724   * 'The value of a string literal containing a multibyte character or
28725     escape sequence not represented in the execution character set (C90
28726     6.1.4, C99 and C11 6.4.5).'
28727
28728     *Note Implementation-defined behavior: (cpp)Implementation-defined
28729     behavior.
28730
28731   * 'The encoding of any of 'wchar_t', 'char16_t', and 'char32_t' where
28732     the corresponding standard encoding macro ('__STDC_ISO_10646__',
28733     '__STDC_UTF_16__', or '__STDC_UTF_32__') is not defined (C11
28734     6.10.8.2).'
28735
28736     *Note Implementation-defined behavior: (cpp)Implementation-defined
28737     behavior.  'char16_t' and 'char32_t' literals are always encoded in
28738     UTF-16 and UTF-32 respectively.
28739
28740
28741File: gcc.info,  Node: Integers implementation,  Next: Floating point implementation,  Prev: Characters implementation,  Up: C Implementation
28742
287434.5 Integers
28744============
28745
28746   * 'Any extended integer types that exist in the implementation (C99
28747     and C11 6.2.5).'
28748
28749     GCC does not support any extended integer types.
28750
28751   * 'Whether signed integer types are represented using sign and
28752     magnitude, two's complement, or one's complement, and whether the
28753     extraordinary value is a trap representation or an ordinary value
28754     (C99 and C11 6.2.6.2).'
28755
28756     GCC supports only two's complement integer types, and all bit
28757     patterns are ordinary values.
28758
28759   * 'The rank of any extended integer type relative to another extended
28760     integer type with the same precision (C99 and C11 6.3.1.1).'
28761
28762     GCC does not support any extended integer types.
28763
28764   * 'The result of, or the signal raised by, converting an integer to a
28765     signed integer type when the value cannot be represented in an
28766     object of that type (C90 6.2.1.2, C99 and C11 6.3.1.3).'
28767
28768     For conversion to a type of width N, the value is reduced modulo
28769     2^N to be within range of the type; no signal is raised.
28770
28771   * 'The results of some bitwise operations on signed integers (C90
28772     6.3, C99 and C11 6.5).'
28773
28774     Bitwise operators act on the representation of the value including
28775     both the sign and value bits, where the sign bit is considered
28776     immediately above the highest-value value bit.  Signed '>>' acts on
28777     negative numbers by sign extension.
28778
28779     As an extension to the C language, GCC does not use the latitude
28780     given in C99 and C11 only to treat certain aspects of signed '<<'
28781     as undefined.  However, '-fsanitize=shift' (and
28782     '-fsanitize=undefined') will diagnose such cases.  They are also
28783     diagnosed where constant expressions are required.
28784
28785   * 'The sign of the remainder on integer division (C90 6.3.5).'
28786
28787     GCC always follows the C99 and C11 requirement that the result of
28788     division is truncated towards zero.
28789
28790
28791File: gcc.info,  Node: Floating point implementation,  Next: Arrays and pointers implementation,  Prev: Integers implementation,  Up: C Implementation
28792
287934.6 Floating Point
28794==================
28795
28796   * 'The accuracy of the floating-point operations and of the library
28797     functions in '<math.h>' and '<complex.h>' that return
28798     floating-point results (C90, C99 and C11 5.2.4.2.2).'
28799
28800     The accuracy is unknown.
28801
28802   * 'The rounding behaviors characterized by non-standard values of
28803     'FLT_ROUNDS' (C90, C99 and C11 5.2.4.2.2).'
28804
28805     GCC does not use such values.
28806
28807   * 'The evaluation methods characterized by non-standard negative
28808     values of 'FLT_EVAL_METHOD' (C99 and C11 5.2.4.2.2).'
28809
28810     GCC does not use such values.
28811
28812   * 'The direction of rounding when an integer is converted to a
28813     floating-point number that cannot exactly represent the original
28814     value (C90 6.2.1.3, C99 and C11 6.3.1.4).'
28815
28816     C99 Annex F is followed.
28817
28818   * 'The direction of rounding when a floating-point number is
28819     converted to a narrower floating-point number (C90 6.2.1.4, C99 and
28820     C11 6.3.1.5).'
28821
28822     C99 Annex F is followed.
28823
28824   * 'How the nearest representable value or the larger or smaller
28825     representable value immediately adjacent to the nearest
28826     representable value is chosen for certain floating constants (C90
28827     6.1.3.1, C99 and C11 6.4.4.2).'
28828
28829     C99 Annex F is followed.
28830
28831   * 'Whether and how floating expressions are contracted when not
28832     disallowed by the 'FP_CONTRACT' pragma (C99 and C11 6.5).'
28833
28834     Expressions are currently only contracted if '-ffp-contract=fast',
28835     '-funsafe-math-optimizations' or '-ffast-math' are used.  This is
28836     subject to change.
28837
28838   * 'The default state for the 'FENV_ACCESS' pragma (C99 and C11
28839     7.6.1).'
28840
28841     This pragma is not implemented, but the default is to "off" unless
28842     '-frounding-math' is used in which case it is "on".
28843
28844   * 'Additional floating-point exceptions, rounding modes,
28845     environments, and classifications, and their macro names (C99 and
28846     C11 7.6, C99 and C11 7.12).'
28847
28848     This is dependent on the implementation of the C library, and is
28849     not defined by GCC itself.
28850
28851   * 'The default state for the 'FP_CONTRACT' pragma (C99 and C11
28852     7.12.2).'
28853
28854     This pragma is not implemented.  Expressions are currently only
28855     contracted if '-ffp-contract=fast', '-funsafe-math-optimizations'
28856     or '-ffast-math' are used.  This is subject to change.
28857
28858   * 'Whether the "inexact" floating-point exception can be raised when
28859     the rounded result actually does equal the mathematical result in
28860     an IEC 60559 conformant implementation (C99 F.9).'
28861
28862     This is dependent on the implementation of the C library, and is
28863     not defined by GCC itself.
28864
28865   * 'Whether the "underflow" (and "inexact") floating-point exception
28866     can be raised when a result is tiny but not inexact in an IEC 60559
28867     conformant implementation (C99 F.9).'
28868
28869     This is dependent on the implementation of the C library, and is
28870     not defined by GCC itself.
28871
28872
28873File: gcc.info,  Node: Arrays and pointers implementation,  Next: Hints implementation,  Prev: Floating point implementation,  Up: C Implementation
28874
288754.7 Arrays and Pointers
28876=======================
28877
28878   * 'The result of converting a pointer to an integer or vice versa
28879     (C90 6.3.4, C99 and C11 6.3.2.3).'
28880
28881     A cast from pointer to integer discards most-significant bits if
28882     the pointer representation is larger than the integer type,
28883     sign-extends(1) if the pointer representation is smaller than the
28884     integer type, otherwise the bits are unchanged.
28885
28886     A cast from integer to pointer discards most-significant bits if
28887     the pointer representation is smaller than the integer type,
28888     extends according to the signedness of the integer type if the
28889     pointer representation is larger than the integer type, otherwise
28890     the bits are unchanged.
28891
28892     When casting from pointer to integer and back again, the resulting
28893     pointer must reference the same object as the original pointer,
28894     otherwise the behavior is undefined.  That is, one may not use
28895     integer arithmetic to avoid the undefined behavior of pointer
28896     arithmetic as proscribed in C99 and C11 6.5.6/8.
28897
28898   * 'The size of the result of subtracting two pointers to elements of
28899     the same array (C90 6.3.6, C99 and C11 6.5.6).'
28900
28901     The value is as specified in the standard and the type is
28902     determined by the ABI.
28903
28904   ---------- Footnotes ----------
28905
28906   (1) Future versions of GCC may zero-extend, or use a target-defined
28907'ptr_extend' pattern.  Do not rely on sign extension.
28908
28909
28910File: gcc.info,  Node: Hints implementation,  Next: Structures unions enumerations and bit-fields implementation,  Prev: Arrays and pointers implementation,  Up: C Implementation
28911
289124.8 Hints
28913=========
28914
28915   * 'The extent to which suggestions made by using the 'register'
28916     storage-class specifier are effective (C90 6.5.1, C99 and C11
28917     6.7.1).'
28918
28919     The 'register' specifier affects code generation only in these
28920     ways:
28921
28922        * When used as part of the register variable extension, see
28923          *note Explicit Register Variables::.
28924
28925        * When '-O0' is in use, the compiler allocates distinct stack
28926          memory for all variables that do not have the 'register'
28927          storage-class specifier; if 'register' is specified, the
28928          variable may have a shorter lifespan than the code would
28929          indicate and may never be placed in memory.
28930
28931        * On some rare x86 targets, 'setjmp' doesn't save the registers
28932          in all circumstances.  In those cases, GCC doesn't allocate
28933          any variables in registers unless they are marked 'register'.
28934
28935   * 'The extent to which suggestions made by using the inline function
28936     specifier are effective (C99 and C11 6.7.4).'
28937
28938     GCC will not inline any functions if the '-fno-inline' option is
28939     used or if '-O0' is used.  Otherwise, GCC may still be unable to
28940     inline a function for many reasons; the '-Winline' option may be
28941     used to determine if a function has not been inlined and why not.
28942
28943
28944File: gcc.info,  Node: Structures unions enumerations and bit-fields implementation,  Next: Qualifiers implementation,  Prev: Hints implementation,  Up: C Implementation
28945
289464.9 Structures, Unions, Enumerations, and Bit-Fields
28947====================================================
28948
28949   * 'A member of a union object is accessed using a member of a
28950     different type (C90 6.3.2.3).'
28951
28952     The relevant bytes of the representation of the object are treated
28953     as an object of the type used for the access.  *Note
28954     Type-punning::.  This may be a trap representation.
28955
28956   * 'Whether a "plain" 'int' bit-field is treated as a 'signed int'
28957     bit-field or as an 'unsigned int' bit-field (C90 6.5.2, C90
28958     6.5.2.1, C99 and C11 6.7.2, C99 and C11 6.7.2.1).'
28959
28960     By default it is treated as 'signed int' but this may be changed by
28961     the '-funsigned-bitfields' option.
28962
28963   * 'Allowable bit-field types other than '_Bool', 'signed int', and
28964     'unsigned int' (C99 and C11 6.7.2.1).'
28965
28966     Other integer types, such as 'long int', and enumerated types are
28967     permitted even in strictly conforming mode.
28968
28969   * 'Whether atomic types are permitted for bit-fields (C11 6.7.2.1).'
28970
28971     Atomic types are not permitted for bit-fields.
28972
28973   * 'Whether a bit-field can straddle a storage-unit boundary (C90
28974     6.5.2.1, C99 and C11 6.7.2.1).'
28975
28976     Determined by ABI.
28977
28978   * 'The order of allocation of bit-fields within a unit (C90 6.5.2.1,
28979     C99 and C11 6.7.2.1).'
28980
28981     Determined by ABI.
28982
28983   * 'The alignment of non-bit-field members of structures (C90 6.5.2.1,
28984     C99 and C11 6.7.2.1).'
28985
28986     Determined by ABI.
28987
28988   * 'The integer type compatible with each enumerated type (C90
28989     6.5.2.2, C99 and C11 6.7.2.2).'
28990
28991     Normally, the type is 'unsigned int' if there are no negative
28992     values in the enumeration, otherwise 'int'.  If '-fshort-enums' is
28993     specified, then if there are negative values it is the first of
28994     'signed char', 'short' and 'int' that can represent all the values,
28995     otherwise it is the first of 'unsigned char', 'unsigned short' and
28996     'unsigned int' that can represent all the values.
28997
28998     On some targets, '-fshort-enums' is the default; this is determined
28999     by the ABI.
29000
29001
29002File: gcc.info,  Node: Qualifiers implementation,  Next: Declarators implementation,  Prev: Structures unions enumerations and bit-fields implementation,  Up: C Implementation
29003
290044.10 Qualifiers
29005===============
29006
29007   * 'What constitutes an access to an object that has
29008     volatile-qualified type (C90 6.5.3, C99 and C11 6.7.3).'
29009
29010     Such an object is normally accessed by pointers and used for
29011     accessing hardware.  In most expressions, it is intuitively obvious
29012     what is a read and what is a write.  For example
29013
29014          volatile int *dst = SOMEVALUE;
29015          volatile int *src = SOMEOTHERVALUE;
29016          *dst = *src;
29017
29018     will cause a read of the volatile object pointed to by SRC and
29019     store the value into the volatile object pointed to by DST.  There
29020     is no guarantee that these reads and writes are atomic, especially
29021     for objects larger than 'int'.
29022
29023     However, if the volatile storage is not being modified, and the
29024     value of the volatile storage is not used, then the situation is
29025     less obvious.  For example
29026
29027          volatile int *src = SOMEVALUE;
29028          *src;
29029
29030     According to the C standard, such an expression is an rvalue whose
29031     type is the unqualified version of its original type, i.e. 'int'.
29032     Whether GCC interprets this as a read of the volatile object being
29033     pointed to or only as a request to evaluate the expression for its
29034     side effects depends on this type.
29035
29036     If it is a scalar type, or on most targets an aggregate type whose
29037     only member object is of a scalar type, or a union type whose
29038     member objects are of scalar types, the expression is interpreted
29039     by GCC as a read of the volatile object; in the other cases, the
29040     expression is only evaluated for its side effects.
29041
29042
29043File: gcc.info,  Node: Declarators implementation,  Next: Statements implementation,  Prev: Qualifiers implementation,  Up: C Implementation
29044
290454.11 Declarators
29046================
29047
29048   * 'The maximum number of declarators that may modify an arithmetic,
29049     structure or union type (C90 6.5.4).'
29050
29051     GCC is only limited by available memory.
29052
29053
29054File: gcc.info,  Node: Statements implementation,  Next: Preprocessing directives implementation,  Prev: Declarators implementation,  Up: C Implementation
29055
290564.12 Statements
29057===============
29058
29059   * 'The maximum number of 'case' values in a 'switch' statement (C90
29060     6.6.4.2).'
29061
29062     GCC is only limited by available memory.
29063
29064
29065File: gcc.info,  Node: Preprocessing directives implementation,  Next: Library functions implementation,  Prev: Statements implementation,  Up: C Implementation
29066
290674.13 Preprocessing Directives
29068=============================
29069
29070*Note Implementation-defined behavior: (cpp)Implementation-defined
29071behavior, for details of these aspects of implementation-defined
29072behavior.
29073
29074   * 'The locations within '#pragma' directives where header name
29075     preprocessing tokens are recognized (C11 6.4, C11 6.4.7).'
29076
29077   * 'How sequences in both forms of header names are mapped to headers
29078     or external source file names (C90 6.1.7, C99 and C11 6.4.7).'
29079
29080   * 'Whether the value of a character constant in a constant expression
29081     that controls conditional inclusion matches the value of the same
29082     character constant in the execution character set (C90 6.8.1, C99
29083     and C11 6.10.1).'
29084
29085   * 'Whether the value of a single-character character constant in a
29086     constant expression that controls conditional inclusion may have a
29087     negative value (C90 6.8.1, C99 and C11 6.10.1).'
29088
29089   * 'The places that are searched for an included '<>' delimited
29090     header, and how the places are specified or the header is
29091     identified (C90 6.8.2, C99 and C11 6.10.2).'
29092
29093   * 'How the named source file is searched for in an included '""'
29094     delimited header (C90 6.8.2, C99 and C11 6.10.2).'
29095
29096   * 'The method by which preprocessing tokens (possibly resulting from
29097     macro expansion) in a '#include' directive are combined into a
29098     header name (C90 6.8.2, C99 and C11 6.10.2).'
29099
29100   * 'The nesting limit for '#include' processing (C90 6.8.2, C99 and
29101     C11 6.10.2).'
29102
29103   * 'Whether the '#' operator inserts a '\' character before the '\'
29104     character that begins a universal character name in a character
29105     constant or string literal (C99 and C11 6.10.3.2).'
29106
29107   * 'The behavior on each recognized non-'STDC #pragma' directive (C90
29108     6.8.6, C99 and C11 6.10.6).'
29109
29110     *Note Pragmas: (cpp)Pragmas, for details of pragmas accepted by GCC
29111     on all targets.  *Note Pragmas Accepted by GCC: Pragmas, for
29112     details of target-specific pragmas.
29113
29114   * 'The definitions for '__DATE__' and '__TIME__' when respectively,
29115     the date and time of translation are not available (C90 6.8.8, C99
29116     6.10.8, C11 6.10.8.1).'
29117
29118
29119File: gcc.info,  Node: Library functions implementation,  Next: Architecture implementation,  Prev: Preprocessing directives implementation,  Up: C Implementation
29120
291214.14 Library Functions
29122======================
29123
29124The behavior of most of these points are dependent on the implementation
29125of the C library, and are not defined by GCC itself.
29126
29127   * 'The null pointer constant to which the macro 'NULL' expands (C90
29128     7.1.6, C99 7.17, C11 7.19).'
29129
29130     In '<stddef.h>', 'NULL' expands to '((void *)0)'.  GCC does not
29131     provide the other headers which define 'NULL' and some library
29132     implementations may use other definitions in those headers.
29133
29134
29135File: gcc.info,  Node: Architecture implementation,  Next: Locale-specific behavior implementation,  Prev: Library functions implementation,  Up: C Implementation
29136
291374.15 Architecture
29138=================
29139
29140   * 'The values or expressions assigned to the macros specified in the
29141     headers '<float.h>', '<limits.h>', and '<stdint.h>' (C90, C99 and
29142     C11 5.2.4.2, C99 7.18.2, C99 7.18.3, C11 7.20.2, C11 7.20.3).'
29143
29144     Determined by ABI.
29145
29146   * 'The result of attempting to indirectly access an object with
29147     automatic or thread storage duration from a thread other than the
29148     one with which it is associated (C11 6.2.4).'
29149
29150     Such accesses are supported, subject to the same requirements for
29151     synchronization for concurrent accesses as for concurrent accesses
29152     to any object.
29153
29154   * 'The number, order, and encoding of bytes in any object (when not
29155     explicitly specified in this International Standard) (C99 and C11
29156     6.2.6.1).'
29157
29158     Determined by ABI.
29159
29160   * 'Whether any extended alignments are supported and the contexts in
29161     which they are supported (C11 6.2.8).'
29162
29163     Extended alignments up to 2^{28} (bytes) are supported for objects
29164     of automatic storage duration.  Alignments supported for objects of
29165     static and thread storage duration are determined by the ABI.
29166
29167   * 'Valid alignment values other than those returned by an _Alignof
29168     expression for fundamental types, if any (C11 6.2.8).'
29169
29170     Valid alignments are powers of 2 up to and including 2^{28}.
29171
29172   * 'The value of the result of the 'sizeof' and '_Alignof' operators
29173     (C90 6.3.3.4, C99 and C11 6.5.3.4).'
29174
29175     Determined by ABI.
29176
29177
29178File: gcc.info,  Node: Locale-specific behavior implementation,  Prev: Architecture implementation,  Up: C Implementation
29179
291804.16 Locale-Specific Behavior
29181=============================
29182
29183The behavior of these points are dependent on the implementation of the
29184C library, and are not defined by GCC itself.
29185
29186
29187File: gcc.info,  Node: C++ Implementation,  Next: C Extensions,  Prev: C Implementation,  Up: Top
29188
291895 C++ Implementation-Defined Behavior
29190*************************************
29191
29192A conforming implementation of ISO C++ is required to document its
29193choice of behavior in each of the areas that are designated
29194"implementation defined".  The following lists all such areas, along
29195with the section numbers from the ISO/IEC 14882:1998 and ISO/IEC
2919614882:2003 standards.  Some areas are only implementation-defined in one
29197version of the standard.
29198
29199 Some choices depend on the externally determined ABI for the platform
29200(including standard character encodings) which GCC follows; these are
29201listed as "determined by ABI" below.  *Note Binary Compatibility:
29202Compatibility, and <http://gcc.gnu.org/readings.html>.  Some choices are
29203documented in the preprocessor manual.  *Note Implementation-defined
29204behavior: (cpp)Implementation-defined behavior.  Some choices are
29205documented in the corresponding document for the C language.  *Note C
29206Implementation::.  Some choices are made by the library and operating
29207system (or other environment when compiling for a freestanding
29208environment); refer to their documentation for details.
29209
29210* Menu:
29211
29212* Conditionally-supported behavior::
29213* Exception handling::
29214
29215
29216File: gcc.info,  Node: Conditionally-supported behavior,  Next: Exception handling,  Up: C++ Implementation
29217
292185.1 Conditionally-Supported Behavior
29219====================================
29220
29221'Each implementation shall include documentation that identifies all
29222conditionally-supported constructs that it does not support (C++0x
292231.4).'
29224
29225   * 'Whether an argument of class type with a non-trivial copy
29226     constructor or destructor can be passed to ... (C++0x 5.2.2).'
29227
29228     Such argument passing is supported, using the same
29229     pass-by-invisible-reference approach used for normal function
29230     arguments of such types.
29231
29232
29233File: gcc.info,  Node: Exception handling,  Prev: Conditionally-supported behavior,  Up: C++ Implementation
29234
292355.2 Exception Handling
29236======================
29237
29238   * 'In the situation where no matching handler is found, it is
29239     implementation-defined whether or not the stack is unwound before
29240     std::terminate() is called (C++98 15.5.1).'
29241
29242     The stack is not unwound before std::terminate is called.
29243
29244 c Copyright (C) 1988-2020 Free Software Foundation, Inc.
29245
29246
29247File: gcc.info,  Node: C Extensions,  Next: C++ Extensions,  Prev: C++ Implementation,  Up: Top
29248
292496 Extensions to the C Language Family
29250*************************************
29251
29252GNU C provides several language features not found in ISO standard C.
29253(The '-pedantic' option directs GCC to print a warning message if any of
29254these features is used.)  To test for the availability of these features
29255in conditional compilation, check for a predefined macro '__GNUC__',
29256which is always defined under GCC.
29257
29258 These extensions are available in C and Objective-C.  Most of them are
29259also available in C++.  *Note Extensions to the C++ Language: C++
29260Extensions, for extensions that apply _only_ to C++.
29261
29262 Some features that are in ISO C99 but not C90 or C++ are also, as
29263extensions, accepted by GCC in C90 mode and in C++.
29264
29265* Menu:
29266
29267* Statement Exprs::     Putting statements and declarations inside expressions.
29268* Local Labels::        Labels local to a block.
29269* Labels as Values::    Getting pointers to labels, and computed gotos.
29270* Nested Functions::    Nested function in GNU C.
29271* Nonlocal Gotos::      Nonlocal gotos.
29272* Constructing Calls::  Dispatching a call to another function.
29273* Typeof::              'typeof': referring to the type of an expression.
29274* Conditionals::        Omitting the middle operand of a '?:' expression.
29275* __int128::		128-bit integers--'__int128'.
29276* Long Long::           Double-word integers--'long long int'.
29277* Complex::             Data types for complex numbers.
29278* Floating Types::      Additional Floating Types.
29279* Half-Precision::      Half-Precision Floating Point.
29280* Decimal Float::       Decimal Floating Types.
29281* Hex Floats::          Hexadecimal floating-point constants.
29282* Fixed-Point::         Fixed-Point Types.
29283* Named Address Spaces::Named address spaces.
29284* Zero Length::         Zero-length arrays.
29285* Empty Structures::    Structures with no members.
29286* Variable Length::     Arrays whose length is computed at run time.
29287* Variadic Macros::     Macros with a variable number of arguments.
29288* Escaped Newlines::    Slightly looser rules for escaped newlines.
29289* Subscripting::        Any array can be subscripted, even if not an lvalue.
29290* Pointer Arith::       Arithmetic on 'void'-pointers and function pointers.
29291* Variadic Pointer Args::  Pointer arguments to variadic functions.
29292* Pointers to Arrays::  Pointers to arrays with qualifiers work as expected.
29293* Initializers::        Non-constant initializers.
29294* Compound Literals::   Compound literals give structures, unions
29295                        or arrays as values.
29296* Designated Inits::    Labeling elements of initializers.
29297* Case Ranges::         'case 1 ... 9' and such.
29298* Cast to Union::       Casting to union type from any member of the union.
29299* Mixed Declarations::  Mixing declarations and code.
29300* Function Attributes:: Declaring that functions have no side effects,
29301                        or that they can never return.
29302* Variable Attributes:: Specifying attributes of variables.
29303* Type Attributes::     Specifying attributes of types.
29304* Label Attributes::    Specifying attributes on labels.
29305* Enumerator Attributes:: Specifying attributes on enumerators.
29306* Statement Attributes:: Specifying attributes on statements.
29307* Attribute Syntax::    Formal syntax for attributes.
29308* Function Prototypes:: Prototype declarations and old-style definitions.
29309* C++ Comments::        C++ comments are recognized.
29310* Dollar Signs::        Dollar sign is allowed in identifiers.
29311* Character Escapes::   '\e' stands for the character <ESC>.
29312* Alignment::           Determining the alignment of a function, type or variable.
29313* Inline::              Defining inline functions (as fast as macros).
29314* Volatiles::           What constitutes an access to a volatile object.
29315* Using Assembly Language with C:: Instructions and extensions for interfacing C with assembler.
29316* Alternate Keywords::  '__const__', '__asm__', etc., for header files.
29317* Incomplete Enums::    'enum foo;', with details to follow.
29318* Function Names::      Printable strings which are the name of the current
29319                        function.
29320* Return Address::      Getting the return or frame address of a function.
29321* Vector Extensions::   Using vector instructions through built-in functions.
29322* Offsetof::            Special syntax for implementing 'offsetof'.
29323* __sync Builtins::     Legacy built-in functions for atomic memory access.
29324* __atomic Builtins::   Atomic built-in functions with memory model.
29325* Integer Overflow Builtins:: Built-in functions to perform arithmetics and
29326                        arithmetic overflow checking.
29327* x86 specific memory model extensions for transactional memory:: x86 memory models.
29328* Object Size Checking:: Built-in functions for limited buffer overflow
29329                        checking.
29330* Other Builtins::      Other built-in functions.
29331* Target Builtins::     Built-in functions specific to particular targets.
29332* Target Format Checks:: Format checks specific to particular targets.
29333* Pragmas::             Pragmas accepted by GCC.
29334* Unnamed Fields::      Unnamed struct/union fields within structs/unions.
29335* Thread-Local::        Per-thread variables.
29336* Binary constants::    Binary constants using the '0b' prefix.
29337
29338
29339File: gcc.info,  Node: Statement Exprs,  Next: Local Labels,  Up: C Extensions
29340
293416.1 Statements and Declarations in Expressions
29342==============================================
29343
29344A compound statement enclosed in parentheses may appear as an expression
29345in GNU C.  This allows you to use loops, switches, and local variables
29346within an expression.
29347
29348 Recall that a compound statement is a sequence of statements surrounded
29349by braces; in this construct, parentheses go around the braces.  For
29350example:
29351
29352     ({ int y = foo (); int z;
29353        if (y > 0) z = y;
29354        else z = - y;
29355        z; })
29356
29357is a valid (though slightly more complex than necessary) expression for
29358the absolute value of 'foo ()'.
29359
29360 The last thing in the compound statement should be an expression
29361followed by a semicolon; the value of this subexpression serves as the
29362value of the entire construct.  (If you use some other kind of statement
29363last within the braces, the construct has type 'void', and thus
29364effectively no value.)
29365
29366 This feature is especially useful in making macro definitions "safe"
29367(so that they evaluate each operand exactly once).  For example, the
29368"maximum" function is commonly defined as a macro in standard C as
29369follows:
29370
29371     #define max(a,b) ((a) > (b) ? (a) : (b))
29372
29373But this definition computes either A or B twice, with bad results if
29374the operand has side effects.  In GNU C, if you know the type of the
29375operands (here taken as 'int'), you can avoid this problem by defining
29376the macro as follows:
29377
29378     #define maxint(a,b) \
29379       ({int _a = (a), _b = (b); _a > _b ? _a : _b; })
29380
29381 Note that introducing variable declarations (as we do in 'maxint') can
29382cause variable shadowing, so while this example using the 'max' macro
29383produces correct results:
29384     int _a = 1, _b = 2, c;
29385     c = max (_a, _b);
29386this example using maxint will not:
29387     int _a = 1, _b = 2, c;
29388     c = maxint (_a, _b);
29389
29390 This problem may for instance occur when we use this pattern
29391recursively, like so:
29392
29393     #define maxint3(a, b, c) \
29394       ({int _a = (a), _b = (b), _c = (c); maxint (maxint (_a, _b), _c); })
29395
29396 Embedded statements are not allowed in constant expressions, such as
29397the value of an enumeration constant, the width of a bit-field, or the
29398initial value of a static variable.
29399
29400 If you don't know the type of the operand, you can still do this, but
29401you must use 'typeof' or '__auto_type' (*note Typeof::).
29402
29403 In G++, the result value of a statement expression undergoes array and
29404function pointer decay, and is returned by value to the enclosing
29405expression.  For instance, if 'A' is a class, then
29406
29407             A a;
29408
29409             ({a;}).Foo ()
29410
29411constructs a temporary 'A' object to hold the result of the statement
29412expression, and that is used to invoke 'Foo'.  Therefore the 'this'
29413pointer observed by 'Foo' is not the address of 'a'.
29414
29415 In a statement expression, any temporaries created within a statement
29416are destroyed at that statement's end.  This makes statement expressions
29417inside macros slightly different from function calls.  In the latter
29418case temporaries introduced during argument evaluation are destroyed at
29419the end of the statement that includes the function call.  In the
29420statement expression case they are destroyed during the statement
29421expression.  For instance,
29422
29423     #define macro(a)  ({__typeof__(a) b = (a); b + 3; })
29424     template<typename T> T function(T a) { T b = a; return b + 3; }
29425
29426     void foo ()
29427     {
29428       macro (X ());
29429       function (X ());
29430     }
29431
29432has different places where temporaries are destroyed.  For the 'macro'
29433case, the temporary 'X' is destroyed just after the initialization of
29434'b'.  In the 'function' case that temporary is destroyed when the
29435function returns.
29436
29437 These considerations mean that it is probably a bad idea to use
29438statement expressions of this form in header files that are designed to
29439work with C++.  (Note that some versions of the GNU C Library contained
29440header files using statement expressions that lead to precisely this
29441bug.)
29442
29443 Jumping into a statement expression with 'goto' or using a 'switch'
29444statement outside the statement expression with a 'case' or 'default'
29445label inside the statement expression is not permitted.  Jumping into a
29446statement expression with a computed 'goto' (*note Labels as Values::)
29447has undefined behavior.  Jumping out of a statement expression is
29448permitted, but if the statement expression is part of a larger
29449expression then it is unspecified which other subexpressions of that
29450expression have been evaluated except where the language definition
29451requires certain subexpressions to be evaluated before or after the
29452statement expression.  A 'break' or 'continue' statement inside of a
29453statement expression used in 'while', 'do' or 'for' loop or 'switch'
29454statement condition or 'for' statement init or increment expressions
29455jumps to an outer loop or 'switch' statement if any (otherwise it is an
29456error), rather than to the loop or 'switch' statement in whose condition
29457or init or increment expression it appears.  In any case, as with a
29458function call, the evaluation of a statement expression is not
29459interleaved with the evaluation of other parts of the containing
29460expression.  For example,
29461
29462       foo (), (({ bar1 (); goto a; 0; }) + bar2 ()), baz();
29463
29464calls 'foo' and 'bar1' and does not call 'baz' but may or may not call
29465'bar2'.  If 'bar2' is called, it is called after 'foo' and before
29466'bar1'.
29467
29468
29469File: gcc.info,  Node: Local Labels,  Next: Labels as Values,  Prev: Statement Exprs,  Up: C Extensions
29470
294716.2 Locally Declared Labels
29472===========================
29473
29474GCC allows you to declare "local labels" in any nested block scope.  A
29475local label is just like an ordinary label, but you can only reference
29476it (with a 'goto' statement, or by taking its address) within the block
29477in which it is declared.
29478
29479 A local label declaration looks like this:
29480
29481     __label__ LABEL;
29482
29483or
29484
29485     __label__ LABEL1, LABEL2, /* ... */;
29486
29487 Local label declarations must come at the beginning of the block,
29488before any ordinary declarations or statements.
29489
29490 The label declaration defines the label _name_, but does not define the
29491label itself.  You must do this in the usual way, with 'LABEL:', within
29492the statements of the statement expression.
29493
29494 The local label feature is useful for complex macros.  If a macro
29495contains nested loops, a 'goto' can be useful for breaking out of them.
29496However, an ordinary label whose scope is the whole function cannot be
29497used: if the macro can be expanded several times in one function, the
29498label is multiply defined in that function.  A local label avoids this
29499problem.  For example:
29500
29501     #define SEARCH(value, array, target)              \
29502     do {                                              \
29503       __label__ found;                                \
29504       typeof (target) _SEARCH_target = (target);      \
29505       typeof (*(array)) *_SEARCH_array = (array);     \
29506       int i, j;                                       \
29507       int value;                                      \
29508       for (i = 0; i < max; i++)                       \
29509         for (j = 0; j < max; j++)                     \
29510           if (_SEARCH_array[i][j] == _SEARCH_target)  \
29511             { (value) = i; goto found; }              \
29512       (value) = -1;                                   \
29513      found:;                                          \
29514     } while (0)
29515
29516 This could also be written using a statement expression:
29517
29518     #define SEARCH(array, target)                     \
29519     ({                                                \
29520       __label__ found;                                \
29521       typeof (target) _SEARCH_target = (target);      \
29522       typeof (*(array)) *_SEARCH_array = (array);     \
29523       int i, j;                                       \
29524       int value;                                      \
29525       for (i = 0; i < max; i++)                       \
29526         for (j = 0; j < max; j++)                     \
29527           if (_SEARCH_array[i][j] == _SEARCH_target)  \
29528             { value = i; goto found; }                \
29529       value = -1;                                     \
29530      found:                                           \
29531       value;                                          \
29532     })
29533
29534 Local label declarations also make the labels they declare visible to
29535nested functions, if there are any.  *Note Nested Functions::, for
29536details.
29537
29538
29539File: gcc.info,  Node: Labels as Values,  Next: Nested Functions,  Prev: Local Labels,  Up: C Extensions
29540
295416.3 Labels as Values
29542====================
29543
29544You can get the address of a label defined in the current function (or a
29545containing function) with the unary operator '&&'.  The value has type
29546'void *'.  This value is a constant and can be used wherever a constant
29547of that type is valid.  For example:
29548
29549     void *ptr;
29550     /* ... */
29551     ptr = &&foo;
29552
29553 To use these values, you need to be able to jump to one.  This is done
29554with the computed goto statement(1), 'goto *EXP;'.  For example,
29555
29556     goto *ptr;
29557
29558Any expression of type 'void *' is allowed.
29559
29560 One way of using these constants is in initializing a static array that
29561serves as a jump table:
29562
29563     static void *array[] = { &&foo, &&bar, &&hack };
29564
29565Then you can select a label with indexing, like this:
29566
29567     goto *array[i];
29568
29569Note that this does not check whether the subscript is in bounds--array
29570indexing in C never does that.
29571
29572 Such an array of label values serves a purpose much like that of the
29573'switch' statement.  The 'switch' statement is cleaner, so use that
29574rather than an array unless the problem does not fit a 'switch'
29575statement very well.
29576
29577 Another use of label values is in an interpreter for threaded code.
29578The labels within the interpreter function can be stored in the threaded
29579code for super-fast dispatching.
29580
29581 You may not use this mechanism to jump to code in a different function.
29582If you do that, totally unpredictable things happen.  The best way to
29583avoid this is to store the label address only in automatic variables and
29584never pass it as an argument.
29585
29586 An alternate way to write the above example is
29587
29588     static const int array[] = { &&foo - &&foo, &&bar - &&foo,
29589                                  &&hack - &&foo };
29590     goto *(&&foo + array[i]);
29591
29592This is more friendly to code living in shared libraries, as it reduces
29593the number of dynamic relocations that are needed, and by consequence,
29594allows the data to be read-only.  This alternative with label
29595differences is not supported for the AVR target, please use the first
29596approach for AVR programs.
29597
29598 The '&&foo' expressions for the same label might have different values
29599if the containing function is inlined or cloned.  If a program relies on
29600them being always the same, '__attribute__((__noinline__,__noclone__))'
29601should be used to prevent inlining and cloning.  If '&&foo' is used in a
29602static variable initializer, inlining and cloning is forbidden.
29603
29604   ---------- Footnotes ----------
29605
29606   (1) The analogous feature in Fortran is called an assigned goto, but
29607that name seems inappropriate in C, where one can do more than simply
29608store label addresses in label variables.
29609
29610
29611File: gcc.info,  Node: Nested Functions,  Next: Nonlocal Gotos,  Prev: Labels as Values,  Up: C Extensions
29612
296136.4 Nested Functions
29614====================
29615
29616A "nested function" is a function defined inside another function.
29617Nested functions are supported as an extension in GNU C, but are not
29618supported by GNU C++.
29619
29620 The nested function's name is local to the block where it is defined.
29621For example, here we define a nested function named 'square', and call
29622it twice:
29623
29624     foo (double a, double b)
29625     {
29626       double square (double z) { return z * z; }
29627
29628       return square (a) + square (b);
29629     }
29630
29631 The nested function can access all the variables of the containing
29632function that are visible at the point of its definition.  This is
29633called "lexical scoping".  For example, here we show a nested function
29634which uses an inherited variable named 'offset':
29635
29636     bar (int *array, int offset, int size)
29637     {
29638       int access (int *array, int index)
29639         { return array[index + offset]; }
29640       int i;
29641       /* ... */
29642       for (i = 0; i < size; i++)
29643         /* ... */ access (array, i) /* ... */
29644     }
29645
29646 Nested function definitions are permitted within functions in the
29647places where variable definitions are allowed; that is, in any block,
29648mixed with the other declarations and statements in the block.
29649
29650 It is possible to call the nested function from outside the scope of
29651its name by storing its address or passing the address to another
29652function:
29653
29654     hack (int *array, int size)
29655     {
29656       void store (int index, int value)
29657         { array[index] = value; }
29658
29659       intermediate (store, size);
29660     }
29661
29662 Here, the function 'intermediate' receives the address of 'store' as an
29663argument.  If 'intermediate' calls 'store', the arguments given to
29664'store' are used to store into 'array'.  But this technique works only
29665so long as the containing function ('hack', in this example) does not
29666exit.
29667
29668 If you try to call the nested function through its address after the
29669containing function exits, all hell breaks loose.  If you try to call it
29670after a containing scope level exits, and if it refers to some of the
29671variables that are no longer in scope, you may be lucky, but it's not
29672wise to take the risk.  If, however, the nested function does not refer
29673to anything that has gone out of scope, you should be safe.
29674
29675 GCC implements taking the address of a nested function using a
29676technique called "trampolines".  This technique was described in
29677'Lexical Closures for C++' (Thomas M. Breuel, USENIX C++ Conference
29678Proceedings, October 17-21, 1988).
29679
29680 A nested function can jump to a label inherited from a containing
29681function, provided the label is explicitly declared in the containing
29682function (*note Local Labels::).  Such a jump returns instantly to the
29683containing function, exiting the nested function that did the 'goto' and
29684any intermediate functions as well.  Here is an example:
29685
29686     bar (int *array, int offset, int size)
29687     {
29688       __label__ failure;
29689       int access (int *array, int index)
29690         {
29691           if (index > size)
29692             goto failure;
29693           return array[index + offset];
29694         }
29695       int i;
29696       /* ... */
29697       for (i = 0; i < size; i++)
29698         /* ... */ access (array, i) /* ... */
29699       /* ... */
29700       return 0;
29701
29702      /* Control comes here from 'access'
29703         if it detects an error.  */
29704      failure:
29705       return -1;
29706     }
29707
29708 A nested function always has no linkage.  Declaring one with 'extern'
29709or 'static' is erroneous.  If you need to declare the nested function
29710before its definition, use 'auto' (which is otherwise meaningless for
29711function declarations).
29712
29713     bar (int *array, int offset, int size)
29714     {
29715       __label__ failure;
29716       auto int access (int *, int);
29717       /* ... */
29718       int access (int *array, int index)
29719         {
29720           if (index > size)
29721             goto failure;
29722           return array[index + offset];
29723         }
29724       /* ... */
29725     }
29726
29727
29728File: gcc.info,  Node: Nonlocal Gotos,  Next: Constructing Calls,  Prev: Nested Functions,  Up: C Extensions
29729
297306.5 Nonlocal Gotos
29731==================
29732
29733GCC provides the built-in functions '__builtin_setjmp' and
29734'__builtin_longjmp' which are similar to, but not interchangeable with,
29735the C library functions 'setjmp' and 'longjmp'.  The built-in versions
29736are used internally by GCC's libraries to implement exception handling
29737on some targets.  You should use the standard C library functions
29738declared in '<setjmp.h>' in user code instead of the builtins.
29739
29740 The built-in versions of these functions use GCC's normal mechanisms to
29741save and restore registers using the stack on function entry and exit.
29742The jump buffer argument BUF holds only the information needed to
29743restore the stack frame, rather than the entire set of saved register
29744values.
29745
29746 An important caveat is that GCC arranges to save and restore only those
29747registers known to the specific architecture variant being compiled for.
29748This can make '__builtin_setjmp' and '__builtin_longjmp' more efficient
29749than their library counterparts in some cases, but it can also cause
29750incorrect and mysterious behavior when mixing with code that uses the
29751full register set.
29752
29753 You should declare the jump buffer argument BUF to the built-in
29754functions as:
29755
29756     #include <stdint.h>
29757     intptr_t BUF[5];
29758
29759 -- Built-in Function: int __builtin_setjmp (intptr_t *BUF)
29760     This function saves the current stack context in BUF.
29761     '__builtin_setjmp' returns 0 when returning directly, and 1 when
29762     returning from '__builtin_longjmp' using the same BUF.
29763
29764 -- Built-in Function: void __builtin_longjmp (intptr_t *BUF, int VAL)
29765     This function restores the stack context in BUF, saved by a
29766     previous call to '__builtin_setjmp'.  After '__builtin_longjmp' is
29767     finished, the program resumes execution as if the matching
29768     '__builtin_setjmp' returns the value VAL, which must be 1.
29769
29770     Because '__builtin_longjmp' depends on the function return
29771     mechanism to restore the stack context, it cannot be called from
29772     the same function calling '__builtin_setjmp' to initialize BUF.  It
29773     can only be called from a function called (directly or indirectly)
29774     from the function calling '__builtin_setjmp'.
29775
29776
29777File: gcc.info,  Node: Constructing Calls,  Next: Typeof,  Prev: Nonlocal Gotos,  Up: C Extensions
29778
297796.6 Constructing Function Calls
29780===============================
29781
29782Using the built-in functions described below, you can record the
29783arguments a function received, and call another function with the same
29784arguments, without knowing the number or types of the arguments.
29785
29786 You can also record the return value of that function call, and later
29787return that value, without knowing what data type the function tried to
29788return (as long as your caller expects that data type).
29789
29790 However, these built-in functions may interact badly with some
29791sophisticated features or other extensions of the language.  It is,
29792therefore, not recommended to use them outside very simple functions
29793acting as mere forwarders for their arguments.
29794
29795 -- Built-in Function: void * __builtin_apply_args ()
29796     This built-in function returns a pointer to data describing how to
29797     perform a call with the same arguments as are passed to the current
29798     function.
29799
29800     The function saves the arg pointer register, structure value
29801     address, and all registers that might be used to pass arguments to
29802     a function into a block of memory allocated on the stack.  Then it
29803     returns the address of that block.
29804
29805 -- Built-in Function: void * __builtin_apply (void (*FUNCTION)(), void
29806          *ARGUMENTS, size_t SIZE)
29807     This built-in function invokes FUNCTION with a copy of the
29808     parameters described by ARGUMENTS and SIZE.
29809
29810     The value of ARGUMENTS should be the value returned by
29811     '__builtin_apply_args'.  The argument SIZE specifies the size of
29812     the stack argument data, in bytes.
29813
29814     This function returns a pointer to data describing how to return
29815     whatever value is returned by FUNCTION.  The data is saved in a
29816     block of memory allocated on the stack.
29817
29818     It is not always simple to compute the proper value for SIZE.  The
29819     value is used by '__builtin_apply' to compute the amount of data
29820     that should be pushed on the stack and copied from the incoming
29821     argument area.
29822
29823 -- Built-in Function: void __builtin_return (void *RESULT)
29824     This built-in function returns the value described by RESULT from
29825     the containing function.  You should specify, for RESULT, a value
29826     returned by '__builtin_apply'.
29827
29828 -- Built-in Function: __builtin_va_arg_pack ()
29829     This built-in function represents all anonymous arguments of an
29830     inline function.  It can be used only in inline functions that are
29831     always inlined, never compiled as a separate function, such as
29832     those using '__attribute__ ((__always_inline__))' or '__attribute__
29833     ((__gnu_inline__))' extern inline functions.  It must be only
29834     passed as last argument to some other function with variable
29835     arguments.  This is useful for writing small wrapper inlines for
29836     variable argument functions, when using preprocessor macros is
29837     undesirable.  For example:
29838          extern int myprintf (FILE *f, const char *format, ...);
29839          extern inline __attribute__ ((__gnu_inline__)) int
29840          myprintf (FILE *f, const char *format, ...)
29841          {
29842            int r = fprintf (f, "myprintf: ");
29843            if (r < 0)
29844              return r;
29845            int s = fprintf (f, format, __builtin_va_arg_pack ());
29846            if (s < 0)
29847              return s;
29848            return r + s;
29849          }
29850
29851 -- Built-in Function: size_t __builtin_va_arg_pack_len ()
29852     This built-in function returns the number of anonymous arguments of
29853     an inline function.  It can be used only in inline functions that
29854     are always inlined, never compiled as a separate function, such as
29855     those using '__attribute__ ((__always_inline__))' or '__attribute__
29856     ((__gnu_inline__))' extern inline functions.  For example following
29857     does link- or run-time checking of open arguments for optimized
29858     code:
29859          #ifdef __OPTIMIZE__
29860          extern inline __attribute__((__gnu_inline__)) int
29861          myopen (const char *path, int oflag, ...)
29862          {
29863            if (__builtin_va_arg_pack_len () > 1)
29864              warn_open_too_many_arguments ();
29865
29866            if (__builtin_constant_p (oflag))
29867              {
29868                if ((oflag & O_CREAT) != 0 && __builtin_va_arg_pack_len () < 1)
29869                  {
29870                    warn_open_missing_mode ();
29871                    return __open_2 (path, oflag);
29872                  }
29873                return open (path, oflag, __builtin_va_arg_pack ());
29874              }
29875
29876            if (__builtin_va_arg_pack_len () < 1)
29877              return __open_2 (path, oflag);
29878
29879            return open (path, oflag, __builtin_va_arg_pack ());
29880          }
29881          #endif
29882
29883
29884File: gcc.info,  Node: Typeof,  Next: Conditionals,  Prev: Constructing Calls,  Up: C Extensions
29885
298866.7 Referring to a Type with 'typeof'
29887=====================================
29888
29889Another way to refer to the type of an expression is with 'typeof'.  The
29890syntax of using of this keyword looks like 'sizeof', but the construct
29891acts semantically like a type name defined with 'typedef'.
29892
29893 There are two ways of writing the argument to 'typeof': with an
29894expression or with a type.  Here is an example with an expression:
29895
29896     typeof (x[0](1))
29897
29898This assumes that 'x' is an array of pointers to functions; the type
29899described is that of the values of the functions.
29900
29901 Here is an example with a typename as the argument:
29902
29903     typeof (int *)
29904
29905Here the type described is that of pointers to 'int'.
29906
29907 If you are writing a header file that must work when included in ISO C
29908programs, write '__typeof__' instead of 'typeof'.  *Note Alternate
29909Keywords::.
29910
29911 A 'typeof' construct can be used anywhere a typedef name can be used.
29912For example, you can use it in a declaration, in a cast, or inside of
29913'sizeof' or 'typeof'.
29914
29915 The operand of 'typeof' is evaluated for its side effects if and only
29916if it is an expression of variably modified type or the name of such a
29917type.
29918
29919 'typeof' is often useful in conjunction with statement expressions
29920(*note Statement Exprs::).  Here is how the two together can be used to
29921define a safe "maximum" macro which operates on any arithmetic type and
29922evaluates each of its arguments exactly once:
29923
29924     #define max(a,b) \
29925       ({ typeof (a) _a = (a); \
29926           typeof (b) _b = (b); \
29927         _a > _b ? _a : _b; })
29928
29929 The reason for using names that start with underscores for the local
29930variables is to avoid conflicts with variable names that occur within
29931the expressions that are substituted for 'a' and 'b'.  Eventually we
29932hope to design a new form of declaration syntax that allows you to
29933declare variables whose scopes start only after their initializers; this
29934will be a more reliable way to prevent such conflicts.
29935
29936Some more examples of the use of 'typeof':
29937
29938   * This declares 'y' with the type of what 'x' points to.
29939
29940          typeof (*x) y;
29941
29942   * This declares 'y' as an array of such values.
29943
29944          typeof (*x) y[4];
29945
29946   * This declares 'y' as an array of pointers to characters:
29947
29948          typeof (typeof (char *)[4]) y;
29949
29950     It is equivalent to the following traditional C declaration:
29951
29952          char *y[4];
29953
29954     To see the meaning of the declaration using 'typeof', and why it
29955     might be a useful way to write, rewrite it with these macros:
29956
29957          #define pointer(T)  typeof(T *)
29958          #define array(T, N) typeof(T [N])
29959
29960     Now the declaration can be rewritten this way:
29961
29962          array (pointer (char), 4) y;
29963
29964     Thus, 'array (pointer (char), 4)' is the type of arrays of 4
29965     pointers to 'char'.
29966
29967 In GNU C, but not GNU C++, you may also declare the type of a variable
29968as '__auto_type'.  In that case, the declaration must declare only one
29969variable, whose declarator must just be an identifier, the declaration
29970must be initialized, and the type of the variable is determined by the
29971initializer; the name of the variable is not in scope until after the
29972initializer.  (In C++, you should use C++11 'auto' for this purpose.)
29973Using '__auto_type', the "maximum" macro above could be written as:
29974
29975     #define max(a,b) \
29976       ({ __auto_type _a = (a); \
29977           __auto_type _b = (b); \
29978         _a > _b ? _a : _b; })
29979
29980 Using '__auto_type' instead of 'typeof' has two advantages:
29981
29982   * Each argument to the macro appears only once in the expansion of
29983     the macro.  This prevents the size of the macro expansion growing
29984     exponentially when calls to such macros are nested inside arguments
29985     of such macros.
29986
29987   * If the argument to the macro has variably modified type, it is
29988     evaluated only once when using '__auto_type', but twice if 'typeof'
29989     is used.
29990
29991
29992File: gcc.info,  Node: Conditionals,  Next: __int128,  Prev: Typeof,  Up: C Extensions
29993
299946.8 Conditionals with Omitted Operands
29995======================================
29996
29997The middle operand in a conditional expression may be omitted.  Then if
29998the first operand is nonzero, its value is the value of the conditional
29999expression.
30000
30001 Therefore, the expression
30002
30003     x ? : y
30004
30005has the value of 'x' if that is nonzero; otherwise, the value of 'y'.
30006
30007 This example is perfectly equivalent to
30008
30009     x ? x : y
30010
30011In this simple case, the ability to omit the middle operand is not
30012especially useful.  When it becomes useful is when the first operand
30013does, or may (if it is a macro argument), contain a side effect.  Then
30014repeating the operand in the middle would perform the side effect twice.
30015Omitting the middle operand uses the value already computed without the
30016undesirable effects of recomputing it.
30017
30018
30019File: gcc.info,  Node: __int128,  Next: Long Long,  Prev: Conditionals,  Up: C Extensions
30020
300216.9 128-bit Integers
30022====================
30023
30024As an extension the integer scalar type '__int128' is supported for
30025targets which have an integer mode wide enough to hold 128 bits.  Simply
30026write '__int128' for a signed 128-bit integer, or 'unsigned __int128'
30027for an unsigned 128-bit integer.  There is no support in GCC for
30028expressing an integer constant of type '__int128' for targets with 'long
30029long' integer less than 128 bits wide.
30030
30031
30032File: gcc.info,  Node: Long Long,  Next: Complex,  Prev: __int128,  Up: C Extensions
30033
300346.10 Double-Word Integers
30035=========================
30036
30037ISO C99 and ISO C++11 support data types for integers that are at least
3003864 bits wide, and as an extension GCC supports them in C90 and C++98
30039modes.  Simply write 'long long int' for a signed integer, or 'unsigned
30040long long int' for an unsigned integer.  To make an integer constant of
30041type 'long long int', add the suffix 'LL' to the integer.  To make an
30042integer constant of type 'unsigned long long int', add the suffix 'ULL'
30043to the integer.
30044
30045 You can use these types in arithmetic like any other integer types.
30046Addition, subtraction, and bitwise boolean operations on these types are
30047open-coded on all types of machines.  Multiplication is open-coded if
30048the machine supports a fullword-to-doubleword widening multiply
30049instruction.  Division and shifts are open-coded only on machines that
30050provide special support.  The operations that are not open-coded use
30051special library routines that come with GCC.
30052
30053 There may be pitfalls when you use 'long long' types for function
30054arguments without function prototypes.  If a function expects type 'int'
30055for its argument, and you pass a value of type 'long long int',
30056confusion results because the caller and the subroutine disagree about
30057the number of bytes for the argument.  Likewise, if the function expects
30058'long long int' and you pass 'int'.  The best way to avoid such problems
30059is to use prototypes.
30060
30061
30062File: gcc.info,  Node: Complex,  Next: Floating Types,  Prev: Long Long,  Up: C Extensions
30063
300646.11 Complex Numbers
30065====================
30066
30067ISO C99 supports complex floating data types, and as an extension GCC
30068supports them in C90 mode and in C++.  GCC also supports complex integer
30069data types which are not part of ISO C99.  You can declare complex types
30070using the keyword '_Complex'.  As an extension, the older GNU keyword
30071'__complex__' is also supported.
30072
30073 For example, '_Complex double x;' declares 'x' as a variable whose real
30074part and imaginary part are both of type 'double'.  '_Complex short int
30075y;' declares 'y' to have real and imaginary parts of type 'short int';
30076this is not likely to be useful, but it shows that the set of complex
30077types is complete.
30078
30079 To write a constant with a complex data type, use the suffix 'i' or 'j'
30080(either one; they are equivalent).  For example, '2.5fi' has type
30081'_Complex float' and '3i' has type '_Complex int'.  Such a constant
30082always has a pure imaginary value, but you can form any complex value
30083you like by adding one to a real constant.  This is a GNU extension; if
30084you have an ISO C99 conforming C library (such as the GNU C Library),
30085and want to construct complex constants of floating type, you should
30086include '<complex.h>' and use the macros 'I' or '_Complex_I' instead.
30087
30088 The ISO C++14 library also defines the 'i' suffix, so C++14 code that
30089includes the '<complex>' header cannot use 'i' for the GNU extension.
30090The 'j' suffix still has the GNU meaning.
30091
30092 To extract the real part of a complex-valued expression EXP, write
30093'__real__ EXP'.  Likewise, use '__imag__' to extract the imaginary part.
30094This is a GNU extension; for values of floating type, you should use the
30095ISO C99 functions 'crealf', 'creal', 'creall', 'cimagf', 'cimag' and
30096'cimagl', declared in '<complex.h>' and also provided as built-in
30097functions by GCC.
30098
30099 The operator '~' performs complex conjugation when used on a value with
30100a complex type.  This is a GNU extension; for values of floating type,
30101you should use the ISO C99 functions 'conjf', 'conj' and 'conjl',
30102declared in '<complex.h>' and also provided as built-in functions by
30103GCC.
30104
30105 GCC can allocate complex automatic variables in a noncontiguous
30106fashion; it's even possible for the real part to be in a register while
30107the imaginary part is on the stack (or vice versa).  Only the DWARF
30108debug info format can represent this, so use of DWARF is recommended.
30109If you are using the stabs debug info format, GCC describes a
30110noncontiguous complex variable as if it were two separate variables of
30111noncomplex type.  If the variable's actual name is 'foo', the two
30112fictitious variables are named 'foo$real' and 'foo$imag'.  You can
30113examine and set these two fictitious variables with your debugger.
30114
30115
30116File: gcc.info,  Node: Floating Types,  Next: Half-Precision,  Prev: Complex,  Up: C Extensions
30117
301186.12 Additional Floating Types
30119==============================
30120
30121ISO/IEC TS 18661-3:2015 defines C support for additional floating types
30122'_FloatN' and '_FloatNx', and GCC supports these type names; the set of
30123types supported depends on the target architecture.  These types are not
30124supported when compiling C++.  Constants with these types use suffixes
30125'fN' or 'FN' and 'fNx' or 'FNx'.  These type names can be used together
30126with '_Complex' to declare complex types.
30127
30128 As an extension, GNU C and GNU C++ support additional floating types,
30129which are not supported by all targets.
30130   * '__float128' is available on i386, x86_64, IA-64, and hppa HP-UX,
30131     as well as on PowerPC GNU/Linux targets that enable the vector
30132     scalar (VSX) instruction set.  '__float128' supports the 128-bit
30133     floating type.  On i386, x86_64, PowerPC, and IA-64 other than
30134     HP-UX, '__float128' is an alias for '_Float128'.  On hppa and IA-64
30135     HP-UX, '__float128' is an alias for 'long double'.
30136
30137   * '__float80' is available on the i386, x86_64, and IA-64 targets,
30138     and supports the 80-bit ('XFmode') floating type.  It is an alias
30139     for the type name '_Float64x' on these targets.
30140
30141   * '__ibm128' is available on PowerPC targets, and provides access to
30142     the IBM extended double format which is the current format used for
30143     'long double'.  When 'long double' transitions to '__float128' on
30144     PowerPC in the future, '__ibm128' will remain for use in
30145     conversions between the two types.
30146
30147 Support for these additional types includes the arithmetic operators:
30148add, subtract, multiply, divide; unary arithmetic operators; relational
30149operators; equality operators; and conversions to and from integer and
30150other floating types.  Use a suffix 'w' or 'W' in a literal constant of
30151type '__float80' or type '__ibm128'.  Use a suffix 'q' or 'Q' for
30152'_float128'.
30153
30154 In order to use '_Float128', '__float128', and '__ibm128' on PowerPC
30155Linux systems, you must use the '-mfloat128' option.  It is expected in
30156future versions of GCC that '_Float128' and '__float128' will be enabled
30157automatically.
30158
30159 The '_Float128' type is supported on all systems where '__float128' is
30160supported or where 'long double' has the IEEE binary128 format.  The
30161'_Float64x' type is supported on all systems where '__float128' is
30162supported.  The '_Float32' type is supported on all systems supporting
30163IEEE binary32; the '_Float64' and '_Float32x' types are supported on all
30164systems supporting IEEE binary64.  The '_Float16' type is supported on
30165AArch64 systems by default, and on ARM systems when the IEEE format for
3016616-bit floating-point types is selected with '-mfp16-format=ieee'.  GCC
30167does not currently support '_Float128x' on any systems.
30168
30169 On the i386, x86_64, IA-64, and HP-UX targets, you can declare complex
30170types using the corresponding internal complex type, 'XCmode' for
30171'__float80' type and 'TCmode' for '__float128' type:
30172
30173     typedef _Complex float __attribute__((mode(TC))) _Complex128;
30174     typedef _Complex float __attribute__((mode(XC))) _Complex80;
30175
30176 On the PowerPC Linux VSX targets, you can declare complex types using
30177the corresponding internal complex type, 'KCmode' for '__float128' type
30178and 'ICmode' for '__ibm128' type:
30179
30180     typedef _Complex float __attribute__((mode(KC))) _Complex_float128;
30181     typedef _Complex float __attribute__((mode(IC))) _Complex_ibm128;
30182
30183
30184File: gcc.info,  Node: Half-Precision,  Next: Decimal Float,  Prev: Floating Types,  Up: C Extensions
30185
301866.13 Half-Precision Floating Point
30187==================================
30188
30189On ARM and AArch64 targets, GCC supports half-precision (16-bit)
30190floating point via the '__fp16' type defined in the ARM C Language
30191Extensions.  On ARM systems, you must enable this type explicitly with
30192the '-mfp16-format' command-line option in order to use it.
30193
30194 ARM targets support two incompatible representations for half-precision
30195floating-point values.  You must choose one of the representations and
30196use it consistently in your program.
30197
30198 Specifying '-mfp16-format=ieee' selects the IEEE 754-2008 format.  This
30199format can represent normalized values in the range of 2^{-14} to 65504.
30200There are 11 bits of significand precision, approximately 3 decimal
30201digits.
30202
30203 Specifying '-mfp16-format=alternative' selects the ARM alternative
30204format.  This representation is similar to the IEEE format, but does not
30205support infinities or NaNs.  Instead, the range of exponents is
30206extended, so that this format can represent normalized values in the
30207range of 2^{-14} to 131008.
30208
30209 The GCC port for AArch64 only supports the IEEE 754-2008 format, and
30210does not require use of the '-mfp16-format' command-line option.
30211
30212 The '__fp16' type may only be used as an argument to intrinsics defined
30213in '<arm_fp16.h>', or as a storage format.  For purposes of arithmetic
30214and other operations, '__fp16' values in C or C++ expressions are
30215automatically promoted to 'float'.
30216
30217 The ARM target provides hardware support for conversions between
30218'__fp16' and 'float' values as an extension to VFP and NEON (Advanced
30219SIMD), and from ARMv8-A provides hardware support for conversions
30220between '__fp16' and 'double' values.  GCC generates code using these
30221hardware instructions if you compile with options to select an FPU that
30222provides them; for example, '-mfpu=neon-fp16 -mfloat-abi=softfp', in
30223addition to the '-mfp16-format' option to select a half-precision
30224format.
30225
30226 Language-level support for the '__fp16' data type is independent of
30227whether GCC generates code using hardware floating-point instructions.
30228In cases where hardware support is not specified, GCC implements
30229conversions between '__fp16' and other types as library calls.
30230
30231 It is recommended that portable code use the '_Float16' type defined by
30232ISO/IEC TS 18661-3:2015.  *Note Floating Types::.
30233
30234
30235File: gcc.info,  Node: Decimal Float,  Next: Hex Floats,  Prev: Half-Precision,  Up: C Extensions
30236
302376.14 Decimal Floating Types
30238===========================
30239
30240As an extension, GNU C supports decimal floating types as defined in the
30241N1312 draft of ISO/IEC WDTR24732.  Support for decimal floating types in
30242GCC will evolve as the draft technical report changes.  Calling
30243conventions for any target might also change.  Not all targets support
30244decimal floating types.
30245
30246 The decimal floating types are '_Decimal32', '_Decimal64', and
30247'_Decimal128'.  They use a radix of ten, unlike the floating types
30248'float', 'double', and 'long double' whose radix is not specified by the
30249C standard but is usually two.
30250
30251 Support for decimal floating types includes the arithmetic operators
30252add, subtract, multiply, divide; unary arithmetic operators; relational
30253operators; equality operators; and conversions to and from integer and
30254other floating types.  Use a suffix 'df' or 'DF' in a literal constant
30255of type '_Decimal32', 'dd' or 'DD' for '_Decimal64', and 'dl' or 'DL'
30256for '_Decimal128'.
30257
30258 GCC support of decimal float as specified by the draft technical report
30259is incomplete:
30260
30261   * When the value of a decimal floating type cannot be represented in
30262     the integer type to which it is being converted, the result is
30263     undefined rather than the result value specified by the draft
30264     technical report.
30265
30266   * GCC does not provide the C library functionality associated with
30267     'math.h', 'fenv.h', 'stdio.h', 'stdlib.h', and 'wchar.h', which
30268     must come from a separate C library implementation.  Because of
30269     this the GNU C compiler does not define macro '__STDC_DEC_FP__' to
30270     indicate that the implementation conforms to the technical report.
30271
30272 Types '_Decimal32', '_Decimal64', and '_Decimal128' are supported by
30273the DWARF debug information format.
30274
30275
30276File: gcc.info,  Node: Hex Floats,  Next: Fixed-Point,  Prev: Decimal Float,  Up: C Extensions
30277
302786.15 Hex Floats
30279===============
30280
30281ISO C99 and ISO C++17 support floating-point numbers written not only in
30282the usual decimal notation, such as '1.55e1', but also numbers such as
30283'0x1.fp3' written in hexadecimal format.  As a GNU extension, GCC
30284supports this in C90 mode (except in some cases when strictly
30285conforming) and in C++98, C++11 and C++14 modes.  In that format the
30286'0x' hex introducer and the 'p' or 'P' exponent field are mandatory.
30287The exponent is a decimal number that indicates the power of 2 by which
30288the significant part is multiplied.  Thus '0x1.f' is 1 15/16, 'p3'
30289multiplies it by 8, and the value of '0x1.fp3' is the same as '1.55e1'.
30290
30291 Unlike for floating-point numbers in the decimal notation the exponent
30292is always required in the hexadecimal notation.  Otherwise the compiler
30293would not be able to resolve the ambiguity of, e.g., '0x1.f'.  This
30294could mean '1.0f' or '1.9375' since 'f' is also the extension for
30295floating-point constants of type 'float'.
30296
30297
30298File: gcc.info,  Node: Fixed-Point,  Next: Named Address Spaces,  Prev: Hex Floats,  Up: C Extensions
30299
303006.16 Fixed-Point Types
30301======================
30302
30303As an extension, GNU C supports fixed-point types as defined in the
30304N1169 draft of ISO/IEC DTR 18037.  Support for fixed-point types in GCC
30305will evolve as the draft technical report changes.  Calling conventions
30306for any target might also change.  Not all targets support fixed-point
30307types.
30308
30309 The fixed-point types are 'short _Fract', '_Fract', 'long _Fract',
30310'long long _Fract', 'unsigned short _Fract', 'unsigned _Fract',
30311'unsigned long _Fract', 'unsigned long long _Fract', '_Sat short
30312_Fract', '_Sat _Fract', '_Sat long _Fract', '_Sat long long _Fract',
30313'_Sat unsigned short _Fract', '_Sat unsigned _Fract', '_Sat unsigned
30314long _Fract', '_Sat unsigned long long _Fract', 'short _Accum',
30315'_Accum', 'long _Accum', 'long long _Accum', 'unsigned short _Accum',
30316'unsigned _Accum', 'unsigned long _Accum', 'unsigned long long _Accum',
30317'_Sat short _Accum', '_Sat _Accum', '_Sat long _Accum', '_Sat long long
30318_Accum', '_Sat unsigned short _Accum', '_Sat unsigned _Accum', '_Sat
30319unsigned long _Accum', '_Sat unsigned long long _Accum'.
30320
30321 Fixed-point data values contain fractional and optional integral parts.
30322The format of fixed-point data varies and depends on the target machine.
30323
30324 Support for fixed-point types includes:
30325   * prefix and postfix increment and decrement operators ('++', '--')
30326   * unary arithmetic operators ('+', '-', '!')
30327   * binary arithmetic operators ('+', '-', '*', '/')
30328   * binary shift operators ('<<', '>>')
30329   * relational operators ('<', '<=', '>=', '>')
30330   * equality operators ('==', '!=')
30331   * assignment operators ('+=', '-=', '*=', '/=', '<<=', '>>=')
30332   * conversions to and from integer, floating-point, or fixed-point
30333     types
30334
30335 Use a suffix in a fixed-point literal constant:
30336   * 'hr' or 'HR' for 'short _Fract' and '_Sat short _Fract'
30337   * 'r' or 'R' for '_Fract' and '_Sat _Fract'
30338   * 'lr' or 'LR' for 'long _Fract' and '_Sat long _Fract'
30339   * 'llr' or 'LLR' for 'long long _Fract' and '_Sat long long _Fract'
30340   * 'uhr' or 'UHR' for 'unsigned short _Fract' and '_Sat unsigned short
30341     _Fract'
30342   * 'ur' or 'UR' for 'unsigned _Fract' and '_Sat unsigned _Fract'
30343   * 'ulr' or 'ULR' for 'unsigned long _Fract' and '_Sat unsigned long
30344     _Fract'
30345   * 'ullr' or 'ULLR' for 'unsigned long long _Fract' and '_Sat unsigned
30346     long long _Fract'
30347   * 'hk' or 'HK' for 'short _Accum' and '_Sat short _Accum'
30348   * 'k' or 'K' for '_Accum' and '_Sat _Accum'
30349   * 'lk' or 'LK' for 'long _Accum' and '_Sat long _Accum'
30350   * 'llk' or 'LLK' for 'long long _Accum' and '_Sat long long _Accum'
30351   * 'uhk' or 'UHK' for 'unsigned short _Accum' and '_Sat unsigned short
30352     _Accum'
30353   * 'uk' or 'UK' for 'unsigned _Accum' and '_Sat unsigned _Accum'
30354   * 'ulk' or 'ULK' for 'unsigned long _Accum' and '_Sat unsigned long
30355     _Accum'
30356   * 'ullk' or 'ULLK' for 'unsigned long long _Accum' and '_Sat unsigned
30357     long long _Accum'
30358
30359 GCC support of fixed-point types as specified by the draft technical
30360report is incomplete:
30361
30362   * Pragmas to control overflow and rounding behaviors are not
30363     implemented.
30364
30365 Fixed-point types are supported by the DWARF debug information format.
30366
30367
30368File: gcc.info,  Node: Named Address Spaces,  Next: Zero Length,  Prev: Fixed-Point,  Up: C Extensions
30369
303706.17 Named Address Spaces
30371=========================
30372
30373As an extension, GNU C supports named address spaces as defined in the
30374N1275 draft of ISO/IEC DTR 18037.  Support for named address spaces in
30375GCC will evolve as the draft technical report changes.  Calling
30376conventions for any target might also change.  At present, only the AVR,
30377M32C, RL78, and x86 targets support address spaces other than the
30378generic address space.
30379
30380 Address space identifiers may be used exactly like any other C type
30381qualifier (e.g., 'const' or 'volatile').  See the N1275 document for
30382more details.
30383
303846.17.1 AVR Named Address Spaces
30385-------------------------------
30386
30387On the AVR target, there are several address spaces that can be used in
30388order to put read-only data into the flash memory and access that data
30389by means of the special instructions 'LPM' or 'ELPM' needed to read from
30390flash.
30391
30392 Devices belonging to 'avrtiny' and 'avrxmega3' can access flash memory
30393by means of 'LD*' instructions because the flash memory is mapped into
30394the RAM address space.  There is _no need_ for language extensions like
30395'__flash' or attribute *note 'progmem': AVR Variable Attributes.  The
30396default linker description files for these devices cater for that
30397feature and '.rodata' stays in flash: The compiler just generates 'LD*'
30398instructions, and the linker script adds core specific offsets to all
30399'.rodata' symbols: '0x4000' in the case of 'avrtiny' and '0x8000' in the
30400case of 'avrxmega3'.  See *note AVR Options:: for a list of respective
30401devices.
30402
30403 For devices not in 'avrtiny' or 'avrxmega3', any data including
30404read-only data is located in RAM (the generic address space) because
30405flash memory is not visible in the RAM address space.  In order to
30406locate read-only data in flash memory _and_ to generate the right
30407instructions to access this data without using (inline) assembler code,
30408special address spaces are needed.
30409
30410'__flash'
30411     The '__flash' qualifier locates data in the '.progmem.data'
30412     section.  Data is read using the 'LPM' instruction.  Pointers to
30413     this address space are 16 bits wide.
30414
30415'__flash1'
30416'__flash2'
30417'__flash3'
30418'__flash4'
30419'__flash5'
30420     These are 16-bit address spaces locating data in section
30421     '.progmemN.data' where N refers to address space '__flashN'.  The
30422     compiler sets the 'RAMPZ' segment register appropriately before
30423     reading data by means of the 'ELPM' instruction.
30424
30425'__memx'
30426     This is a 24-bit address space that linearizes flash and RAM: If
30427     the high bit of the address is set, data is read from RAM using the
30428     lower two bytes as RAM address.  If the high bit of the address is
30429     clear, data is read from flash with 'RAMPZ' set according to the
30430     high byte of the address.  *Note '__builtin_avr_flash_segment': AVR
30431     Built-in Functions.
30432
30433     Objects in this address space are located in '.progmemx.data'.
30434
30435 Example
30436
30437     char my_read (const __flash char ** p)
30438     {
30439         /* p is a pointer to RAM that points to a pointer to flash.
30440            The first indirection of p reads that flash pointer
30441            from RAM and the second indirection reads a char from this
30442            flash address.  */
30443
30444         return **p;
30445     }
30446
30447     /* Locate array[] in flash memory */
30448     const __flash int array[] = { 3, 5, 7, 11, 13, 17, 19 };
30449
30450     int i = 1;
30451
30452     int main (void)
30453     {
30454        /* Return 17 by reading from flash memory */
30455        return array[array[i]];
30456     }
30457
30458For each named address space supported by avr-gcc there is an equally
30459named but uppercase built-in macro defined.  The purpose is to
30460facilitate testing if respective address space support is available or
30461not:
30462
30463     #ifdef __FLASH
30464     const __flash int var = 1;
30465
30466     int read_var (void)
30467     {
30468         return var;
30469     }
30470     #else
30471     #include <avr/pgmspace.h> /* From AVR-LibC */
30472
30473     const int var PROGMEM = 1;
30474
30475     int read_var (void)
30476     {
30477         return (int) pgm_read_word (&var);
30478     }
30479     #endif /* __FLASH */
30480
30481Notice that attribute *note 'progmem': AVR Variable Attributes. locates
30482data in flash but accesses to these data read from generic address
30483space, i.e. from RAM, so that you need special accessors like
30484'pgm_read_byte' from AVR-LibC (http://nongnu.org/avr-libc/user-manual/)
30485together with attribute 'progmem'.
30486
30487Limitations and caveats
30488
30489   * Reading across the 64 KiB section boundary of the '__flash' or
30490     '__flashN' address spaces shows undefined behavior.  The only
30491     address space that supports reading across the 64 KiB flash segment
30492     boundaries is '__memx'.
30493
30494   * If you use one of the '__flashN' address spaces you must arrange
30495     your linker script to locate the '.progmemN.data' sections
30496     according to your needs.
30497
30498   * Any data or pointers to the non-generic address spaces must be
30499     qualified as 'const', i.e. as read-only data.  This still applies
30500     if the data in one of these address spaces like software version
30501     number or calibration lookup table are intended to be changed after
30502     load time by, say, a boot loader.  In this case the right
30503     qualification is 'const' 'volatile' so that the compiler must not
30504     optimize away known values or insert them as immediates into
30505     operands of instructions.
30506
30507   * The following code initializes a variable 'pfoo' located in static
30508     storage with a 24-bit address:
30509          extern const __memx char foo;
30510          const __memx void *pfoo = &foo;
30511
30512   * On the reduced Tiny devices like ATtiny40, no address spaces are
30513     supported.  Just use vanilla C / C++ code without overhead as
30514     outlined above.  Attribute 'progmem' is supported but works
30515     differently, see *note AVR Variable Attributes::.
30516
305176.17.2 M32C Named Address Spaces
30518--------------------------------
30519
30520On the M32C target, with the R8C and M16C CPU variants, variables
30521qualified with '__far' are accessed using 32-bit addresses in order to
30522access memory beyond the first 64 Ki bytes.  If '__far' is used with the
30523M32CM or M32C CPU variants, it has no effect.
30524
305256.17.3 RL78 Named Address Spaces
30526--------------------------------
30527
30528On the RL78 target, variables qualified with '__far' are accessed with
3052932-bit pointers (20-bit addresses) rather than the default 16-bit
30530addresses.  Non-far variables are assumed to appear in the topmost
3053164 KiB of the address space.
30532
305336.17.4 x86 Named Address Spaces
30534-------------------------------
30535
30536On the x86 target, variables may be declared as being relative to the
30537'%fs' or '%gs' segments.
30538
30539'__seg_fs'
30540'__seg_gs'
30541     The object is accessed with the respective segment override prefix.
30542
30543     The respective segment base must be set via some method specific to
30544     the operating system.  Rather than require an expensive system call
30545     to retrieve the segment base, these address spaces are not
30546     considered to be subspaces of the generic (flat) address space.
30547     This means that explicit casts are required to convert pointers
30548     between these address spaces and the generic address space.  In
30549     practice the application should cast to 'uintptr_t' and apply the
30550     segment base offset that it installed previously.
30551
30552     The preprocessor symbols '__SEG_FS' and '__SEG_GS' are defined when
30553     these address spaces are supported.
30554
30555
30556File: gcc.info,  Node: Zero Length,  Next: Empty Structures,  Prev: Named Address Spaces,  Up: C Extensions
30557
305586.18 Arrays of Length Zero
30559==========================
30560
30561Declaring zero-length arrays is allowed in GNU C as an extension.  A
30562zero-length array can be useful as the last element of a structure that
30563is really a header for a variable-length object:
30564
30565     struct line {
30566       int length;
30567       char contents[0];
30568     };
30569
30570     struct line *thisline = (struct line *)
30571       malloc (sizeof (struct line) + this_length);
30572     thisline->length = this_length;
30573
30574 Although the size of a zero-length array is zero, an array member of
30575this kind may increase the size of the enclosing type as a result of
30576tail padding.  The offset of a zero-length array member from the
30577beginning of the enclosing structure is the same as the offset of an
30578array with one or more elements of the same type.  The alignment of a
30579zero-length array is the same as the alignment of its elements.
30580
30581 Declaring zero-length arrays in other contexts, including as interior
30582members of structure objects or as non-member objects, is discouraged.
30583Accessing elements of zero-length arrays declared in such contexts is
30584undefined and may be diagnosed.
30585
30586 In the absence of the zero-length array extension, in ISO C90 the
30587'contents' array in the example above would typically be declared to
30588have a single element.  Unlike a zero-length array which only
30589contributes to the size of the enclosing structure for the purposes of
30590alignment, a one-element array always occupies at least as much space as
30591a single object of the type.  Although using one-element arrays this way
30592is discouraged, GCC handles accesses to trailing one-element array
30593members analogously to zero-length arrays.
30594
30595 The preferred mechanism to declare variable-length types like 'struct
30596line' above is the ISO C99 "flexible array member", with slightly
30597different syntax and semantics:
30598
30599   * Flexible array members are written as 'contents[]' without the '0'.
30600
30601   * Flexible array members have incomplete type, and so the 'sizeof'
30602     operator may not be applied.  As a quirk of the original
30603     implementation of zero-length arrays, 'sizeof' evaluates to zero.
30604
30605   * Flexible array members may only appear as the last member of a
30606     'struct' that is otherwise non-empty.
30607
30608   * A structure containing a flexible array member, or a union
30609     containing such a structure (possibly recursively), may not be a
30610     member of a structure or an element of an array.  (However, these
30611     uses are permitted by GCC as extensions.)
30612
30613 Non-empty initialization of zero-length arrays is treated like any case
30614where there are more initializer elements than the array holds, in that
30615a suitable warning about "excess elements in array" is given, and the
30616excess elements (all of them, in this case) are ignored.
30617
30618 GCC allows static initialization of flexible array members.  This is
30619equivalent to defining a new structure containing the original structure
30620followed by an array of sufficient size to contain the data.  E.g. in
30621the following, 'f1' is constructed as if it were declared like 'f2'.
30622
30623     struct f1 {
30624       int x; int y[];
30625     } f1 = { 1, { 2, 3, 4 } };
30626
30627     struct f2 {
30628       struct f1 f1; int data[3];
30629     } f2 = { { 1 }, { 2, 3, 4 } };
30630
30631The convenience of this extension is that 'f1' has the desired type,
30632eliminating the need to consistently refer to 'f2.f1'.
30633
30634 This has symmetry with normal static arrays, in that an array of
30635unknown size is also written with '[]'.
30636
30637 Of course, this extension only makes sense if the extra data comes at
30638the end of a top-level object, as otherwise we would be overwriting data
30639at subsequent offsets.  To avoid undue complication and confusion with
30640initialization of deeply nested arrays, we simply disallow any non-empty
30641initialization except when the structure is the top-level object.  For
30642example:
30643
30644     struct foo { int x; int y[]; };
30645     struct bar { struct foo z; };
30646
30647     struct foo a = { 1, { 2, 3, 4 } };        // Valid.
30648     struct bar b = { { 1, { 2, 3, 4 } } };    // Invalid.
30649     struct bar c = { { 1, { } } };            // Valid.
30650     struct foo d[1] = { { 1, { 2, 3, 4 } } };  // Invalid.
30651
30652
30653File: gcc.info,  Node: Empty Structures,  Next: Variable Length,  Prev: Zero Length,  Up: C Extensions
30654
306556.19 Structures with No Members
30656===============================
30657
30658GCC permits a C structure to have no members:
30659
30660     struct empty {
30661     };
30662
30663 The structure has size zero.  In C++, empty structures are part of the
30664language.  G++ treats empty structures as if they had a single member of
30665type 'char'.
30666
30667
30668File: gcc.info,  Node: Variable Length,  Next: Variadic Macros,  Prev: Empty Structures,  Up: C Extensions
30669
306706.20 Arrays of Variable Length
30671==============================
30672
30673Variable-length automatic arrays are allowed in ISO C99, and as an
30674extension GCC accepts them in C90 mode and in C++.  These arrays are
30675declared like any other automatic arrays, but with a length that is not
30676a constant expression.  The storage is allocated at the point of
30677declaration and deallocated when the block scope containing the
30678declaration exits.  For example:
30679
30680     FILE *
30681     concat_fopen (char *s1, char *s2, char *mode)
30682     {
30683       char str[strlen (s1) + strlen (s2) + 1];
30684       strcpy (str, s1);
30685       strcat (str, s2);
30686       return fopen (str, mode);
30687     }
30688
30689 Jumping or breaking out of the scope of the array name deallocates the
30690storage.  Jumping into the scope is not allowed; you get an error
30691message for it.
30692
30693 As an extension, GCC accepts variable-length arrays as a member of a
30694structure or a union.  For example:
30695
30696     void
30697     foo (int n)
30698     {
30699       struct S { int x[n]; };
30700     }
30701
30702 You can use the function 'alloca' to get an effect much like
30703variable-length arrays.  The function 'alloca' is available in many
30704other C implementations (but not in all).  On the other hand,
30705variable-length arrays are more elegant.
30706
30707 There are other differences between these two methods.  Space allocated
30708with 'alloca' exists until the containing _function_ returns.  The space
30709for a variable-length array is deallocated as soon as the array name's
30710scope ends, unless you also use 'alloca' in this scope.
30711
30712 You can also use variable-length arrays as arguments to functions:
30713
30714     struct entry
30715     tester (int len, char data[len][len])
30716     {
30717       /* ... */
30718     }
30719
30720 The length of an array is computed once when the storage is allocated
30721and is remembered for the scope of the array in case you access it with
30722'sizeof'.
30723
30724 If you want to pass the array first and the length afterward, you can
30725use a forward declaration in the parameter list--another GNU extension.
30726
30727     struct entry
30728     tester (int len; char data[len][len], int len)
30729     {
30730       /* ... */
30731     }
30732
30733 The 'int len' before the semicolon is a "parameter forward
30734declaration", and it serves the purpose of making the name 'len' known
30735when the declaration of 'data' is parsed.
30736
30737 You can write any number of such parameter forward declarations in the
30738parameter list.  They can be separated by commas or semicolons, but the
30739last one must end with a semicolon, which is followed by the "real"
30740parameter declarations.  Each forward declaration must match a "real"
30741declaration in parameter name and data type.  ISO C99 does not support
30742parameter forward declarations.
30743
30744
30745File: gcc.info,  Node: Variadic Macros,  Next: Escaped Newlines,  Prev: Variable Length,  Up: C Extensions
30746
307476.21 Macros with a Variable Number of Arguments.
30748================================================
30749
30750In the ISO C standard of 1999, a macro can be declared to accept a
30751variable number of arguments much as a function can.  The syntax for
30752defining the macro is similar to that of a function.  Here is an
30753example:
30754
30755     #define debug(format, ...) fprintf (stderr, format, __VA_ARGS__)
30756
30757Here '...' is a "variable argument".  In the invocation of such a macro,
30758it represents the zero or more tokens until the closing parenthesis that
30759ends the invocation, including any commas.  This set of tokens replaces
30760the identifier '__VA_ARGS__' in the macro body wherever it appears.  See
30761the CPP manual for more information.
30762
30763 GCC has long supported variadic macros, and used a different syntax
30764that allowed you to give a name to the variable arguments just like any
30765other argument.  Here is an example:
30766
30767     #define debug(format, args...) fprintf (stderr, format, args)
30768
30769This is in all ways equivalent to the ISO C example above, but arguably
30770more readable and descriptive.
30771
30772 GNU CPP has two further variadic macro extensions, and permits them to
30773be used with either of the above forms of macro definition.
30774
30775 In standard C, you are not allowed to leave the variable argument out
30776entirely; but you are allowed to pass an empty argument.  For example,
30777this invocation is invalid in ISO C, because there is no comma after the
30778string:
30779
30780     debug ("A message")
30781
30782 GNU CPP permits you to completely omit the variable arguments in this
30783way.  In the above examples, the compiler would complain, though since
30784the expansion of the macro still has the extra comma after the format
30785string.
30786
30787 To help solve this problem, CPP behaves specially for variable
30788arguments used with the token paste operator, '##'.  If instead you
30789write
30790
30791     #define debug(format, ...) fprintf (stderr, format, ## __VA_ARGS__)
30792
30793and if the variable arguments are omitted or empty, the '##' operator
30794causes the preprocessor to remove the comma before it.  If you do
30795provide some variable arguments in your macro invocation, GNU CPP does
30796not complain about the paste operation and instead places the variable
30797arguments after the comma.  Just like any other pasted macro argument,
30798these arguments are not macro expanded.
30799
30800
30801File: gcc.info,  Node: Escaped Newlines,  Next: Subscripting,  Prev: Variadic Macros,  Up: C Extensions
30802
308036.22 Slightly Looser Rules for Escaped Newlines
30804===============================================
30805
30806The preprocessor treatment of escaped newlines is more relaxed than that
30807specified by the C90 standard, which requires the newline to immediately
30808follow a backslash.  GCC's implementation allows whitespace in the form
30809of spaces, horizontal and vertical tabs, and form feeds between the
30810backslash and the subsequent newline.  The preprocessor issues a
30811warning, but treats it as a valid escaped newline and combines the two
30812lines to form a single logical line.  This works within comments and
30813tokens, as well as between tokens.  Comments are _not_ treated as
30814whitespace for the purposes of this relaxation, since they have not yet
30815been replaced with spaces.
30816
30817
30818File: gcc.info,  Node: Subscripting,  Next: Pointer Arith,  Prev: Escaped Newlines,  Up: C Extensions
30819
308206.23 Non-Lvalue Arrays May Have Subscripts
30821==========================================
30822
30823In ISO C99, arrays that are not lvalues still decay to pointers, and may
30824be subscripted, although they may not be modified or used after the next
30825sequence point and the unary '&' operator may not be applied to them.
30826As an extension, GNU C allows such arrays to be subscripted in C90 mode,
30827though otherwise they do not decay to pointers outside C99 mode.  For
30828example, this is valid in GNU C though not valid in C90:
30829
30830     struct foo {int a[4];};
30831
30832     struct foo f();
30833
30834     bar (int index)
30835     {
30836       return f().a[index];
30837     }
30838
30839
30840File: gcc.info,  Node: Pointer Arith,  Next: Variadic Pointer Args,  Prev: Subscripting,  Up: C Extensions
30841
308426.24 Arithmetic on 'void'- and Function-Pointers
30843================================================
30844
30845In GNU C, addition and subtraction operations are supported on pointers
30846to 'void' and on pointers to functions.  This is done by treating the
30847size of a 'void' or of a function as 1.
30848
30849 A consequence of this is that 'sizeof' is also allowed on 'void' and on
30850function types, and returns 1.
30851
30852 The option '-Wpointer-arith' requests a warning if these extensions are
30853used.
30854
30855
30856File: gcc.info,  Node: Variadic Pointer Args,  Next: Pointers to Arrays,  Prev: Pointer Arith,  Up: C Extensions
30857
308586.25 Pointer Arguments in Variadic Functions
30859============================================
30860
30861Standard C requires that pointer types used with 'va_arg' in functions
30862with variable argument lists either must be compatible with that of the
30863actual argument, or that one type must be a pointer to 'void' and the
30864other a pointer to a character type.  GNU C implements the POSIX XSI
30865extension that additionally permits the use of 'va_arg' with a pointer
30866type to receive arguments of any other pointer type.
30867
30868 In particular, in GNU C 'va_arg (ap, void *)' can safely be used to
30869consume an argument of any pointer type.
30870
30871
30872File: gcc.info,  Node: Pointers to Arrays,  Next: Initializers,  Prev: Variadic Pointer Args,  Up: C Extensions
30873
308746.26 Pointers to Arrays with Qualifiers Work as Expected
30875========================================================
30876
30877In GNU C, pointers to arrays with qualifiers work similar to pointers to
30878other qualified types.  For example, a value of type 'int (*)[5]' can be
30879used to initialize a variable of type 'const int (*)[5]'.  These types
30880are incompatible in ISO C because the 'const' qualifier is formally
30881attached to the element type of the array and not the array itself.
30882
30883     extern void
30884     transpose (int N, int M, double out[M][N], const double in[N][M]);
30885     double x[3][2];
30886     double y[2][3];
30887     ...
30888     transpose(3, 2, y, x);
30889
30890
30891File: gcc.info,  Node: Initializers,  Next: Compound Literals,  Prev: Pointers to Arrays,  Up: C Extensions
30892
308936.27 Non-Constant Initializers
30894==============================
30895
30896As in standard C++ and ISO C99, the elements of an aggregate initializer
30897for an automatic variable are not required to be constant expressions in
30898GNU C.  Here is an example of an initializer with run-time varying
30899elements:
30900
30901     foo (float f, float g)
30902     {
30903       float beat_freqs[2] = { f-g, f+g };
30904       /* ... */
30905     }
30906
30907
30908File: gcc.info,  Node: Compound Literals,  Next: Designated Inits,  Prev: Initializers,  Up: C Extensions
30909
309106.28 Compound Literals
30911======================
30912
30913A compound literal looks like a cast of a brace-enclosed aggregate
30914initializer list.  Its value is an object of the type specified in the
30915cast, containing the elements specified in the initializer.  Unlike the
30916result of a cast, a compound literal is an lvalue.  ISO C99 and later
30917support compound literals.  As an extension, GCC supports compound
30918literals also in C90 mode and in C++, although as explained below, the
30919C++ semantics are somewhat different.
30920
30921 Usually, the specified type of a compound literal is a structure.
30922Assume that 'struct foo' and 'structure' are declared as shown:
30923
30924     struct foo {int a; char b[2];} structure;
30925
30926Here is an example of constructing a 'struct foo' with a compound
30927literal:
30928
30929     structure = ((struct foo) {x + y, 'a', 0});
30930
30931This is equivalent to writing the following:
30932
30933     {
30934       struct foo temp = {x + y, 'a', 0};
30935       structure = temp;
30936     }
30937
30938 You can also construct an array, though this is dangerous in C++, as
30939explained below.  If all the elements of the compound literal are (made
30940up of) simple constant expressions suitable for use in initializers of
30941objects of static storage duration, then the compound literal can be
30942coerced to a pointer to its first element and used in such an
30943initializer, as shown here:
30944
30945     char **foo = (char *[]) { "x", "y", "z" };
30946
30947 Compound literals for scalar types and union types are also allowed.
30948In the following example the variable 'i' is initialized to the value
30949'2', the result of incrementing the unnamed object created by the
30950compound literal.
30951
30952     int i = ++(int) { 1 };
30953
30954 As a GNU extension, GCC allows initialization of objects with static
30955storage duration by compound literals (which is not possible in ISO C99
30956because the initializer is not a constant).  It is handled as if the
30957object were initialized only with the brace-enclosed list if the types
30958of the compound literal and the object match.  The elements of the
30959compound literal must be constant.  If the object being initialized has
30960array type of unknown size, the size is determined by the size of the
30961compound literal.
30962
30963     static struct foo x = (struct foo) {1, 'a', 'b'};
30964     static int y[] = (int []) {1, 2, 3};
30965     static int z[] = (int [3]) {1};
30966
30967The above lines are equivalent to the following:
30968     static struct foo x = {1, 'a', 'b'};
30969     static int y[] = {1, 2, 3};
30970     static int z[] = {1, 0, 0};
30971
30972 In C, a compound literal designates an unnamed object with static or
30973automatic storage duration.  In C++, a compound literal designates a
30974temporary object that only lives until the end of its full-expression.
30975As a result, well-defined C code that takes the address of a subobject
30976of a compound literal can be undefined in C++, so G++ rejects the
30977conversion of a temporary array to a pointer.  For instance, if the
30978array compound literal example above appeared inside a function, any
30979subsequent use of 'foo' in C++ would have undefined behavior because the
30980lifetime of the array ends after the declaration of 'foo'.
30981
30982 As an optimization, G++ sometimes gives array compound literals longer
30983lifetimes: when the array either appears outside a function or has a
30984'const'-qualified type.  If 'foo' and its initializer had elements of
30985type 'char *const' rather than 'char *', or if 'foo' were a global
30986variable, the array would have static storage duration.  But it is
30987probably safest just to avoid the use of array compound literals in C++
30988code.
30989
30990
30991File: gcc.info,  Node: Designated Inits,  Next: Case Ranges,  Prev: Compound Literals,  Up: C Extensions
30992
309936.29 Designated Initializers
30994============================
30995
30996Standard C90 requires the elements of an initializer to appear in a
30997fixed order, the same as the order of the elements in the array or
30998structure being initialized.
30999
31000 In ISO C99 you can give the elements in any order, specifying the array
31001indices or structure field names they apply to, and GNU C allows this as
31002an extension in C90 mode as well.  This extension is not implemented in
31003GNU C++.
31004
31005 To specify an array index, write '[INDEX] =' before the element value.
31006For example,
31007
31008     int a[6] = { [4] = 29, [2] = 15 };
31009
31010is equivalent to
31011
31012     int a[6] = { 0, 0, 15, 0, 29, 0 };
31013
31014The index values must be constant expressions, even if the array being
31015initialized is automatic.
31016
31017 An alternative syntax for this that has been obsolete since GCC 2.5 but
31018GCC still accepts is to write '[INDEX]' before the element value, with
31019no '='.
31020
31021 To initialize a range of elements to the same value, write '[FIRST ...
31022LAST] = VALUE'.  This is a GNU extension.  For example,
31023
31024     int widths[] = { [0 ... 9] = 1, [10 ... 99] = 2, [100] = 3 };
31025
31026If the value in it has side effects, the side effects happen only once,
31027not for each initialized field by the range initializer.
31028
31029Note that the length of the array is the highest value specified plus
31030one.
31031
31032 In a structure initializer, specify the name of a field to initialize
31033with '.FIELDNAME =' before the element value.  For example, given the
31034following structure,
31035
31036     struct point { int x, y; };
31037
31038the following initialization
31039
31040     struct point p = { .y = yvalue, .x = xvalue };
31041
31042is equivalent to
31043
31044     struct point p = { xvalue, yvalue };
31045
31046 Another syntax that has the same meaning, obsolete since GCC 2.5, is
31047'FIELDNAME:', as shown here:
31048
31049     struct point p = { y: yvalue, x: xvalue };
31050
31051 Omitted fields are implicitly initialized the same as for objects that
31052have static storage duration.
31053
31054 The '[INDEX]' or '.FIELDNAME' is known as a "designator".  You can also
31055use a designator (or the obsolete colon syntax) when initializing a
31056union, to specify which element of the union should be used.  For
31057example,
31058
31059     union foo { int i; double d; };
31060
31061     union foo f = { .d = 4 };
31062
31063converts 4 to a 'double' to store it in the union using the second
31064element.  By contrast, casting 4 to type 'union foo' stores it into the
31065union as the integer 'i', since it is an integer.  *Note Cast to
31066Union::.
31067
31068 You can combine this technique of naming elements with ordinary C
31069initialization of successive elements.  Each initializer element that
31070does not have a designator applies to the next consecutive element of
31071the array or structure.  For example,
31072
31073     int a[6] = { [1] = v1, v2, [4] = v4 };
31074
31075is equivalent to
31076
31077     int a[6] = { 0, v1, v2, 0, v4, 0 };
31078
31079 Labeling the elements of an array initializer is especially useful when
31080the indices are characters or belong to an 'enum' type.  For example:
31081
31082     int whitespace[256]
31083       = { [' '] = 1, ['\t'] = 1, ['\h'] = 1,
31084           ['\f'] = 1, ['\n'] = 1, ['\r'] = 1 };
31085
31086 You can also write a series of '.FIELDNAME' and '[INDEX]' designators
31087before an '=' to specify a nested subobject to initialize; the list is
31088taken relative to the subobject corresponding to the closest surrounding
31089brace pair.  For example, with the 'struct point' declaration above:
31090
31091     struct point ptarray[10] = { [2].y = yv2, [2].x = xv2, [0].x = xv0 };
31092
31093 If the same field is initialized multiple times, or overlapping fields
31094of a union are initialized, the value from the last initialization is
31095used.  When a field of a union is itself a structure, the entire
31096structure from the last field initialized is used.  If any previous
31097initializer has side effect, it is unspecified whether the side effect
31098happens or not.  Currently, GCC discards the side-effecting initializer
31099expressions and issues a warning.
31100
31101
31102File: gcc.info,  Node: Case Ranges,  Next: Cast to Union,  Prev: Designated Inits,  Up: C Extensions
31103
311046.30 Case Ranges
31105================
31106
31107You can specify a range of consecutive values in a single 'case' label,
31108like this:
31109
31110     case LOW ... HIGH:
31111
31112This has the same effect as the proper number of individual 'case'
31113labels, one for each integer value from LOW to HIGH, inclusive.
31114
31115 This feature is especially useful for ranges of ASCII character codes:
31116
31117     case 'A' ... 'Z':
31118
31119 *Be careful:* Write spaces around the '...', for otherwise it may be
31120parsed wrong when you use it with integer values.  For example, write
31121this:
31122
31123     case 1 ... 5:
31124
31125rather than this:
31126
31127     case 1...5:
31128
31129
31130File: gcc.info,  Node: Cast to Union,  Next: Mixed Declarations,  Prev: Case Ranges,  Up: C Extensions
31131
311326.31 Cast to a Union Type
31133=========================
31134
31135A cast to a union type is a C extension not available in C++.  It looks
31136just like ordinary casts with the constraint that the type specified is
31137a union type.  You can specify the type either with the 'union' keyword
31138or with a 'typedef' name that refers to a union.  The result of a cast
31139to a union is a temporary rvalue of the union type with a member whose
31140type matches that of the operand initialized to the value of the
31141operand.  The effect of a cast to a union is similar to a compound
31142literal except that it yields an rvalue like standard casts do.  *Note
31143Compound Literals::.
31144
31145 Expressions that may be cast to the union type are those whose type
31146matches at least one of the members of the union.  Thus, given the
31147following union and variables:
31148
31149     union foo { int i; double d; };
31150     int x;
31151     double y;
31152     union foo z;
31153
31154both 'x' and 'y' can be cast to type 'union foo' and the following
31155assignments
31156       z = (union foo) x;
31157       z = (union foo) y;
31158 are shorthand equivalents of these
31159       z = (union foo) { .i = x };
31160       z = (union foo) { .d = y };
31161
31162 However, '(union foo) FLT_MAX;' is not a valid cast because the union
31163has no member of type 'float'.
31164
31165 Using the cast as the right-hand side of an assignment to a variable of
31166union type is equivalent to storing in a member of the union with the
31167same type
31168
31169     union foo u;
31170     /* ... */
31171     u = (union foo) x  ==  u.i = x
31172     u = (union foo) y  ==  u.d = y
31173
31174 You can also use the union cast as a function argument:
31175
31176     void hack (union foo);
31177     /* ... */
31178     hack ((union foo) x);
31179
31180
31181File: gcc.info,  Node: Mixed Declarations,  Next: Function Attributes,  Prev: Cast to Union,  Up: C Extensions
31182
311836.32 Mixed Declarations and Code
31184================================
31185
31186ISO C99 and ISO C++ allow declarations and code to be freely mixed
31187within compound statements.  As an extension, GNU C also allows this in
31188C90 mode.  For example, you could do:
31189
31190     int i;
31191     /* ... */
31192     i++;
31193     int j = i + 2;
31194
31195 Each identifier is visible from where it is declared until the end of
31196the enclosing block.
31197
31198
31199File: gcc.info,  Node: Function Attributes,  Next: Variable Attributes,  Prev: Mixed Declarations,  Up: C Extensions
31200
312016.33 Declaring Attributes of Functions
31202======================================
31203
31204In GNU C and C++, you can use function attributes to specify certain
31205function properties that may help the compiler optimize calls or check
31206code more carefully for correctness.  For example, you can use
31207attributes to specify that a function never returns ('noreturn'),
31208returns a value depending only on the values of its arguments ('const'),
31209or has 'printf'-style arguments ('format').
31210
31211 You can also use attributes to control memory placement, code
31212generation options or call/return conventions within the function being
31213annotated.  Many of these attributes are target-specific.  For example,
31214many targets support attributes for defining interrupt handler
31215functions, which typically must follow special register usage and return
31216conventions.  Such attributes are described in the subsection for each
31217target.  However, a considerable number of attributes are supported by
31218most, if not all targets.  Those are described in the *note Common
31219Function Attributes:: section.
31220
31221 Function attributes are introduced by the '__attribute__' keyword in
31222the declaration of a function, followed by an attribute specification
31223enclosed in double parentheses.  You can specify multiple attributes in
31224a declaration by separating them by commas within the double parentheses
31225or by immediately following one attribute specification with another.
31226*Note Attribute Syntax::, for the exact rules on attribute syntax and
31227placement.  Compatible attribute specifications on distinct declarations
31228of the same function are merged.  An attribute specification that is not
31229compatible with attributes already applied to a declaration of the same
31230function is ignored with a warning.
31231
31232 Some function attributes take one or more arguments that refer to the
31233function's parameters by their positions within the function parameter
31234list.  Such attribute arguments are referred to as "positional
31235arguments".  Unless specified otherwise, positional arguments that
31236specify properties of parameters with pointer types can also specify the
31237same properties of the implicit C++ 'this' argument in non-static member
31238functions, and of parameters of reference to a pointer type.  For
31239ordinary functions, position one refers to the first parameter on the
31240list.  In C++ non-static member functions, position one refers to the
31241implicit 'this' pointer.  The same restrictions and effects apply to
31242function attributes used with ordinary functions or C++ member
31243functions.
31244
31245 GCC also supports attributes on variable declarations (*note Variable
31246Attributes::), labels (*note Label Attributes::), enumerators (*note
31247Enumerator Attributes::), statements (*note Statement Attributes::), and
31248types (*note Type Attributes::).
31249
31250 There is some overlap between the purposes of attributes and pragmas
31251(*note Pragmas Accepted by GCC: Pragmas.).  It has been found convenient
31252to use '__attribute__' to achieve a natural attachment of attributes to
31253their corresponding declarations, whereas '#pragma' is of use for
31254compatibility with other compilers or constructs that do not naturally
31255form part of the grammar.
31256
31257 In addition to the attributes documented here, GCC plugins may provide
31258their own attributes.
31259
31260* Menu:
31261
31262* Common Function Attributes::
31263* AArch64 Function Attributes::
31264* AMD GCN Function Attributes::
31265* ARC Function Attributes::
31266* ARM Function Attributes::
31267* AVR Function Attributes::
31268* Blackfin Function Attributes::
31269* CR16 Function Attributes::
31270* C-SKY Function Attributes::
31271* Epiphany Function Attributes::
31272* H8/300 Function Attributes::
31273* IA-64 Function Attributes::
31274* M32C Function Attributes::
31275* M32R/D Function Attributes::
31276* m68k Function Attributes::
31277* MCORE Function Attributes::
31278* MeP Function Attributes::
31279* MicroBlaze Function Attributes::
31280* Microsoft Windows Function Attributes::
31281* MIPS Function Attributes::
31282* MSP430 Function Attributes::
31283* NDS32 Function Attributes::
31284* Nios II Function Attributes::
31285* Nvidia PTX Function Attributes::
31286* PowerPC Function Attributes::
31287* RISC-V Function Attributes::
31288* RL78 Function Attributes::
31289* RX Function Attributes::
31290* S/390 Function Attributes::
31291* SH Function Attributes::
31292* Symbian OS Function Attributes::
31293* V850 Function Attributes::
31294* Visium Function Attributes::
31295* x86 Function Attributes::
31296* Xstormy16 Function Attributes::
31297
31298
31299File: gcc.info,  Node: Common Function Attributes,  Next: AArch64 Function Attributes,  Up: Function Attributes
31300
313016.33.1 Common Function Attributes
31302---------------------------------
31303
31304The following attributes are supported on most targets.
31305
31306'access'
31307'access (ACCESS-MODE, REF-INDEX)'
31308'access (ACCESS-MODE, REF-INDEX, SIZE-INDEX)'
31309
31310     The 'access' attribute enables the detection of invalid or unsafe
31311     accesses by functions to which they apply or their callers, as well
31312     as write-only accesses to objects that are never read from.  Such
31313     accesses may be diagnosed by warnings such as
31314     '-Wstringop-overflow', '-Wuninitialized', '-Wunused', and others.
31315
31316     The 'access' attribute specifies that a function to whose
31317     by-reference arguments the attribute applies accesses the
31318     referenced object according to ACCESS-MODE.  The ACCESS-MODE
31319     argument is required and must be one of three names: 'read_only',
31320     'read_write', or 'write_only'.  The remaining two are positional
31321     arguments.
31322
31323     The required REF-INDEX positional argument denotes a function
31324     argument of pointer (or in C++, reference) type that is subject to
31325     the access.  The same pointer argument can be referenced by at most
31326     one distinct 'access' attribute.
31327
31328     The optional SIZE-INDEX positional argument denotes a function
31329     argument of integer type that specifies the maximum size of the
31330     access.  The size is the number of elements of the type referenced
31331     by REF-INDEX, or the number of bytes when the pointer type is
31332     'void*'.  When no SIZE-INDEX argument is specified, the pointer
31333     argument must be either null or point to a space that is suitably
31334     aligned and large for at least one object of the referenced type
31335     (this implies that a past-the-end pointer is not a valid argument).
31336     The actual size of the access may be less but it must not be more.
31337
31338     The 'read_only' access mode specifies that the pointer to which it
31339     applies is used to read the referenced object but not write to it.
31340     Unless the argument specifying the size of the access denoted by
31341     SIZE-INDEX is zero, the referenced object must be initialized.  The
31342     mode implies a stronger guarantee than the 'const' qualifier which,
31343     when cast away from a pointer, does not prevent the pointed-to
31344     object from being modified.  Examples of the use of the 'read_only'
31345     access mode is the argument to the 'puts' function, or the second
31346     and third arguments to the 'memcpy' function.
31347
31348          __attribute__ ((access (read_only, 1))) int puts (const char*);
31349          __attribute__ ((access (read_only, 1, 2))) void* memcpy (void*, const void*, size_t);
31350
31351     The 'read_write' access mode applies to arguments of pointer types
31352     without the 'const' qualifier.  It specifies that the pointer to
31353     which it applies is used to both read and write the referenced
31354     object.  Unless the argument specifying the size of the access
31355     denoted by SIZE-INDEX is zero, the object referenced by the pointer
31356     must be initialized.  An example of the use of the 'read_write'
31357     access mode is the first argument to the 'strcat' function.
31358
31359          __attribute__ ((access (read_write, 1), access (read_only, 2))) char* strcat (char*, const char*);
31360
31361     The 'write_only' access mode applies to arguments of pointer types
31362     without the 'const' qualifier.  It specifies that the pointer to
31363     which it applies is used to write to the referenced object but not
31364     read from it.  The object referenced by the pointer need not be
31365     initialized.  An example of the use of the 'write_only' access mode
31366     is the first argument to the 'strcpy' function, or the first two
31367     arguments to the 'fgets' function.
31368
31369          __attribute__ ((access (write_only, 1), access (read_only, 2))) char* strcpy (char*, const char*);
31370          __attribute__ ((access (write_only, 1, 2), access (read_write, 3))) int fgets (char*, int, FILE*);
31371
31372'alias ("TARGET")'
31373     The 'alias' attribute causes the declaration to be emitted as an
31374     alias for another symbol, which must have been previously declared
31375     with the same type, and for variables, also the same size and
31376     alignment.  Declaring an alias with a different type than the
31377     target is undefined and may be diagnosed.  As an example, the
31378     following declarations:
31379
31380          void __f () { /* Do something. */; }
31381          void f () __attribute__ ((weak, alias ("__f")));
31382
31383     define 'f' to be a weak alias for '__f'.  In C++, the mangled name
31384     for the target must be used.  It is an error if '__f' is not
31385     defined in the same translation unit.
31386
31387     This attribute requires assembler and object file support, and may
31388     not be available on all targets.
31389
31390'aligned'
31391'aligned (ALIGNMENT)'
31392     The 'aligned' attribute specifies a minimum alignment for the first
31393     instruction of the function, measured in bytes.  When specified,
31394     ALIGNMENT must be an integer constant power of 2.  Specifying no
31395     ALIGNMENT argument implies the ideal alignment for the target.  The
31396     '__alignof__' operator can be used to determine what that is (*note
31397     Alignment::).  The attribute has no effect when a definition for
31398     the function is not provided in the same translation unit.
31399
31400     The attribute cannot be used to decrease the alignment of a
31401     function previously declared with a more restrictive alignment;
31402     only to increase it.  Attempts to do otherwise are diagnosed.  Some
31403     targets specify a minimum default alignment for functions that is
31404     greater than 1.  On such targets, specifying a less restrictive
31405     alignment is silently ignored.  Using the attribute overrides the
31406     effect of the '-falign-functions' (*note Optimize Options::) option
31407     for this function.
31408
31409     Note that the effectiveness of 'aligned' attributes may be limited
31410     by inherent limitations in the system linker and/or object file
31411     format.  On some systems, the linker is only able to arrange for
31412     functions to be aligned up to a certain maximum alignment.  (For
31413     some linkers, the maximum supported alignment may be very very
31414     small.)  See your linker documentation for further information.
31415
31416     The 'aligned' attribute can also be used for variables and fields
31417     (*note Variable Attributes::.)
31418
31419'alloc_align (POSITION)'
31420     The 'alloc_align' attribute may be applied to a function that
31421     returns a pointer and takes at least one argument of an integer or
31422     enumerated type.  It indicates that the returned pointer is aligned
31423     on a boundary given by the function argument at POSITION.
31424     Meaningful alignments are powers of 2 greater than one.  GCC uses
31425     this information to improve pointer alignment analysis.
31426
31427     The function parameter denoting the allocated alignment is
31428     specified by one constant integer argument whose number is the
31429     argument of the attribute.  Argument numbering starts at one.
31430
31431     For instance,
31432
31433          void* my_memalign (size_t, size_t) __attribute__ ((alloc_align (1)));
31434
31435     declares that 'my_memalign' returns memory with minimum alignment
31436     given by parameter 1.
31437
31438'alloc_size (POSITION)'
31439'alloc_size (POSITION-1, POSITION-2)'
31440     The 'alloc_size' attribute may be applied to a function that
31441     returns a pointer and takes at least one argument of an integer or
31442     enumerated type.  It indicates that the returned pointer points to
31443     memory whose size is given by the function argument at POSITION-1,
31444     or by the product of the arguments at POSITION-1 and POSITION-2.
31445     Meaningful sizes are positive values less than 'PTRDIFF_MAX'.  GCC
31446     uses this information to improve the results of
31447     '__builtin_object_size'.
31448
31449     The function parameter(s) denoting the allocated size are specified
31450     by one or two integer arguments supplied to the attribute.  The
31451     allocated size is either the value of the single function argument
31452     specified or the product of the two function arguments specified.
31453     Argument numbering starts at one for ordinary functions, and at two
31454     for C++ non-static member functions.
31455
31456     For instance,
31457
31458          void* my_calloc (size_t, size_t) __attribute__ ((alloc_size (1, 2)));
31459          void* my_realloc (void*, size_t) __attribute__ ((alloc_size (2)));
31460
31461     declares that 'my_calloc' returns memory of the size given by the
31462     product of parameter 1 and 2 and that 'my_realloc' returns memory
31463     of the size given by parameter 2.
31464
31465'always_inline'
31466     Generally, functions are not inlined unless optimization is
31467     specified.  For functions declared inline, this attribute inlines
31468     the function independent of any restrictions that otherwise apply
31469     to inlining.  Failure to inline such a function is diagnosed as an
31470     error.  Note that if such a function is called indirectly the
31471     compiler may or may not inline it depending on optimization level
31472     and a failure to inline an indirect call may or may not be
31473     diagnosed.
31474
31475'artificial'
31476     This attribute is useful for small inline wrappers that if possible
31477     should appear during debugging as a unit.  Depending on the debug
31478     info format it either means marking the function as artificial or
31479     using the caller location for all instructions within the inlined
31480     body.
31481
31482'assume_aligned (ALIGNMENT)'
31483'assume_aligned (ALIGNMENT, OFFSET)'
31484     The 'assume_aligned' attribute may be applied to a function that
31485     returns a pointer.  It indicates that the returned pointer is
31486     aligned on a boundary given by ALIGNMENT.  If the attribute has two
31487     arguments, the second argument is misalignment OFFSET.  Meaningful
31488     values of ALIGNMENT are powers of 2 greater than one.  Meaningful
31489     values of OFFSET are greater than zero and less than ALIGNMENT.
31490
31491     For instance
31492
31493          void* my_alloc1 (size_t) __attribute__((assume_aligned (16)));
31494          void* my_alloc2 (size_t) __attribute__((assume_aligned (32, 8)));
31495
31496     declares that 'my_alloc1' returns 16-byte aligned pointers and that
31497     'my_alloc2' returns a pointer whose value modulo 32 is equal to 8.
31498
31499'cold'
31500     The 'cold' attribute on functions is used to inform the compiler
31501     that the function is unlikely to be executed.  The function is
31502     optimized for size rather than speed and on many targets it is
31503     placed into a special subsection of the text section so all cold
31504     functions appear close together, improving code locality of
31505     non-cold parts of program.  The paths leading to calls of cold
31506     functions within code are marked as unlikely by the branch
31507     prediction mechanism.  It is thus useful to mark functions used to
31508     handle unlikely conditions, such as 'perror', as cold to improve
31509     optimization of hot functions that do call marked functions in rare
31510     occasions.
31511
31512     When profile feedback is available, via '-fprofile-use', cold
31513     functions are automatically detected and this attribute is ignored.
31514
31515'const'
31516     Calls to functions whose return value is not affected by changes to
31517     the observable state of the program and that have no observable
31518     effects on such state other than to return a value may lend
31519     themselves to optimizations such as common subexpression
31520     elimination.  Declaring such functions with the 'const' attribute
31521     allows GCC to avoid emitting some calls in repeated invocations of
31522     the function with the same argument values.
31523
31524     For example,
31525
31526          int square (int) __attribute__ ((const));
31527
31528     tells GCC that subsequent calls to function 'square' with the same
31529     argument value can be replaced by the result of the first call
31530     regardless of the statements in between.
31531
31532     The 'const' attribute prohibits a function from reading objects
31533     that affect its return value between successive invocations.
31534     However, functions declared with the attribute can safely read
31535     objects that do not change their return value, such as non-volatile
31536     constants.
31537
31538     The 'const' attribute imposes greater restrictions on a function's
31539     definition than the similar 'pure' attribute.  Declaring the same
31540     function with both the 'const' and the 'pure' attribute is
31541     diagnosed.  Because a const function cannot have any observable
31542     side effects it does not make sense for it to return 'void'.
31543     Declaring such a function is diagnosed.
31544
31545     Note that a function that has pointer arguments and examines the
31546     data pointed to must _not_ be declared 'const' if the pointed-to
31547     data might change between successive invocations of the function.
31548     In general, since a function cannot distinguish data that might
31549     change from data that cannot, const functions should never take
31550     pointer or, in C++, reference arguments.  Likewise, a function that
31551     calls a non-const function usually must not be const itself.
31552
31553'constructor'
31554'destructor'
31555'constructor (PRIORITY)'
31556'destructor (PRIORITY)'
31557     The 'constructor' attribute causes the function to be called
31558     automatically before execution enters 'main ()'.  Similarly, the
31559     'destructor' attribute causes the function to be called
31560     automatically after 'main ()' completes or 'exit ()' is called.
31561     Functions with these attributes are useful for initializing data
31562     that is used implicitly during the execution of the program.
31563
31564     On some targets the attributes also accept an integer argument to
31565     specify a priority to control the order in which constructor and
31566     destructor functions are run.  A constructor with a smaller
31567     priority number runs before a constructor with a larger priority
31568     number; the opposite relationship holds for destructors.  So, if
31569     you have a constructor that allocates a resource and a destructor
31570     that deallocates the same resource, both functions typically have
31571     the same priority.  The priorities for constructor and destructor
31572     functions are the same as those specified for namespace-scope C++
31573     objects (*note C++ Attributes::).  However, at present, the order
31574     in which constructors for C++ objects with static storage duration
31575     and functions decorated with attribute 'constructor' are invoked is
31576     unspecified.  In mixed declarations, attribute 'init_priority' can
31577     be used to impose a specific ordering.
31578
31579     Using the argument forms of the 'constructor' and 'destructor'
31580     attributes on targets where the feature is not supported is
31581     rejected with an error.
31582
31583'copy'
31584'copy (FUNCTION)'
31585     The 'copy' attribute applies the set of attributes with which
31586     FUNCTION has been declared to the declaration of the function to
31587     which the attribute is applied.  The attribute is designed for
31588     libraries that define aliases or function resolvers that are
31589     expected to specify the same set of attributes as their targets.
31590     The 'copy' attribute can be used with functions, variables, or
31591     types.  However, the kind of symbol to which the attribute is
31592     applied (either function or variable) must match the kind of symbol
31593     to which the argument refers.  The 'copy' attribute copies only
31594     syntactic and semantic attributes but not attributes that affect a
31595     symbol's linkage or visibility such as 'alias', 'visibility', or
31596     'weak'.  The 'deprecated' and 'target_clones' attribute are also
31597     not copied.  *Note Common Type Attributes::.  *Note Common Variable
31598     Attributes::.
31599
31600     For example, the STRONGALIAS macro below makes use of the 'alias'
31601     and 'copy' attributes to define an alias named ALLOC for function
31602     ALLOCATE declared with attributes ALLOC_SIZE, MALLOC, and NOTHROW.
31603     Thanks to the '__typeof__' operator the alias has the same type as
31604     the target function.  As a result of the 'copy' attribute the alias
31605     also shares the same attributes as the target.
31606
31607          #define StrongAlias(TargetFunc, AliasDecl)  \
31608            extern __typeof__ (TargetFunc) AliasDecl  \
31609              __attribute__ ((alias (#TargetFunc), copy (TargetFunc)));
31610
31611          extern __attribute__ ((alloc_size (1), malloc, nothrow))
31612            void* allocate (size_t);
31613          StrongAlias (allocate, alloc);
31614
31615'deprecated'
31616'deprecated (MSG)'
31617     The 'deprecated' attribute results in a warning if the function is
31618     used anywhere in the source file.  This is useful when identifying
31619     functions that are expected to be removed in a future version of a
31620     program.  The warning also includes the location of the declaration
31621     of the deprecated function, to enable users to easily find further
31622     information about why the function is deprecated, or what they
31623     should do instead.  Note that the warnings only occurs for uses:
31624
31625          int old_fn () __attribute__ ((deprecated));
31626          int old_fn ();
31627          int (*fn_ptr)() = old_fn;
31628
31629     results in a warning on line 3 but not line 2.  The optional MSG
31630     argument, which must be a string, is printed in the warning if
31631     present.
31632
31633     The 'deprecated' attribute can also be used for variables and types
31634     (*note Variable Attributes::, *note Type Attributes::.)
31635
31636     The message attached to the attribute is affected by the setting of
31637     the '-fmessage-length' option.
31638
31639'error ("MESSAGE")'
31640'warning ("MESSAGE")'
31641     If the 'error' or 'warning' attribute is used on a function
31642     declaration and a call to such a function is not eliminated through
31643     dead code elimination or other optimizations, an error or warning
31644     (respectively) that includes MESSAGE is diagnosed.  This is useful
31645     for compile-time checking, especially together with
31646     '__builtin_constant_p' and inline functions where checking the
31647     inline function arguments is not possible through 'extern char
31648     [(condition) ? 1 : -1];' tricks.
31649
31650     While it is possible to leave the function undefined and thus
31651     invoke a link failure (to define the function with a message in
31652     '.gnu.warning*' section), when using these attributes the problem
31653     is diagnosed earlier and with exact location of the call even in
31654     presence of inline functions or when not emitting debugging
31655     information.
31656
31657'externally_visible'
31658     This attribute, attached to a global variable or function,
31659     nullifies the effect of the '-fwhole-program' command-line option,
31660     so the object remains visible outside the current compilation unit.
31661
31662     If '-fwhole-program' is used together with '-flto' and 'gold' is
31663     used as the linker plugin, 'externally_visible' attributes are
31664     automatically added to functions (not variable yet due to a current
31665     'gold' issue) that are accessed outside of LTO objects according to
31666     resolution file produced by 'gold'.  For other linkers that cannot
31667     generate resolution file, explicit 'externally_visible' attributes
31668     are still necessary.
31669
31670'flatten'
31671     Generally, inlining into a function is limited.  For a function
31672     marked with this attribute, every call inside this function is
31673     inlined, if possible.  Functions declared with attribute 'noinline'
31674     and similar are not inlined.  Whether the function itself is
31675     considered for inlining depends on its size and the current
31676     inlining parameters.
31677
31678'format (ARCHETYPE, STRING-INDEX, FIRST-TO-CHECK)'
31679     The 'format' attribute specifies that a function takes 'printf',
31680     'scanf', 'strftime' or 'strfmon' style arguments that should be
31681     type-checked against a format string.  For example, the
31682     declaration:
31683
31684          extern int
31685          my_printf (void *my_object, const char *my_format, ...)
31686                __attribute__ ((format (printf, 2, 3)));
31687
31688     causes the compiler to check the arguments in calls to 'my_printf'
31689     for consistency with the 'printf' style format string argument
31690     'my_format'.
31691
31692     The parameter ARCHETYPE determines how the format string is
31693     interpreted, and should be 'printf', 'scanf', 'strftime',
31694     'gnu_printf', 'gnu_scanf', 'gnu_strftime' or 'strfmon'.  (You can
31695     also use '__printf__', '__scanf__', '__strftime__' or
31696     '__strfmon__'.)  On MinGW targets, 'ms_printf', 'ms_scanf', and
31697     'ms_strftime' are also present.  ARCHETYPE values such as 'printf'
31698     refer to the formats accepted by the system's C runtime library,
31699     while values prefixed with 'gnu_' always refer to the formats
31700     accepted by the GNU C Library.  On Microsoft Windows targets,
31701     values prefixed with 'ms_' refer to the formats accepted by the
31702     'msvcrt.dll' library.  The parameter STRING-INDEX specifies which
31703     argument is the format string argument (starting from 1), while
31704     FIRST-TO-CHECK is the number of the first argument to check against
31705     the format string.  For functions where the arguments are not
31706     available to be checked (such as 'vprintf'), specify the third
31707     parameter as zero.  In this case the compiler only checks the
31708     format string for consistency.  For 'strftime' formats, the third
31709     parameter is required to be zero.  Since non-static C++ methods
31710     have an implicit 'this' argument, the arguments of such methods
31711     should be counted from two, not one, when giving values for
31712     STRING-INDEX and FIRST-TO-CHECK.
31713
31714     In the example above, the format string ('my_format') is the second
31715     argument of the function 'my_print', and the arguments to check
31716     start with the third argument, so the correct parameters for the
31717     format attribute are 2 and 3.
31718
31719     The 'format' attribute allows you to identify your own functions
31720     that take format strings as arguments, so that GCC can check the
31721     calls to these functions for errors.  The compiler always (unless
31722     '-ffreestanding' or '-fno-builtin' is used) checks formats for the
31723     standard library functions 'printf', 'fprintf', 'sprintf', 'scanf',
31724     'fscanf', 'sscanf', 'strftime', 'vprintf', 'vfprintf' and
31725     'vsprintf' whenever such warnings are requested (using '-Wformat'),
31726     so there is no need to modify the header file 'stdio.h'.  In C99
31727     mode, the functions 'snprintf', 'vsnprintf', 'vscanf', 'vfscanf'
31728     and 'vsscanf' are also checked.  Except in strictly conforming C
31729     standard modes, the X/Open function 'strfmon' is also checked as
31730     are 'printf_unlocked' and 'fprintf_unlocked'.  *Note Options
31731     Controlling C Dialect: C Dialect Options.
31732
31733     For Objective-C dialects, 'NSString' (or '__NSString__') is
31734     recognized in the same context.  Declarations including these
31735     format attributes are parsed for correct syntax, however the result
31736     of checking of such format strings is not yet defined, and is not
31737     carried out by this version of the compiler.
31738
31739     The target may also provide additional types of format checks.
31740     *Note Format Checks Specific to Particular Target Machines: Target
31741     Format Checks.
31742
31743'format_arg (STRING-INDEX)'
31744     The 'format_arg' attribute specifies that a function takes one or
31745     more format strings for a 'printf', 'scanf', 'strftime' or
31746     'strfmon' style function and modifies it (for example, to translate
31747     it into another language), so the result can be passed to a
31748     'printf', 'scanf', 'strftime' or 'strfmon' style function (with the
31749     remaining arguments to the format function the same as they would
31750     have been for the unmodified string).  Multiple 'format_arg'
31751     attributes may be applied to the same function, each designating a
31752     distinct parameter as a format string.  For example, the
31753     declaration:
31754
31755          extern char *
31756          my_dgettext (char *my_domain, const char *my_format)
31757                __attribute__ ((format_arg (2)));
31758
31759     causes the compiler to check the arguments in calls to a 'printf',
31760     'scanf', 'strftime' or 'strfmon' type function, whose format string
31761     argument is a call to the 'my_dgettext' function, for consistency
31762     with the format string argument 'my_format'.  If the 'format_arg'
31763     attribute had not been specified, all the compiler could tell in
31764     such calls to format functions would be that the format string
31765     argument is not constant; this would generate a warning when
31766     '-Wformat-nonliteral' is used, but the calls could not be checked
31767     without the attribute.
31768
31769     In calls to a function declared with more than one 'format_arg'
31770     attribute, each with a distinct argument value, the corresponding
31771     actual function arguments are checked against all format strings
31772     designated by the attributes.  This capability is designed to
31773     support the GNU 'ngettext' family of functions.
31774
31775     The parameter STRING-INDEX specifies which argument is the format
31776     string argument (starting from one).  Since non-static C++ methods
31777     have an implicit 'this' argument, the arguments of such methods
31778     should be counted from two.
31779
31780     The 'format_arg' attribute allows you to identify your own
31781     functions that modify format strings, so that GCC can check the
31782     calls to 'printf', 'scanf', 'strftime' or 'strfmon' type function
31783     whose operands are a call to one of your own function.  The
31784     compiler always treats 'gettext', 'dgettext', and 'dcgettext' in
31785     this manner except when strict ISO C support is requested by
31786     '-ansi' or an appropriate '-std' option, or '-ffreestanding' or
31787     '-fno-builtin' is used.  *Note Options Controlling C Dialect: C
31788     Dialect Options.
31789
31790     For Objective-C dialects, the 'format-arg' attribute may refer to
31791     an 'NSString' reference for compatibility with the 'format'
31792     attribute above.
31793
31794     The target may also allow additional types in 'format-arg'
31795     attributes.  *Note Format Checks Specific to Particular Target
31796     Machines: Target Format Checks.
31797
31798'gnu_inline'
31799     This attribute should be used with a function that is also declared
31800     with the 'inline' keyword.  It directs GCC to treat the function as
31801     if it were defined in gnu90 mode even when compiling in C99 or
31802     gnu99 mode.
31803
31804     If the function is declared 'extern', then this definition of the
31805     function is used only for inlining.  In no case is the function
31806     compiled as a standalone function, not even if you take its address
31807     explicitly.  Such an address becomes an external reference, as if
31808     you had only declared the function, and had not defined it.  This
31809     has almost the effect of a macro.  The way to use this is to put a
31810     function definition in a header file with this attribute, and put
31811     another copy of the function, without 'extern', in a library file.
31812     The definition in the header file causes most calls to the function
31813     to be inlined.  If any uses of the function remain, they refer to
31814     the single copy in the library.  Note that the two definitions of
31815     the functions need not be precisely the same, although if they do
31816     not have the same effect your program may behave oddly.
31817
31818     In C, if the function is neither 'extern' nor 'static', then the
31819     function is compiled as a standalone function, as well as being
31820     inlined where possible.
31821
31822     This is how GCC traditionally handled functions declared 'inline'.
31823     Since ISO C99 specifies a different semantics for 'inline', this
31824     function attribute is provided as a transition measure and as a
31825     useful feature in its own right.  This attribute is available in
31826     GCC 4.1.3 and later.  It is available if either of the preprocessor
31827     macros '__GNUC_GNU_INLINE__' or '__GNUC_STDC_INLINE__' are defined.
31828     *Note An Inline Function is As Fast As a Macro: Inline.
31829
31830     In C++, this attribute does not depend on 'extern' in any way, but
31831     it still requires the 'inline' keyword to enable its special
31832     behavior.
31833
31834'hot'
31835     The 'hot' attribute on a function is used to inform the compiler
31836     that the function is a hot spot of the compiled program.  The
31837     function is optimized more aggressively and on many targets it is
31838     placed into a special subsection of the text section so all hot
31839     functions appear close together, improving locality.
31840
31841     When profile feedback is available, via '-fprofile-use', hot
31842     functions are automatically detected and this attribute is ignored.
31843
31844'ifunc ("RESOLVER")'
31845     The 'ifunc' attribute is used to mark a function as an indirect
31846     function using the STT_GNU_IFUNC symbol type extension to the ELF
31847     standard.  This allows the resolution of the symbol value to be
31848     determined dynamically at load time, and an optimized version of
31849     the routine to be selected for the particular processor or other
31850     system characteristics determined then.  To use this attribute,
31851     first define the implementation functions available, and a resolver
31852     function that returns a pointer to the selected implementation
31853     function.  The implementation functions' declarations must match
31854     the API of the function being implemented.  The resolver should be
31855     declared to be a function taking no arguments and returning a
31856     pointer to a function of the same type as the implementation.  For
31857     example:
31858
31859          void *my_memcpy (void *dst, const void *src, size_t len)
31860          {
31861            ...
31862            return dst;
31863          }
31864
31865          static void * (*resolve_memcpy (void))(void *, const void *, size_t)
31866          {
31867            return my_memcpy; // we will just always select this routine
31868          }
31869
31870     The exported header file declaring the function the user calls
31871     would contain:
31872
31873          extern void *memcpy (void *, const void *, size_t);
31874
31875     allowing the user to call 'memcpy' as a regular function, unaware
31876     of the actual implementation.  Finally, the indirect function needs
31877     to be defined in the same translation unit as the resolver
31878     function:
31879
31880          void *memcpy (void *, const void *, size_t)
31881               __attribute__ ((ifunc ("resolve_memcpy")));
31882
31883     In C++, the 'ifunc' attribute takes a string that is the mangled
31884     name of the resolver function.  A C++ resolver for a non-static
31885     member function of class 'C' should be declared to return a pointer
31886     to a non-member function taking pointer to 'C' as the first
31887     argument, followed by the same arguments as of the implementation
31888     function.  G++ checks the signatures of the two functions and
31889     issues a '-Wattribute-alias' warning for mismatches.  To suppress a
31890     warning for the necessary cast from a pointer to the implementation
31891     member function to the type of the corresponding non-member
31892     function use the '-Wno-pmf-conversions' option.  For example:
31893
31894          class S
31895          {
31896          private:
31897            int debug_impl (int);
31898            int optimized_impl (int);
31899
31900            typedef int Func (S*, int);
31901
31902            static Func* resolver ();
31903          public:
31904
31905            int interface (int);
31906          };
31907
31908          int S::debug_impl (int) { /* ... */ }
31909          int S::optimized_impl (int) { /* ... */ }
31910
31911          S::Func* S::resolver ()
31912          {
31913            int (S::*pimpl) (int)
31914              = getenv ("DEBUG") ? &S::debug_impl : &S::optimized_impl;
31915
31916            // Cast triggers -Wno-pmf-conversions.
31917            return reinterpret_cast<Func*>(pimpl);
31918          }
31919
31920          int S::interface (int) __attribute__ ((ifunc ("_ZN1S8resolverEv")));
31921
31922     Indirect functions cannot be weak.  Binutils version 2.20.1 or
31923     higher and GNU C Library version 2.11.1 are required to use this
31924     feature.
31925
31926'interrupt'
31927'interrupt_handler'
31928     Many GCC back ends support attributes to indicate that a function
31929     is an interrupt handler, which tells the compiler to generate
31930     function entry and exit sequences that differ from those from
31931     regular functions.  The exact syntax and behavior are
31932     target-specific; refer to the following subsections for details.
31933
31934'leaf'
31935     Calls to external functions with this attribute must return to the
31936     current compilation unit only by return or by exception handling.
31937     In particular, a leaf function is not allowed to invoke callback
31938     functions passed to it from the current compilation unit, directly
31939     call functions exported by the unit, or 'longjmp' into the unit.
31940     Leaf functions might still call functions from other compilation
31941     units and thus they are not necessarily leaf in the sense that they
31942     contain no function calls at all.
31943
31944     The attribute is intended for library functions to improve dataflow
31945     analysis.  The compiler takes the hint that any data not escaping
31946     the current compilation unit cannot be used or modified by the leaf
31947     function.  For example, the 'sin' function is a leaf function, but
31948     'qsort' is not.
31949
31950     Note that leaf functions might indirectly run a signal handler
31951     defined in the current compilation unit that uses static variables.
31952     Similarly, when lazy symbol resolution is in effect, leaf functions
31953     might invoke indirect functions whose resolver function or
31954     implementation function is defined in the current compilation unit
31955     and uses static variables.  There is no standard-compliant way to
31956     write such a signal handler, resolver function, or implementation
31957     function, and the best that you can do is to remove the 'leaf'
31958     attribute or mark all such static variables 'volatile'.  Lastly,
31959     for ELF-based systems that support symbol interposition, care
31960     should be taken that functions defined in the current compilation
31961     unit do not unexpectedly interpose other symbols based on the
31962     defined standards mode and defined feature test macros; otherwise
31963     an inadvertent callback would be added.
31964
31965     The attribute has no effect on functions defined within the current
31966     compilation unit.  This is to allow easy merging of multiple
31967     compilation units into one, for example, by using the link-time
31968     optimization.  For this reason the attribute is not allowed on
31969     types to annotate indirect calls.
31970
31971'malloc'
31972     This tells the compiler that a function is 'malloc'-like, i.e.,
31973     that the pointer P returned by the function cannot alias any other
31974     pointer valid when the function returns, and moreover no pointers
31975     to valid objects occur in any storage addressed by P.
31976
31977     Using this attribute can improve optimization.  Compiler predicts
31978     that a function with the attribute returns non-null in most cases.
31979     Functions like 'malloc' and 'calloc' have this property because
31980     they return a pointer to uninitialized or zeroed-out storage.
31981     However, functions like 'realloc' do not have this property, as
31982     they can return a pointer to storage containing pointers.
31983
31984'no_icf'
31985     This function attribute prevents a functions from being merged with
31986     another semantically equivalent function.
31987
31988'no_instrument_function'
31989     If any of '-finstrument-functions', '-p', or '-pg' are given,
31990     profiling function calls are generated at entry and exit of most
31991     user-compiled functions.  Functions with this attribute are not so
31992     instrumented.
31993
31994'no_profile_instrument_function'
31995     The 'no_profile_instrument_function' attribute on functions is used
31996     to inform the compiler that it should not process any profile
31997     feedback based optimization code instrumentation.
31998
31999'no_reorder'
32000     Do not reorder functions or variables marked 'no_reorder' against
32001     each other or top level assembler statements the executable.  The
32002     actual order in the program will depend on the linker command line.
32003     Static variables marked like this are also not removed.  This has a
32004     similar effect as the '-fno-toplevel-reorder' option, but only
32005     applies to the marked symbols.
32006
32007'no_sanitize ("SANITIZE_OPTION")'
32008     The 'no_sanitize' attribute on functions is used to inform the
32009     compiler that it should not do sanitization of any option mentioned
32010     in SANITIZE_OPTION.  A list of values acceptable by the
32011     '-fsanitize' option can be provided.
32012
32013          void __attribute__ ((no_sanitize ("alignment", "object-size")))
32014          f () { /* Do something. */; }
32015          void __attribute__ ((no_sanitize ("alignment,object-size")))
32016          g () { /* Do something. */; }
32017
32018'no_sanitize_address'
32019'no_address_safety_analysis'
32020     The 'no_sanitize_address' attribute on functions is used to inform
32021     the compiler that it should not instrument memory accesses in the
32022     function when compiling with the '-fsanitize=address' option.  The
32023     'no_address_safety_analysis' is a deprecated alias of the
32024     'no_sanitize_address' attribute, new code should use
32025     'no_sanitize_address'.
32026
32027'no_sanitize_thread'
32028     The 'no_sanitize_thread' attribute on functions is used to inform
32029     the compiler that it should not instrument memory accesses in the
32030     function when compiling with the '-fsanitize=thread' option.
32031
32032'no_sanitize_undefined'
32033     The 'no_sanitize_undefined' attribute on functions is used to
32034     inform the compiler that it should not check for undefined behavior
32035     in the function when compiling with the '-fsanitize=undefined'
32036     option.
32037
32038'no_split_stack'
32039     If '-fsplit-stack' is given, functions have a small prologue which
32040     decides whether to split the stack.  Functions with the
32041     'no_split_stack' attribute do not have that prologue, and thus may
32042     run with only a small amount of stack space available.
32043
32044'no_stack_limit'
32045     This attribute locally overrides the '-fstack-limit-register' and
32046     '-fstack-limit-symbol' command-line options; it has the effect of
32047     disabling stack limit checking in the function it applies to.
32048
32049'noclone'
32050     This function attribute prevents a function from being considered
32051     for cloning--a mechanism that produces specialized copies of
32052     functions and which is (currently) performed by interprocedural
32053     constant propagation.
32054
32055'noinline'
32056     This function attribute prevents a function from being considered
32057     for inlining.  If the function does not have side effects, there
32058     are optimizations other than inlining that cause function calls to
32059     be optimized away, although the function call is live.  To keep
32060     such calls from being optimized away, put
32061          asm ("");
32062
32063     (*note Extended Asm::) in the called function, to serve as a
32064     special side effect.
32065
32066'noipa'
32067     Disable interprocedural optimizations between the function with
32068     this attribute and its callers, as if the body of the function is
32069     not available when optimizing callers and the callers are
32070     unavailable when optimizing the body.  This attribute implies
32071     'noinline', 'noclone' and 'no_icf' attributes.  However, this
32072     attribute is not equivalent to a combination of other attributes,
32073     because its purpose is to suppress existing and future
32074     optimizations employing interprocedural analysis, including those
32075     that do not have an attribute suitable for disabling them
32076     individually.  This attribute is supported mainly for the purpose
32077     of testing the compiler.
32078
32079'nonnull'
32080'nonnull (ARG-INDEX, ...)'
32081     The 'nonnull' attribute may be applied to a function that takes at
32082     least one argument of a pointer type.  It indicates that the
32083     referenced arguments must be non-null pointers.  For instance, the
32084     declaration:
32085
32086          extern void *
32087          my_memcpy (void *dest, const void *src, size_t len)
32088                  __attribute__((nonnull (1, 2)));
32089
32090     causes the compiler to check that, in calls to 'my_memcpy',
32091     arguments DEST and SRC are non-null.  If the compiler determines
32092     that a null pointer is passed in an argument slot marked as
32093     non-null, and the '-Wnonnull' option is enabled, a warning is
32094     issued.  *Note Warning Options::.  Unless disabled by the
32095     '-fno-delete-null-pointer-checks' option the compiler may also
32096     perform optimizations based on the knowledge that certain function
32097     arguments cannot be null.  In addition, the
32098     '-fisolate-erroneous-paths-attribute' option can be specified to
32099     have GCC transform calls with null arguments to non-null functions
32100     into traps.  *Note Optimize Options::.
32101
32102     If no ARG-INDEX is given to the 'nonnull' attribute, all pointer
32103     arguments are marked as non-null.  To illustrate, the following
32104     declaration is equivalent to the previous example:
32105
32106          extern void *
32107          my_memcpy (void *dest, const void *src, size_t len)
32108                  __attribute__((nonnull));
32109
32110'noplt'
32111     The 'noplt' attribute is the counterpart to option '-fno-plt'.
32112     Calls to functions marked with this attribute in
32113     position-independent code do not use the PLT.
32114
32115          /* Externally defined function foo.  */
32116          int foo () __attribute__ ((noplt));
32117
32118          int
32119          main (/* ... */)
32120          {
32121            /* ... */
32122            foo ();
32123            /* ... */
32124          }
32125
32126     The 'noplt' attribute on function 'foo' tells the compiler to
32127     assume that the function 'foo' is externally defined and that the
32128     call to 'foo' must avoid the PLT in position-independent code.
32129
32130     In position-dependent code, a few targets also convert calls to
32131     functions that are marked to not use the PLT to use the GOT
32132     instead.
32133
32134'noreturn'
32135     A few standard library functions, such as 'abort' and 'exit',
32136     cannot return.  GCC knows this automatically.  Some programs define
32137     their own functions that never return.  You can declare them
32138     'noreturn' to tell the compiler this fact.  For example,
32139
32140          void fatal () __attribute__ ((noreturn));
32141
32142          void
32143          fatal (/* ... */)
32144          {
32145            /* ... */ /* Print error message. */ /* ... */
32146            exit (1);
32147          }
32148
32149     The 'noreturn' keyword tells the compiler to assume that 'fatal'
32150     cannot return.  It can then optimize without regard to what would
32151     happen if 'fatal' ever did return.  This makes slightly better
32152     code.  More importantly, it helps avoid spurious warnings of
32153     uninitialized variables.
32154
32155     The 'noreturn' keyword does not affect the exceptional path when
32156     that applies: a 'noreturn'-marked function may still return to the
32157     caller by throwing an exception or calling 'longjmp'.
32158
32159     In order to preserve backtraces, GCC will never turn calls to
32160     'noreturn' functions into tail calls.
32161
32162     Do not assume that registers saved by the calling function are
32163     restored before calling the 'noreturn' function.
32164
32165     It does not make sense for a 'noreturn' function to have a return
32166     type other than 'void'.
32167
32168'nothrow'
32169     The 'nothrow' attribute is used to inform the compiler that a
32170     function cannot throw an exception.  For example, most functions in
32171     the standard C library can be guaranteed not to throw an exception
32172     with the notable exceptions of 'qsort' and 'bsearch' that take
32173     function pointer arguments.
32174
32175'optimize (LEVEL, ...)'
32176'optimize (STRING, ...)'
32177     The 'optimize' attribute is used to specify that a function is to
32178     be compiled with different optimization options than specified on
32179     the command line.  Valid arguments are constant non-negative
32180     integers and strings.  Each numeric argument specifies an
32181     optimization LEVEL.  Each STRING argument consists of one or more
32182     comma-separated substrings.  Each substring that begins with the
32183     letter 'O' refers to an optimization option such as '-O0' or '-Os'.
32184     Other substrings are taken as suffixes to the '-f' prefix jointly
32185     forming the name of an optimization option.  *Note Optimize
32186     Options::.
32187
32188     '#pragma GCC optimize' can be used to set optimization options for
32189     more than one function.  *Note Function Specific Option Pragmas::,
32190     for details about the pragma.
32191
32192     Providing multiple strings as arguments separated by commas to
32193     specify multiple options is equivalent to separating the option
32194     suffixes with a comma (',') within a single string.  Spaces are not
32195     permitted within the strings.
32196
32197     Not every optimization option that starts with the -F prefix
32198     specified by the attribute necessarily has an effect on the
32199     function.  The 'optimize' attribute should be used for debugging
32200     purposes only.  It is not suitable in production code.
32201
32202'patchable_function_entry'
32203     In case the target's text segment can be made writable at run time
32204     by any means, padding the function entry with a number of NOPs can
32205     be used to provide a universal tool for instrumentation.
32206
32207     The 'patchable_function_entry' function attribute can be used to
32208     change the number of NOPs to any desired value.  The two-value
32209     syntax is the same as for the command-line switch
32210     '-fpatchable-function-entry=N,M', generating N NOPs, with the
32211     function entry point before the Mth NOP instruction.  M defaults to
32212     0 if omitted e.g. function entry point is before the first NOP.
32213
32214     If patchable function entries are enabled globally using the
32215     command-line option '-fpatchable-function-entry=N,M', then you must
32216     disable instrumentation on all functions that are part of the
32217     instrumentation framework with the attribute
32218     'patchable_function_entry (0)' to prevent recursion.
32219
32220'pure'
32221
32222     Calls to functions that have no observable effects on the state of
32223     the program other than to return a value may lend themselves to
32224     optimizations such as common subexpression elimination.  Declaring
32225     such functions with the 'pure' attribute allows GCC to avoid
32226     emitting some calls in repeated invocations of the function with
32227     the same argument values.
32228
32229     The 'pure' attribute prohibits a function from modifying the state
32230     of the program that is observable by means other than inspecting
32231     the function's return value.  However, functions declared with the
32232     'pure' attribute can safely read any non-volatile objects, and
32233     modify the value of objects in a way that does not affect their
32234     return value or the observable state of the program.
32235
32236     For example,
32237
32238          int hash (char *) __attribute__ ((pure));
32239
32240     tells GCC that subsequent calls to the function 'hash' with the
32241     same string can be replaced by the result of the first call
32242     provided the state of the program observable by 'hash', including
32243     the contents of the array itself, does not change in between.  Even
32244     though 'hash' takes a non-const pointer argument it must not modify
32245     the array it points to, or any other object whose value the rest of
32246     the program may depend on.  However, the caller may safely change
32247     the contents of the array between successive calls to the function
32248     (doing so disables the optimization).  The restriction also applies
32249     to member objects referenced by the 'this' pointer in C++
32250     non-static member functions.
32251
32252     Some common examples of pure functions are 'strlen' or 'memcmp'.
32253     Interesting non-pure functions are functions with infinite loops or
32254     those depending on volatile memory or other system resource, that
32255     may change between consecutive calls (such as the standard C 'feof'
32256     function in a multithreading environment).
32257
32258     The 'pure' attribute imposes similar but looser restrictions on a
32259     function's definition than the 'const' attribute: 'pure' allows the
32260     function to read any non-volatile memory, even if it changes in
32261     between successive invocations of the function.  Declaring the same
32262     function with both the 'pure' and the 'const' attribute is
32263     diagnosed.  Because a pure function cannot have any observable side
32264     effects it does not make sense for such a function to return
32265     'void'.  Declaring such a function is diagnosed.
32266
32267'returns_nonnull'
32268     The 'returns_nonnull' attribute specifies that the function return
32269     value should be a non-null pointer.  For instance, the declaration:
32270
32271          extern void *
32272          mymalloc (size_t len) __attribute__((returns_nonnull));
32273
32274     lets the compiler optimize callers based on the knowledge that the
32275     return value will never be null.
32276
32277'returns_twice'
32278     The 'returns_twice' attribute tells the compiler that a function
32279     may return more than one time.  The compiler ensures that all
32280     registers are dead before calling such a function and emits a
32281     warning about the variables that may be clobbered after the second
32282     return from the function.  Examples of such functions are 'setjmp'
32283     and 'vfork'.  The 'longjmp'-like counterpart of such function, if
32284     any, might need to be marked with the 'noreturn' attribute.
32285
32286'section ("SECTION-NAME")'
32287     Normally, the compiler places the code it generates in the 'text'
32288     section.  Sometimes, however, you need additional sections, or you
32289     need certain particular functions to appear in special sections.
32290     The 'section' attribute specifies that a function lives in a
32291     particular section.  For example, the declaration:
32292
32293          extern void foobar (void) __attribute__ ((section ("bar")));
32294
32295     puts the function 'foobar' in the 'bar' section.
32296
32297     Some file formats do not support arbitrary sections so the
32298     'section' attribute is not available on all platforms.  If you need
32299     to map the entire contents of a module to a particular section,
32300     consider using the facilities of the linker instead.
32301
32302'sentinel'
32303'sentinel (POSITION)'
32304     This function attribute indicates that an argument in a call to the
32305     function is expected to be an explicit 'NULL'.  The attribute is
32306     only valid on variadic functions.  By default, the sentinel is
32307     expected to be the last argument of the function call.  If the
32308     optional POSITION argument is specified to the attribute, the
32309     sentinel must be located at POSITION counting backwards from the
32310     end of the argument list.
32311
32312          __attribute__ ((sentinel))
32313          is equivalent to
32314          __attribute__ ((sentinel(0)))
32315
32316     The attribute is automatically set with a position of 0 for the
32317     built-in functions 'execl' and 'execlp'.  The built-in function
32318     'execle' has the attribute set with a position of 1.
32319
32320     A valid 'NULL' in this context is defined as zero with any object
32321     pointer type.  If your system defines the 'NULL' macro with an
32322     integer type then you need to add an explicit cast.  During
32323     installation GCC replaces the system '<stddef.h>' header with a
32324     copy that redefines NULL appropriately.
32325
32326     The warnings for missing or incorrect sentinels are enabled with
32327     '-Wformat'.
32328
32329'simd'
32330'simd("MASK")'
32331     This attribute enables creation of one or more function versions
32332     that can process multiple arguments using SIMD instructions from a
32333     single invocation.  Specifying this attribute allows compiler to
32334     assume that such versions are available at link time (provided in
32335     the same or another translation unit).  Generated versions are
32336     target-dependent and described in the corresponding Vector ABI
32337     document.  For x86_64 target this document can be found
32338     here (https://sourceware.org/glibc/wiki/libmvec?action=AttachFile&do=view&target=VectorABI.txt).
32339
32340     The optional argument MASK may have the value 'notinbranch' or
32341     'inbranch', and instructs the compiler to generate non-masked or
32342     masked clones correspondingly.  By default, all clones are
32343     generated.
32344
32345     If the attribute is specified and '#pragma omp declare simd' is
32346     present on a declaration and the '-fopenmp' or '-fopenmp-simd'
32347     switch is specified, then the attribute is ignored.
32348
32349'stack_protect'
32350     This attribute adds stack protection code to the function if flags
32351     '-fstack-protector', '-fstack-protector-strong' or
32352     '-fstack-protector-explicit' are set.
32353
32354'target (STRING, ...)'
32355     Multiple target back ends implement the 'target' attribute to
32356     specify that a function is to be compiled with different target
32357     options than specified on the command line.  One or more strings
32358     can be provided as arguments.  Each string consists of one or more
32359     comma-separated suffixes to the '-m' prefix jointly forming the
32360     name of a machine-dependent option.  *Note Machine-Dependent
32361     Options: Submodel Options.
32362
32363     The 'target' attribute can be used for instance to have a function
32364     compiled with a different ISA (instruction set architecture) than
32365     the default.  '#pragma GCC target' can be used to specify
32366     target-specific options for more than one function.  *Note Function
32367     Specific Option Pragmas::, for details about the pragma.
32368
32369     For instance, on an x86, you could declare one function with the
32370     'target("sse4.1,arch=core2")' attribute and another with
32371     'target("sse4a,arch=amdfam10")'.  This is equivalent to compiling
32372     the first function with '-msse4.1' and '-march=core2' options, and
32373     the second function with '-msse4a' and '-march=amdfam10' options.
32374     It is up to you to make sure that a function is only invoked on a
32375     machine that supports the particular ISA it is compiled for (for
32376     example by using 'cpuid' on x86 to determine what feature bits and
32377     architecture family are used).
32378
32379          int core2_func (void) __attribute__ ((__target__ ("arch=core2")));
32380          int sse3_func (void) __attribute__ ((__target__ ("sse3")));
32381
32382     Providing multiple strings as arguments separated by commas to
32383     specify multiple options is equivalent to separating the option
32384     suffixes with a comma (',') within a single string.  Spaces are not
32385     permitted within the strings.
32386
32387     The options supported are specific to each target; refer to *note
32388     x86 Function Attributes::, *note PowerPC Function Attributes::,
32389     *note ARM Function Attributes::, *note AArch64 Function
32390     Attributes::, *note Nios II Function Attributes::, and *note S/390
32391     Function Attributes:: for details.
32392
32393'symver ("NAME2@NODENAME")'
32394     On ELF targets this attribute creates a symbol version.  The NAME2
32395     part of the parameter is the actual name of the symbol by which it
32396     will be externally referenced.  The 'nodename' portion should be
32397     the name of a node specified in the version script supplied to the
32398     linker when building a shared library.  Versioned symbol must be
32399     defined and must be exported with default visibility.
32400
32401          __attribute__ ((__symver__ ("foo@VERS_1"))) int
32402          foo_v1 (void)
32403          {
32404          }
32405
32406     Will produce a '.symver foo_v1, foo@VERS_1' directive in the
32407     assembler output.
32408
32409     It's an error to define multiple version of a given symbol.  In
32410     such case an alias can be used.
32411
32412          __attribute__ ((__symver__ ("foo@VERS_2")))
32413          __attribute__ ((alias ("foo_v1")))
32414          int symver_foo_v1 (void);
32415
32416     This example creates an alias of 'foo_v1' with symbol name
32417     'symver_foo_v1' which will be version 'VERS_2' of 'foo'.
32418
32419     Finally if the parameter is '"NAME2@@NODENAME"' then in addition to
32420     creating a symbol version (as if '"NAME2@NODENAME"' was used) the
32421     version will be also used to resolve NAME2 by the linker.
32422
32423'target_clones (OPTIONS)'
32424     The 'target_clones' attribute is used to specify that a function be
32425     cloned into multiple versions compiled with different target
32426     options than specified on the command line.  The supported options
32427     and restrictions are the same as for 'target' attribute.
32428
32429     For instance, on an x86, you could compile a function with
32430     'target_clones("sse4.1,avx")'.  GCC creates two function clones,
32431     one compiled with '-msse4.1' and another with '-mavx'.
32432
32433     On a PowerPC, you can compile a function with
32434     'target_clones("cpu=power9,default")'.  GCC will create two
32435     function clones, one compiled with '-mcpu=power9' and another with
32436     the default options.  GCC must be configured to use GLIBC 2.23 or
32437     newer in order to use the 'target_clones' attribute.
32438
32439     It also creates a resolver function (see the 'ifunc' attribute
32440     above) that dynamically selects a clone suitable for current
32441     architecture.  The resolver is created only if there is a usage of
32442     a function with 'target_clones' attribute.
32443
32444     Note that any subsequent call of a function without 'target_clone'
32445     from a 'target_clone' caller will not lead to copying (target
32446     clone) of the called function.  If you want to enforce such
32447     behaviour, we recommend declaring the calling function with the
32448     'flatten' attribute?
32449
32450'unused'
32451     This attribute, attached to a function, means that the function is
32452     meant to be possibly unused.  GCC does not produce a warning for
32453     this function.
32454
32455'used'
32456     This attribute, attached to a function, means that code must be
32457     emitted for the function even if it appears that the function is
32458     not referenced.  This is useful, for example, when the function is
32459     referenced only in inline assembly.
32460
32461     When applied to a member function of a C++ class template, the
32462     attribute also means that the function is instantiated if the class
32463     itself is instantiated.
32464
32465'visibility ("VISIBILITY_TYPE")'
32466     This attribute affects the linkage of the declaration to which it
32467     is attached.  It can be applied to variables (*note Common Variable
32468     Attributes::) and types (*note Common Type Attributes::) as well as
32469     functions.
32470
32471     There are four supported VISIBILITY_TYPE values: default, hidden,
32472     protected or internal visibility.
32473
32474          void __attribute__ ((visibility ("protected")))
32475          f () { /* Do something. */; }
32476          int i __attribute__ ((visibility ("hidden")));
32477
32478     The possible values of VISIBILITY_TYPE correspond to the visibility
32479     settings in the ELF gABI.
32480
32481     'default'
32482          Default visibility is the normal case for the object file
32483          format.  This value is available for the visibility attribute
32484          to override other options that may change the assumed
32485          visibility of entities.
32486
32487          On ELF, default visibility means that the declaration is
32488          visible to other modules and, in shared libraries, means that
32489          the declared entity may be overridden.
32490
32491          On Darwin, default visibility means that the declaration is
32492          visible to other modules.
32493
32494          Default visibility corresponds to "external linkage" in the
32495          language.
32496
32497     'hidden'
32498          Hidden visibility indicates that the entity declared has a new
32499          form of linkage, which we call "hidden linkage".  Two
32500          declarations of an object with hidden linkage refer to the
32501          same object if they are in the same shared object.
32502
32503     'internal'
32504          Internal visibility is like hidden visibility, but with
32505          additional processor specific semantics.  Unless otherwise
32506          specified by the psABI, GCC defines internal visibility to
32507          mean that a function is _never_ called from another module.
32508          Compare this with hidden functions which, while they cannot be
32509          referenced directly by other modules, can be referenced
32510          indirectly via function pointers.  By indicating that a
32511          function cannot be called from outside the module, GCC may for
32512          instance omit the load of a PIC register since it is known
32513          that the calling function loaded the correct value.
32514
32515     'protected'
32516          Protected visibility is like default visibility except that it
32517          indicates that references within the defining module bind to
32518          the definition in that module.  That is, the declared entity
32519          cannot be overridden by another module.
32520
32521     All visibilities are supported on many, but not all, ELF targets
32522     (supported when the assembler supports the '.visibility'
32523     pseudo-op).  Default visibility is supported everywhere.  Hidden
32524     visibility is supported on Darwin targets.
32525
32526     The visibility attribute should be applied only to declarations
32527     that would otherwise have external linkage.  The attribute should
32528     be applied consistently, so that the same entity should not be
32529     declared with different settings of the attribute.
32530
32531     In C++, the visibility attribute applies to types as well as
32532     functions and objects, because in C++ types have linkage.  A class
32533     must not have greater visibility than its non-static data member
32534     types and bases, and class members default to the visibility of
32535     their class.  Also, a declaration without explicit visibility is
32536     limited to the visibility of its type.
32537
32538     In C++, you can mark member functions and static member variables
32539     of a class with the visibility attribute.  This is useful if you
32540     know a particular method or static member variable should only be
32541     used from one shared object; then you can mark it hidden while the
32542     rest of the class has default visibility.  Care must be taken to
32543     avoid breaking the One Definition Rule; for example, it is usually
32544     not useful to mark an inline method as hidden without marking the
32545     whole class as hidden.
32546
32547     A C++ namespace declaration can also have the visibility attribute.
32548
32549          namespace nspace1 __attribute__ ((visibility ("protected")))
32550          { /* Do something. */; }
32551
32552     This attribute applies only to the particular namespace body, not
32553     to other definitions of the same namespace; it is equivalent to
32554     using '#pragma GCC visibility' before and after the namespace
32555     definition (*note Visibility Pragmas::).
32556
32557     In C++, if a template argument has limited visibility, this
32558     restriction is implicitly propagated to the template instantiation.
32559     Otherwise, template instantiations and specializations default to
32560     the visibility of their template.
32561
32562     If both the template and enclosing class have explicit visibility,
32563     the visibility from the template is used.
32564
32565'warn_unused_result'
32566     The 'warn_unused_result' attribute causes a warning to be emitted
32567     if a caller of the function with this attribute does not use its
32568     return value.  This is useful for functions where not checking the
32569     result is either a security problem or always a bug, such as
32570     'realloc'.
32571
32572          int fn () __attribute__ ((warn_unused_result));
32573          int foo ()
32574          {
32575            if (fn () < 0) return -1;
32576            fn ();
32577            return 0;
32578          }
32579
32580     results in warning on line 5.
32581
32582'weak'
32583     The 'weak' attribute causes a declaration of an external symbol to
32584     be emitted as a weak symbol rather than a global.  This is
32585     primarily useful in defining library functions that can be
32586     overridden in user code, though it can also be used with
32587     non-function declarations.  The overriding symbol must have the
32588     same type as the weak symbol.  In addition, if it designates a
32589     variable it must also have the same size and alignment as the weak
32590     symbol.  Weak symbols are supported for ELF targets, and also for
32591     a.out targets when using the GNU assembler and linker.
32592
32593'weakref'
32594'weakref ("TARGET")'
32595     The 'weakref' attribute marks a declaration as a weak reference.
32596     Without arguments, it should be accompanied by an 'alias' attribute
32597     naming the target symbol.  Alternatively, TARGET may be given as an
32598     argument to 'weakref' itself, naming the target definition of the
32599     alias.  The TARGET must have the same type as the declaration.  In
32600     addition, if it designates a variable it must also have the same
32601     size and alignment as the declaration.  In either form of the
32602     declaration 'weakref' implicitly marks the declared symbol as
32603     'weak'.  Without a TARGET given as an argument to 'weakref' or to
32604     'alias', 'weakref' is equivalent to 'weak' (in that case the
32605     declaration may be 'extern').
32606
32607          /* Given the declaration: */
32608          extern int y (void);
32609
32610          /* the following... */
32611          static int x (void) __attribute__ ((weakref ("y")));
32612
32613          /* is equivalent to... */
32614          static int x (void) __attribute__ ((weakref, alias ("y")));
32615
32616          /* or, alternatively, to... */
32617          static int x (void) __attribute__ ((weakref));
32618          static int x (void) __attribute__ ((alias ("y")));
32619
32620     A weak reference is an alias that does not by itself require a
32621     definition to be given for the target symbol.  If the target symbol
32622     is only referenced through weak references, then it becomes a
32623     'weak' undefined symbol.  If it is directly referenced, however,
32624     then such strong references prevail, and a definition is required
32625     for the symbol, not necessarily in the same translation unit.
32626
32627     The effect is equivalent to moving all references to the alias to a
32628     separate translation unit, renaming the alias to the aliased
32629     symbol, declaring it as weak, compiling the two separate
32630     translation units and performing a link with relocatable output
32631     (i.e. 'ld -r') on them.
32632
32633     A declaration to which 'weakref' is attached and that is associated
32634     with a named 'target' must be 'static'.
32635
32636
32637File: gcc.info,  Node: AArch64 Function Attributes,  Next: AMD GCN Function Attributes,  Prev: Common Function Attributes,  Up: Function Attributes
32638
326396.33.2 AArch64 Function Attributes
32640----------------------------------
32641
32642The following target-specific function attributes are available for the
32643AArch64 target.  For the most part, these options mirror the behavior of
32644similar command-line options (*note AArch64 Options::), but on a
32645per-function basis.
32646
32647'general-regs-only'
32648     Indicates that no floating-point or Advanced SIMD registers should
32649     be used when generating code for this function.  If the function
32650     explicitly uses floating-point code, then the compiler gives an
32651     error.  This is the same behavior as that of the command-line
32652     option '-mgeneral-regs-only'.
32653
32654'fix-cortex-a53-835769'
32655     Indicates that the workaround for the Cortex-A53 erratum 835769
32656     should be applied to this function.  To explicitly disable the
32657     workaround for this function specify the negated form:
32658     'no-fix-cortex-a53-835769'.  This corresponds to the behavior of
32659     the command line options '-mfix-cortex-a53-835769' and
32660     '-mno-fix-cortex-a53-835769'.
32661
32662'cmodel='
32663     Indicates that code should be generated for a particular code model
32664     for this function.  The behavior and permissible arguments are the
32665     same as for the command line option '-mcmodel='.
32666
32667'strict-align'
32668'no-strict-align'
32669     'strict-align' indicates that the compiler should not assume that
32670     unaligned memory references are handled by the system.  To allow
32671     the compiler to assume that aligned memory references are handled
32672     by the system, the inverse attribute 'no-strict-align' can be
32673     specified.  The behavior is same as for the command-line option
32674     '-mstrict-align' and '-mno-strict-align'.
32675
32676'omit-leaf-frame-pointer'
32677     Indicates that the frame pointer should be omitted for a leaf
32678     function call.  To keep the frame pointer, the inverse attribute
32679     'no-omit-leaf-frame-pointer' can be specified.  These attributes
32680     have the same behavior as the command-line options
32681     '-momit-leaf-frame-pointer' and '-mno-omit-leaf-frame-pointer'.
32682
32683'tls-dialect='
32684     Specifies the TLS dialect to use for this function.  The behavior
32685     and permissible arguments are the same as for the command-line
32686     option '-mtls-dialect='.
32687
32688'arch='
32689     Specifies the architecture version and architectural extensions to
32690     use for this function.  The behavior and permissible arguments are
32691     the same as for the '-march=' command-line option.
32692
32693'tune='
32694     Specifies the core for which to tune the performance of this
32695     function.  The behavior and permissible arguments are the same as
32696     for the '-mtune=' command-line option.
32697
32698'cpu='
32699     Specifies the core for which to tune the performance of this
32700     function and also whose architectural features to use.  The
32701     behavior and valid arguments are the same as for the '-mcpu='
32702     command-line option.
32703
32704'sign-return-address'
32705     Select the function scope on which return address signing will be
32706     applied.  The behavior and permissible arguments are the same as
32707     for the command-line option '-msign-return-address='.  The default
32708     value is 'none'.  This attribute is deprecated.  The
32709     'branch-protection' attribute should be used instead.
32710
32711'branch-protection'
32712     Select the function scope on which branch protection will be
32713     applied.  The behavior and permissible arguments are the same as
32714     for the command-line option '-mbranch-protection='.  The default
32715     value is 'none'.
32716
32717'outline-atomics'
32718     Enable or disable calls to out-of-line helpers to implement atomic
32719     operations.  This corresponds to the behavior of the command line
32720     options '-moutline-atomics' and '-mno-outline-atomics'.
32721
32722 The above target attributes can be specified as follows:
32723
32724     __attribute__((target("ATTR-STRING")))
32725     int
32726     f (int a)
32727     {
32728       return a + 5;
32729     }
32730
32731 where 'ATTR-STRING' is one of the attribute strings specified above.
32732
32733 Additionally, the architectural extension string may be specified on
32734its own.  This can be used to turn on and off particular architectural
32735extensions without having to specify a particular architecture version
32736or core.  Example:
32737
32738     __attribute__((target("+crc+nocrypto")))
32739     int
32740     foo (int a)
32741     {
32742       return a + 5;
32743     }
32744
32745 In this example 'target("+crc+nocrypto")' enables the 'crc' extension
32746and disables the 'crypto' extension for the function 'foo' without
32747modifying an existing '-march=' or '-mcpu' option.
32748
32749 Multiple target function attributes can be specified by separating them
32750with a comma.  For example:
32751     __attribute__((target("arch=armv8-a+crc+crypto,tune=cortex-a53")))
32752     int
32753     foo (int a)
32754     {
32755       return a + 5;
32756     }
32757
32758 is valid and compiles function 'foo' for ARMv8-A with 'crc' and
32759'crypto' extensions and tunes it for 'cortex-a53'.
32760
327616.33.2.1 Inlining rules
32762.......................
32763
32764Specifying target attributes on individual functions or performing
32765link-time optimization across translation units compiled with different
32766target options can affect function inlining rules:
32767
32768 In particular, a caller function can inline a callee function only if
32769the architectural features available to the callee are a subset of the
32770features available to the caller.  For example: A function 'foo'
32771compiled with '-march=armv8-a+crc', or tagged with the equivalent
32772'arch=armv8-a+crc' attribute, can inline a function 'bar' compiled with
32773'-march=armv8-a+nocrc' because the all the architectural features that
32774function 'bar' requires are available to function 'foo'.  Conversely,
32775function 'bar' cannot inline function 'foo'.
32776
32777 Additionally inlining a function compiled with '-mstrict-align' into a
32778function compiled without '-mstrict-align' is not allowed.  However,
32779inlining a function compiled without '-mstrict-align' into a function
32780compiled with '-mstrict-align' is allowed.
32781
32782 Note that CPU tuning options and attributes such as the '-mcpu=',
32783'-mtune=' do not inhibit inlining unless the CPU specified by the
32784'-mcpu=' option or the 'cpu=' attribute conflicts with the architectural
32785feature rules specified above.
32786
32787
32788File: gcc.info,  Node: AMD GCN Function Attributes,  Next: ARC Function Attributes,  Prev: AArch64 Function Attributes,  Up: Function Attributes
32789
327906.33.3 AMD GCN Function Attributes
32791----------------------------------
32792
32793These function attributes are supported by the AMD GCN back end:
32794
32795'amdgpu_hsa_kernel'
32796     This attribute indicates that the corresponding function should be
32797     compiled as a kernel function, that is an entry point that can be
32798     invoked from the host via the HSA runtime library.  By default
32799     functions are only callable only from other GCN functions.
32800
32801     This attribute is implicitly applied to any function named 'main',
32802     using default parameters.
32803
32804     Kernel functions may return an integer value, which will be written
32805     to a conventional place within the HSA "kernargs" region.
32806
32807     The attribute parameters configure what values are passed into the
32808     kernel function by the GPU drivers, via the initial register state.
32809     Some values are used by the compiler, and therefore forced on.
32810     Enabling other options may break assumptions in the compiler and/or
32811     run-time libraries.
32812
32813     'private_segment_buffer'
32814          Set 'enable_sgpr_private_segment_buffer' flag.  Always on
32815          (required to locate the stack).
32816
32817     'dispatch_ptr'
32818          Set 'enable_sgpr_dispatch_ptr' flag.  Always on (required to
32819          locate the launch dimensions).
32820
32821     'queue_ptr'
32822          Set 'enable_sgpr_queue_ptr' flag.  Always on (required to
32823          convert address spaces).
32824
32825     'kernarg_segment_ptr'
32826          Set 'enable_sgpr_kernarg_segment_ptr' flag.  Always on
32827          (required to locate the kernel arguments, "kernargs").
32828
32829     'dispatch_id'
32830          Set 'enable_sgpr_dispatch_id' flag.
32831
32832     'flat_scratch_init'
32833          Set 'enable_sgpr_flat_scratch_init' flag.
32834
32835     'private_segment_size'
32836          Set 'enable_sgpr_private_segment_size' flag.
32837
32838     'grid_workgroup_count_X'
32839          Set 'enable_sgpr_grid_workgroup_count_x' flag.  Always on
32840          (required to use OpenACC/OpenMP).
32841
32842     'grid_workgroup_count_Y'
32843          Set 'enable_sgpr_grid_workgroup_count_y' flag.
32844
32845     'grid_workgroup_count_Z'
32846          Set 'enable_sgpr_grid_workgroup_count_z' flag.
32847
32848     'workgroup_id_X'
32849          Set 'enable_sgpr_workgroup_id_x' flag.
32850
32851     'workgroup_id_Y'
32852          Set 'enable_sgpr_workgroup_id_y' flag.
32853
32854     'workgroup_id_Z'
32855          Set 'enable_sgpr_workgroup_id_z' flag.
32856
32857     'workgroup_info'
32858          Set 'enable_sgpr_workgroup_info' flag.
32859
32860     'private_segment_wave_offset'
32861          Set 'enable_sgpr_private_segment_wave_byte_offset' flag.
32862          Always on (required to locate the stack).
32863
32864     'work_item_id_X'
32865          Set 'enable_vgpr_workitem_id' parameter.  Always on (can't be
32866          disabled).
32867
32868     'work_item_id_Y'
32869          Set 'enable_vgpr_workitem_id' parameter.  Always on (required
32870          to enable vectorization.)
32871
32872     'work_item_id_Z'
32873          Set 'enable_vgpr_workitem_id' parameter.  Always on (required
32874          to use OpenACC/OpenMP).
32875
32876
32877File: gcc.info,  Node: ARC Function Attributes,  Next: ARM Function Attributes,  Prev: AMD GCN Function Attributes,  Up: Function Attributes
32878
328796.33.4 ARC Function Attributes
32880------------------------------
32881
32882These function attributes are supported by the ARC back end:
32883
32884'interrupt'
32885     Use this attribute to indicate that the specified function is an
32886     interrupt handler.  The compiler generates function entry and exit
32887     sequences suitable for use in an interrupt handler when this
32888     attribute is present.
32889
32890     On the ARC, you must specify the kind of interrupt to be handled in
32891     a parameter to the interrupt attribute like this:
32892
32893          void f () __attribute__ ((interrupt ("ilink1")));
32894
32895     Permissible values for this parameter are: 'ilink1' and 'ilink2'
32896     for ARCv1 architecture, and 'ilink' and 'firq' for ARCv2
32897     architecture.
32898
32899'long_call'
32900'medium_call'
32901'short_call'
32902     These attributes specify how a particular function is called.
32903     These attributes override the '-mlong-calls' and '-mmedium-calls'
32904     (*note ARC Options::) command-line switches and '#pragma
32905     long_calls' settings.
32906
32907     For ARC, a function marked with the 'long_call' attribute is always
32908     called using register-indirect jump-and-link instructions, thereby
32909     enabling the called function to be placed anywhere within the
32910     32-bit address space.  A function marked with the 'medium_call'
32911     attribute will always be close enough to be called with an
32912     unconditional branch-and-link instruction, which has a 25-bit
32913     offset from the call site.  A function marked with the 'short_call'
32914     attribute will always be close enough to be called with a
32915     conditional branch-and-link instruction, which has a 21-bit offset
32916     from the call site.
32917
32918'jli_always'
32919     Forces a particular function to be called using 'jli' instruction.
32920     The 'jli' instruction makes use of a table stored into '.jlitab'
32921     section, which holds the location of the functions which are
32922     addressed using this instruction.
32923
32924'jli_fixed'
32925     Identical like the above one, but the location of the function in
32926     the 'jli' table is known and given as an attribute parameter.
32927
32928'secure_call'
32929     This attribute allows one to mark secure-code functions that are
32930     callable from normal mode.  The location of the secure call
32931     function into the 'sjli' table needs to be passed as argument.
32932
32933'naked'
32934     This attribute allows the compiler to construct the requisite
32935     function declaration, while allowing the body of the function to be
32936     assembly code.  The specified function will not have
32937     prologue/epilogue sequences generated by the compiler.  Only basic
32938     'asm' statements can safely be included in naked functions (*note
32939     Basic Asm::).  While using extended 'asm' or a mixture of basic
32940     'asm' and C code may appear to work, they cannot be depended upon
32941     to work reliably and are not supported.
32942
32943
32944File: gcc.info,  Node: ARM Function Attributes,  Next: AVR Function Attributes,  Prev: ARC Function Attributes,  Up: Function Attributes
32945
329466.33.5 ARM Function Attributes
32947------------------------------
32948
32949These function attributes are supported for ARM targets:
32950
32951'general-regs-only'
32952     Indicates that no floating-point or Advanced SIMD registers should
32953     be used when generating code for this function.  If the function
32954     explicitly uses floating-point code, then the compiler gives an
32955     error.  This is the same behavior as that of the command-line
32956     option '-mgeneral-regs-only'.
32957
32958'interrupt'
32959     Use this attribute to indicate that the specified function is an
32960     interrupt handler.  The compiler generates function entry and exit
32961     sequences suitable for use in an interrupt handler when this
32962     attribute is present.
32963
32964     You can specify the kind of interrupt to be handled by adding an
32965     optional parameter to the interrupt attribute like this:
32966
32967          void f () __attribute__ ((interrupt ("IRQ")));
32968
32969     Permissible values for this parameter are: 'IRQ', 'FIQ', 'SWI',
32970     'ABORT' and 'UNDEF'.
32971
32972     On ARMv7-M the interrupt type is ignored, and the attribute means
32973     the function may be called with a word-aligned stack pointer.
32974
32975'isr'
32976     Use this attribute on ARM to write Interrupt Service Routines.
32977     This is an alias to the 'interrupt' attribute above.
32978
32979'long_call'
32980'short_call'
32981     These attributes specify how a particular function is called.
32982     These attributes override the '-mlong-calls' (*note ARM Options::)
32983     command-line switch and '#pragma long_calls' settings.  For ARM,
32984     the 'long_call' attribute indicates that the function might be far
32985     away from the call site and require a different (more expensive)
32986     calling sequence.  The 'short_call' attribute always places the
32987     offset to the function from the call site into the 'BL' instruction
32988     directly.
32989
32990'naked'
32991     This attribute allows the compiler to construct the requisite
32992     function declaration, while allowing the body of the function to be
32993     assembly code.  The specified function will not have
32994     prologue/epilogue sequences generated by the compiler.  Only basic
32995     'asm' statements can safely be included in naked functions (*note
32996     Basic Asm::).  While using extended 'asm' or a mixture of basic
32997     'asm' and C code may appear to work, they cannot be depended upon
32998     to work reliably and are not supported.
32999
33000'pcs'
33001
33002     The 'pcs' attribute can be used to control the calling convention
33003     used for a function on ARM. The attribute takes an argument that
33004     specifies the calling convention to use.
33005
33006     When compiling using the AAPCS ABI (or a variant of it) then valid
33007     values for the argument are '"aapcs"' and '"aapcs-vfp"'.  In order
33008     to use a variant other than '"aapcs"' then the compiler must be
33009     permitted to use the appropriate co-processor registers (i.e., the
33010     VFP registers must be available in order to use '"aapcs-vfp"').
33011     For example,
33012
33013          /* Argument passed in r0, and result returned in r0+r1.  */
33014          double f2d (float) __attribute__((pcs("aapcs")));
33015
33016     Variadic functions always use the '"aapcs"' calling convention and
33017     the compiler rejects attempts to specify an alternative.
33018
33019'target (OPTIONS)'
33020     As discussed in *note Common Function Attributes::, this attribute
33021     allows specification of target-specific compilation options.
33022
33023     On ARM, the following options are allowed:
33024
33025     'thumb'
33026          Force code generation in the Thumb (T16/T32) ISA, depending on
33027          the architecture level.
33028
33029     'arm'
33030          Force code generation in the ARM (A32) ISA.
33031
33032          Functions from different modes can be inlined in the caller's
33033          mode.
33034
33035     'fpu='
33036          Specifies the fpu for which to tune the performance of this
33037          function.  The behavior and permissible arguments are the same
33038          as for the '-mfpu=' command-line option.
33039
33040     'arch='
33041          Specifies the architecture version and architectural
33042          extensions to use for this function.  The behavior and
33043          permissible arguments are the same as for the '-march='
33044          command-line option.
33045
33046          The above target attributes can be specified as follows:
33047
33048               __attribute__((target("arch=armv8-a+crc")))
33049               int
33050               f (int a)
33051               {
33052                 return a + 5;
33053               }
33054
33055          Additionally, the architectural extension string may be
33056          specified on its own.  This can be used to turn on and off
33057          particular architectural extensions without having to specify
33058          a particular architecture version or core.  Example:
33059
33060               __attribute__((target("+crc+nocrypto")))
33061               int
33062               foo (int a)
33063               {
33064                 return a + 5;
33065               }
33066
33067          In this example 'target("+crc+nocrypto")' enables the 'crc'
33068          extension and disables the 'crypto' extension for the function
33069          'foo' without modifying an existing '-march=' or '-mcpu'
33070          option.
33071
33072
33073File: gcc.info,  Node: AVR Function Attributes,  Next: Blackfin Function Attributes,  Prev: ARM Function Attributes,  Up: Function Attributes
33074
330756.33.6 AVR Function Attributes
33076------------------------------
33077
33078These function attributes are supported by the AVR back end:
33079
33080'interrupt'
33081     Use this attribute to indicate that the specified function is an
33082     interrupt handler.  The compiler generates function entry and exit
33083     sequences suitable for use in an interrupt handler when this
33084     attribute is present.
33085
33086     On the AVR, the hardware globally disables interrupts when an
33087     interrupt is executed.  The first instruction of an interrupt
33088     handler declared with this attribute is a 'SEI' instruction to
33089     re-enable interrupts.  See also the 'signal' function attribute
33090     that does not insert a 'SEI' instruction.  If both 'signal' and
33091     'interrupt' are specified for the same function, 'signal' is
33092     silently ignored.
33093
33094'naked'
33095     This attribute allows the compiler to construct the requisite
33096     function declaration, while allowing the body of the function to be
33097     assembly code.  The specified function will not have
33098     prologue/epilogue sequences generated by the compiler.  Only basic
33099     'asm' statements can safely be included in naked functions (*note
33100     Basic Asm::).  While using extended 'asm' or a mixture of basic
33101     'asm' and C code may appear to work, they cannot be depended upon
33102     to work reliably and are not supported.
33103
33104'no_gccisr'
33105     Do not use '__gcc_isr' pseudo instructions in a function with the
33106     'interrupt' or 'signal' attribute aka.  interrupt service routine
33107     (ISR). Use this attribute if the preamble of the ISR prologue
33108     should always read
33109          push  __zero_reg__
33110          push  __tmp_reg__
33111          in    __tmp_reg__, __SREG__
33112          push  __tmp_reg__
33113          clr   __zero_reg__
33114     and accordingly for the postamble of the epilogue -- no matter
33115     whether the mentioned registers are actually used in the ISR or
33116     not.  Situations where you might want to use this attribute
33117     include:
33118        * Code that (effectively) clobbers bits of 'SREG' other than the
33119          'I'-flag by writing to the memory location of 'SREG'.
33120        * Code that uses inline assembler to jump to a different
33121          function which expects (parts of) the prologue code as
33122          outlined above to be present.
33123     To disable '__gcc_isr' generation for the whole compilation unit,
33124     there is option '-mno-gas-isr-prologues', *note AVR Options::.
33125
33126'OS_main'
33127'OS_task'
33128     On AVR, functions with the 'OS_main' or 'OS_task' attribute do not
33129     save/restore any call-saved register in their prologue/epilogue.
33130
33131     The 'OS_main' attribute can be used when there _is guarantee_ that
33132     interrupts are disabled at the time when the function is entered.
33133     This saves resources when the stack pointer has to be changed to
33134     set up a frame for local variables.
33135
33136     The 'OS_task' attribute can be used when there is _no guarantee_
33137     that interrupts are disabled at that time when the function is
33138     entered like for, e.g.  task functions in a multi-threading
33139     operating system.  In that case, changing the stack pointer
33140     register is guarded by save/clear/restore of the global interrupt
33141     enable flag.
33142
33143     The differences to the 'naked' function attribute are:
33144        * 'naked' functions do not have a return instruction whereas
33145          'OS_main' and 'OS_task' functions have a 'RET' or 'RETI'
33146          return instruction.
33147        * 'naked' functions do not set up a frame for local variables or
33148          a frame pointer whereas 'OS_main' and 'OS_task' do this as
33149          needed.
33150
33151'signal'
33152     Use this attribute on the AVR to indicate that the specified
33153     function is an interrupt handler.  The compiler generates function
33154     entry and exit sequences suitable for use in an interrupt handler
33155     when this attribute is present.
33156
33157     See also the 'interrupt' function attribute.
33158
33159     The AVR hardware globally disables interrupts when an interrupt is
33160     executed.  Interrupt handler functions defined with the 'signal'
33161     attribute do not re-enable interrupts.  It is save to enable
33162     interrupts in a 'signal' handler.  This "save" only applies to the
33163     code generated by the compiler and not to the IRQ layout of the
33164     application which is responsibility of the application.
33165
33166     If both 'signal' and 'interrupt' are specified for the same
33167     function, 'signal' is silently ignored.
33168
33169
33170File: gcc.info,  Node: Blackfin Function Attributes,  Next: CR16 Function Attributes,  Prev: AVR Function Attributes,  Up: Function Attributes
33171
331726.33.7 Blackfin Function Attributes
33173-----------------------------------
33174
33175These function attributes are supported by the Blackfin back end:
33176
33177'exception_handler'
33178     Use this attribute on the Blackfin to indicate that the specified
33179     function is an exception handler.  The compiler generates function
33180     entry and exit sequences suitable for use in an exception handler
33181     when this attribute is present.
33182
33183'interrupt_handler'
33184     Use this attribute to indicate that the specified function is an
33185     interrupt handler.  The compiler generates function entry and exit
33186     sequences suitable for use in an interrupt handler when this
33187     attribute is present.
33188
33189'kspisusp'
33190     When used together with 'interrupt_handler', 'exception_handler' or
33191     'nmi_handler', code is generated to load the stack pointer from the
33192     USP register in the function prologue.
33193
33194'l1_text'
33195     This attribute specifies a function to be placed into L1
33196     Instruction SRAM.  The function is put into a specific section
33197     named '.l1.text'.  With '-mfdpic', function calls with a such
33198     function as the callee or caller uses inlined PLT.
33199
33200'l2'
33201     This attribute specifies a function to be placed into L2 SRAM. The
33202     function is put into a specific section named '.l2.text'.  With
33203     '-mfdpic', callers of such functions use an inlined PLT.
33204
33205'longcall'
33206'shortcall'
33207     The 'longcall' attribute indicates that the function might be far
33208     away from the call site and require a different (more expensive)
33209     calling sequence.  The 'shortcall' attribute indicates that the
33210     function is always close enough for the shorter calling sequence to
33211     be used.  These attributes override the '-mlongcall' switch.
33212
33213'nesting'
33214     Use this attribute together with 'interrupt_handler',
33215     'exception_handler' or 'nmi_handler' to indicate that the function
33216     entry code should enable nested interrupts or exceptions.
33217
33218'nmi_handler'
33219     Use this attribute on the Blackfin to indicate that the specified
33220     function is an NMI handler.  The compiler generates function entry
33221     and exit sequences suitable for use in an NMI handler when this
33222     attribute is present.
33223
33224'saveall'
33225     Use this attribute to indicate that all registers except the stack
33226     pointer should be saved in the prologue regardless of whether they
33227     are used or not.
33228
33229
33230File: gcc.info,  Node: CR16 Function Attributes,  Next: C-SKY Function Attributes,  Prev: Blackfin Function Attributes,  Up: Function Attributes
33231
332326.33.8 CR16 Function Attributes
33233-------------------------------
33234
33235These function attributes are supported by the CR16 back end:
33236
33237'interrupt'
33238     Use this attribute to indicate that the specified function is an
33239     interrupt handler.  The compiler generates function entry and exit
33240     sequences suitable for use in an interrupt handler when this
33241     attribute is present.
33242
33243
33244File: gcc.info,  Node: C-SKY Function Attributes,  Next: Epiphany Function Attributes,  Prev: CR16 Function Attributes,  Up: Function Attributes
33245
332466.33.9 C-SKY Function Attributes
33247--------------------------------
33248
33249These function attributes are supported by the C-SKY back end:
33250
33251'interrupt'
33252'isr'
33253     Use these attributes to indicate that the specified function is an
33254     interrupt handler.  The compiler generates function entry and exit
33255     sequences suitable for use in an interrupt handler when either of
33256     these attributes are present.
33257
33258     Use of these options requires the '-mistack' command-line option to
33259     enable support for the necessary interrupt stack instructions.
33260     They are ignored with a warning otherwise.  *Note C-SKY Options::.
33261
33262'naked'
33263     This attribute allows the compiler to construct the requisite
33264     function declaration, while allowing the body of the function to be
33265     assembly code.  The specified function will not have
33266     prologue/epilogue sequences generated by the compiler.  Only basic
33267     'asm' statements can safely be included in naked functions (*note
33268     Basic Asm::).  While using extended 'asm' or a mixture of basic
33269     'asm' and C code may appear to work, they cannot be depended upon
33270     to work reliably and are not supported.
33271
33272
33273File: gcc.info,  Node: Epiphany Function Attributes,  Next: H8/300 Function Attributes,  Prev: C-SKY Function Attributes,  Up: Function Attributes
33274
332756.33.10 Epiphany Function Attributes
33276------------------------------------
33277
33278These function attributes are supported by the Epiphany back end:
33279
33280'disinterrupt'
33281     This attribute causes the compiler to emit instructions to disable
33282     interrupts for the duration of the given function.
33283
33284'forwarder_section'
33285     This attribute modifies the behavior of an interrupt handler.  The
33286     interrupt handler may be in external memory which cannot be reached
33287     by a branch instruction, so generate a local memory trampoline to
33288     transfer control.  The single parameter identifies the section
33289     where the trampoline is placed.
33290
33291'interrupt'
33292     Use this attribute to indicate that the specified function is an
33293     interrupt handler.  The compiler generates function entry and exit
33294     sequences suitable for use in an interrupt handler when this
33295     attribute is present.  It may also generate a special section with
33296     code to initialize the interrupt vector table.
33297
33298     On Epiphany targets one or more optional parameters can be added
33299     like this:
33300
33301          void __attribute__ ((interrupt ("dma0, dma1"))) universal_dma_handler ();
33302
33303     Permissible values for these parameters are: 'reset',
33304     'software_exception', 'page_miss', 'timer0', 'timer1', 'message',
33305     'dma0', 'dma1', 'wand' and 'swi'.  Multiple parameters indicate
33306     that multiple entries in the interrupt vector table should be
33307     initialized for this function, i.e. for each parameter NAME, a jump
33308     to the function is emitted in the section ivt_entry_NAME.  The
33309     parameter(s) may be omitted entirely, in which case no interrupt
33310     vector table entry is provided.
33311
33312     Note that interrupts are enabled inside the function unless the
33313     'disinterrupt' attribute is also specified.
33314
33315     The following examples are all valid uses of these attributes on
33316     Epiphany targets:
33317          void __attribute__ ((interrupt)) universal_handler ();
33318          void __attribute__ ((interrupt ("dma1"))) dma1_handler ();
33319          void __attribute__ ((interrupt ("dma0, dma1")))
33320            universal_dma_handler ();
33321          void __attribute__ ((interrupt ("timer0"), disinterrupt))
33322            fast_timer_handler ();
33323          void __attribute__ ((interrupt ("dma0, dma1"),
33324                               forwarder_section ("tramp")))
33325            external_dma_handler ();
33326
33327'long_call'
33328'short_call'
33329     These attributes specify how a particular function is called.
33330     These attributes override the '-mlong-calls' (*note Adapteva
33331     Epiphany Options::) command-line switch and '#pragma long_calls'
33332     settings.
33333
33334
33335File: gcc.info,  Node: H8/300 Function Attributes,  Next: IA-64 Function Attributes,  Prev: Epiphany Function Attributes,  Up: Function Attributes
33336
333376.33.11 H8/300 Function Attributes
33338----------------------------------
33339
33340These function attributes are available for H8/300 targets:
33341
33342'function_vector'
33343     Use this attribute on the H8/300, H8/300H, and H8S to indicate that
33344     the specified function should be called through the function
33345     vector.  Calling a function through the function vector reduces
33346     code size; however, the function vector has a limited size (maximum
33347     128 entries on the H8/300 and 64 entries on the H8/300H and H8S)
33348     and shares space with the interrupt vector.
33349
33350'interrupt_handler'
33351     Use this attribute on the H8/300, H8/300H, and H8S to indicate that
33352     the specified function is an interrupt handler.  The compiler
33353     generates function entry and exit sequences suitable for use in an
33354     interrupt handler when this attribute is present.
33355
33356'saveall'
33357     Use this attribute on the H8/300, H8/300H, and H8S to indicate that
33358     all registers except the stack pointer should be saved in the
33359     prologue regardless of whether they are used or not.
33360
33361
33362File: gcc.info,  Node: IA-64 Function Attributes,  Next: M32C Function Attributes,  Prev: H8/300 Function Attributes,  Up: Function Attributes
33363
333646.33.12 IA-64 Function Attributes
33365---------------------------------
33366
33367These function attributes are supported on IA-64 targets:
33368
33369'syscall_linkage'
33370     This attribute is used to modify the IA-64 calling convention by
33371     marking all input registers as live at all function exits.  This
33372     makes it possible to restart a system call after an interrupt
33373     without having to save/restore the input registers.  This also
33374     prevents kernel data from leaking into application code.
33375
33376'version_id'
33377     This IA-64 HP-UX attribute, attached to a global variable or
33378     function, renames a symbol to contain a version string, thus
33379     allowing for function level versioning.  HP-UX system header files
33380     may use function level versioning for some system calls.
33381
33382          extern int foo () __attribute__((version_id ("20040821")));
33383
33384     Calls to 'foo' are mapped to calls to 'foo{20040821}'.
33385
33386
33387File: gcc.info,  Node: M32C Function Attributes,  Next: M32R/D Function Attributes,  Prev: IA-64 Function Attributes,  Up: Function Attributes
33388
333896.33.13 M32C Function Attributes
33390--------------------------------
33391
33392These function attributes are supported by the M32C back end:
33393
33394'bank_switch'
33395     When added to an interrupt handler with the M32C port, causes the
33396     prologue and epilogue to use bank switching to preserve the
33397     registers rather than saving them on the stack.
33398
33399'fast_interrupt'
33400     Use this attribute on the M32C port to indicate that the specified
33401     function is a fast interrupt handler.  This is just like the
33402     'interrupt' attribute, except that 'freit' is used to return
33403     instead of 'reit'.
33404
33405'function_vector'
33406     On M16C/M32C targets, the 'function_vector' attribute declares a
33407     special page subroutine call function.  Use of this attribute
33408     reduces the code size by 2 bytes for each call generated to the
33409     subroutine.  The argument to the attribute is the vector number
33410     entry from the special page vector table which contains the 16
33411     low-order bits of the subroutine's entry address.  Each vector
33412     table has special page number (18 to 255) that is used in 'jsrs'
33413     instructions.  Jump addresses of the routines are generated by
33414     adding 0x0F0000 (in case of M16C targets) or 0xFF0000 (in case of
33415     M32C targets), to the 2-byte addresses set in the vector table.
33416     Therefore you need to ensure that all the special page vector
33417     routines should get mapped within the address range 0x0F0000 to
33418     0x0FFFFF (for M16C) and 0xFF0000 to 0xFFFFFF (for M32C).
33419
33420     In the following example 2 bytes are saved for each call to
33421     function 'foo'.
33422
33423          void foo (void) __attribute__((function_vector(0x18)));
33424          void foo (void)
33425          {
33426          }
33427
33428          void bar (void)
33429          {
33430              foo();
33431          }
33432
33433     If functions are defined in one file and are called in another
33434     file, then be sure to write this declaration in both files.
33435
33436     This attribute is ignored for R8C target.
33437
33438'interrupt'
33439     Use this attribute to indicate that the specified function is an
33440     interrupt handler.  The compiler generates function entry and exit
33441     sequences suitable for use in an interrupt handler when this
33442     attribute is present.
33443
33444
33445File: gcc.info,  Node: M32R/D Function Attributes,  Next: m68k Function Attributes,  Prev: M32C Function Attributes,  Up: Function Attributes
33446
334476.33.14 M32R/D Function Attributes
33448----------------------------------
33449
33450These function attributes are supported by the M32R/D back end:
33451
33452'interrupt'
33453     Use this attribute to indicate that the specified function is an
33454     interrupt handler.  The compiler generates function entry and exit
33455     sequences suitable for use in an interrupt handler when this
33456     attribute is present.
33457
33458'model (MODEL-NAME)'
33459
33460     On the M32R/D, use this attribute to set the addressability of an
33461     object, and of the code generated for a function.  The identifier
33462     MODEL-NAME is one of 'small', 'medium', or 'large', representing
33463     each of the code models.
33464
33465     Small model objects live in the lower 16MB of memory (so that their
33466     addresses can be loaded with the 'ld24' instruction), and are
33467     callable with the 'bl' instruction.
33468
33469     Medium model objects may live anywhere in the 32-bit address space
33470     (the compiler generates 'seth/add3' instructions to load their
33471     addresses), and are callable with the 'bl' instruction.
33472
33473     Large model objects may live anywhere in the 32-bit address space
33474     (the compiler generates 'seth/add3' instructions to load their
33475     addresses), and may not be reachable with the 'bl' instruction (the
33476     compiler generates the much slower 'seth/add3/jl' instruction
33477     sequence).
33478
33479
33480File: gcc.info,  Node: m68k Function Attributes,  Next: MCORE Function Attributes,  Prev: M32R/D Function Attributes,  Up: Function Attributes
33481
334826.33.15 m68k Function Attributes
33483--------------------------------
33484
33485These function attributes are supported by the m68k back end:
33486
33487'interrupt'
33488'interrupt_handler'
33489     Use this attribute to indicate that the specified function is an
33490     interrupt handler.  The compiler generates function entry and exit
33491     sequences suitable for use in an interrupt handler when this
33492     attribute is present.  Either name may be used.
33493
33494'interrupt_thread'
33495     Use this attribute on fido, a subarchitecture of the m68k, to
33496     indicate that the specified function is an interrupt handler that
33497     is designed to run as a thread.  The compiler omits generate
33498     prologue/epilogue sequences and replaces the return instruction
33499     with a 'sleep' instruction.  This attribute is available only on
33500     fido.
33501
33502
33503File: gcc.info,  Node: MCORE Function Attributes,  Next: MeP Function Attributes,  Prev: m68k Function Attributes,  Up: Function Attributes
33504
335056.33.16 MCORE Function Attributes
33506---------------------------------
33507
33508These function attributes are supported by the MCORE back end:
33509
33510'naked'
33511     This attribute allows the compiler to construct the requisite
33512     function declaration, while allowing the body of the function to be
33513     assembly code.  The specified function will not have
33514     prologue/epilogue sequences generated by the compiler.  Only basic
33515     'asm' statements can safely be included in naked functions (*note
33516     Basic Asm::).  While using extended 'asm' or a mixture of basic
33517     'asm' and C code may appear to work, they cannot be depended upon
33518     to work reliably and are not supported.
33519
33520
33521File: gcc.info,  Node: MeP Function Attributes,  Next: MicroBlaze Function Attributes,  Prev: MCORE Function Attributes,  Up: Function Attributes
33522
335236.33.17 MeP Function Attributes
33524-------------------------------
33525
33526These function attributes are supported by the MeP back end:
33527
33528'disinterrupt'
33529     On MeP targets, this attribute causes the compiler to emit
33530     instructions to disable interrupts for the duration of the given
33531     function.
33532
33533'interrupt'
33534     Use this attribute to indicate that the specified function is an
33535     interrupt handler.  The compiler generates function entry and exit
33536     sequences suitable for use in an interrupt handler when this
33537     attribute is present.
33538
33539'near'
33540     This attribute causes the compiler to assume the called function is
33541     close enough to use the normal calling convention, overriding the
33542     '-mtf' command-line option.
33543
33544'far'
33545     On MeP targets this causes the compiler to use a calling convention
33546     that assumes the called function is too far away for the built-in
33547     addressing modes.
33548
33549'vliw'
33550     The 'vliw' attribute tells the compiler to emit instructions in
33551     VLIW mode instead of core mode.  Note that this attribute is not
33552     allowed unless a VLIW coprocessor has been configured and enabled
33553     through command-line options.
33554
33555
33556File: gcc.info,  Node: MicroBlaze Function Attributes,  Next: Microsoft Windows Function Attributes,  Prev: MeP Function Attributes,  Up: Function Attributes
33557
335586.33.18 MicroBlaze Function Attributes
33559--------------------------------------
33560
33561These function attributes are supported on MicroBlaze targets:
33562
33563'save_volatiles'
33564     Use this attribute to indicate that the function is an interrupt
33565     handler.  All volatile registers (in addition to non-volatile
33566     registers) are saved in the function prologue.  If the function is
33567     a leaf function, only volatiles used by the function are saved.  A
33568     normal function return is generated instead of a return from
33569     interrupt.
33570
33571'break_handler'
33572     Use this attribute to indicate that the specified function is a
33573     break handler.  The compiler generates function entry and exit
33574     sequences suitable for use in an break handler when this attribute
33575     is present.  The return from 'break_handler' is done through the
33576     'rtbd' instead of 'rtsd'.
33577
33578          void f () __attribute__ ((break_handler));
33579
33580'interrupt_handler'
33581'fast_interrupt'
33582     These attributes indicate that the specified function is an
33583     interrupt handler.  Use the 'fast_interrupt' attribute to indicate
33584     handlers used in low-latency interrupt mode, and
33585     'interrupt_handler' for interrupts that do not use low-latency
33586     handlers.  In both cases, GCC emits appropriate prologue code and
33587     generates a return from the handler using 'rtid' instead of 'rtsd'.
33588
33589
33590File: gcc.info,  Node: Microsoft Windows Function Attributes,  Next: MIPS Function Attributes,  Prev: MicroBlaze Function Attributes,  Up: Function Attributes
33591
335926.33.19 Microsoft Windows Function Attributes
33593---------------------------------------------
33594
33595The following attributes are available on Microsoft Windows and Symbian
33596OS targets.
33597
33598'dllexport'
33599     On Microsoft Windows targets and Symbian OS targets the 'dllexport'
33600     attribute causes the compiler to provide a global pointer to a
33601     pointer in a DLL, so that it can be referenced with the 'dllimport'
33602     attribute.  On Microsoft Windows targets, the pointer name is
33603     formed by combining '_imp__' and the function or variable name.
33604
33605     You can use '__declspec(dllexport)' as a synonym for '__attribute__
33606     ((dllexport))' for compatibility with other compilers.
33607
33608     On systems that support the 'visibility' attribute, this attribute
33609     also implies "default" visibility.  It is an error to explicitly
33610     specify any other visibility.
33611
33612     GCC's default behavior is to emit all inline functions with the
33613     'dllexport' attribute.  Since this can cause object file-size
33614     bloat, you can use '-fno-keep-inline-dllexport', which tells GCC to
33615     ignore the attribute for inlined functions unless the
33616     '-fkeep-inline-functions' flag is used instead.
33617
33618     The attribute is ignored for undefined symbols.
33619
33620     When applied to C++ classes, the attribute marks defined
33621     non-inlined member functions and static data members as exports.
33622     Static consts initialized in-class are not marked unless they are
33623     also defined out-of-class.
33624
33625     For Microsoft Windows targets there are alternative methods for
33626     including the symbol in the DLL's export table such as using a
33627     '.def' file with an 'EXPORTS' section or, with GNU ld, using the
33628     '--export-all' linker flag.
33629
33630'dllimport'
33631     On Microsoft Windows and Symbian OS targets, the 'dllimport'
33632     attribute causes the compiler to reference a function or variable
33633     via a global pointer to a pointer that is set up by the DLL
33634     exporting the symbol.  The attribute implies 'extern'.  On
33635     Microsoft Windows targets, the pointer name is formed by combining
33636     '_imp__' and the function or variable name.
33637
33638     You can use '__declspec(dllimport)' as a synonym for '__attribute__
33639     ((dllimport))' for compatibility with other compilers.
33640
33641     On systems that support the 'visibility' attribute, this attribute
33642     also implies "default" visibility.  It is an error to explicitly
33643     specify any other visibility.
33644
33645     Currently, the attribute is ignored for inlined functions.  If the
33646     attribute is applied to a symbol _definition_, an error is
33647     reported.  If a symbol previously declared 'dllimport' is later
33648     defined, the attribute is ignored in subsequent references, and a
33649     warning is emitted.  The attribute is also overridden by a
33650     subsequent declaration as 'dllexport'.
33651
33652     When applied to C++ classes, the attribute marks non-inlined member
33653     functions and static data members as imports.  However, the
33654     attribute is ignored for virtual methods to allow creation of
33655     vtables using thunks.
33656
33657     On the SH Symbian OS target the 'dllimport' attribute also has
33658     another affect--it can cause the vtable and run-time type
33659     information for a class to be exported.  This happens when the
33660     class has a dllimported constructor or a non-inline, non-pure
33661     virtual function and, for either of those two conditions, the class
33662     also has an inline constructor or destructor and has a key function
33663     that is defined in the current translation unit.
33664
33665     For Microsoft Windows targets the use of the 'dllimport' attribute
33666     on functions is not necessary, but provides a small performance
33667     benefit by eliminating a thunk in the DLL.  The use of the
33668     'dllimport' attribute on imported variables can be avoided by
33669     passing the '--enable-auto-import' switch to the GNU linker.  As
33670     with functions, using the attribute for a variable eliminates a
33671     thunk in the DLL.
33672
33673     One drawback to using this attribute is that a pointer to a
33674     _variable_ marked as 'dllimport' cannot be used as a constant
33675     address.  However, a pointer to a _function_ with the 'dllimport'
33676     attribute can be used as a constant initializer; in this case, the
33677     address of a stub function in the import lib is referenced.  On
33678     Microsoft Windows targets, the attribute can be disabled for
33679     functions by setting the '-mnop-fun-dllimport' flag.
33680
33681
33682File: gcc.info,  Node: MIPS Function Attributes,  Next: MSP430 Function Attributes,  Prev: Microsoft Windows Function Attributes,  Up: Function Attributes
33683
336846.33.20 MIPS Function Attributes
33685--------------------------------
33686
33687These function attributes are supported by the MIPS back end:
33688
33689'interrupt'
33690     Use this attribute to indicate that the specified function is an
33691     interrupt handler.  The compiler generates function entry and exit
33692     sequences suitable for use in an interrupt handler when this
33693     attribute is present.  An optional argument is supported for the
33694     interrupt attribute which allows the interrupt mode to be
33695     described.  By default GCC assumes the external interrupt
33696     controller (EIC) mode is in use, this can be explicitly set using
33697     'eic'.  When interrupts are non-masked then the requested Interrupt
33698     Priority Level (IPL) is copied to the current IPL which has the
33699     effect of only enabling higher priority interrupts.  To use
33700     vectored interrupt mode use the argument
33701     'vector=[sw0|sw1|hw0|hw1|hw2|hw3|hw4|hw5]', this will change the
33702     behavior of the non-masked interrupt support and GCC will arrange
33703     to mask all interrupts from sw0 up to and including the specified
33704     interrupt vector.
33705
33706     You can use the following attributes to modify the behavior of an
33707     interrupt handler:
33708     'use_shadow_register_set'
33709          Assume that the handler uses a shadow register set, instead of
33710          the main general-purpose registers.  An optional argument
33711          'intstack' is supported to indicate that the shadow register
33712          set contains a valid stack pointer.
33713
33714     'keep_interrupts_masked'
33715          Keep interrupts masked for the whole function.  Without this
33716          attribute, GCC tries to reenable interrupts for as much of the
33717          function as it can.
33718
33719     'use_debug_exception_return'
33720          Return using the 'deret' instruction.  Interrupt handlers that
33721          don't have this attribute return using 'eret' instead.
33722
33723     You can use any combination of these attributes, as shown below:
33724          void __attribute__ ((interrupt)) v0 ();
33725          void __attribute__ ((interrupt, use_shadow_register_set)) v1 ();
33726          void __attribute__ ((interrupt, keep_interrupts_masked)) v2 ();
33727          void __attribute__ ((interrupt, use_debug_exception_return)) v3 ();
33728          void __attribute__ ((interrupt, use_shadow_register_set,
33729                               keep_interrupts_masked)) v4 ();
33730          void __attribute__ ((interrupt, use_shadow_register_set,
33731                               use_debug_exception_return)) v5 ();
33732          void __attribute__ ((interrupt, keep_interrupts_masked,
33733                               use_debug_exception_return)) v6 ();
33734          void __attribute__ ((interrupt, use_shadow_register_set,
33735                               keep_interrupts_masked,
33736                               use_debug_exception_return)) v7 ();
33737          void __attribute__ ((interrupt("eic"))) v8 ();
33738          void __attribute__ ((interrupt("vector=hw3"))) v9 ();
33739
33740'long_call'
33741'short_call'
33742'near'
33743'far'
33744     These attributes specify how a particular function is called on
33745     MIPS.  The attributes override the '-mlong-calls' (*note MIPS
33746     Options::) command-line switch.  The 'long_call' and 'far'
33747     attributes are synonyms, and cause the compiler to always call the
33748     function by first loading its address into a register, and then
33749     using the contents of that register.  The 'short_call' and 'near'
33750     attributes are synonyms, and have the opposite effect; they specify
33751     that non-PIC calls should be made using the more efficient 'jal'
33752     instruction.
33753
33754'mips16'
33755'nomips16'
33756
33757     On MIPS targets, you can use the 'mips16' and 'nomips16' function
33758     attributes to locally select or turn off MIPS16 code generation.  A
33759     function with the 'mips16' attribute is emitted as MIPS16 code,
33760     while MIPS16 code generation is disabled for functions with the
33761     'nomips16' attribute.  These attributes override the '-mips16' and
33762     '-mno-mips16' options on the command line (*note MIPS Options::).
33763
33764     When compiling files containing mixed MIPS16 and non-MIPS16 code,
33765     the preprocessor symbol '__mips16' reflects the setting on the
33766     command line, not that within individual functions.  Mixed MIPS16
33767     and non-MIPS16 code may interact badly with some GCC extensions
33768     such as '__builtin_apply' (*note Constructing Calls::).
33769
33770'micromips, MIPS'
33771'nomicromips, MIPS'
33772
33773     On MIPS targets, you can use the 'micromips' and 'nomicromips'
33774     function attributes to locally select or turn off microMIPS code
33775     generation.  A function with the 'micromips' attribute is emitted
33776     as microMIPS code, while microMIPS code generation is disabled for
33777     functions with the 'nomicromips' attribute.  These attributes
33778     override the '-mmicromips' and '-mno-micromips' options on the
33779     command line (*note MIPS Options::).
33780
33781     When compiling files containing mixed microMIPS and non-microMIPS
33782     code, the preprocessor symbol '__mips_micromips' reflects the
33783     setting on the command line, not that within individual functions.
33784     Mixed microMIPS and non-microMIPS code may interact badly with some
33785     GCC extensions such as '__builtin_apply' (*note Constructing
33786     Calls::).
33787
33788'nocompression'
33789     On MIPS targets, you can use the 'nocompression' function attribute
33790     to locally turn off MIPS16 and microMIPS code generation.  This
33791     attribute overrides the '-mips16' and '-mmicromips' options on the
33792     command line (*note MIPS Options::).
33793
33794
33795File: gcc.info,  Node: MSP430 Function Attributes,  Next: NDS32 Function Attributes,  Prev: MIPS Function Attributes,  Up: Function Attributes
33796
337976.33.21 MSP430 Function Attributes
33798----------------------------------
33799
33800These function attributes are supported by the MSP430 back end:
33801
33802'critical'
33803     Critical functions disable interrupts upon entry and restore the
33804     previous interrupt state upon exit.  Critical functions cannot also
33805     have the 'naked', 'reentrant' or 'interrupt' attributes.
33806
33807     The MSP430 hardware ensures that interrupts are disabled on entry
33808     to 'interrupt' functions, and restores the previous interrupt state
33809     on exit.  The 'critical' attribute is therefore redundant on
33810     'interrupt' functions.
33811
33812'interrupt'
33813     Use this attribute to indicate that the specified function is an
33814     interrupt handler.  The compiler generates function entry and exit
33815     sequences suitable for use in an interrupt handler when this
33816     attribute is present.
33817
33818     You can provide an argument to the interrupt attribute which
33819     specifies a name or number.  If the argument is a number it
33820     indicates the slot in the interrupt vector table (0 - 31) to which
33821     this handler should be assigned.  If the argument is a name it is
33822     treated as a symbolic name for the vector slot.  These names should
33823     match up with appropriate entries in the linker script.  By default
33824     the names 'watchdog' for vector 26, 'nmi' for vector 30 and 'reset'
33825     for vector 31 are recognized.
33826
33827'naked'
33828     This attribute allows the compiler to construct the requisite
33829     function declaration, while allowing the body of the function to be
33830     assembly code.  The specified function will not have
33831     prologue/epilogue sequences generated by the compiler.  Only basic
33832     'asm' statements can safely be included in naked functions (*note
33833     Basic Asm::).  While using extended 'asm' or a mixture of basic
33834     'asm' and C code may appear to work, they cannot be depended upon
33835     to work reliably and are not supported.
33836
33837'reentrant'
33838     Reentrant functions disable interrupts upon entry and enable them
33839     upon exit.  Reentrant functions cannot also have the 'naked' or
33840     'critical' attributes.  They can have the 'interrupt' attribute.
33841
33842'wakeup'
33843     This attribute only applies to interrupt functions.  It is silently
33844     ignored if applied to a non-interrupt function.  A wakeup interrupt
33845     function will rouse the processor from any low-power state that it
33846     might be in when the function exits.
33847
33848'lower'
33849'upper'
33850'either'
33851     On the MSP430 target these attributes can be used to specify
33852     whether the function or variable should be placed into low memory,
33853     high memory, or the placement should be left to the linker to
33854     decide.  The attributes are only significant if compiling for the
33855     MSP430X architecture in the large memory model.
33856
33857     The attributes work in conjunction with a linker script that has
33858     been augmented to specify where to place sections with a '.lower'
33859     and a '.upper' prefix.  So, for example, as well as placing the
33860     '.data' section, the script also specifies the placement of a
33861     '.lower.data' and a '.upper.data' section.  The intention is that
33862     'lower' sections are placed into a small but easier to access
33863     memory region and the upper sections are placed into a larger, but
33864     slower to access, region.
33865
33866     The 'either' attribute is special.  It tells the linker to place
33867     the object into the corresponding 'lower' section if there is room
33868     for it.  If there is insufficient room then the object is placed
33869     into the corresponding 'upper' section instead.  Note that the
33870     placement algorithm is not very sophisticated.  It does not attempt
33871     to find an optimal packing of the 'lower' sections.  It just makes
33872     one pass over the objects and does the best that it can.  Using the
33873     '-ffunction-sections' and '-fdata-sections' command-line options
33874     can help the packing, however, since they produce smaller, easier
33875     to pack regions.
33876
33877
33878File: gcc.info,  Node: NDS32 Function Attributes,  Next: Nios II Function Attributes,  Prev: MSP430 Function Attributes,  Up: Function Attributes
33879
338806.33.22 NDS32 Function Attributes
33881---------------------------------
33882
33883These function attributes are supported by the NDS32 back end:
33884
33885'exception'
33886     Use this attribute on the NDS32 target to indicate that the
33887     specified function is an exception handler.  The compiler will
33888     generate corresponding sections for use in an exception handler.
33889
33890'interrupt'
33891     On NDS32 target, this attribute indicates that the specified
33892     function is an interrupt handler.  The compiler generates
33893     corresponding sections for use in an interrupt handler.  You can
33894     use the following attributes to modify the behavior:
33895     'nested'
33896          This interrupt service routine is interruptible.
33897     'not_nested'
33898          This interrupt service routine is not interruptible.
33899     'nested_ready'
33900          This interrupt service routine is interruptible after
33901          'PSW.GIE' (global interrupt enable) is set.  This allows
33902          interrupt service routine to finish some short critical code
33903          before enabling interrupts.
33904     'save_all'
33905          The system will help save all registers into stack before
33906          entering interrupt handler.
33907     'partial_save'
33908          The system will help save caller registers into stack before
33909          entering interrupt handler.
33910
33911'naked'
33912     This attribute allows the compiler to construct the requisite
33913     function declaration, while allowing the body of the function to be
33914     assembly code.  The specified function will not have
33915     prologue/epilogue sequences generated by the compiler.  Only basic
33916     'asm' statements can safely be included in naked functions (*note
33917     Basic Asm::).  While using extended 'asm' or a mixture of basic
33918     'asm' and C code may appear to work, they cannot be depended upon
33919     to work reliably and are not supported.
33920
33921'reset'
33922     Use this attribute on the NDS32 target to indicate that the
33923     specified function is a reset handler.  The compiler will generate
33924     corresponding sections for use in a reset handler.  You can use the
33925     following attributes to provide extra exception handling:
33926     'nmi'
33927          Provide a user-defined function to handle NMI exception.
33928     'warm'
33929          Provide a user-defined function to handle warm reset
33930          exception.
33931
33932
33933File: gcc.info,  Node: Nios II Function Attributes,  Next: Nvidia PTX Function Attributes,  Prev: NDS32 Function Attributes,  Up: Function Attributes
33934
339356.33.23 Nios II Function Attributes
33936-----------------------------------
33937
33938These function attributes are supported by the Nios II back end:
33939
33940'target (OPTIONS)'
33941     As discussed in *note Common Function Attributes::, this attribute
33942     allows specification of target-specific compilation options.
33943
33944     When compiling for Nios II, the following options are allowed:
33945
33946     'custom-INSN=N'
33947     'no-custom-INSN'
33948          Each 'custom-INSN=N' attribute locally enables use of a custom
33949          instruction with encoding N when generating code that uses
33950          INSN.  Similarly, 'no-custom-INSN' locally inhibits use of the
33951          custom instruction INSN.  These target attributes correspond
33952          to the '-mcustom-INSN=N' and '-mno-custom-INSN' command-line
33953          options, and support the same set of INSN keywords.  *Note
33954          Nios II Options::, for more information.
33955
33956     'custom-fpu-cfg=NAME'
33957          This attribute corresponds to the '-mcustom-fpu-cfg=NAME'
33958          command-line option, to select a predefined set of custom
33959          instructions named NAME.  *Note Nios II Options::, for more
33960          information.
33961
33962
33963File: gcc.info,  Node: Nvidia PTX Function Attributes,  Next: PowerPC Function Attributes,  Prev: Nios II Function Attributes,  Up: Function Attributes
33964
339656.33.24 Nvidia PTX Function Attributes
33966--------------------------------------
33967
33968These function attributes are supported by the Nvidia PTX back end:
33969
33970'kernel'
33971     This attribute indicates that the corresponding function should be
33972     compiled as a kernel function, which can be invoked from the host
33973     via the CUDA RT library.  By default functions are only callable
33974     only from other PTX functions.
33975
33976     Kernel functions must have 'void' return type.
33977
33978
33979File: gcc.info,  Node: PowerPC Function Attributes,  Next: RISC-V Function Attributes,  Prev: Nvidia PTX Function Attributes,  Up: Function Attributes
33980
339816.33.25 PowerPC Function Attributes
33982-----------------------------------
33983
33984These function attributes are supported by the PowerPC back end:
33985
33986'longcall'
33987'shortcall'
33988     The 'longcall' attribute indicates that the function might be far
33989     away from the call site and require a different (more expensive)
33990     calling sequence.  The 'shortcall' attribute indicates that the
33991     function is always close enough for the shorter calling sequence to
33992     be used.  These attributes override both the '-mlongcall' switch
33993     and the '#pragma longcall' setting.
33994
33995     *Note RS/6000 and PowerPC Options::, for more information on
33996     whether long calls are necessary.
33997
33998'target (OPTIONS)'
33999     As discussed in *note Common Function Attributes::, this attribute
34000     allows specification of target-specific compilation options.
34001
34002     On the PowerPC, the following options are allowed:
34003
34004     'altivec'
34005     'no-altivec'
34006          Generate code that uses (does not use) AltiVec instructions.
34007          In 32-bit code, you cannot enable AltiVec instructions unless
34008          '-mabi=altivec' is used on the command line.
34009
34010     'cmpb'
34011     'no-cmpb'
34012          Generate code that uses (does not use) the compare bytes
34013          instruction implemented on the POWER6 processor and other
34014          processors that support the PowerPC V2.05 architecture.
34015
34016     'dlmzb'
34017     'no-dlmzb'
34018          Generate code that uses (does not use) the string-search
34019          'dlmzb' instruction on the IBM 405, 440, 464 and 476
34020          processors.  This instruction is generated by default when
34021          targeting those processors.
34022
34023     'fprnd'
34024     'no-fprnd'
34025          Generate code that uses (does not use) the FP round to integer
34026          instructions implemented on the POWER5+ processor and other
34027          processors that support the PowerPC V2.03 architecture.
34028
34029     'hard-dfp'
34030     'no-hard-dfp'
34031          Generate code that uses (does not use) the decimal
34032          floating-point instructions implemented on some POWER
34033          processors.
34034
34035     'isel'
34036     'no-isel'
34037          Generate code that uses (does not use) ISEL instruction.
34038
34039     'mfcrf'
34040     'no-mfcrf'
34041          Generate code that uses (does not use) the move from condition
34042          register field instruction implemented on the POWER4 processor
34043          and other processors that support the PowerPC V2.01
34044          architecture.
34045
34046     'mulhw'
34047     'no-mulhw'
34048          Generate code that uses (does not use) the half-word multiply
34049          and multiply-accumulate instructions on the IBM 405, 440, 464
34050          and 476 processors.  These instructions are generated by
34051          default when targeting those processors.
34052
34053     'multiple'
34054     'no-multiple'
34055          Generate code that uses (does not use) the load multiple word
34056          instructions and the store multiple word instructions.
34057
34058     'update'
34059     'no-update'
34060          Generate code that uses (does not use) the load or store
34061          instructions that update the base register to the address of
34062          the calculated memory location.
34063
34064     'popcntb'
34065     'no-popcntb'
34066          Generate code that uses (does not use) the popcount and
34067          double-precision FP reciprocal estimate instruction
34068          implemented on the POWER5 processor and other processors that
34069          support the PowerPC V2.02 architecture.
34070
34071     'popcntd'
34072     'no-popcntd'
34073          Generate code that uses (does not use) the popcount
34074          instruction implemented on the POWER7 processor and other
34075          processors that support the PowerPC V2.06 architecture.
34076
34077     'powerpc-gfxopt'
34078     'no-powerpc-gfxopt'
34079          Generate code that uses (does not use) the optional PowerPC
34080          architecture instructions in the Graphics group, including
34081          floating-point select.
34082
34083     'powerpc-gpopt'
34084     'no-powerpc-gpopt'
34085          Generate code that uses (does not use) the optional PowerPC
34086          architecture instructions in the General Purpose group,
34087          including floating-point square root.
34088
34089     'recip-precision'
34090     'no-recip-precision'
34091          Assume (do not assume) that the reciprocal estimate
34092          instructions provide higher-precision estimates than is
34093          mandated by the PowerPC ABI.
34094
34095     'string'
34096     'no-string'
34097          Generate code that uses (does not use) the load string
34098          instructions and the store string word instructions to save
34099          multiple registers and do small block moves.
34100
34101     'vsx'
34102     'no-vsx'
34103          Generate code that uses (does not use) vector/scalar (VSX)
34104          instructions, and also enable the use of built-in functions
34105          that allow more direct access to the VSX instruction set.  In
34106          32-bit code, you cannot enable VSX or AltiVec instructions
34107          unless '-mabi=altivec' is used on the command line.
34108
34109     'friz'
34110     'no-friz'
34111          Generate (do not generate) the 'friz' instruction when the
34112          '-funsafe-math-optimizations' option is used to optimize
34113          rounding a floating-point value to 64-bit integer and back to
34114          floating point.  The 'friz' instruction does not return the
34115          same value if the floating-point number is too large to fit in
34116          an integer.
34117
34118     'avoid-indexed-addresses'
34119     'no-avoid-indexed-addresses'
34120          Generate code that tries to avoid (not avoid) the use of
34121          indexed load or store instructions.
34122
34123     'paired'
34124     'no-paired'
34125          Generate code that uses (does not use) the generation of
34126          PAIRED simd instructions.
34127
34128     'longcall'
34129     'no-longcall'
34130          Generate code that assumes (does not assume) that all calls
34131          are far away so that a longer more expensive calling sequence
34132          is required.
34133
34134     'cpu=CPU'
34135          Specify the architecture to generate code for when compiling
34136          the function.  If you select the 'target("cpu=power7")'
34137          attribute when generating 32-bit code, VSX and AltiVec
34138          instructions are not generated unless you use the
34139          '-mabi=altivec' option on the command line.
34140
34141     'tune=TUNE'
34142          Specify the architecture to tune for when compiling the
34143          function.  If you do not specify the 'target("tune=TUNE")'
34144          attribute and you do specify the 'target("cpu=CPU")'
34145          attribute, compilation tunes for the CPU architecture, and not
34146          the default tuning specified on the command line.
34147
34148     On the PowerPC, the inliner does not inline a function that has
34149     different target options than the caller, unless the callee has a
34150     subset of the target options of the caller.
34151
34152
34153File: gcc.info,  Node: RISC-V Function Attributes,  Next: RL78 Function Attributes,  Prev: PowerPC Function Attributes,  Up: Function Attributes
34154
341556.33.26 RISC-V Function Attributes
34156----------------------------------
34157
34158These function attributes are supported by the RISC-V back end:
34159
34160'naked'
34161     This attribute allows the compiler to construct the requisite
34162     function declaration, while allowing the body of the function to be
34163     assembly code.  The specified function will not have
34164     prologue/epilogue sequences generated by the compiler.  Only basic
34165     'asm' statements can safely be included in naked functions (*note
34166     Basic Asm::).  While using extended 'asm' or a mixture of basic
34167     'asm' and C code may appear to work, they cannot be depended upon
34168     to work reliably and are not supported.
34169
34170'interrupt'
34171     Use this attribute to indicate that the specified function is an
34172     interrupt handler.  The compiler generates function entry and exit
34173     sequences suitable for use in an interrupt handler when this
34174     attribute is present.
34175
34176     You can specify the kind of interrupt to be handled by adding an
34177     optional parameter to the interrupt attribute like this:
34178
34179          void f (void) __attribute__ ((interrupt ("user")));
34180
34181     Permissible values for this parameter are 'user', 'supervisor', and
34182     'machine'.  If there is no parameter, then it defaults to
34183     'machine'.
34184
34185
34186File: gcc.info,  Node: RL78 Function Attributes,  Next: RX Function Attributes,  Prev: RISC-V Function Attributes,  Up: Function Attributes
34187
341886.33.27 RL78 Function Attributes
34189--------------------------------
34190
34191These function attributes are supported by the RL78 back end:
34192
34193'interrupt'
34194'brk_interrupt'
34195     These attributes indicate that the specified function is an
34196     interrupt handler.  The compiler generates function entry and exit
34197     sequences suitable for use in an interrupt handler when this
34198     attribute is present.
34199
34200     Use 'brk_interrupt' instead of 'interrupt' for handlers intended to
34201     be used with the 'BRK' opcode (i.e. those that must end with 'RETB'
34202     instead of 'RETI').
34203
34204'naked'
34205     This attribute allows the compiler to construct the requisite
34206     function declaration, while allowing the body of the function to be
34207     assembly code.  The specified function will not have
34208     prologue/epilogue sequences generated by the compiler.  Only basic
34209     'asm' statements can safely be included in naked functions (*note
34210     Basic Asm::).  While using extended 'asm' or a mixture of basic
34211     'asm' and C code may appear to work, they cannot be depended upon
34212     to work reliably and are not supported.
34213
34214
34215File: gcc.info,  Node: RX Function Attributes,  Next: S/390 Function Attributes,  Prev: RL78 Function Attributes,  Up: Function Attributes
34216
342176.33.28 RX Function Attributes
34218------------------------------
34219
34220These function attributes are supported by the RX back end:
34221
34222'fast_interrupt'
34223     Use this attribute on the RX port to indicate that the specified
34224     function is a fast interrupt handler.  This is just like the
34225     'interrupt' attribute, except that 'freit' is used to return
34226     instead of 'reit'.
34227
34228'interrupt'
34229     Use this attribute to indicate that the specified function is an
34230     interrupt handler.  The compiler generates function entry and exit
34231     sequences suitable for use in an interrupt handler when this
34232     attribute is present.
34233
34234     On RX and RL78 targets, you may specify one or more vector numbers
34235     as arguments to the attribute, as well as naming an alternate table
34236     name.  Parameters are handled sequentially, so one handler can be
34237     assigned to multiple entries in multiple tables.  One may also pass
34238     the magic string '"$default"' which causes the function to be used
34239     for any unfilled slots in the current table.
34240
34241     This example shows a simple assignment of a function to one vector
34242     in the default table (note that preprocessor macros may be used for
34243     chip-specific symbolic vector names):
34244          void __attribute__ ((interrupt (5))) txd1_handler ();
34245
34246     This example assigns a function to two slots in the default table
34247     (using preprocessor macros defined elsewhere) and makes it the
34248     default for the 'dct' table:
34249          void __attribute__ ((interrupt (RXD1_VECT,RXD2_VECT,"dct","$default")))
34250          	txd1_handler ();
34251
34252'naked'
34253     This attribute allows the compiler to construct the requisite
34254     function declaration, while allowing the body of the function to be
34255     assembly code.  The specified function will not have
34256     prologue/epilogue sequences generated by the compiler.  Only basic
34257     'asm' statements can safely be included in naked functions (*note
34258     Basic Asm::).  While using extended 'asm' or a mixture of basic
34259     'asm' and C code may appear to work, they cannot be depended upon
34260     to work reliably and are not supported.
34261
34262'vector'
34263     This RX attribute is similar to the 'interrupt' attribute,
34264     including its parameters, but does not make the function an
34265     interrupt-handler type function (i.e. it retains the normal C
34266     function calling ABI). See the 'interrupt' attribute for a
34267     description of its arguments.
34268
34269
34270File: gcc.info,  Node: S/390 Function Attributes,  Next: SH Function Attributes,  Prev: RX Function Attributes,  Up: Function Attributes
34271
342726.33.29 S/390 Function Attributes
34273---------------------------------
34274
34275These function attributes are supported on the S/390:
34276
34277'hotpatch (HALFWORDS-BEFORE-FUNCTION-LABEL,HALFWORDS-AFTER-FUNCTION-LABEL)'
34278
34279     On S/390 System z targets, you can use this function attribute to
34280     make GCC generate a "hot-patching" function prologue.  If the
34281     '-mhotpatch=' command-line option is used at the same time, the
34282     'hotpatch' attribute takes precedence.  The first of the two
34283     arguments specifies the number of halfwords to be added before the
34284     function label.  A second argument can be used to specify the
34285     number of halfwords to be added after the function label.  For both
34286     arguments the maximum allowed value is 1000000.
34287
34288     If both arguments are zero, hotpatching is disabled.
34289
34290'target (OPTIONS)'
34291     As discussed in *note Common Function Attributes::, this attribute
34292     allows specification of target-specific compilation options.
34293
34294     On S/390, the following options are supported:
34295
34296     'arch='
34297     'tune='
34298     'stack-guard='
34299     'stack-size='
34300     'branch-cost='
34301     'warn-framesize='
34302     'backchain'
34303     'no-backchain'
34304     'hard-dfp'
34305     'no-hard-dfp'
34306     'hard-float'
34307     'soft-float'
34308     'htm'
34309     'no-htm'
34310     'vx'
34311     'no-vx'
34312     'packed-stack'
34313     'no-packed-stack'
34314     'small-exec'
34315     'no-small-exec'
34316     'mvcle'
34317     'no-mvcle'
34318     'warn-dynamicstack'
34319     'no-warn-dynamicstack'
34320
34321     The options work exactly like the S/390 specific command line
34322     options (without the prefix '-m') except that they do not change
34323     any feature macros.  For example,
34324
34325          target("no-vx")
34326
34327     does not undefine the '__VEC__' macro.
34328
34329
34330File: gcc.info,  Node: SH Function Attributes,  Next: Symbian OS Function Attributes,  Prev: S/390 Function Attributes,  Up: Function Attributes
34331
343326.33.30 SH Function Attributes
34333------------------------------
34334
34335These function attributes are supported on the SH family of processors:
34336
34337'function_vector'
34338     On SH2A targets, this attribute declares a function to be called
34339     using the TBR relative addressing mode.  The argument to this
34340     attribute is the entry number of the same function in a vector
34341     table containing all the TBR relative addressable functions.  For
34342     correct operation the TBR must be setup accordingly to point to the
34343     start of the vector table before any functions with this attribute
34344     are invoked.  Usually a good place to do the initialization is the
34345     startup routine.  The TBR relative vector table can have at max 256
34346     function entries.  The jumps to these functions are generated using
34347     a SH2A specific, non delayed branch instruction JSR/N @(disp8,TBR).
34348     You must use GAS and GLD from GNU binutils version 2.7 or later for
34349     this attribute to work correctly.
34350
34351     In an application, for a function being called once, this attribute
34352     saves at least 8 bytes of code; and if other successive calls are
34353     being made to the same function, it saves 2 bytes of code per each
34354     of these calls.
34355
34356'interrupt_handler'
34357     Use this attribute to indicate that the specified function is an
34358     interrupt handler.  The compiler generates function entry and exit
34359     sequences suitable for use in an interrupt handler when this
34360     attribute is present.
34361
34362'nosave_low_regs'
34363     Use this attribute on SH targets to indicate that an
34364     'interrupt_handler' function should not save and restore registers
34365     R0..R7.  This can be used on SH3* and SH4* targets that have a
34366     second R0..R7 register bank for non-reentrant interrupt handlers.
34367
34368'renesas'
34369     On SH targets this attribute specifies that the function or struct
34370     follows the Renesas ABI.
34371
34372'resbank'
34373     On the SH2A target, this attribute enables the high-speed register
34374     saving and restoration using a register bank for
34375     'interrupt_handler' routines.  Saving to the bank is performed
34376     automatically after the CPU accepts an interrupt that uses a
34377     register bank.
34378
34379     The nineteen 32-bit registers comprising general register R0 to
34380     R14, control register GBR, and system registers MACH, MACL, and PR
34381     and the vector table address offset are saved into a register bank.
34382     Register banks are stacked in first-in last-out (FILO) sequence.
34383     Restoration from the bank is executed by issuing a RESBANK
34384     instruction.
34385
34386'sp_switch'
34387     Use this attribute on the SH to indicate an 'interrupt_handler'
34388     function should switch to an alternate stack.  It expects a string
34389     argument that names a global variable holding the address of the
34390     alternate stack.
34391
34392          void *alt_stack;
34393          void f () __attribute__ ((interrupt_handler,
34394                                    sp_switch ("alt_stack")));
34395
34396'trap_exit'
34397     Use this attribute on the SH for an 'interrupt_handler' to return
34398     using 'trapa' instead of 'rte'.  This attribute expects an integer
34399     argument specifying the trap number to be used.
34400
34401'trapa_handler'
34402     On SH targets this function attribute is similar to
34403     'interrupt_handler' but it does not save and restore all registers.
34404
34405
34406File: gcc.info,  Node: Symbian OS Function Attributes,  Next: V850 Function Attributes,  Prev: SH Function Attributes,  Up: Function Attributes
34407
344086.33.31 Symbian OS Function Attributes
34409--------------------------------------
34410
34411*Note Microsoft Windows Function Attributes::, for discussion of the
34412'dllexport' and 'dllimport' attributes.
34413
34414
34415File: gcc.info,  Node: V850 Function Attributes,  Next: Visium Function Attributes,  Prev: Symbian OS Function Attributes,  Up: Function Attributes
34416
344176.33.32 V850 Function Attributes
34418--------------------------------
34419
34420The V850 back end supports these function attributes:
34421
34422'interrupt'
34423'interrupt_handler'
34424     Use these attributes to indicate that the specified function is an
34425     interrupt handler.  The compiler generates function entry and exit
34426     sequences suitable for use in an interrupt handler when either
34427     attribute is present.
34428
34429
34430File: gcc.info,  Node: Visium Function Attributes,  Next: x86 Function Attributes,  Prev: V850 Function Attributes,  Up: Function Attributes
34431
344326.33.33 Visium Function Attributes
34433----------------------------------
34434
34435These function attributes are supported by the Visium back end:
34436
34437'interrupt'
34438     Use this attribute to indicate that the specified function is an
34439     interrupt handler.  The compiler generates function entry and exit
34440     sequences suitable for use in an interrupt handler when this
34441     attribute is present.
34442
34443
34444File: gcc.info,  Node: x86 Function Attributes,  Next: Xstormy16 Function Attributes,  Prev: Visium Function Attributes,  Up: Function Attributes
34445
344466.33.34 x86 Function Attributes
34447-------------------------------
34448
34449These function attributes are supported by the x86 back end:
34450
34451'cdecl'
34452     On the x86-32 targets, the 'cdecl' attribute causes the compiler to
34453     assume that the calling function pops off the stack space used to
34454     pass arguments.  This is useful to override the effects of the
34455     '-mrtd' switch.
34456
34457'fastcall'
34458     On x86-32 targets, the 'fastcall' attribute causes the compiler to
34459     pass the first argument (if of integral type) in the register ECX
34460     and the second argument (if of integral type) in the register EDX.
34461     Subsequent and other typed arguments are passed on the stack.  The
34462     called function pops the arguments off the stack.  If the number of
34463     arguments is variable all arguments are pushed on the stack.
34464
34465'thiscall'
34466     On x86-32 targets, the 'thiscall' attribute causes the compiler to
34467     pass the first argument (if of integral type) in the register ECX.
34468     Subsequent and other typed arguments are passed on the stack.  The
34469     called function pops the arguments off the stack.  If the number of
34470     arguments is variable all arguments are pushed on the stack.  The
34471     'thiscall' attribute is intended for C++ non-static member
34472     functions.  As a GCC extension, this calling convention can be used
34473     for C functions and for static member methods.
34474
34475'ms_abi'
34476'sysv_abi'
34477
34478     On 32-bit and 64-bit x86 targets, you can use an ABI attribute to
34479     indicate which calling convention should be used for a function.
34480     The 'ms_abi' attribute tells the compiler to use the Microsoft ABI,
34481     while the 'sysv_abi' attribute tells the compiler to use the ABI
34482     used on GNU/Linux and other systems.  The default is to use the
34483     Microsoft ABI when targeting Windows.  On all other systems, the
34484     default is the x86/AMD ABI.
34485
34486     Note, the 'ms_abi' attribute for Microsoft Windows 64-bit targets
34487     currently requires the '-maccumulate-outgoing-args' option.
34488
34489'callee_pop_aggregate_return (NUMBER)'
34490
34491     On x86-32 targets, you can use this attribute to control how
34492     aggregates are returned in memory.  If the caller is responsible
34493     for popping the hidden pointer together with the rest of the
34494     arguments, specify NUMBER equal to zero.  If callee is responsible
34495     for popping the hidden pointer, specify NUMBER equal to one.
34496
34497     The default x86-32 ABI assumes that the callee pops the stack for
34498     hidden pointer.  However, on x86-32 Microsoft Windows targets, the
34499     compiler assumes that the caller pops the stack for hidden pointer.
34500
34501'ms_hook_prologue'
34502
34503     On 32-bit and 64-bit x86 targets, you can use this function
34504     attribute to make GCC generate the "hot-patching" function prologue
34505     used in Win32 API functions in Microsoft Windows XP Service Pack 2
34506     and newer.
34507
34508'naked'
34509     This attribute allows the compiler to construct the requisite
34510     function declaration, while allowing the body of the function to be
34511     assembly code.  The specified function will not have
34512     prologue/epilogue sequences generated by the compiler.  Only basic
34513     'asm' statements can safely be included in naked functions (*note
34514     Basic Asm::).  While using extended 'asm' or a mixture of basic
34515     'asm' and C code may appear to work, they cannot be depended upon
34516     to work reliably and are not supported.
34517
34518'regparm (NUMBER)'
34519     On x86-32 targets, the 'regparm' attribute causes the compiler to
34520     pass arguments number one to NUMBER if they are of integral type in
34521     registers EAX, EDX, and ECX instead of on the stack.  Functions
34522     that take a variable number of arguments continue to be passed all
34523     of their arguments on the stack.
34524
34525     Beware that on some ELF systems this attribute is unsuitable for
34526     global functions in shared libraries with lazy binding (which is
34527     the default).  Lazy binding sends the first call via resolving code
34528     in the loader, which might assume EAX, EDX and ECX can be
34529     clobbered, as per the standard calling conventions.  Solaris 8 is
34530     affected by this.  Systems with the GNU C Library version 2.1 or
34531     higher and FreeBSD are believed to be safe since the loaders there
34532     save EAX, EDX and ECX. (Lazy binding can be disabled with the
34533     linker or the loader if desired, to avoid the problem.)
34534
34535'sseregparm'
34536     On x86-32 targets with SSE support, the 'sseregparm' attribute
34537     causes the compiler to pass up to 3 floating-point arguments in SSE
34538     registers instead of on the stack.  Functions that take a variable
34539     number of arguments continue to pass all of their floating-point
34540     arguments on the stack.
34541
34542'force_align_arg_pointer'
34543     On x86 targets, the 'force_align_arg_pointer' attribute may be
34544     applied to individual function definitions, generating an alternate
34545     prologue and epilogue that realigns the run-time stack if
34546     necessary.  This supports mixing legacy codes that run with a
34547     4-byte aligned stack with modern codes that keep a 16-byte stack
34548     for SSE compatibility.
34549
34550'stdcall'
34551     On x86-32 targets, the 'stdcall' attribute causes the compiler to
34552     assume that the called function pops off the stack space used to
34553     pass arguments, unless it takes a variable number of arguments.
34554
34555'no_caller_saved_registers'
34556     Use this attribute to indicate that the specified function has no
34557     caller-saved registers.  That is, all registers are callee-saved.
34558     For example, this attribute can be used for a function called from
34559     an interrupt handler.  The compiler generates proper function entry
34560     and exit sequences to save and restore any modified registers,
34561     except for the EFLAGS register.  Since GCC doesn't preserve SSE,
34562     MMX nor x87 states, the GCC option '-mgeneral-regs-only' should be
34563     used to compile functions with 'no_caller_saved_registers'
34564     attribute.
34565
34566'interrupt'
34567     Use this attribute to indicate that the specified function is an
34568     interrupt handler or an exception handler (depending on parameters
34569     passed to the function, explained further).  The compiler generates
34570     function entry and exit sequences suitable for use in an interrupt
34571     handler when this attribute is present.  The 'IRET' instruction,
34572     instead of the 'RET' instruction, is used to return from interrupt
34573     handlers.  All registers, except for the EFLAGS register which is
34574     restored by the 'IRET' instruction, are preserved by the compiler.
34575     Since GCC doesn't preserve SSE, MMX nor x87 states, the GCC option
34576     '-mgeneral-regs-only' should be used to compile interrupt and
34577     exception handlers.
34578
34579     Any interruptible-without-stack-switch code must be compiled with
34580     '-mno-red-zone' since interrupt handlers can and will, because of
34581     the hardware design, touch the red zone.
34582
34583     An interrupt handler must be declared with a mandatory pointer
34584     argument:
34585
34586          struct interrupt_frame;
34587
34588          __attribute__ ((interrupt))
34589          void
34590          f (struct interrupt_frame *frame)
34591          {
34592          }
34593
34594     and you must define 'struct interrupt_frame' as described in the
34595     processor's manual.
34596
34597     Exception handlers differ from interrupt handlers because the
34598     system pushes an error code on the stack.  An exception handler
34599     declaration is similar to that for an interrupt handler, but with a
34600     different mandatory function signature.  The compiler arranges to
34601     pop the error code off the stack before the 'IRET' instruction.
34602
34603          #ifdef __x86_64__
34604          typedef unsigned long long int uword_t;
34605          #else
34606          typedef unsigned int uword_t;
34607          #endif
34608
34609          struct interrupt_frame;
34610
34611          __attribute__ ((interrupt))
34612          void
34613          f (struct interrupt_frame *frame, uword_t error_code)
34614          {
34615            ...
34616          }
34617
34618     Exception handlers should only be used for exceptions that push an
34619     error code; you should use an interrupt handler in other cases.
34620     The system will crash if the wrong kind of handler is used.
34621
34622'target (OPTIONS)'
34623     As discussed in *note Common Function Attributes::, this attribute
34624     allows specification of target-specific compilation options.
34625
34626     On the x86, the following options are allowed:
34627     '3dnow'
34628     'no-3dnow'
34629          Enable/disable the generation of the 3DNow! instructions.
34630
34631     '3dnowa'
34632     'no-3dnowa'
34633          Enable/disable the generation of the enhanced 3DNow!
34634          instructions.
34635
34636     'abm'
34637     'no-abm'
34638          Enable/disable the generation of the advanced bit
34639          instructions.
34640
34641     'adx'
34642     'no-adx'
34643          Enable/disable the generation of the ADX instructions.
34644
34645     'aes'
34646     'no-aes'
34647          Enable/disable the generation of the AES instructions.
34648
34649     'avx'
34650     'no-avx'
34651          Enable/disable the generation of the AVX instructions.
34652
34653     'avx2'
34654     'no-avx2'
34655          Enable/disable the generation of the AVX2 instructions.
34656
34657     'avx5124fmaps'
34658     'no-avx5124fmaps'
34659          Enable/disable the generation of the AVX5124FMAPS
34660          instructions.
34661
34662     'avx5124vnniw'
34663     'no-avx5124vnniw'
34664          Enable/disable the generation of the AVX5124VNNIW
34665          instructions.
34666
34667     'avx512bitalg'
34668     'no-avx512bitalg'
34669          Enable/disable the generation of the AVX512BITALG
34670          instructions.
34671
34672     'avx512bw'
34673     'no-avx512bw'
34674          Enable/disable the generation of the AVX512BW instructions.
34675
34676     'avx512cd'
34677     'no-avx512cd'
34678          Enable/disable the generation of the AVX512CD instructions.
34679
34680     'avx512dq'
34681     'no-avx512dq'
34682          Enable/disable the generation of the AVX512DQ instructions.
34683
34684     'avx512er'
34685     'no-avx512er'
34686          Enable/disable the generation of the AVX512ER instructions.
34687
34688     'avx512f'
34689     'no-avx512f'
34690          Enable/disable the generation of the AVX512F instructions.
34691
34692     'avx512ifma'
34693     'no-avx512ifma'
34694          Enable/disable the generation of the AVX512IFMA instructions.
34695
34696     'avx512pf'
34697     'no-avx512pf'
34698          Enable/disable the generation of the AVX512PF instructions.
34699
34700     'avx512vbmi'
34701     'no-avx512vbmi'
34702          Enable/disable the generation of the AVX512VBMI instructions.
34703
34704     'avx512vbmi2'
34705     'no-avx512vbmi2'
34706          Enable/disable the generation of the AVX512VBMI2 instructions.
34707
34708     'avx512vl'
34709     'no-avx512vl'
34710          Enable/disable the generation of the AVX512VL instructions.
34711
34712     'avx512vnni'
34713     'no-avx512vnni'
34714          Enable/disable the generation of the AVX512VNNI instructions.
34715
34716     'avx512vpopcntdq'
34717     'no-avx512vpopcntdq'
34718          Enable/disable the generation of the AVX512VPOPCNTDQ
34719          instructions.
34720
34721     'bmi'
34722     'no-bmi'
34723          Enable/disable the generation of the BMI instructions.
34724
34725     'bmi2'
34726     'no-bmi2'
34727          Enable/disable the generation of the BMI2 instructions.
34728
34729     'cldemote'
34730     'no-cldemote'
34731          Enable/disable the generation of the CLDEMOTE instructions.
34732
34733     'clflushopt'
34734     'no-clflushopt'
34735          Enable/disable the generation of the CLFLUSHOPT instructions.
34736
34737     'clwb'
34738     'no-clwb'
34739          Enable/disable the generation of the CLWB instructions.
34740
34741     'clzero'
34742     'no-clzero'
34743          Enable/disable the generation of the CLZERO instructions.
34744
34745     'crc32'
34746     'no-crc32'
34747          Enable/disable the generation of the CRC32 instructions.
34748
34749     'cx16'
34750     'no-cx16'
34751          Enable/disable the generation of the CMPXCHG16B instructions.
34752
34753     'default'
34754          *Note Function Multiversioning::, where it is used to specify
34755          the default function version.
34756
34757     'f16c'
34758     'no-f16c'
34759          Enable/disable the generation of the F16C instructions.
34760
34761     'fma'
34762     'no-fma'
34763          Enable/disable the generation of the FMA instructions.
34764
34765     'fma4'
34766     'no-fma4'
34767          Enable/disable the generation of the FMA4 instructions.
34768
34769     'fsgsbase'
34770     'no-fsgsbase'
34771          Enable/disable the generation of the FSGSBASE instructions.
34772
34773     'fxsr'
34774     'no-fxsr'
34775          Enable/disable the generation of the FXSR instructions.
34776
34777     'gfni'
34778     'no-gfni'
34779          Enable/disable the generation of the GFNI instructions.
34780
34781     'hle'
34782     'no-hle'
34783          Enable/disable the generation of the HLE instruction prefixes.
34784
34785     'lwp'
34786     'no-lwp'
34787          Enable/disable the generation of the LWP instructions.
34788
34789     'lzcnt'
34790     'no-lzcnt'
34791          Enable/disable the generation of the LZCNT instructions.
34792
34793     'mmx'
34794     'no-mmx'
34795          Enable/disable the generation of the MMX instructions.
34796
34797     'movbe'
34798     'no-movbe'
34799          Enable/disable the generation of the MOVBE instructions.
34800
34801     'movdir64b'
34802     'no-movdir64b'
34803          Enable/disable the generation of the MOVDIR64B instructions.
34804
34805     'movdiri'
34806     'no-movdiri'
34807          Enable/disable the generation of the MOVDIRI instructions.
34808
34809     'mwaitx'
34810     'no-mwaitx'
34811          Enable/disable the generation of the MWAITX instructions.
34812
34813     'pclmul'
34814     'no-pclmul'
34815          Enable/disable the generation of the PCLMUL instructions.
34816
34817     'pconfig'
34818     'no-pconfig'
34819          Enable/disable the generation of the PCONFIG instructions.
34820
34821     'pku'
34822     'no-pku'
34823          Enable/disable the generation of the PKU instructions.
34824
34825     'popcnt'
34826     'no-popcnt'
34827          Enable/disable the generation of the POPCNT instruction.
34828
34829     'prefetchwt1'
34830     'no-prefetchwt1'
34831          Enable/disable the generation of the PREFETCHWT1 instructions.
34832
34833     'prfchw'
34834     'no-prfchw'
34835          Enable/disable the generation of the PREFETCHW instruction.
34836
34837     'ptwrite'
34838     'no-ptwrite'
34839          Enable/disable the generation of the PTWRITE instructions.
34840
34841     'rdpid'
34842     'no-rdpid'
34843          Enable/disable the generation of the RDPID instructions.
34844
34845     'rdrnd'
34846     'no-rdrnd'
34847          Enable/disable the generation of the RDRND instructions.
34848
34849     'rdseed'
34850     'no-rdseed'
34851          Enable/disable the generation of the RDSEED instructions.
34852
34853     'rtm'
34854     'no-rtm'
34855          Enable/disable the generation of the RTM instructions.
34856
34857     'sahf'
34858     'no-sahf'
34859          Enable/disable the generation of the SAHF instructions.
34860
34861     'sgx'
34862     'no-sgx'
34863          Enable/disable the generation of the SGX instructions.
34864
34865     'sha'
34866     'no-sha'
34867          Enable/disable the generation of the SHA instructions.
34868
34869     'shstk'
34870     'no-shstk'
34871          Enable/disable the shadow stack built-in functions from CET.
34872
34873     'sse'
34874     'no-sse'
34875          Enable/disable the generation of the SSE instructions.
34876
34877     'sse2'
34878     'no-sse2'
34879          Enable/disable the generation of the SSE2 instructions.
34880
34881     'sse3'
34882     'no-sse3'
34883          Enable/disable the generation of the SSE3 instructions.
34884
34885     'sse4'
34886     'no-sse4'
34887          Enable/disable the generation of the SSE4 instructions (both
34888          SSE4.1 and SSE4.2).
34889
34890     'sse4.1'
34891     'no-sse4.1'
34892          Enable/disable the generation of the sse4.1 instructions.
34893
34894     'sse4.2'
34895     'no-sse4.2'
34896          Enable/disable the generation of the sse4.2 instructions.
34897
34898     'sse4a'
34899     'no-sse4a'
34900          Enable/disable the generation of the SSE4A instructions.
34901
34902     'ssse3'
34903     'no-ssse3'
34904          Enable/disable the generation of the SSSE3 instructions.
34905
34906     'tbm'
34907     'no-tbm'
34908          Enable/disable the generation of the TBM instructions.
34909
34910     'vaes'
34911     'no-vaes'
34912          Enable/disable the generation of the VAES instructions.
34913
34914     'vpclmulqdq'
34915     'no-vpclmulqdq'
34916          Enable/disable the generation of the VPCLMULQDQ instructions.
34917
34918     'waitpkg'
34919     'no-waitpkg'
34920          Enable/disable the generation of the WAITPKG instructions.
34921
34922     'wbnoinvd'
34923     'no-wbnoinvd'
34924          Enable/disable the generation of the WBNOINVD instructions.
34925
34926     'xop'
34927     'no-xop'
34928          Enable/disable the generation of the XOP instructions.
34929
34930     'xsave'
34931     'no-xsave'
34932          Enable/disable the generation of the XSAVE instructions.
34933
34934     'xsavec'
34935     'no-xsavec'
34936          Enable/disable the generation of the XSAVEC instructions.
34937
34938     'xsaveopt'
34939     'no-xsaveopt'
34940          Enable/disable the generation of the XSAVEOPT instructions.
34941
34942     'xsaves'
34943     'no-xsaves'
34944          Enable/disable the generation of the XSAVES instructions.
34945
34946     'cld'
34947     'no-cld'
34948          Enable/disable the generation of the CLD before string moves.
34949
34950     'fancy-math-387'
34951     'no-fancy-math-387'
34952          Enable/disable the generation of the 'sin', 'cos', and 'sqrt'
34953          instructions on the 387 floating-point unit.
34954
34955     'ieee-fp'
34956     'no-ieee-fp'
34957          Enable/disable the generation of floating point that depends
34958          on IEEE arithmetic.
34959
34960     'inline-all-stringops'
34961     'no-inline-all-stringops'
34962          Enable/disable inlining of string operations.
34963
34964     'inline-stringops-dynamically'
34965     'no-inline-stringops-dynamically'
34966          Enable/disable the generation of the inline code to do small
34967          string operations and calling the library routines for large
34968          operations.
34969
34970     'align-stringops'
34971     'no-align-stringops'
34972          Do/do not align destination of inlined string operations.
34973
34974     'recip'
34975     'no-recip'
34976          Enable/disable the generation of RCPSS, RCPPS, RSQRTSS and
34977          RSQRTPS instructions followed an additional Newton-Raphson
34978          step instead of doing a floating-point division.
34979
34980     'arch=ARCH'
34981          Specify the architecture to generate code for in compiling the
34982          function.
34983
34984     'tune=TUNE'
34985          Specify the architecture to tune for in compiling the
34986          function.
34987
34988     'fpmath=FPMATH'
34989          Specify which floating-point unit to use.  You must specify
34990          the 'target("fpmath=sse,387")' option as
34991          'target("fpmath=sse+387")' because the comma would separate
34992          different options.
34993
34994     'indirect_branch("CHOICE")'
34995          On x86 targets, the 'indirect_branch' attribute causes the
34996          compiler to convert indirect call and jump with CHOICE.
34997          'keep' keeps indirect call and jump unmodified.  'thunk'
34998          converts indirect call and jump to call and return thunk.
34999          'thunk-inline' converts indirect call and jump to inlined call
35000          and return thunk.  'thunk-extern' converts indirect call and
35001          jump to external call and return thunk provided in a separate
35002          object file.
35003
35004     'function_return("CHOICE")'
35005          On x86 targets, the 'function_return' attribute causes the
35006          compiler to convert function return with CHOICE.  'keep' keeps
35007          function return unmodified.  'thunk' converts function return
35008          to call and return thunk.  'thunk-inline' converts function
35009          return to inlined call and return thunk.  'thunk-extern'
35010          converts function return to external call and return thunk
35011          provided in a separate object file.
35012
35013     'nocf_check'
35014          The 'nocf_check' attribute on a function is used to inform the
35015          compiler that the function's prologue should not be
35016          instrumented when compiled with the '-fcf-protection=branch'
35017          option.  The compiler assumes that the function's address is a
35018          valid target for a control-flow transfer.
35019
35020          The 'nocf_check' attribute on a type of pointer to function is
35021          used to inform the compiler that a call through the pointer
35022          should not be instrumented when compiled with the
35023          '-fcf-protection=branch' option.  The compiler assumes that
35024          the function's address from the pointer is a valid target for
35025          a control-flow transfer.  A direct function call through a
35026          function name is assumed to be a safe call thus direct calls
35027          are not instrumented by the compiler.
35028
35029          The 'nocf_check' attribute is applied to an object's type.  In
35030          case of assignment of a function address or a function pointer
35031          to another pointer, the attribute is not carried over from the
35032          right-hand object's type; the type of left-hand object stays
35033          unchanged.  The compiler checks for 'nocf_check' attribute
35034          mismatch and reports a warning in case of mismatch.
35035
35036               {
35037               int foo (void) __attribute__(nocf_check);
35038               void (*foo1)(void) __attribute__(nocf_check);
35039               void (*foo2)(void);
35040
35041               /* foo's address is assumed to be valid.  */
35042               int
35043               foo (void)
35044
35045                 /* This call site is not checked for control-flow
35046                    validity.  */
35047                 (*foo1)();
35048
35049                 /* A warning is issued about attribute mismatch.  */
35050                 foo1 = foo2;
35051
35052                 /* This call site is still not checked.  */
35053                 (*foo1)();
35054
35055                 /* This call site is checked.  */
35056                 (*foo2)();
35057
35058                 /* A warning is issued about attribute mismatch.  */
35059                 foo2 = foo1;
35060
35061                 /* This call site is still checked.  */
35062                 (*foo2)();
35063
35064                 return 0;
35065               }
35066
35067     'cf_check'
35068
35069          The 'cf_check' attribute on a function is used to inform the
35070          compiler that ENDBR instruction should be placed at the
35071          function entry when '-fcf-protection=branch' is enabled.
35072
35073     'indirect_return'
35074
35075          The 'indirect_return' attribute can be applied to a function,
35076          as well as variable or type of function pointer to inform the
35077          compiler that the function may return via indirect branch.
35078
35079     'fentry_name("NAME")'
35080          On x86 targets, the 'fentry_name' attribute sets the function
35081          to call on function entry when function instrumentation is
35082          enabled with '-pg -mfentry'.  When NAME is nop then a 5 byte
35083          nop sequence is generated.
35084
35085     'fentry_section("NAME")'
35086          On x86 targets, the 'fentry_section' attribute sets the name
35087          of the section to record function entry instrumentation calls
35088          in when enabled with '-pg -mrecord-mcount'
35089
35090     On the x86, the inliner does not inline a function that has
35091     different target options than the caller, unless the callee has a
35092     subset of the target options of the caller.  For example a function
35093     declared with 'target("sse3")' can inline a function with
35094     'target("sse2")', since '-msse3' implies '-msse2'.
35095
35096
35097File: gcc.info,  Node: Xstormy16 Function Attributes,  Prev: x86 Function Attributes,  Up: Function Attributes
35098
350996.33.35 Xstormy16 Function Attributes
35100-------------------------------------
35101
35102These function attributes are supported by the Xstormy16 back end:
35103
35104'interrupt'
35105     Use this attribute to indicate that the specified function is an
35106     interrupt handler.  The compiler generates function entry and exit
35107     sequences suitable for use in an interrupt handler when this
35108     attribute is present.
35109
35110
35111File: gcc.info,  Node: Variable Attributes,  Next: Type Attributes,  Prev: Function Attributes,  Up: C Extensions
35112
351136.34 Specifying Attributes of Variables
35114=======================================
35115
35116The keyword '__attribute__' allows you to specify special properties of
35117variables, function parameters, or structure, union, and, in C++, class
35118members.  This '__attribute__' keyword is followed by an attribute
35119specification enclosed in double parentheses.  Some attributes are
35120currently defined generically for variables.  Other attributes are
35121defined for variables on particular target systems.  Other attributes
35122are available for functions (*note Function Attributes::), labels (*note
35123Label Attributes::), enumerators (*note Enumerator Attributes::),
35124statements (*note Statement Attributes::), and for types (*note Type
35125Attributes::).  Other front ends might define more attributes (*note
35126Extensions to the C++ Language: C++ Extensions.).
35127
35128 *Note Attribute Syntax::, for details of the exact syntax for using
35129attributes.
35130
35131* Menu:
35132
35133* Common Variable Attributes::
35134* ARC Variable Attributes::
35135* AVR Variable Attributes::
35136* Blackfin Variable Attributes::
35137* H8/300 Variable Attributes::
35138* IA-64 Variable Attributes::
35139* M32R/D Variable Attributes::
35140* MeP Variable Attributes::
35141* Microsoft Windows Variable Attributes::
35142* MSP430 Variable Attributes::
35143* Nvidia PTX Variable Attributes::
35144* PowerPC Variable Attributes::
35145* RL78 Variable Attributes::
35146* V850 Variable Attributes::
35147* x86 Variable Attributes::
35148* Xstormy16 Variable Attributes::
35149
35150
35151File: gcc.info,  Node: Common Variable Attributes,  Next: ARC Variable Attributes,  Up: Variable Attributes
35152
351536.34.1 Common Variable Attributes
35154---------------------------------
35155
35156The following attributes are supported on most targets.
35157
35158'alias ("TARGET")'
35159     The 'alias' variable attribute causes the declaration to be emitted
35160     as an alias for another symbol known as an "alias target".  Except
35161     for top-level qualifiers the alias target must have the same type
35162     as the alias.  For instance, the following
35163
35164          int var_target;
35165          extern int __attribute__ ((alias ("var_target"))) var_alias;
35166
35167     defines 'var_alias' to be an alias for the 'var_target' variable.
35168
35169     It is an error if the alias target is not defined in the same
35170     translation unit as the alias.
35171
35172     Note that in the absence of the attribute GCC assumes that distinct
35173     declarations with external linkage denote distinct objects.  Using
35174     both the alias and the alias target to access the same object is
35175     undefined in a translation unit without a declaration of the alias
35176     with the attribute.
35177
35178     This attribute requires assembler and object file support, and may
35179     not be available on all targets.
35180
35181'aligned'
35182'aligned (ALIGNMENT)'
35183     The 'aligned' attribute specifies a minimum alignment for the
35184     variable or structure field, measured in bytes.  When specified,
35185     ALIGNMENT must be an integer constant power of 2.  Specifying no
35186     ALIGNMENT argument implies the maximum alignment for the target,
35187     which is often, but by no means always, 8 or 16 bytes.
35188
35189     For example, the declaration:
35190
35191          int x __attribute__ ((aligned (16))) = 0;
35192
35193     causes the compiler to allocate the global variable 'x' on a
35194     16-byte boundary.  On a 68040, this could be used in conjunction
35195     with an 'asm' expression to access the 'move16' instruction which
35196     requires 16-byte aligned operands.
35197
35198     You can also specify the alignment of structure fields.  For
35199     example, to create a double-word aligned 'int' pair, you could
35200     write:
35201
35202          struct foo { int x[2] __attribute__ ((aligned (8))); };
35203
35204     This is an alternative to creating a union with a 'double' member,
35205     which forces the union to be double-word aligned.
35206
35207     As in the preceding examples, you can explicitly specify the
35208     alignment (in bytes) that you wish the compiler to use for a given
35209     variable or structure field.  Alternatively, you can leave out the
35210     alignment factor and just ask the compiler to align a variable or
35211     field to the default alignment for the target architecture you are
35212     compiling for.  The default alignment is sufficient for all scalar
35213     types, but may not be enough for all vector types on a target that
35214     supports vector operations.  The default alignment is fixed for a
35215     particular target ABI.
35216
35217     GCC also provides a target specific macro '__BIGGEST_ALIGNMENT__',
35218     which is the largest alignment ever used for any data type on the
35219     target machine you are compiling for.  For example, you could
35220     write:
35221
35222          short array[3] __attribute__ ((aligned (__BIGGEST_ALIGNMENT__)));
35223
35224     The compiler automatically sets the alignment for the declared
35225     variable or field to '__BIGGEST_ALIGNMENT__'.  Doing this can often
35226     make copy operations more efficient, because the compiler can use
35227     whatever instructions copy the biggest chunks of memory when
35228     performing copies to or from the variables or fields that you have
35229     aligned this way.  Note that the value of '__BIGGEST_ALIGNMENT__'
35230     may change depending on command-line options.
35231
35232     When used on a struct, or struct member, the 'aligned' attribute
35233     can only increase the alignment; in order to decrease it, the
35234     'packed' attribute must be specified as well.  When used as part of
35235     a typedef, the 'aligned' attribute can both increase and decrease
35236     alignment, and specifying the 'packed' attribute generates a
35237     warning.
35238
35239     Note that the effectiveness of 'aligned' attributes for static
35240     variables may be limited by inherent limitations in the system
35241     linker and/or object file format.  On some systems, the linker is
35242     only able to arrange for variables to be aligned up to a certain
35243     maximum alignment.  (For some linkers, the maximum supported
35244     alignment may be very very small.)  If your linker is only able to
35245     align variables up to a maximum of 8-byte alignment, then
35246     specifying 'aligned(16)' in an '__attribute__' still only provides
35247     you with 8-byte alignment.  See your linker documentation for
35248     further information.
35249
35250     Stack variables are not affected by linker restrictions; GCC can
35251     properly align them on any target.
35252
35253     The 'aligned' attribute can also be used for functions (*note
35254     Common Function Attributes::.)
35255
35256'warn_if_not_aligned (ALIGNMENT)'
35257     This attribute specifies a threshold for the structure field,
35258     measured in bytes.  If the structure field is aligned below the
35259     threshold, a warning will be issued.  For example, the declaration:
35260
35261          struct foo
35262          {
35263            int i1;
35264            int i2;
35265            unsigned long long x __attribute__ ((warn_if_not_aligned (16)));
35266          };
35267
35268     causes the compiler to issue an warning on 'struct foo', like
35269     'warning: alignment 8 of 'struct foo' is less than 16'.  The
35270     compiler also issues a warning, like 'warning: 'x' offset 8 in
35271     'struct foo' isn't aligned to 16', when the structure field has the
35272     misaligned offset:
35273
35274          struct __attribute__ ((aligned (16))) foo
35275          {
35276            int i1;
35277            int i2;
35278            unsigned long long x __attribute__ ((warn_if_not_aligned (16)));
35279          };
35280
35281     This warning can be disabled by '-Wno-if-not-aligned'.  The
35282     'warn_if_not_aligned' attribute can also be used for types (*note
35283     Common Type Attributes::.)
35284
35285'alloc_size (POSITION)'
35286'alloc_size (POSITION-1, POSITION-2)'
35287     The 'alloc_size' variable attribute may be applied to the
35288     declaration of a pointer to a function that returns a pointer and
35289     takes at least one argument of an integer type.  It indicates that
35290     the returned pointer points to an object whose size is given by the
35291     function argument at POSITION-1, or by the product of the arguments
35292     at POSITION-1 and POSITION-2.  Meaningful sizes are positive values
35293     less than 'PTRDIFF_MAX'.  Other sizes are disagnosed when detected.
35294     GCC uses this information to improve the results of
35295     '__builtin_object_size'.
35296
35297     For instance, the following declarations
35298
35299          typedef __attribute__ ((alloc_size (1, 2))) void*
35300            (*calloc_ptr) (size_t, size_t);
35301          typedef __attribute__ ((alloc_size (1))) void*
35302            (*malloc_ptr) (size_t);
35303
35304     specify that 'calloc_ptr' is a pointer of a function that, like the
35305     standard C function 'calloc', returns an object whose size is given
35306     by the product of arguments 1 and 2, and similarly, that
35307     'malloc_ptr', like the standard C function 'malloc', returns an
35308     object whose size is given by argument 1 to the function.
35309
35310'cleanup (CLEANUP_FUNCTION)'
35311     The 'cleanup' attribute runs a function when the variable goes out
35312     of scope.  This attribute can only be applied to auto function
35313     scope variables; it may not be applied to parameters or variables
35314     with static storage duration.  The function must take one
35315     parameter, a pointer to a type compatible with the variable.  The
35316     return value of the function (if any) is ignored.
35317
35318     If '-fexceptions' is enabled, then CLEANUP_FUNCTION is run during
35319     the stack unwinding that happens during the processing of the
35320     exception.  Note that the 'cleanup' attribute does not allow the
35321     exception to be caught, only to perform an action.  It is undefined
35322     what happens if CLEANUP_FUNCTION does not return normally.
35323
35324'common'
35325'nocommon'
35326     The 'common' attribute requests GCC to place a variable in "common"
35327     storage.  The 'nocommon' attribute requests the opposite--to
35328     allocate space for it directly.
35329
35330     These attributes override the default chosen by the '-fno-common'
35331     and '-fcommon' flags respectively.
35332
35333'copy'
35334'copy (VARIABLE)'
35335     The 'copy' attribute applies the set of attributes with which
35336     VARIABLE has been declared to the declaration of the variable to
35337     which the attribute is applied.  The attribute is designed for
35338     libraries that define aliases that are expected to specify the same
35339     set of attributes as the aliased symbols.  The 'copy' attribute can
35340     be used with variables, functions or types.  However, the kind of
35341     symbol to which the attribute is applied (either varible or
35342     function) must match the kind of symbol to which the argument
35343     refers.  The 'copy' attribute copies only syntactic and semantic
35344     attributes but not attributes that affect a symbol's linkage or
35345     visibility such as 'alias', 'visibility', or 'weak'.  The
35346     'deprecated' attribute is also not copied.  *Note Common Function
35347     Attributes::.  *Note Common Type Attributes::.
35348
35349'deprecated'
35350'deprecated (MSG)'
35351     The 'deprecated' attribute results in a warning if the variable is
35352     used anywhere in the source file.  This is useful when identifying
35353     variables that are expected to be removed in a future version of a
35354     program.  The warning also includes the location of the declaration
35355     of the deprecated variable, to enable users to easily find further
35356     information about why the variable is deprecated, or what they
35357     should do instead.  Note that the warning only occurs for uses:
35358
35359          extern int old_var __attribute__ ((deprecated));
35360          extern int old_var;
35361          int new_fn () { return old_var; }
35362
35363     results in a warning on line 3 but not line 2.  The optional MSG
35364     argument, which must be a string, is printed in the warning if
35365     present.
35366
35367     The 'deprecated' attribute can also be used for functions and types
35368     (*note Common Function Attributes::, *note Common Type
35369     Attributes::).
35370
35371     The message attached to the attribute is affected by the setting of
35372     the '-fmessage-length' option.
35373
35374'mode (MODE)'
35375     This attribute specifies the data type for the
35376     declaration--whichever type corresponds to the mode MODE.  This in
35377     effect lets you request an integer or floating-point type according
35378     to its width.
35379
35380     *Note (gccint)Machine Modes::, for a list of the possible keywords
35381     for MODE.  You may also specify a mode of 'byte' or '__byte__' to
35382     indicate the mode corresponding to a one-byte integer, 'word' or
35383     '__word__' for the mode of a one-word integer, and 'pointer' or
35384     '__pointer__' for the mode used to represent pointers.
35385
35386'nonstring'
35387     The 'nonstring' variable attribute specifies that an object or
35388     member declaration with type array of 'char', 'signed char', or
35389     'unsigned char', or pointer to such a type is intended to store
35390     character arrays that do not necessarily contain a terminating
35391     'NUL'.  This is useful in detecting uses of such arrays or pointers
35392     with functions that expect 'NUL'-terminated strings, and to avoid
35393     warnings when such an array or pointer is used as an argument to a
35394     bounded string manipulation function such as 'strncpy'.  For
35395     example, without the attribute, GCC will issue a warning for the
35396     'strncpy' call below because it may truncate the copy without
35397     appending the terminating 'NUL' character.  Using the attribute
35398     makes it possible to suppress the warning.  However, when the array
35399     is declared with the attribute the call to 'strlen' is diagnosed
35400     because when the array doesn't contain a 'NUL'-terminated string
35401     the call is undefined.  To copy, compare, of search non-string
35402     character arrays use the 'memcpy', 'memcmp', 'memchr', and other
35403     functions that operate on arrays of bytes.  In addition, calling
35404     'strnlen' and 'strndup' with such arrays is safe provided a
35405     suitable bound is specified, and not diagnosed.
35406
35407          struct Data
35408          {
35409            char name [32] __attribute__ ((nonstring));
35410          };
35411
35412          int f (struct Data *pd, const char *s)
35413          {
35414            strncpy (pd->name, s, sizeof pd->name);
35415            ...
35416            return strlen (pd->name);   // unsafe, gets a warning
35417          }
35418
35419'packed'
35420     The 'packed' attribute specifies that a structure member should
35421     have the smallest possible alignment--one bit for a bit-field and
35422     one byte otherwise, unless a larger value is specified with the
35423     'aligned' attribute.  The attribute does not apply to non-member
35424     objects.
35425
35426     For example in the structure below, the member array 'x' is packed
35427     so that it immediately follows 'a' with no intervening padding:
35428
35429          struct foo
35430          {
35431            char a;
35432            int x[2] __attribute__ ((packed));
35433          };
35434
35435     _Note:_ The 4.1, 4.2 and 4.3 series of GCC ignore the 'packed'
35436     attribute on bit-fields of type 'char'.  This has been fixed in GCC
35437     4.4 but the change can lead to differences in the structure layout.
35438     See the documentation of '-Wpacked-bitfield-compat' for more
35439     information.
35440
35441'section ("SECTION-NAME")'
35442     Normally, the compiler places the objects it generates in sections
35443     like 'data' and 'bss'.  Sometimes, however, you need additional
35444     sections, or you need certain particular variables to appear in
35445     special sections, for example to map to special hardware.  The
35446     'section' attribute specifies that a variable (or function) lives
35447     in a particular section.  For example, this small program uses
35448     several specific section names:
35449
35450          struct duart a __attribute__ ((section ("DUART_A"))) = { 0 };
35451          struct duart b __attribute__ ((section ("DUART_B"))) = { 0 };
35452          char stack[10000] __attribute__ ((section ("STACK"))) = { 0 };
35453          int init_data __attribute__ ((section ("INITDATA")));
35454
35455          main()
35456          {
35457            /* Initialize stack pointer */
35458            init_sp (stack + sizeof (stack));
35459
35460            /* Initialize initialized data */
35461            memcpy (&init_data, &data, &edata - &data);
35462
35463            /* Turn on the serial ports */
35464            init_duart (&a);
35465            init_duart (&b);
35466          }
35467
35468     Use the 'section' attribute with _global_ variables and not _local_
35469     variables, as shown in the example.
35470
35471     You may use the 'section' attribute with initialized or
35472     uninitialized global variables but the linker requires each object
35473     be defined once, with the exception that uninitialized variables
35474     tentatively go in the 'common' (or 'bss') section and can be
35475     multiply "defined".  Using the 'section' attribute changes what
35476     section the variable goes into and may cause the linker to issue an
35477     error if an uninitialized variable has multiple definitions.  You
35478     can force a variable to be initialized with the '-fno-common' flag
35479     or the 'nocommon' attribute.
35480
35481     Some file formats do not support arbitrary sections so the
35482     'section' attribute is not available on all platforms.  If you need
35483     to map the entire contents of a module to a particular section,
35484     consider using the facilities of the linker instead.
35485
35486'tls_model ("TLS_MODEL")'
35487     The 'tls_model' attribute sets thread-local storage model (*note
35488     Thread-Local::) of a particular '__thread' variable, overriding
35489     '-ftls-model=' command-line switch on a per-variable basis.  The
35490     TLS_MODEL argument should be one of 'global-dynamic',
35491     'local-dynamic', 'initial-exec' or 'local-exec'.
35492
35493     Not all targets support this attribute.
35494
35495'unused'
35496     This attribute, attached to a variable, means that the variable is
35497     meant to be possibly unused.  GCC does not produce a warning for
35498     this variable.
35499
35500'used'
35501     This attribute, attached to a variable with static storage, means
35502     that the variable must be emitted even if it appears that the
35503     variable is not referenced.
35504
35505     When applied to a static data member of a C++ class template, the
35506     attribute also means that the member is instantiated if the class
35507     itself is instantiated.
35508
35509'vector_size (BYTES)'
35510     This attribute specifies the vector size for the type of the
35511     declared variable, measured in bytes.  The type to which it applies
35512     is known as the "base type".  The BYTES argument must be a positive
35513     power-of-two multiple of the base type size.  For example, the
35514     declaration:
35515
35516          int foo __attribute__ ((vector_size (16)));
35517
35518     causes the compiler to set the mode for 'foo', to be 16 bytes,
35519     divided into 'int' sized units.  Assuming a 32-bit 'int', 'foo''s
35520     type is a vector of four units of four bytes each, and the
35521     corresponding mode of 'foo' is 'V4SI'.  *Note Vector Extensions::,
35522     for details of manipulating vector variables.
35523
35524     This attribute is only applicable to integral and floating scalars,
35525     although arrays, pointers, and function return values are allowed
35526     in conjunction with this construct.
35527
35528     Aggregates with this attribute are invalid, even if they are of the
35529     same size as a corresponding scalar.  For example, the declaration:
35530
35531          struct S { int a; };
35532          struct S  __attribute__ ((vector_size (16))) foo;
35533
35534     is invalid even if the size of the structure is the same as the
35535     size of the 'int'.
35536
35537'visibility ("VISIBILITY_TYPE")'
35538     This attribute affects the linkage of the declaration to which it
35539     is attached.  The 'visibility' attribute is described in *note
35540     Common Function Attributes::.
35541
35542'weak'
35543     The 'weak' attribute is described in *note Common Function
35544     Attributes::.
35545
35546'noinit'
35547     Any data with the 'noinit' attribute will not be initialized by the
35548     C runtime startup code, or the program loader.  Not initializing
35549     data in this way can reduce program startup times.  This attribute
35550     is specific to ELF targets and relies on the linker to place such
35551     data in the right location
35552
35553
35554File: gcc.info,  Node: ARC Variable Attributes,  Next: AVR Variable Attributes,  Prev: Common Variable Attributes,  Up: Variable Attributes
35555
355566.34.2 ARC Variable Attributes
35557------------------------------
35558
35559'aux'
35560     The 'aux' attribute is used to directly access the ARC's auxiliary
35561     register space from C. The auxilirary register number is given via
35562     attribute argument.
35563
35564
35565File: gcc.info,  Node: AVR Variable Attributes,  Next: Blackfin Variable Attributes,  Prev: ARC Variable Attributes,  Up: Variable Attributes
35566
355676.34.3 AVR Variable Attributes
35568------------------------------
35569
35570'progmem'
35571     The 'progmem' attribute is used on the AVR to place read-only data
35572     in the non-volatile program memory (flash).  The 'progmem'
35573     attribute accomplishes this by putting respective variables into a
35574     section whose name starts with '.progmem'.
35575
35576     This attribute works similar to the 'section' attribute but adds
35577     additional checking.
35578
35579     *  Ordinary AVR cores with 32 general purpose registers:
35580          'progmem' affects the location of the data but not how this
35581          data is accessed.  In order to read data located with the
35582          'progmem' attribute (inline) assembler must be used.
35583               /* Use custom macros from AVR-LibC (http://nongnu.org/avr-libc/user-manual/) */
35584               #include <avr/pgmspace.h>
35585
35586               /* Locate var in flash memory */
35587               const int var[2] PROGMEM = { 1, 2 };
35588
35589               int read_var (int i)
35590               {
35591                   /* Access var[] by accessor macro from avr/pgmspace.h */
35592                   return (int) pgm_read_word (& var[i]);
35593               }
35594
35595          AVR is a Harvard architecture processor and data and read-only
35596          data normally resides in the data memory (RAM).
35597
35598          See also the *note AVR Named Address Spaces:: section for an
35599          alternate way to locate and access data in flash memory.
35600
35601     *  AVR cores with flash memory visible in the RAM address range:
35602          On such devices, there is no need for attribute 'progmem' or
35603          *note '__flash': AVR Named Address Spaces. qualifier at all.
35604          Just use standard C / C++.  The compiler will generate 'LD*'
35605          instructions.  As flash memory is visible in the RAM address
35606          range, and the default linker script does _not_ locate
35607          '.rodata' in RAM, no special features are needed in order not
35608          to waste RAM for read-only data or to read from flash.  You
35609          might even get slightly better performance by avoiding
35610          'progmem' and '__flash'.  This applies to devices from
35611          families 'avrtiny' and 'avrxmega3', see *note AVR Options::
35612          for an overview.
35613
35614     * Reduced AVR Tiny cores like ATtiny40:
35615          The compiler adds '0x4000' to the addresses of objects and
35616          declarations in 'progmem' and locates the objects in flash
35617          memory, namely in section '.progmem.data'.  The offset is
35618          needed because the flash memory is visible in the RAM address
35619          space starting at address '0x4000'.
35620
35621          Data in 'progmem' can be accessed by means of ordinary C code,
35622          no special functions or macros are needed.
35623
35624               /* var is located in flash memory */
35625               extern const int var[2] __attribute__((progmem));
35626
35627               int read_var (int i)
35628               {
35629                   return var[i];
35630               }
35631
35632          Please notice that on these devices, there is no need for
35633          'progmem' at all.
35634
35635'io'
35636'io (ADDR)'
35637     Variables with the 'io' attribute are used to address memory-mapped
35638     peripherals in the io address range.  If an address is specified,
35639     the variable is assigned that address, and the value is interpreted
35640     as an address in the data address space.  Example:
35641
35642          volatile int porta __attribute__((io (0x22)));
35643
35644     The address specified in the address in the data address range.
35645
35646     Otherwise, the variable it is not assigned an address, but the
35647     compiler will still use in/out instructions where applicable,
35648     assuming some other module assigns an address in the io address
35649     range.  Example:
35650
35651          extern volatile int porta __attribute__((io));
35652
35653'io_low'
35654'io_low (ADDR)'
35655     This is like the 'io' attribute, but additionally it informs the
35656     compiler that the object lies in the lower half of the I/O area,
35657     allowing the use of 'cbi', 'sbi', 'sbic' and 'sbis' instructions.
35658
35659'address'
35660'address (ADDR)'
35661     Variables with the 'address' attribute are used to address
35662     memory-mapped peripherals that may lie outside the io address
35663     range.
35664
35665          volatile int porta __attribute__((address (0x600)));
35666
35667'absdata'
35668     Variables in static storage and with the 'absdata' attribute can be
35669     accessed by the 'LDS' and 'STS' instructions which take absolute
35670     addresses.
35671
35672        * This attribute is only supported for the reduced AVR Tiny core
35673          like ATtiny40.
35674
35675        * You must make sure that respective data is located in the
35676          address range '0x40'...'0xbf' accessible by 'LDS' and 'STS'.
35677          One way to achieve this as an appropriate linker description
35678          file.
35679
35680        * If the location does not fit the address range of 'LDS' and
35681          'STS', there is currently (Binutils 2.26) just an unspecific
35682          warning like
35683               'module.c:(.text+0x1c): warning: internal error: out of
35684               range error'
35685
35686     See also the '-mabsdata' *note command-line option: AVR Options.
35687
35688
35689File: gcc.info,  Node: Blackfin Variable Attributes,  Next: H8/300 Variable Attributes,  Prev: AVR Variable Attributes,  Up: Variable Attributes
35690
356916.34.4 Blackfin Variable Attributes
35692-----------------------------------
35693
35694Three attributes are currently defined for the Blackfin.
35695
35696'l1_data'
35697'l1_data_A'
35698'l1_data_B'
35699     Use these attributes on the Blackfin to place the variable into L1
35700     Data SRAM. Variables with 'l1_data' attribute are put into the
35701     specific section named '.l1.data'.  Those with 'l1_data_A'
35702     attribute are put into the specific section named '.l1.data.A'.
35703     Those with 'l1_data_B' attribute are put into the specific section
35704     named '.l1.data.B'.
35705
35706'l2'
35707     Use this attribute on the Blackfin to place the variable into L2
35708     SRAM. Variables with 'l2' attribute are put into the specific
35709     section named '.l2.data'.
35710
35711
35712File: gcc.info,  Node: H8/300 Variable Attributes,  Next: IA-64 Variable Attributes,  Prev: Blackfin Variable Attributes,  Up: Variable Attributes
35713
357146.34.5 H8/300 Variable Attributes
35715---------------------------------
35716
35717These variable attributes are available for H8/300 targets:
35718
35719'eightbit_data'
35720     Use this attribute on the H8/300, H8/300H, and H8S to indicate that
35721     the specified variable should be placed into the eight-bit data
35722     section.  The compiler generates more efficient code for certain
35723     operations on data in the eight-bit data area.  Note the eight-bit
35724     data area is limited to 256 bytes of data.
35725
35726     You must use GAS and GLD from GNU binutils version 2.7 or later for
35727     this attribute to work correctly.
35728
35729'tiny_data'
35730     Use this attribute on the H8/300H and H8S to indicate that the
35731     specified variable should be placed into the tiny data section.
35732     The compiler generates more efficient code for loads and stores on
35733     data in the tiny data section.  Note the tiny data area is limited
35734     to slightly under 32KB of data.
35735
35736
35737File: gcc.info,  Node: IA-64 Variable Attributes,  Next: M32R/D Variable Attributes,  Prev: H8/300 Variable Attributes,  Up: Variable Attributes
35738
357396.34.6 IA-64 Variable Attributes
35740--------------------------------
35741
35742The IA-64 back end supports the following variable attribute:
35743
35744'model (MODEL-NAME)'
35745
35746     On IA-64, use this attribute to set the addressability of an
35747     object.  At present, the only supported identifier for MODEL-NAME
35748     is 'small', indicating addressability via "small" (22-bit)
35749     addresses (so that their addresses can be loaded with the 'addl'
35750     instruction).  Caveat: such addressing is by definition not
35751     position independent and hence this attribute must not be used for
35752     objects defined by shared libraries.
35753
35754
35755File: gcc.info,  Node: M32R/D Variable Attributes,  Next: MeP Variable Attributes,  Prev: IA-64 Variable Attributes,  Up: Variable Attributes
35756
357576.34.7 M32R/D Variable Attributes
35758---------------------------------
35759
35760One attribute is currently defined for the M32R/D.
35761
35762'model (MODEL-NAME)'
35763     Use this attribute on the M32R/D to set the addressability of an
35764     object.  The identifier MODEL-NAME is one of 'small', 'medium', or
35765     'large', representing each of the code models.
35766
35767     Small model objects live in the lower 16MB of memory (so that their
35768     addresses can be loaded with the 'ld24' instruction).
35769
35770     Medium and large model objects may live anywhere in the 32-bit
35771     address space (the compiler generates 'seth/add3' instructions to
35772     load their addresses).
35773
35774
35775File: gcc.info,  Node: MeP Variable Attributes,  Next: Microsoft Windows Variable Attributes,  Prev: M32R/D Variable Attributes,  Up: Variable Attributes
35776
357776.34.8 MeP Variable Attributes
35778------------------------------
35779
35780The MeP target has a number of addressing modes and busses.  The 'near'
35781space spans the standard memory space's first 16 megabytes (24 bits).
35782The 'far' space spans the entire 32-bit memory space.  The 'based' space
35783is a 128-byte region in the memory space that is addressed relative to
35784the '$tp' register.  The 'tiny' space is a 65536-byte region relative to
35785the '$gp' register.  In addition to these memory regions, the MeP target
35786has a separate 16-bit control bus which is specified with 'cb'
35787attributes.
35788
35789'based'
35790     Any variable with the 'based' attribute is assigned to the '.based'
35791     section, and is accessed with relative to the '$tp' register.
35792
35793'tiny'
35794     Likewise, the 'tiny' attribute assigned variables to the '.tiny'
35795     section, relative to the '$gp' register.
35796
35797'near'
35798     Variables with the 'near' attribute are assumed to have addresses
35799     that fit in a 24-bit addressing mode.  This is the default for
35800     large variables ('-mtiny=4' is the default) but this attribute can
35801     override '-mtiny=' for small variables, or override '-ml'.
35802
35803'far'
35804     Variables with the 'far' attribute are addressed using a full
35805     32-bit address.  Since this covers the entire memory space, this
35806     allows modules to make no assumptions about where variables might
35807     be stored.
35808
35809'io'
35810'io (ADDR)'
35811     Variables with the 'io' attribute are used to address memory-mapped
35812     peripherals.  If an address is specified, the variable is assigned
35813     that address, else it is not assigned an address (it is assumed
35814     some other module assigns an address).  Example:
35815
35816          int timer_count __attribute__((io(0x123)));
35817
35818'cb'
35819'cb (ADDR)'
35820     Variables with the 'cb' attribute are used to access the control
35821     bus, using special instructions.  'addr' indicates the control bus
35822     address.  Example:
35823
35824          int cpu_clock __attribute__((cb(0x123)));
35825
35826
35827File: gcc.info,  Node: Microsoft Windows Variable Attributes,  Next: MSP430 Variable Attributes,  Prev: MeP Variable Attributes,  Up: Variable Attributes
35828
358296.34.9 Microsoft Windows Variable Attributes
35830--------------------------------------------
35831
35832You can use these attributes on Microsoft Windows targets.  *note x86
35833Variable Attributes:: for additional Windows compatibility attributes
35834available on all x86 targets.
35835
35836'dllimport'
35837'dllexport'
35838     The 'dllimport' and 'dllexport' attributes are described in *note
35839     Microsoft Windows Function Attributes::.
35840
35841'selectany'
35842     The 'selectany' attribute causes an initialized global variable to
35843     have link-once semantics.  When multiple definitions of the
35844     variable are encountered by the linker, the first is selected and
35845     the remainder are discarded.  Following usage by the Microsoft
35846     compiler, the linker is told _not_ to warn about size or content
35847     differences of the multiple definitions.
35848
35849     Although the primary usage of this attribute is for POD types, the
35850     attribute can also be applied to global C++ objects that are
35851     initialized by a constructor.  In this case, the static
35852     initialization and destruction code for the object is emitted in
35853     each translation defining the object, but the calls to the
35854     constructor and destructor are protected by a link-once guard
35855     variable.
35856
35857     The 'selectany' attribute is only available on Microsoft Windows
35858     targets.  You can use '__declspec (selectany)' as a synonym for
35859     '__attribute__ ((selectany))' for compatibility with other
35860     compilers.
35861
35862'shared'
35863     On Microsoft Windows, in addition to putting variable definitions
35864     in a named section, the section can also be shared among all
35865     running copies of an executable or DLL.  For example, this small
35866     program defines shared data by putting it in a named section
35867     'shared' and marking the section shareable:
35868
35869          int foo __attribute__((section ("shared"), shared)) = 0;
35870
35871          int
35872          main()
35873          {
35874            /* Read and write foo.  All running
35875               copies see the same value.  */
35876            return 0;
35877          }
35878
35879     You may only use the 'shared' attribute along with 'section'
35880     attribute with a fully-initialized global definition because of the
35881     way linkers work.  See 'section' attribute for more information.
35882
35883     The 'shared' attribute is only available on Microsoft Windows.
35884
35885
35886File: gcc.info,  Node: MSP430 Variable Attributes,  Next: Nvidia PTX Variable Attributes,  Prev: Microsoft Windows Variable Attributes,  Up: Variable Attributes
35887
358886.34.10 MSP430 Variable Attributes
35889----------------------------------
35890
35891'noinit'
35892     Any data with the 'noinit' attribute will not be initialised by the
35893     C runtime startup code, or the program loader.  Not initialising
35894     data in this way can reduce program startup times.
35895
35896'persistent'
35897     Any variable with the 'persistent' attribute will not be
35898     initialised by the C runtime startup code.  Instead its value will
35899     be set once, when the application is loaded, and then never
35900     initialised again, even if the processor is reset or the program
35901     restarts.  Persistent data is intended to be placed into FLASH RAM,
35902     where its value will be retained across resets.  The linker script
35903     being used to create the application should ensure that persistent
35904     data is correctly placed.
35905
35906'upper'
35907'either'
35908     These attributes are the same as the MSP430 function attributes of
35909     the same name (*note MSP430 Function Attributes::).
35910
35911'lower'
35912     This option behaves mostly the same as the MSP430 function
35913     attribute of the same name (*note MSP430 Function Attributes::),
35914     but it has some additional functionality.
35915
35916     If '-mdata-region='{'upper,either,none'} has been passed, or the
35917     'section' attribute is applied to a variable, the compiler will
35918     generate 430X instructions to handle it.  This is because the
35919     compiler has to assume that the variable could get placed in the
35920     upper memory region (above address 0xFFFF). Marking the variable
35921     with the 'lower' attribute informs the compiler that the variable
35922     will be placed in lower memory so it is safe to use 430
35923     instructions to handle it.
35924
35925     In the case of the 'section' attribute, the section name given will
35926     be used, and the '.lower' prefix will not be added.
35927
35928
35929File: gcc.info,  Node: Nvidia PTX Variable Attributes,  Next: PowerPC Variable Attributes,  Prev: MSP430 Variable Attributes,  Up: Variable Attributes
35930
359316.34.11 Nvidia PTX Variable Attributes
35932--------------------------------------
35933
35934These variable attributes are supported by the Nvidia PTX back end:
35935
35936'shared'
35937     Use this attribute to place a variable in the '.shared' memory
35938     space.  This memory space is private to each cooperative thread
35939     array; only threads within one thread block refer to the same
35940     instance of the variable.  The runtime does not initialize
35941     variables in this memory space.
35942
35943
35944File: gcc.info,  Node: PowerPC Variable Attributes,  Next: RL78 Variable Attributes,  Prev: Nvidia PTX Variable Attributes,  Up: Variable Attributes
35945
359466.34.12 PowerPC Variable Attributes
35947-----------------------------------
35948
35949Three attributes currently are defined for PowerPC configurations:
35950'altivec', 'ms_struct' and 'gcc_struct'.
35951
35952 For full documentation of the struct attributes please see the
35953documentation in *note x86 Variable Attributes::.
35954
35955 For documentation of 'altivec' attribute please see the documentation
35956in *note PowerPC Type Attributes::.
35957
35958
35959File: gcc.info,  Node: RL78 Variable Attributes,  Next: V850 Variable Attributes,  Prev: PowerPC Variable Attributes,  Up: Variable Attributes
35960
359616.34.13 RL78 Variable Attributes
35962--------------------------------
35963
35964The RL78 back end supports the 'saddr' variable attribute.  This
35965specifies placement of the corresponding variable in the SADDR area,
35966which can be accessed more efficiently than the default memory region.
35967
35968
35969File: gcc.info,  Node: V850 Variable Attributes,  Next: x86 Variable Attributes,  Prev: RL78 Variable Attributes,  Up: Variable Attributes
35970
359716.34.14 V850 Variable Attributes
35972--------------------------------
35973
35974These variable attributes are supported by the V850 back end:
35975
35976'sda'
35977     Use this attribute to explicitly place a variable in the small data
35978     area, which can hold up to 64 kilobytes.
35979
35980'tda'
35981     Use this attribute to explicitly place a variable in the tiny data
35982     area, which can hold up to 256 bytes in total.
35983
35984'zda'
35985     Use this attribute to explicitly place a variable in the first 32
35986     kilobytes of memory.
35987
35988
35989File: gcc.info,  Node: x86 Variable Attributes,  Next: Xstormy16 Variable Attributes,  Prev: V850 Variable Attributes,  Up: Variable Attributes
35990
359916.34.15 x86 Variable Attributes
35992-------------------------------
35993
35994Two attributes are currently defined for x86 configurations: 'ms_struct'
35995and 'gcc_struct'.
35996
35997'ms_struct'
35998'gcc_struct'
35999
36000     If 'packed' is used on a structure, or if bit-fields are used, it
36001     may be that the Microsoft ABI lays out the structure differently
36002     than the way GCC normally does.  Particularly when moving packed
36003     data between functions compiled with GCC and the native Microsoft
36004     compiler (either via function call or as data in a file), it may be
36005     necessary to access either format.
36006
36007     The 'ms_struct' and 'gcc_struct' attributes correspond to the
36008     '-mms-bitfields' and '-mno-ms-bitfields' command-line options,
36009     respectively; see *note x86 Options::, for details of how structure
36010     layout is affected.  *Note x86 Type Attributes::, for information
36011     about the corresponding attributes on types.
36012
36013
36014File: gcc.info,  Node: Xstormy16 Variable Attributes,  Prev: x86 Variable Attributes,  Up: Variable Attributes
36015
360166.34.16 Xstormy16 Variable Attributes
36017-------------------------------------
36018
36019One attribute is currently defined for xstormy16 configurations:
36020'below100'.
36021
36022'below100'
36023
36024     If a variable has the 'below100' attribute ('BELOW100' is allowed
36025     also), GCC places the variable in the first 0x100 bytes of memory
36026     and use special opcodes to access it.  Such variables are placed in
36027     either the '.bss_below100' section or the '.data_below100' section.
36028
36029
36030File: gcc.info,  Node: Type Attributes,  Next: Label Attributes,  Prev: Variable Attributes,  Up: C Extensions
36031
360326.35 Specifying Attributes of Types
36033===================================
36034
36035The keyword '__attribute__' allows you to specify various special
36036properties of types.  Some type attributes apply only to structure and
36037union types, and in C++, also class types, while others can apply to any
36038type defined via a 'typedef' declaration.  Unless otherwise specified,
36039the same restrictions and effects apply to attributes regardless of
36040whether a type is a trivial structure or a C++ class with user-defined
36041constructors, destructors, or a copy assignment.
36042
36043 Other attributes are defined for functions (*note Function
36044Attributes::), labels (*note Label Attributes::), enumerators (*note
36045Enumerator Attributes::), statements (*note Statement Attributes::), and
36046for variables (*note Variable Attributes::).
36047
36048 The '__attribute__' keyword is followed by an attribute specification
36049enclosed in double parentheses.
36050
36051 You may specify type attributes in an enum, struct or union type
36052declaration or definition by placing them immediately after the
36053'struct', 'union' or 'enum' keyword.  You can also place them just past
36054the closing curly brace of the definition, but this is less preferred
36055because logically the type should be fully defined at the closing brace.
36056
36057 You can also include type attributes in a 'typedef' declaration.  *Note
36058Attribute Syntax::, for details of the exact syntax for using
36059attributes.
36060
36061* Menu:
36062
36063* Common Type Attributes::
36064* ARC Type Attributes::
36065* ARM Type Attributes::
36066* MeP Type Attributes::
36067* PowerPC Type Attributes::
36068* x86 Type Attributes::
36069
36070
36071File: gcc.info,  Node: Common Type Attributes,  Next: ARC Type Attributes,  Up: Type Attributes
36072
360736.35.1 Common Type Attributes
36074-----------------------------
36075
36076The following type attributes are supported on most targets.
36077
36078'aligned'
36079'aligned (ALIGNMENT)'
36080     The 'aligned' attribute specifies a minimum alignment (in bytes)
36081     for variables of the specified type.  When specified, ALIGNMENT
36082     must be a power of 2.  Specifying no ALIGNMENT argument implies the
36083     maximum alignment for the target, which is often, but by no means
36084     always, 8 or 16 bytes.  For example, the declarations:
36085
36086          struct __attribute__ ((aligned (8))) S { short f[3]; };
36087          typedef int more_aligned_int __attribute__ ((aligned (8)));
36088
36089     force the compiler to ensure (as far as it can) that each variable
36090     whose type is 'struct S' or 'more_aligned_int' is allocated and
36091     aligned _at least_ on a 8-byte boundary.  On a SPARC, having all
36092     variables of type 'struct S' aligned to 8-byte boundaries allows
36093     the compiler to use the 'ldd' and 'std' (doubleword load and store)
36094     instructions when copying one variable of type 'struct S' to
36095     another, thus improving run-time efficiency.
36096
36097     Note that the alignment of any given 'struct' or 'union' type is
36098     required by the ISO C standard to be at least a perfect multiple of
36099     the lowest common multiple of the alignments of all of the members
36100     of the 'struct' or 'union' in question.  This means that you _can_
36101     effectively adjust the alignment of a 'struct' or 'union' type by
36102     attaching an 'aligned' attribute to any one of the members of such
36103     a type, but the notation illustrated in the example above is a more
36104     obvious, intuitive, and readable way to request the compiler to
36105     adjust the alignment of an entire 'struct' or 'union' type.
36106
36107     As in the preceding example, you can explicitly specify the
36108     alignment (in bytes) that you wish the compiler to use for a given
36109     'struct' or 'union' type.  Alternatively, you can leave out the
36110     alignment factor and just ask the compiler to align a type to the
36111     maximum useful alignment for the target machine you are compiling
36112     for.  For example, you could write:
36113
36114          struct __attribute__ ((aligned)) S { short f[3]; };
36115
36116     Whenever you leave out the alignment factor in an 'aligned'
36117     attribute specification, the compiler automatically sets the
36118     alignment for the type to the largest alignment that is ever used
36119     for any data type on the target machine you are compiling for.
36120     Doing this can often make copy operations more efficient, because
36121     the compiler can use whatever instructions copy the biggest chunks
36122     of memory when performing copies to or from the variables that have
36123     types that you have aligned this way.
36124
36125     In the example above, if the size of each 'short' is 2 bytes, then
36126     the size of the entire 'struct S' type is 6 bytes.  The smallest
36127     power of two that is greater than or equal to that is 8, so the
36128     compiler sets the alignment for the entire 'struct S' type to 8
36129     bytes.
36130
36131     Note that although you can ask the compiler to select a
36132     time-efficient alignment for a given type and then declare only
36133     individual stand-alone objects of that type, the compiler's ability
36134     to select a time-efficient alignment is primarily useful only when
36135     you plan to create arrays of variables having the relevant
36136     (efficiently aligned) type.  If you declare or use arrays of
36137     variables of an efficiently-aligned type, then it is likely that
36138     your program also does pointer arithmetic (or subscripting, which
36139     amounts to the same thing) on pointers to the relevant type, and
36140     the code that the compiler generates for these pointer arithmetic
36141     operations is often more efficient for efficiently-aligned types
36142     than for other types.
36143
36144     Note that the effectiveness of 'aligned' attributes may be limited
36145     by inherent limitations in your linker.  On many systems, the
36146     linker is only able to arrange for variables to be aligned up to a
36147     certain maximum alignment.  (For some linkers, the maximum
36148     supported alignment may be very very small.)  If your linker is
36149     only able to align variables up to a maximum of 8-byte alignment,
36150     then specifying 'aligned (16)' in an '__attribute__' still only
36151     provides you with 8-byte alignment.  See your linker documentation
36152     for further information.
36153
36154     When used on a struct, or struct member, the 'aligned' attribute
36155     can only increase the alignment; in order to decrease it, the
36156     'packed' attribute must be specified as well.  When used as part of
36157     a typedef, the 'aligned' attribute can both increase and decrease
36158     alignment, and specifying the 'packed' attribute generates a
36159     warning.
36160
36161'warn_if_not_aligned (ALIGNMENT)'
36162     This attribute specifies a threshold for the structure field,
36163     measured in bytes.  If the structure field is aligned below the
36164     threshold, a warning will be issued.  For example, the declaration:
36165
36166          typedef unsigned long long __u64
36167             __attribute__((aligned (4), warn_if_not_aligned (8)));
36168
36169          struct foo
36170          {
36171            int i1;
36172            int i2;
36173            __u64 x;
36174          };
36175
36176     causes the compiler to issue an warning on 'struct foo', like
36177     'warning: alignment 4 of 'struct foo' is less than 8'.  It is used
36178     to define 'struct foo' in such a way that 'struct foo' has the same
36179     layout and the structure field 'x' has the same alignment when
36180     '__u64' is aligned at either 4 or 8 bytes.  Align 'struct foo' to 8
36181     bytes:
36182
36183          struct __attribute__ ((aligned (8))) foo
36184          {
36185            int i1;
36186            int i2;
36187            __u64 x;
36188          };
36189
36190     silences the warning.  The compiler also issues a warning, like
36191     'warning: 'x' offset 12 in 'struct foo' isn't aligned to 8', when
36192     the structure field has the misaligned offset:
36193
36194          struct __attribute__ ((aligned (8))) foo
36195          {
36196            int i1;
36197            int i2;
36198            int i3;
36199            __u64 x;
36200          };
36201
36202     This warning can be disabled by '-Wno-if-not-aligned'.
36203
36204'alloc_size (POSITION)'
36205'alloc_size (POSITION-1, POSITION-2)'
36206     The 'alloc_size' type attribute may be applied to the definition of
36207     a type of a function that returns a pointer and takes at least one
36208     argument of an integer type.  It indicates that the returned
36209     pointer points to an object whose size is given by the function
36210     argument at POSITION-1, or by the product of the arguments at
36211     POSITION-1 and POSITION-2.  Meaningful sizes are positive values
36212     less than 'PTRDIFF_MAX'.  Other sizes are disagnosed when detected.
36213     GCC uses this information to improve the results of
36214     '__builtin_object_size'.
36215
36216     For instance, the following declarations
36217
36218          typedef __attribute__ ((alloc_size (1, 2))) void*
36219            calloc_type (size_t, size_t);
36220          typedef __attribute__ ((alloc_size (1))) void*
36221            malloc_type (size_t);
36222
36223     specify that 'calloc_type' is a type of a function that, like the
36224     standard C function 'calloc', returns an object whose size is given
36225     by the product of arguments 1 and 2, and that 'malloc_type', like
36226     the standard C function 'malloc', returns an object whose size is
36227     given by argument 1 to the function.
36228
36229'copy'
36230'copy (EXPRESSION)'
36231     The 'copy' attribute applies the set of attributes with which the
36232     type of the EXPRESSION has been declared to the declaration of the
36233     type to which the attribute is applied.  The attribute is designed
36234     for libraries that define aliases that are expected to specify the
36235     same set of attributes as the aliased symbols.  The 'copy'
36236     attribute can be used with types, variables, or functions.
36237     However, the kind of symbol to which the attribute is applied
36238     (either varible or function) must match the kind of symbol to which
36239     the argument refers.  The 'copy' attribute copies only syntactic
36240     and semantic attributes but not attributes that affect a symbol's
36241     linkage or visibility such as 'alias', 'visibility', or 'weak'.
36242     The 'deprecated' attribute is also not copied.  *Note Common
36243     Function Attributes::.  *Note Common Variable Attributes::.
36244
36245     For example, suppose 'struct A' below is defined in some third
36246     party library header to have the alignment requirement 'N' and to
36247     force a warning whenever a variable of the type is not so aligned
36248     due to attribute 'packed'.  Specifying the 'copy' attribute on the
36249     definition on the unrelated 'struct B' has the effect of copying
36250     all relevant attributes from the type referenced by the pointer
36251     expression to 'struct B'.
36252
36253          struct __attribute__ ((aligned (N), warn_if_not_aligned (N)))
36254          A { /* ... */ };
36255          struct __attribute__ ((copy ( (struct A *)0)) B { /* ... */ };
36256
36257'deprecated'
36258'deprecated (MSG)'
36259     The 'deprecated' attribute results in a warning if the type is used
36260     anywhere in the source file.  This is useful when identifying types
36261     that are expected to be removed in a future version of a program.
36262     If possible, the warning also includes the location of the
36263     declaration of the deprecated type, to enable users to easily find
36264     further information about why the type is deprecated, or what they
36265     should do instead.  Note that the warnings only occur for uses and
36266     then only if the type is being applied to an identifier that itself
36267     is not being declared as deprecated.
36268
36269          typedef int T1 __attribute__ ((deprecated));
36270          T1 x;
36271          typedef T1 T2;
36272          T2 y;
36273          typedef T1 T3 __attribute__ ((deprecated));
36274          T3 z __attribute__ ((deprecated));
36275
36276     results in a warning on line 2 and 3 but not lines 4, 5, or 6.  No
36277     warning is issued for line 4 because T2 is not explicitly
36278     deprecated.  Line 5 has no warning because T3 is explicitly
36279     deprecated.  Similarly for line 6.  The optional MSG argument,
36280     which must be a string, is printed in the warning if present.
36281     Control characters in the string will be replaced with escape
36282     sequences, and if the '-fmessage-length' option is set to 0 (its
36283     default value) then any newline characters will be ignored.
36284
36285     The 'deprecated' attribute can also be used for functions and
36286     variables (*note Function Attributes::, *note Variable
36287     Attributes::.)
36288
36289     The message attached to the attribute is affected by the setting of
36290     the '-fmessage-length' option.
36291
36292'designated_init'
36293     This attribute may only be applied to structure types.  It
36294     indicates that any initialization of an object of this type must
36295     use designated initializers rather than positional initializers.
36296     The intent of this attribute is to allow the programmer to indicate
36297     that a structure's layout may change, and that therefore relying on
36298     positional initialization will result in future breakage.
36299
36300     GCC emits warnings based on this attribute by default; use
36301     '-Wno-designated-init' to suppress them.
36302
36303'may_alias'
36304     Accesses through pointers to types with this attribute are not
36305     subject to type-based alias analysis, but are instead assumed to be
36306     able to alias any other type of objects.  In the context of section
36307     6.5 paragraph 7 of the C99 standard, an lvalue expression
36308     dereferencing such a pointer is treated like having a character
36309     type.  See '-fstrict-aliasing' for more information on aliasing
36310     issues.  This extension exists to support some vector APIs, in
36311     which pointers to one vector type are permitted to alias pointers
36312     to a different vector type.
36313
36314     Note that an object of a type with this attribute does not have any
36315     special semantics.
36316
36317     Example of use:
36318
36319          typedef short __attribute__ ((__may_alias__)) short_a;
36320
36321          int
36322          main (void)
36323          {
36324            int a = 0x12345678;
36325            short_a *b = (short_a *) &a;
36326
36327            b[1] = 0;
36328
36329            if (a == 0x12345678)
36330              abort();
36331
36332            exit(0);
36333          }
36334
36335     If you replaced 'short_a' with 'short' in the variable declaration,
36336     the above program would abort when compiled with
36337     '-fstrict-aliasing', which is on by default at '-O2' or above.
36338
36339'mode (MODE)'
36340     This attribute specifies the data type for the
36341     declaration--whichever type corresponds to the mode MODE.  This in
36342     effect lets you request an integer or floating-point type according
36343     to its width.
36344
36345     *Note (gccint)Machine Modes::, for a list of the possible keywords
36346     for MODE.  You may also specify a mode of 'byte' or '__byte__' to
36347     indicate the mode corresponding to a one-byte integer, 'word' or
36348     '__word__' for the mode of a one-word integer, and 'pointer' or
36349     '__pointer__' for the mode used to represent pointers.
36350
36351'packed'
36352     This attribute, attached to a 'struct', 'union', or C++ 'class'
36353     type definition, specifies that each of its members (other than
36354     zero-width bit-fields) is placed to minimize the memory required.
36355     This is equivalent to specifying the 'packed' attribute on each of
36356     the members.
36357
36358     When attached to an 'enum' definition, the 'packed' attribute
36359     indicates that the smallest integral type should be used.
36360     Specifying the '-fshort-enums' flag on the command line is
36361     equivalent to specifying the 'packed' attribute on all 'enum'
36362     definitions.
36363
36364     In the following example 'struct my_packed_struct''s members are
36365     packed closely together, but the internal layout of its 's' member
36366     is not packed--to do that, 'struct my_unpacked_struct' needs to be
36367     packed too.
36368
36369          struct my_unpacked_struct
36370           {
36371              char c;
36372              int i;
36373           };
36374
36375          struct __attribute__ ((__packed__)) my_packed_struct
36376            {
36377               char c;
36378               int  i;
36379               struct my_unpacked_struct s;
36380            };
36381
36382     You may only specify the 'packed' attribute on the definition of an
36383     'enum', 'struct', 'union', or 'class', not on a 'typedef' that does
36384     not also define the enumerated type, structure, union, or class.
36385
36386'scalar_storage_order ("ENDIANNESS")'
36387     When attached to a 'union' or a 'struct', this attribute sets the
36388     storage order, aka endianness, of the scalar fields of the type, as
36389     well as the array fields whose component is scalar.  The supported
36390     endiannesses are 'big-endian' and 'little-endian'.  The attribute
36391     has no effects on fields which are themselves a 'union', a 'struct'
36392     or an array whose component is a 'union' or a 'struct', and it is
36393     possible for these fields to have a different scalar storage order
36394     than the enclosing type.
36395
36396     This attribute is supported only for targets that use a uniform
36397     default scalar storage order (fortunately, most of them), i.e.
36398     targets that store the scalars either all in big-endian or all in
36399     little-endian.
36400
36401     Additional restrictions are enforced for types with the reverse
36402     scalar storage order with regard to the scalar storage order of the
36403     target:
36404
36405        * Taking the address of a scalar field of a 'union' or a
36406          'struct' with reverse scalar storage order is not permitted
36407          and yields an error.
36408        * Taking the address of an array field, whose component is
36409          scalar, of a 'union' or a 'struct' with reverse scalar storage
36410          order is permitted but yields a warning, unless
36411          '-Wno-scalar-storage-order' is specified.
36412        * Taking the address of a 'union' or a 'struct' with reverse
36413          scalar storage order is permitted.
36414
36415     These restrictions exist because the storage order attribute is
36416     lost when the address of a scalar or the address of an array with
36417     scalar component is taken, so storing indirectly through this
36418     address generally does not work.  The second case is nevertheless
36419     allowed to be able to perform a block copy from or to the array.
36420
36421     Moreover, the use of type punning or aliasing to toggle the storage
36422     order is not supported; that is to say, a given scalar object
36423     cannot be accessed through distinct types that assign a different
36424     storage order to it.
36425
36426'transparent_union'
36427
36428     This attribute, attached to a 'union' type definition, indicates
36429     that any function parameter having that union type causes calls to
36430     that function to be treated in a special way.
36431
36432     First, the argument corresponding to a transparent union type can
36433     be of any type in the union; no cast is required.  Also, if the
36434     union contains a pointer type, the corresponding argument can be a
36435     null pointer constant or a void pointer expression; and if the
36436     union contains a void pointer type, the corresponding argument can
36437     be any pointer expression.  If the union member type is a pointer,
36438     qualifiers like 'const' on the referenced type must be respected,
36439     just as with normal pointer conversions.
36440
36441     Second, the argument is passed to the function using the calling
36442     conventions of the first member of the transparent union, not the
36443     calling conventions of the union itself.  All members of the union
36444     must have the same machine representation; this is necessary for
36445     this argument passing to work properly.
36446
36447     Transparent unions are designed for library functions that have
36448     multiple interfaces for compatibility reasons.  For example,
36449     suppose the 'wait' function must accept either a value of type 'int
36450     *' to comply with POSIX, or a value of type 'union wait *' to
36451     comply with the 4.1BSD interface.  If 'wait''s parameter were 'void
36452     *', 'wait' would accept both kinds of arguments, but it would also
36453     accept any other pointer type and this would make argument type
36454     checking less useful.  Instead, '<sys/wait.h>' might define the
36455     interface as follows:
36456
36457          typedef union __attribute__ ((__transparent_union__))
36458            {
36459              int *__ip;
36460              union wait *__up;
36461            } wait_status_ptr_t;
36462
36463          pid_t wait (wait_status_ptr_t);
36464
36465     This interface allows either 'int *' or 'union wait *' arguments to
36466     be passed, using the 'int *' calling convention.  The program can
36467     call 'wait' with arguments of either type:
36468
36469          int w1 () { int w; return wait (&w); }
36470          int w2 () { union wait w; return wait (&w); }
36471
36472     With this interface, 'wait''s implementation might look like this:
36473
36474          pid_t wait (wait_status_ptr_t p)
36475          {
36476            return waitpid (-1, p.__ip, 0);
36477          }
36478
36479'unused'
36480     When attached to a type (including a 'union' or a 'struct'), this
36481     attribute means that variables of that type are meant to appear
36482     possibly unused.  GCC does not produce a warning for any variables
36483     of that type, even if the variable appears to do nothing.  This is
36484     often the case with lock or thread classes, which are usually
36485     defined and then not referenced, but contain constructors and
36486     destructors that have nontrivial bookkeeping functions.
36487
36488'vector_size (BYTES)'
36489     This attribute specifies the vector size for the type, measured in
36490     bytes.  The type to which it applies is known as the "base type".
36491     The BYTES argument must be a positive power-of-two multiple of the
36492     base type size.  For example, the following declarations:
36493
36494          typedef __attribute__ ((vector_size (32))) int int_vec32_t ;
36495          typedef __attribute__ ((vector_size (32))) int* int_vec32_ptr_t;
36496          typedef __attribute__ ((vector_size (32))) int int_vec32_arr3_t[3];
36497
36498     define 'int_vec32_t' to be a 32-byte vector type composed of 'int'
36499     sized units.  With 'int' having a size of 4 bytes, the type defines
36500     a vector of eight units, four bytes each.  The mode of variables of
36501     type 'int_vec32_t' is 'V8SI'.  'int_vec32_ptr_t' is then defined to
36502     be a pointer to such a vector type, and 'int_vec32_arr3_t' to be an
36503     array of three such vectors.  *Note Vector Extensions::, for
36504     details of manipulating objects of vector types.
36505
36506     This attribute is only applicable to integral and floating scalar
36507     types.  In function declarations the attribute applies to the
36508     function return type.
36509
36510     For example, the following:
36511          __attribute__ ((vector_size (16))) float get_flt_vec16 (void);
36512     declares 'get_flt_vec16' to be a function returning a 16-byte
36513     vector with the base type 'float'.
36514
36515'visibility'
36516     In C++, attribute visibility (*note Function Attributes::) can also
36517     be applied to class, struct, union and enum types.  Unlike other
36518     type attributes, the attribute must appear between the initial
36519     keyword and the name of the type; it cannot appear after the body
36520     of the type.
36521
36522     Note that the type visibility is applied to vague linkage entities
36523     associated with the class (vtable, typeinfo node, etc.).  In
36524     particular, if a class is thrown as an exception in one shared
36525     object and caught in another, the class must have default
36526     visibility.  Otherwise the two shared objects are unable to use the
36527     same typeinfo node and exception handling will break.
36528
36529 To specify multiple attributes, separate them by commas within the
36530double parentheses: for example, '__attribute__ ((aligned (16),
36531packed))'.
36532
36533
36534File: gcc.info,  Node: ARC Type Attributes,  Next: ARM Type Attributes,  Prev: Common Type Attributes,  Up: Type Attributes
36535
365366.35.2 ARC Type Attributes
36537--------------------------
36538
36539Declaring objects with 'uncached' allows you to exclude data-cache
36540participation in load and store operations on those objects without
36541involving the additional semantic implications of 'volatile'.  The '.di'
36542instruction suffix is used for all loads and stores of data declared
36543'uncached'.
36544
36545
36546File: gcc.info,  Node: ARM Type Attributes,  Next: MeP Type Attributes,  Prev: ARC Type Attributes,  Up: Type Attributes
36547
365486.35.3 ARM Type Attributes
36549--------------------------
36550
36551On those ARM targets that support 'dllimport' (such as Symbian OS), you
36552can use the 'notshared' attribute to indicate that the virtual table and
36553other similar data for a class should not be exported from a DLL.  For
36554example:
36555
36556     class __declspec(notshared) C {
36557     public:
36558       __declspec(dllimport) C();
36559       virtual void f();
36560     }
36561
36562     __declspec(dllexport)
36563     C::C() {}
36564
36565In this code, 'C::C' is exported from the current DLL, but the virtual
36566table for 'C' is not exported.  (You can use '__attribute__' instead of
36567'__declspec' if you prefer, but most Symbian OS code uses '__declspec'.)
36568
36569
36570File: gcc.info,  Node: MeP Type Attributes,  Next: PowerPC Type Attributes,  Prev: ARM Type Attributes,  Up: Type Attributes
36571
365726.35.4 MeP Type Attributes
36573--------------------------
36574
36575Many of the MeP variable attributes may be applied to types as well.
36576Specifically, the 'based', 'tiny', 'near', and 'far' attributes may be
36577applied to either.  The 'io' and 'cb' attributes may not be applied to
36578types.
36579
36580
36581File: gcc.info,  Node: PowerPC Type Attributes,  Next: x86 Type Attributes,  Prev: MeP Type Attributes,  Up: Type Attributes
36582
365836.35.5 PowerPC Type Attributes
36584------------------------------
36585
36586Three attributes currently are defined for PowerPC configurations:
36587'altivec', 'ms_struct' and 'gcc_struct'.
36588
36589 For full documentation of the 'ms_struct' and 'gcc_struct' attributes
36590please see the documentation in *note x86 Type Attributes::.
36591
36592 The 'altivec' attribute allows one to declare AltiVec vector data types
36593supported by the AltiVec Programming Interface Manual.  The attribute
36594requires an argument to specify one of three vector types: 'vector__',
36595'pixel__' (always followed by unsigned short), and 'bool__' (always
36596followed by unsigned).
36597
36598     __attribute__((altivec(vector__)))
36599     __attribute__((altivec(pixel__))) unsigned short
36600     __attribute__((altivec(bool__))) unsigned
36601
36602 These attributes mainly are intended to support the '__vector',
36603'__pixel', and '__bool' AltiVec keywords.
36604
36605
36606File: gcc.info,  Node: x86 Type Attributes,  Prev: PowerPC Type Attributes,  Up: Type Attributes
36607
366086.35.6 x86 Type Attributes
36609--------------------------
36610
36611Two attributes are currently defined for x86 configurations: 'ms_struct'
36612and 'gcc_struct'.
36613
36614'ms_struct'
36615'gcc_struct'
36616
36617     If 'packed' is used on a structure, or if bit-fields are used it
36618     may be that the Microsoft ABI packs them differently than GCC
36619     normally packs them.  Particularly when moving packed data between
36620     functions compiled with GCC and the native Microsoft compiler
36621     (either via function call or as data in a file), it may be
36622     necessary to access either format.
36623
36624     The 'ms_struct' and 'gcc_struct' attributes correspond to the
36625     '-mms-bitfields' and '-mno-ms-bitfields' command-line options,
36626     respectively; see *note x86 Options::, for details of how structure
36627     layout is affected.  *Note x86 Variable Attributes::, for
36628     information about the corresponding attributes on variables.
36629
36630
36631File: gcc.info,  Node: Label Attributes,  Next: Enumerator Attributes,  Prev: Type Attributes,  Up: C Extensions
36632
366336.36 Label Attributes
36634=====================
36635
36636GCC allows attributes to be set on C labels.  *Note Attribute Syntax::,
36637for details of the exact syntax for using attributes.  Other attributes
36638are available for functions (*note Function Attributes::), variables
36639(*note Variable Attributes::), enumerators (*note Enumerator
36640Attributes::), statements (*note Statement Attributes::), and for types
36641(*note Type Attributes::).
36642
36643 This example uses the 'cold' label attribute to indicate the
36644'ErrorHandling' branch is unlikely to be taken and that the
36645'ErrorHandling' label is unused:
36646
36647
36648        asm goto ("some asm" : : : : NoError);
36649
36650     /* This branch (the fall-through from the asm) is less commonly used */
36651     ErrorHandling:
36652        __attribute__((cold, unused)); /* Semi-colon is required here */
36653        printf("error\n");
36654        return 0;
36655
36656     NoError:
36657        printf("no error\n");
36658        return 1;
36659
36660'unused'
36661     This feature is intended for program-generated code that may
36662     contain unused labels, but which is compiled with '-Wall'.  It is
36663     not normally appropriate to use in it human-written code, though it
36664     could be useful in cases where the code that jumps to the label is
36665     contained within an '#ifdef' conditional.
36666
36667'hot'
36668     The 'hot' attribute on a label is used to inform the compiler that
36669     the path following the label is more likely than paths that are not
36670     so annotated.  This attribute is used in cases where
36671     '__builtin_expect' cannot be used, for instance with computed goto
36672     or 'asm goto'.
36673
36674'cold'
36675     The 'cold' attribute on labels is used to inform the compiler that
36676     the path following the label is unlikely to be executed.  This
36677     attribute is used in cases where '__builtin_expect' cannot be used,
36678     for instance with computed goto or 'asm goto'.
36679
36680
36681File: gcc.info,  Node: Enumerator Attributes,  Next: Statement Attributes,  Prev: Label Attributes,  Up: C Extensions
36682
366836.37 Enumerator Attributes
36684==========================
36685
36686GCC allows attributes to be set on enumerators.  *Note Attribute
36687Syntax::, for details of the exact syntax for using attributes.  Other
36688attributes are available for functions (*note Function Attributes::),
36689variables (*note Variable Attributes::), labels (*note Label
36690Attributes::), statements (*note Statement Attributes::), and for types
36691(*note Type Attributes::).
36692
36693 This example uses the 'deprecated' enumerator attribute to indicate the
36694'oldval' enumerator is deprecated:
36695
36696     enum E {
36697       oldval __attribute__((deprecated)),
36698       newval
36699     };
36700
36701     int
36702     fn (void)
36703     {
36704       return oldval;
36705     }
36706
36707'deprecated'
36708     The 'deprecated' attribute results in a warning if the enumerator
36709     is used anywhere in the source file.  This is useful when
36710     identifying enumerators that are expected to be removed in a future
36711     version of a program.  The warning also includes the location of
36712     the declaration of the deprecated enumerator, to enable users to
36713     easily find further information about why the enumerator is
36714     deprecated, or what they should do instead.  Note that the warnings
36715     only occurs for uses.
36716
36717
36718File: gcc.info,  Node: Statement Attributes,  Next: Attribute Syntax,  Prev: Enumerator Attributes,  Up: C Extensions
36719
367206.38 Statement Attributes
36721=========================
36722
36723GCC allows attributes to be set on null statements.  *Note Attribute
36724Syntax::, for details of the exact syntax for using attributes.  Other
36725attributes are available for functions (*note Function Attributes::),
36726variables (*note Variable Attributes::), labels (*note Label
36727Attributes::), enumerators (*note Enumerator Attributes::), and for
36728types (*note Type Attributes::).
36729
36730 This example uses the 'fallthrough' statement attribute to indicate
36731that the '-Wimplicit-fallthrough' warning should not be emitted:
36732
36733     switch (cond)
36734       {
36735       case 1:
36736         bar (1);
36737         __attribute__((fallthrough));
36738       case 2:
36739         ...
36740       }
36741
36742'fallthrough'
36743     The 'fallthrough' attribute with a null statement serves as a
36744     fallthrough statement.  It hints to the compiler that a statement
36745     that falls through to another case label, or user-defined label in
36746     a switch statement is intentional and thus the
36747     '-Wimplicit-fallthrough' warning must not trigger.  The fallthrough
36748     attribute may appear at most once in each attribute list, and may
36749     not be mixed with other attributes.  It can only be used in a
36750     switch statement (the compiler will issue an error otherwise),
36751     after a preceding statement and before a logically succeeding case
36752     label, or user-defined label.
36753
36754
36755File: gcc.info,  Node: Attribute Syntax,  Next: Function Prototypes,  Prev: Statement Attributes,  Up: C Extensions
36756
367576.39 Attribute Syntax
36758=====================
36759
36760This section describes the syntax with which '__attribute__' may be
36761used, and the constructs to which attribute specifiers bind, for the C
36762language.  Some details may vary for C++ and Objective-C.  Because of
36763infelicities in the grammar for attributes, some forms described here
36764may not be successfully parsed in all cases.
36765
36766 There are some problems with the semantics of attributes in C++.  For
36767example, there are no manglings for attributes, although they may affect
36768code generation, so problems may arise when attributed types are used in
36769conjunction with templates or overloading.  Similarly, 'typeid' does not
36770distinguish between types with different attributes.  Support for
36771attributes in C++ may be restricted in future to attributes on
36772declarations only, but not on nested declarators.
36773
36774 *Note Function Attributes::, for details of the semantics of attributes
36775applying to functions.  *Note Variable Attributes::, for details of the
36776semantics of attributes applying to variables.  *Note Type Attributes::,
36777for details of the semantics of attributes applying to structure, union
36778and enumerated types.  *Note Label Attributes::, for details of the
36779semantics of attributes applying to labels.  *Note Enumerator
36780Attributes::, for details of the semantics of attributes applying to
36781enumerators.  *Note Statement Attributes::, for details of the semantics
36782of attributes applying to statements.
36783
36784 An "attribute specifier" is of the form '__attribute__
36785((ATTRIBUTE-LIST))'.  An "attribute list" is a possibly empty
36786comma-separated sequence of "attributes", where each attribute is one of
36787the following:
36788
36789   * Empty.  Empty attributes are ignored.
36790
36791   * An attribute name (which may be an identifier such as 'unused', or
36792     a reserved word such as 'const').
36793
36794   * An attribute name followed by a parenthesized list of parameters
36795     for the attribute.  These parameters take one of the following
36796     forms:
36797
36798        * An identifier.  For example, 'mode' attributes use this form.
36799
36800        * An identifier followed by a comma and a non-empty
36801          comma-separated list of expressions.  For example, 'format'
36802          attributes use this form.
36803
36804        * A possibly empty comma-separated list of expressions.  For
36805          example, 'format_arg' attributes use this form with the list
36806          being a single integer constant expression, and 'alias'
36807          attributes use this form with the list being a single string
36808          constant.
36809
36810 An "attribute specifier list" is a sequence of one or more attribute
36811specifiers, not separated by any other tokens.
36812
36813 You may optionally specify attribute names with '__' preceding and
36814following the name.  This allows you to use them in header files without
36815being concerned about a possible macro of the same name.  For example,
36816you may use the attribute name '__noreturn__' instead of 'noreturn'.
36817
36818Label Attributes
36819................
36820
36821In GNU C, an attribute specifier list may appear after the colon
36822following a label, other than a 'case' or 'default' label.  GNU C++ only
36823permits attributes on labels if the attribute specifier is immediately
36824followed by a semicolon (i.e., the label applies to an empty statement).
36825If the semicolon is missing, C++ label attributes are ambiguous, as it
36826is permissible for a declaration, which could begin with an attribute
36827list, to be labelled in C++.  Declarations cannot be labelled in C90 or
36828C99, so the ambiguity does not arise there.
36829
36830Enumerator Attributes
36831.....................
36832
36833In GNU C, an attribute specifier list may appear as part of an
36834enumerator.  The attribute goes after the enumeration constant, before
36835'=', if present.  The optional attribute in the enumerator appertains to
36836the enumeration constant.  It is not possible to place the attribute
36837after the constant expression, if present.
36838
36839Statement Attributes
36840....................
36841
36842In GNU C, an attribute specifier list may appear as part of a null
36843statement.  The attribute goes before the semicolon.
36844
36845Type Attributes
36846...............
36847
36848An attribute specifier list may appear as part of a 'struct', 'union' or
36849'enum' specifier.  It may go either immediately after the 'struct',
36850'union' or 'enum' keyword, or after the closing brace.  The former
36851syntax is preferred.  Where attribute specifiers follow the closing
36852brace, they are considered to relate to the structure, union or
36853enumerated type defined, not to any enclosing declaration the type
36854specifier appears in, and the type defined is not complete until after
36855the attribute specifiers.
36856
36857All other attributes
36858....................
36859
36860Otherwise, an attribute specifier appears as part of a declaration,
36861counting declarations of unnamed parameters and type names, and relates
36862to that declaration (which may be nested in another declaration, for
36863example in the case of a parameter declaration), or to a particular
36864declarator within a declaration.  Where an attribute specifier is
36865applied to a parameter declared as a function or an array, it should
36866apply to the function or array rather than the pointer to which the
36867parameter is implicitly converted, but this is not yet correctly
36868implemented.
36869
36870 Any list of specifiers and qualifiers at the start of a declaration may
36871contain attribute specifiers, whether or not such a list may in that
36872context contain storage class specifiers.  (Some attributes, however,
36873are essentially in the nature of storage class specifiers, and only make
36874sense where storage class specifiers may be used; for example,
36875'section'.)  There is one necessary limitation to this syntax: the first
36876old-style parameter declaration in a function definition cannot begin
36877with an attribute specifier, because such an attribute applies to the
36878function instead by syntax described below (which, however, is not yet
36879implemented in this case).  In some other cases, attribute specifiers
36880are permitted by this grammar but not yet supported by the compiler.
36881All attribute specifiers in this place relate to the declaration as a
36882whole.  In the obsolescent usage where a type of 'int' is implied by the
36883absence of type specifiers, such a list of specifiers and qualifiers may
36884be an attribute specifier list with no other specifiers or qualifiers.
36885
36886 At present, the first parameter in a function prototype must have some
36887type specifier that is not an attribute specifier; this resolves an
36888ambiguity in the interpretation of 'void f(int (__attribute__((foo))
36889x))', but is subject to change.  At present, if the parentheses of a
36890function declarator contain only attributes then those attributes are
36891ignored, rather than yielding an error or warning or implying a single
36892parameter of type int, but this is subject to change.
36893
36894 An attribute specifier list may appear immediately before a declarator
36895(other than the first) in a comma-separated list of declarators in a
36896declaration of more than one identifier using a single list of
36897specifiers and qualifiers.  Such attribute specifiers apply only to the
36898identifier before whose declarator they appear.  For example, in
36899
36900     __attribute__((noreturn)) void d0 (void),
36901         __attribute__((format(printf, 1, 2))) d1 (const char *, ...),
36902          d2 (void);
36903
36904the 'noreturn' attribute applies to all the functions declared; the
36905'format' attribute only applies to 'd1'.
36906
36907 An attribute specifier list may appear immediately before the comma,
36908'=' or semicolon terminating the declaration of an identifier other than
36909a function definition.  Such attribute specifiers apply to the declared
36910object or function.  Where an assembler name for an object or function
36911is specified (*note Asm Labels::), the attribute must follow the 'asm'
36912specification.
36913
36914 An attribute specifier list may, in future, be permitted to appear
36915after the declarator in a function definition (before any old-style
36916parameter declarations or the function body).
36917
36918 Attribute specifiers may be mixed with type qualifiers appearing inside
36919the '[]' of a parameter array declarator, in the C99 construct by which
36920such qualifiers are applied to the pointer to which the array is
36921implicitly converted.  Such attribute specifiers apply to the pointer,
36922not to the array, but at present this is not implemented and they are
36923ignored.
36924
36925 An attribute specifier list may appear at the start of a nested
36926declarator.  At present, there are some limitations in this usage: the
36927attributes correctly apply to the declarator, but for most individual
36928attributes the semantics this implies are not implemented.  When
36929attribute specifiers follow the '*' of a pointer declarator, they may be
36930mixed with any type qualifiers present.  The following describes the
36931formal semantics of this syntax.  It makes the most sense if you are
36932familiar with the formal specification of declarators in the ISO C
36933standard.
36934
36935 Consider (as in C99 subclause 6.7.5 paragraph 4) a declaration 'T D1',
36936where 'T' contains declaration specifiers that specify a type TYPE (such
36937as 'int') and 'D1' is a declarator that contains an identifier IDENT.
36938The type specified for IDENT for derived declarators whose type does not
36939include an attribute specifier is as in the ISO C standard.
36940
36941 If 'D1' has the form '( ATTRIBUTE-SPECIFIER-LIST D )', and the
36942declaration 'T D' specifies the type "DERIVED-DECLARATOR-TYPE-LIST TYPE"
36943for IDENT, then 'T D1' specifies the type "DERIVED-DECLARATOR-TYPE-LIST
36944ATTRIBUTE-SPECIFIER-LIST TYPE" for IDENT.
36945
36946 If 'D1' has the form '* TYPE-QUALIFIER-AND-ATTRIBUTE-SPECIFIER-LIST D',
36947and the declaration 'T D' specifies the type
36948"DERIVED-DECLARATOR-TYPE-LIST TYPE" for IDENT, then 'T D1' specifies the
36949type "DERIVED-DECLARATOR-TYPE-LIST
36950TYPE-QUALIFIER-AND-ATTRIBUTE-SPECIFIER-LIST pointer to TYPE" for IDENT.
36951
36952 For example,
36953
36954     void (__attribute__((noreturn)) ****f) (void);
36955
36956specifies the type "pointer to pointer to pointer to pointer to
36957non-returning function returning 'void'".  As another example,
36958
36959     char *__attribute__((aligned(8))) *f;
36960
36961specifies the type "pointer to 8-byte-aligned pointer to 'char'".  Note
36962again that this does not work with most attributes; for example, the
36963usage of 'aligned' and 'noreturn' attributes given above is not yet
36964supported.
36965
36966 For compatibility with existing code written for compiler versions that
36967did not implement attributes on nested declarators, some laxity is
36968allowed in the placing of attributes.  If an attribute that only applies
36969to types is applied to a declaration, it is treated as applying to the
36970type of that declaration.  If an attribute that only applies to
36971declarations is applied to the type of a declaration, it is treated as
36972applying to that declaration; and, for compatibility with code placing
36973the attributes immediately before the identifier declared, such an
36974attribute applied to a function return type is treated as applying to
36975the function type, and such an attribute applied to an array element
36976type is treated as applying to the array type.  If an attribute that
36977only applies to function types is applied to a pointer-to-function type,
36978it is treated as applying to the pointer target type; if such an
36979attribute is applied to a function return type that is not a
36980pointer-to-function type, it is treated as applying to the function
36981type.
36982
36983
36984File: gcc.info,  Node: Function Prototypes,  Next: C++ Comments,  Prev: Attribute Syntax,  Up: C Extensions
36985
369866.40 Prototypes and Old-Style Function Definitions
36987==================================================
36988
36989GNU C extends ISO C to allow a function prototype to override a later
36990old-style non-prototype definition.  Consider the following example:
36991
36992     /* Use prototypes unless the compiler is old-fashioned.  */
36993     #ifdef __STDC__
36994     #define P(x) x
36995     #else
36996     #define P(x) ()
36997     #endif
36998
36999     /* Prototype function declaration.  */
37000     int isroot P((uid_t));
37001
37002     /* Old-style function definition.  */
37003     int
37004     isroot (x)   /* ??? lossage here ??? */
37005          uid_t x;
37006     {
37007       return x == 0;
37008     }
37009
37010 Suppose the type 'uid_t' happens to be 'short'.  ISO C does not allow
37011this example, because subword arguments in old-style non-prototype
37012definitions are promoted.  Therefore in this example the function
37013definition's argument is really an 'int', which does not match the
37014prototype argument type of 'short'.
37015
37016 This restriction of ISO C makes it hard to write code that is portable
37017to traditional C compilers, because the programmer does not know whether
37018the 'uid_t' type is 'short', 'int', or 'long'.  Therefore, in cases like
37019these GNU C allows a prototype to override a later old-style definition.
37020More precisely, in GNU C, a function prototype argument type overrides
37021the argument type specified by a later old-style definition if the
37022former type is the same as the latter type before promotion.  Thus in
37023GNU C the above example is equivalent to the following:
37024
37025     int isroot (uid_t);
37026
37027     int
37028     isroot (uid_t x)
37029     {
37030       return x == 0;
37031     }
37032
37033GNU C++ does not support old-style function definitions, so this
37034extension is irrelevant.
37035
37036
37037File: gcc.info,  Node: C++ Comments,  Next: Dollar Signs,  Prev: Function Prototypes,  Up: C Extensions
37038
370396.41 C++ Style Comments
37040=======================
37041
37042In GNU C, you may use C++ style comments, which start with '//' and
37043continue until the end of the line.  Many other C implementations allow
37044such comments, and they are included in the 1999 C standard.  However,
37045C++ style comments are not recognized if you specify an '-std' option
37046specifying a version of ISO C before C99, or '-ansi' (equivalent to
37047'-std=c90').
37048
37049
37050File: gcc.info,  Node: Dollar Signs,  Next: Character Escapes,  Prev: C++ Comments,  Up: C Extensions
37051
370526.42 Dollar Signs in Identifier Names
37053=====================================
37054
37055In GNU C, you may normally use dollar signs in identifier names.  This
37056is because many traditional C implementations allow such identifiers.
37057However, dollar signs in identifiers are not supported on a few target
37058machines, typically because the target assembler does not allow them.
37059
37060
37061File: gcc.info,  Node: Character Escapes,  Next: Alignment,  Prev: Dollar Signs,  Up: C Extensions
37062
370636.43 The Character <ESC> in Constants
37064=====================================
37065
37066You can use the sequence '\e' in a string or character constant to stand
37067for the ASCII character <ESC>.
37068
37069
37070File: gcc.info,  Node: Alignment,  Next: Inline,  Prev: Character Escapes,  Up: C Extensions
37071
370726.44 Determining the Alignment of Functions, Types or Variables
37073===============================================================
37074
37075The keyword '__alignof__' determines the alignment requirement of a
37076function, object, or a type, or the minimum alignment usually required
37077by a type.  Its syntax is just like 'sizeof' and C11 '_Alignof'.
37078
37079 For example, if the target machine requires a 'double' value to be
37080aligned on an 8-byte boundary, then '__alignof__ (double)' is 8.  This
37081is true on many RISC machines.  On more traditional machine designs,
37082'__alignof__ (double)' is 4 or even 2.
37083
37084 Some machines never actually require alignment; they allow references
37085to any data type even at an odd address.  For these machines,
37086'__alignof__' reports the smallest alignment that GCC gives the data
37087type, usually as mandated by the target ABI.
37088
37089 If the operand of '__alignof__' is an lvalue rather than a type, its
37090value is the required alignment for its type, taking into account any
37091minimum alignment specified by attribute 'aligned' (*note Common
37092Variable Attributes::).  For example, after this declaration:
37093
37094     struct foo { int x; char y; } foo1;
37095
37096the value of '__alignof__ (foo1.y)' is 1, even though its actual
37097alignment is probably 2 or 4, the same as '__alignof__ (int)'.  It is an
37098error to ask for the alignment of an incomplete type other than 'void'.
37099
37100 If the operand of the '__alignof__' expression is a function, the
37101expression evaluates to the alignment of the function which may be
37102specified by attribute 'aligned' (*note Common Function Attributes::).
37103
37104
37105File: gcc.info,  Node: Inline,  Next: Volatiles,  Prev: Alignment,  Up: C Extensions
37106
371076.45 An Inline Function is As Fast As a Macro
37108=============================================
37109
37110By declaring a function inline, you can direct GCC to make calls to that
37111function faster.  One way GCC can achieve this is to integrate that
37112function's code into the code for its callers.  This makes execution
37113faster by eliminating the function-call overhead; in addition, if any of
37114the actual argument values are constant, their known values may permit
37115simplifications at compile time so that not all of the inline function's
37116code needs to be included.  The effect on code size is less predictable;
37117object code may be larger or smaller with function inlining, depending
37118on the particular case.  You can also direct GCC to try to integrate all
37119"simple enough" functions into their callers with the option
37120'-finline-functions'.
37121
37122 GCC implements three different semantics of declaring a function
37123inline.  One is available with '-std=gnu89' or '-fgnu89-inline' or when
37124'gnu_inline' attribute is present on all inline declarations, another
37125when '-std=c99', '-std=gnu99' or an option for a later C version is used
37126(without '-fgnu89-inline'), and the third is used when compiling C++.
37127
37128 To declare a function inline, use the 'inline' keyword in its
37129declaration, like this:
37130
37131     static inline int
37132     inc (int *a)
37133     {
37134       return (*a)++;
37135     }
37136
37137 If you are writing a header file to be included in ISO C90 programs,
37138write '__inline__' instead of 'inline'.  *Note Alternate Keywords::.
37139
37140 The three types of inlining behave similarly in two important cases:
37141when the 'inline' keyword is used on a 'static' function, like the
37142example above, and when a function is first declared without using the
37143'inline' keyword and then is defined with 'inline', like this:
37144
37145     extern int inc (int *a);
37146     inline int
37147     inc (int *a)
37148     {
37149       return (*a)++;
37150     }
37151
37152 In both of these common cases, the program behaves the same as if you
37153had not used the 'inline' keyword, except for its speed.
37154
37155 When a function is both inline and 'static', if all calls to the
37156function are integrated into the caller, and the function's address is
37157never used, then the function's own assembler code is never referenced.
37158In this case, GCC does not actually output assembler code for the
37159function, unless you specify the option '-fkeep-inline-functions'.  If
37160there is a nonintegrated call, then the function is compiled to
37161assembler code as usual.  The function must also be compiled as usual if
37162the program refers to its address, because that cannot be inlined.
37163
37164 Note that certain usages in a function definition can make it
37165unsuitable for inline substitution.  Among these usages are: variadic
37166functions, use of 'alloca', use of computed goto (*note Labels as
37167Values::), use of nonlocal goto, use of nested functions, use of
37168'setjmp', use of '__builtin_longjmp' and use of '__builtin_return' or
37169'__builtin_apply_args'.  Using '-Winline' warns when a function marked
37170'inline' could not be substituted, and gives the reason for the failure.
37171
37172 As required by ISO C++, GCC considers member functions defined within
37173the body of a class to be marked inline even if they are not explicitly
37174declared with the 'inline' keyword.  You can override this with
37175'-fno-default-inline'; *note Options Controlling C++ Dialect: C++
37176Dialect Options.
37177
37178 GCC does not inline any functions when not optimizing unless you
37179specify the 'always_inline' attribute for the function, like this:
37180
37181     /* Prototype.  */
37182     inline void foo (const char) __attribute__((always_inline));
37183
37184 The remainder of this section is specific to GNU C90 inlining.
37185
37186 When an inline function is not 'static', then the compiler must assume
37187that there may be calls from other source files; since a global symbol
37188can be defined only once in any program, the function must not be
37189defined in the other source files, so the calls therein cannot be
37190integrated.  Therefore, a non-'static' inline function is always
37191compiled on its own in the usual fashion.
37192
37193 If you specify both 'inline' and 'extern' in the function definition,
37194then the definition is used only for inlining.  In no case is the
37195function compiled on its own, not even if you refer to its address
37196explicitly.  Such an address becomes an external reference, as if you
37197had only declared the function, and had not defined it.
37198
37199 This combination of 'inline' and 'extern' has almost the effect of a
37200macro.  The way to use it is to put a function definition in a header
37201file with these keywords, and put another copy of the definition
37202(lacking 'inline' and 'extern') in a library file.  The definition in
37203the header file causes most calls to the function to be inlined.  If any
37204uses of the function remain, they refer to the single copy in the
37205library.
37206
37207
37208File: gcc.info,  Node: Volatiles,  Next: Using Assembly Language with C,  Prev: Inline,  Up: C Extensions
37209
372106.46 When is a Volatile Object Accessed?
37211========================================
37212
37213C has the concept of volatile objects.  These are normally accessed by
37214pointers and used for accessing hardware or inter-thread communication.
37215The standard encourages compilers to refrain from optimizations
37216concerning accesses to volatile objects, but leaves it implementation
37217defined as to what constitutes a volatile access.  The minimum
37218requirement is that at a sequence point all previous accesses to
37219volatile objects have stabilized and no subsequent accesses have
37220occurred.  Thus an implementation is free to reorder and combine
37221volatile accesses that occur between sequence points, but cannot do so
37222for accesses across a sequence point.  The use of volatile does not
37223allow you to violate the restriction on updating objects multiple times
37224between two sequence points.
37225
37226 Accesses to non-volatile objects are not ordered with respect to
37227volatile accesses.  You cannot use a volatile object as a memory barrier
37228to order a sequence of writes to non-volatile memory.  For instance:
37229
37230     int *ptr = SOMETHING;
37231     volatile int vobj;
37232     *ptr = SOMETHING;
37233     vobj = 1;
37234
37235Unless *PTR and VOBJ can be aliased, it is not guaranteed that the write
37236to *PTR occurs by the time the update of VOBJ happens.  If you need this
37237guarantee, you must use a stronger memory barrier such as:
37238
37239     int *ptr = SOMETHING;
37240     volatile int vobj;
37241     *ptr = SOMETHING;
37242     asm volatile ("" : : : "memory");
37243     vobj = 1;
37244
37245 A scalar volatile object is read when it is accessed in a void context:
37246
37247     volatile int *src = SOMEVALUE;
37248     *src;
37249
37250 Such expressions are rvalues, and GCC implements this as a read of the
37251volatile object being pointed to.
37252
37253 Assignments are also expressions and have an rvalue.  However when
37254assigning to a scalar volatile, the volatile object is not reread,
37255regardless of whether the assignment expression's rvalue is used or not.
37256If the assignment's rvalue is used, the value is that assigned to the
37257volatile object.  For instance, there is no read of VOBJ in all the
37258following cases:
37259
37260     int obj;
37261     volatile int vobj;
37262     vobj = SOMETHING;
37263     obj = vobj = SOMETHING;
37264     obj ? vobj = ONETHING : vobj = ANOTHERTHING;
37265     obj = (SOMETHING, vobj = ANOTHERTHING);
37266
37267 If you need to read the volatile object after an assignment has
37268occurred, you must use a separate expression with an intervening
37269sequence point.
37270
37271 As bit-fields are not individually addressable, volatile bit-fields may
37272be implicitly read when written to, or when adjacent bit-fields are
37273accessed.  Bit-field operations may be optimized such that adjacent
37274bit-fields are only partially accessed, if they straddle a storage unit
37275boundary.  For these reasons it is unwise to use volatile bit-fields to
37276access hardware.
37277
37278
37279File: gcc.info,  Node: Using Assembly Language with C,  Next: Alternate Keywords,  Prev: Volatiles,  Up: C Extensions
37280
372816.47 How to Use Inline Assembly Language in C Code
37282==================================================
37283
37284The 'asm' keyword allows you to embed assembler instructions within C
37285code.  GCC provides two forms of inline 'asm' statements.  A "basic
37286'asm'" statement is one with no operands (*note Basic Asm::), while an
37287"extended 'asm'" statement (*note Extended Asm::) includes one or more
37288operands.  The extended form is preferred for mixing C and assembly
37289language within a function, but to include assembly language at top
37290level you must use basic 'asm'.
37291
37292 You can also use the 'asm' keyword to override the assembler name for a
37293C symbol, or to place a C variable in a specific register.
37294
37295* Menu:
37296
37297* Basic Asm::          Inline assembler without operands.
37298* Extended Asm::       Inline assembler with operands.
37299* Constraints::        Constraints for 'asm' operands
37300* Asm Labels::         Specifying the assembler name to use for a C symbol.
37301* Explicit Register Variables::  Defining variables residing in specified
37302                       registers.
37303* Size of an asm::     How GCC calculates the size of an 'asm' block.
37304
37305
37306File: gcc.info,  Node: Basic Asm,  Next: Extended Asm,  Up: Using Assembly Language with C
37307
373086.47.1 Basic Asm -- Assembler Instructions Without Operands
37309-----------------------------------------------------------
37310
37311A basic 'asm' statement has the following syntax:
37312
37313     asm ASM-QUALIFIERS ( ASSEMBLERINSTRUCTIONS )
37314
37315 The 'asm' keyword is a GNU extension.  When writing code that can be
37316compiled with '-ansi' and the various '-std' options, use '__asm__'
37317instead of 'asm' (*note Alternate Keywords::).
37318
37319Qualifiers
37320..........
37321
37322'volatile'
37323     The optional 'volatile' qualifier has no effect.  All basic 'asm'
37324     blocks are implicitly volatile.
37325
37326'inline'
37327     If you use the 'inline' qualifier, then for inlining purposes the
37328     size of the 'asm' statement is taken as the smallest size possible
37329     (*note Size of an asm::).
37330
37331Parameters
37332..........
37333
37334ASSEMBLERINSTRUCTIONS
37335     This is a literal string that specifies the assembler code.  The
37336     string can contain any instructions recognized by the assembler,
37337     including directives.  GCC does not parse the assembler
37338     instructions themselves and does not know what they mean or even
37339     whether they are valid assembler input.
37340
37341     You may place multiple assembler instructions together in a single
37342     'asm' string, separated by the characters normally used in assembly
37343     code for the system.  A combination that works in most places is a
37344     newline to break the line, plus a tab character (written as
37345     '\n\t').  Some assemblers allow semicolons as a line separator.
37346     However, note that some assembler dialects use semicolons to start
37347     a comment.
37348
37349Remarks
37350.......
37351
37352Using extended 'asm' (*note Extended Asm::) typically produces smaller,
37353safer, and more efficient code, and in most cases it is a better
37354solution than basic 'asm'.  However, there are two situations where only
37355basic 'asm' can be used:
37356
37357   * Extended 'asm' statements have to be inside a C function, so to
37358     write inline assembly language at file scope ("top-level"), outside
37359     of C functions, you must use basic 'asm'.  You can use this
37360     technique to emit assembler directives, define assembly language
37361     macros that can be invoked elsewhere in the file, or write entire
37362     functions in assembly language.  Basic 'asm' statements outside of
37363     functions may not use any qualifiers.
37364
37365   * Functions declared with the 'naked' attribute also require basic
37366     'asm' (*note Function Attributes::).
37367
37368 Safely accessing C data and calling functions from basic 'asm' is more
37369complex than it may appear.  To access C data, it is better to use
37370extended 'asm'.
37371
37372 Do not expect a sequence of 'asm' statements to remain perfectly
37373consecutive after compilation.  If certain instructions need to remain
37374consecutive in the output, put them in a single multi-instruction 'asm'
37375statement.  Note that GCC's optimizers can move 'asm' statements
37376relative to other code, including across jumps.
37377
37378 'asm' statements may not perform jumps into other 'asm' statements.
37379GCC does not know about these jumps, and therefore cannot take account
37380of them when deciding how to optimize.  Jumps from 'asm' to C labels are
37381only supported in extended 'asm'.
37382
37383 Under certain circumstances, GCC may duplicate (or remove duplicates
37384of) your assembly code when optimizing.  This can lead to unexpected
37385duplicate symbol errors during compilation if your assembly code defines
37386symbols or labels.
37387
37388 *Warning:* The C standards do not specify semantics for 'asm', making
37389it a potential source of incompatibilities between compilers.  These
37390incompatibilities may not produce compiler warnings/errors.
37391
37392 GCC does not parse basic 'asm''s ASSEMBLERINSTRUCTIONS, which means
37393there is no way to communicate to the compiler what is happening inside
37394them.  GCC has no visibility of symbols in the 'asm' and may discard
37395them as unreferenced.  It also does not know about side effects of the
37396assembler code, such as modifications to memory or registers.  Unlike
37397some compilers, GCC assumes that no changes to general purpose registers
37398occur.  This assumption may change in a future release.
37399
37400 To avoid complications from future changes to the semantics and the
37401compatibility issues between compilers, consider replacing basic 'asm'
37402with extended 'asm'.  See How to convert from basic asm to extended asm
37403(https://gcc.gnu.org/wiki/ConvertBasicAsmToExtended) for information
37404about how to perform this conversion.
37405
37406 The compiler copies the assembler instructions in a basic 'asm'
37407verbatim to the assembly language output file, without processing
37408dialects or any of the '%' operators that are available with extended
37409'asm'.  This results in minor differences between basic 'asm' strings
37410and extended 'asm' templates.  For example, to refer to registers you
37411might use '%eax' in basic 'asm' and '%%eax' in extended 'asm'.
37412
37413 On targets such as x86 that support multiple assembler dialects, all
37414basic 'asm' blocks use the assembler dialect specified by the '-masm'
37415command-line option (*note x86 Options::).  Basic 'asm' provides no
37416mechanism to provide different assembler strings for different dialects.
37417
37418 For basic 'asm' with non-empty assembler string GCC assumes the
37419assembler block does not change any general purpose registers, but it
37420may read or write any globally accessible variable.
37421
37422 Here is an example of basic 'asm' for i386:
37423
37424     /* Note that this code will not compile with -masm=intel */
37425     #define DebugBreak() asm("int $3")
37426
37427
37428File: gcc.info,  Node: Extended Asm,  Next: Constraints,  Prev: Basic Asm,  Up: Using Assembly Language with C
37429
374306.47.2 Extended Asm - Assembler Instructions with C Expression Operands
37431-----------------------------------------------------------------------
37432
37433With extended 'asm' you can read and write C variables from assembler
37434and perform jumps from assembler code to C labels.  Extended 'asm'
37435syntax uses colons (':') to delimit the operand parameters after the
37436assembler template:
37437
37438     asm ASM-QUALIFIERS ( ASSEMBLERTEMPLATE
37439                      : OUTPUTOPERANDS
37440                      [ : INPUTOPERANDS
37441                      [ : CLOBBERS ] ])
37442
37443     asm ASM-QUALIFIERS ( ASSEMBLERTEMPLATE
37444                           :
37445                           : INPUTOPERANDS
37446                           : CLOBBERS
37447                           : GOTOLABELS)
37448 where in the last form, ASM-QUALIFIERS contains 'goto' (and in the
37449first form, not).
37450
37451 The 'asm' keyword is a GNU extension.  When writing code that can be
37452compiled with '-ansi' and the various '-std' options, use '__asm__'
37453instead of 'asm' (*note Alternate Keywords::).
37454
37455Qualifiers
37456..........
37457
37458'volatile'
37459     The typical use of extended 'asm' statements is to manipulate input
37460     values to produce output values.  However, your 'asm' statements
37461     may also produce side effects.  If so, you may need to use the
37462     'volatile' qualifier to disable certain optimizations.  *Note
37463     Volatile::.
37464
37465'inline'
37466     If you use the 'inline' qualifier, then for inlining purposes the
37467     size of the 'asm' statement is taken as the smallest size possible
37468     (*note Size of an asm::).
37469
37470'goto'
37471     This qualifier informs the compiler that the 'asm' statement may
37472     perform a jump to one of the labels listed in the GOTOLABELS.
37473     *Note GotoLabels::.
37474
37475Parameters
37476..........
37477
37478ASSEMBLERTEMPLATE
37479     This is a literal string that is the template for the assembler
37480     code.  It is a combination of fixed text and tokens that refer to
37481     the input, output, and goto parameters.  *Note AssemblerTemplate::.
37482
37483OUTPUTOPERANDS
37484     A comma-separated list of the C variables modified by the
37485     instructions in the ASSEMBLERTEMPLATE.  An empty list is permitted.
37486     *Note OutputOperands::.
37487
37488INPUTOPERANDS
37489     A comma-separated list of C expressions read by the instructions in
37490     the ASSEMBLERTEMPLATE.  An empty list is permitted.  *Note
37491     InputOperands::.
37492
37493CLOBBERS
37494     A comma-separated list of registers or other values changed by the
37495     ASSEMBLERTEMPLATE, beyond those listed as outputs.  An empty list
37496     is permitted.  *Note Clobbers and Scratch Registers::.
37497
37498GOTOLABELS
37499     When you are using the 'goto' form of 'asm', this section contains
37500     the list of all C labels to which the code in the ASSEMBLERTEMPLATE
37501     may jump.  *Note GotoLabels::.
37502
37503     'asm' statements may not perform jumps into other 'asm' statements,
37504     only to the listed GOTOLABELS.  GCC's optimizers do not know about
37505     other jumps; therefore they cannot take account of them when
37506     deciding how to optimize.
37507
37508 The total number of input + output + goto operands is limited to 30.
37509
37510Remarks
37511.......
37512
37513The 'asm' statement allows you to include assembly instructions directly
37514within C code.  This may help you to maximize performance in
37515time-sensitive code or to access assembly instructions that are not
37516readily available to C programs.
37517
37518 Note that extended 'asm' statements must be inside a function.  Only
37519basic 'asm' may be outside functions (*note Basic Asm::).  Functions
37520declared with the 'naked' attribute also require basic 'asm' (*note
37521Function Attributes::).
37522
37523 While the uses of 'asm' are many and varied, it may help to think of an
37524'asm' statement as a series of low-level instructions that convert input
37525parameters to output parameters.  So a simple (if not particularly
37526useful) example for i386 using 'asm' might look like this:
37527
37528     int src = 1;
37529     int dst;
37530
37531     asm ("mov %1, %0\n\t"
37532         "add $1, %0"
37533         : "=r" (dst)
37534         : "r" (src));
37535
37536     printf("%d\n", dst);
37537
37538 This code copies 'src' to 'dst' and add 1 to 'dst'.
37539
375406.47.2.1 Volatile
37541.................
37542
37543GCC's optimizers sometimes discard 'asm' statements if they determine
37544there is no need for the output variables.  Also, the optimizers may
37545move code out of loops if they believe that the code will always return
37546the same result (i.e. none of its input values change between calls).
37547Using the 'volatile' qualifier disables these optimizations.  'asm'
37548statements that have no output operands, including 'asm goto'
37549statements, are implicitly volatile.
37550
37551 This i386 code demonstrates a case that does not use (or require) the
37552'volatile' qualifier.  If it is performing assertion checking, this code
37553uses 'asm' to perform the validation.  Otherwise, 'dwRes' is
37554unreferenced by any code.  As a result, the optimizers can discard the
37555'asm' statement, which in turn removes the need for the entire 'DoCheck'
37556routine.  By omitting the 'volatile' qualifier when it isn't needed you
37557allow the optimizers to produce the most efficient code possible.
37558
37559     void DoCheck(uint32_t dwSomeValue)
37560     {
37561        uint32_t dwRes;
37562
37563        // Assumes dwSomeValue is not zero.
37564        asm ("bsfl %1,%0"
37565          : "=r" (dwRes)
37566          : "r" (dwSomeValue)
37567          : "cc");
37568
37569        assert(dwRes > 3);
37570     }
37571
37572 The next example shows a case where the optimizers can recognize that
37573the input ('dwSomeValue') never changes during the execution of the
37574function and can therefore move the 'asm' outside the loop to produce
37575more efficient code.  Again, using the 'volatile' qualifier disables
37576this type of optimization.
37577
37578     void do_print(uint32_t dwSomeValue)
37579     {
37580        uint32_t dwRes;
37581
37582        for (uint32_t x=0; x < 5; x++)
37583        {
37584           // Assumes dwSomeValue is not zero.
37585           asm ("bsfl %1,%0"
37586             : "=r" (dwRes)
37587             : "r" (dwSomeValue)
37588             : "cc");
37589
37590           printf("%u: %u %u\n", x, dwSomeValue, dwRes);
37591        }
37592     }
37593
37594 The following example demonstrates a case where you need to use the
37595'volatile' qualifier.  It uses the x86 'rdtsc' instruction, which reads
37596the computer's time-stamp counter.  Without the 'volatile' qualifier,
37597the optimizers might assume that the 'asm' block will always return the
37598same value and therefore optimize away the second call.
37599
37600     uint64_t msr;
37601
37602     asm volatile ( "rdtsc\n\t"    // Returns the time in EDX:EAX.
37603             "shl $32, %%rdx\n\t"  // Shift the upper bits left.
37604             "or %%rdx, %0"        // 'Or' in the lower bits.
37605             : "=a" (msr)
37606             :
37607             : "rdx");
37608
37609     printf("msr: %llx\n", msr);
37610
37611     // Do other work...
37612
37613     // Reprint the timestamp
37614     asm volatile ( "rdtsc\n\t"    // Returns the time in EDX:EAX.
37615             "shl $32, %%rdx\n\t"  // Shift the upper bits left.
37616             "or %%rdx, %0"        // 'Or' in the lower bits.
37617             : "=a" (msr)
37618             :
37619             : "rdx");
37620
37621     printf("msr: %llx\n", msr);
37622
37623 GCC's optimizers do not treat this code like the non-volatile code in
37624the earlier examples.  They do not move it out of loops or omit it on
37625the assumption that the result from a previous call is still valid.
37626
37627 Note that the compiler can move even 'volatile asm' instructions
37628relative to other code, including across jump instructions.  For
37629example, on many targets there is a system register that controls the
37630rounding mode of floating-point operations.  Setting it with a 'volatile
37631asm' statement, as in the following PowerPC example, does not work
37632reliably.
37633
37634     asm volatile("mtfsf 255, %0" : : "f" (fpenv));
37635     sum = x + y;
37636
37637 The compiler may move the addition back before the 'volatile asm'
37638statement.  To make it work as expected, add an artificial dependency to
37639the 'asm' by referencing a variable in the subsequent code, for example:
37640
37641     asm volatile ("mtfsf 255,%1" : "=X" (sum) : "f" (fpenv));
37642     sum = x + y;
37643
37644 Under certain circumstances, GCC may duplicate (or remove duplicates
37645of) your assembly code when optimizing.  This can lead to unexpected
37646duplicate symbol errors during compilation if your 'asm' code defines
37647symbols or labels.  Using '%=' (*note AssemblerTemplate::) may help
37648resolve this problem.
37649
376506.47.2.2 Assembler Template
37651...........................
37652
37653An assembler template is a literal string containing assembler
37654instructions.  The compiler replaces tokens in the template that refer
37655to inputs, outputs, and goto labels, and then outputs the resulting
37656string to the assembler.  The string can contain any instructions
37657recognized by the assembler, including directives.  GCC does not parse
37658the assembler instructions themselves and does not know what they mean
37659or even whether they are valid assembler input.  However, it does count
37660the statements (*note Size of an asm::).
37661
37662 You may place multiple assembler instructions together in a single
37663'asm' string, separated by the characters normally used in assembly code
37664for the system.  A combination that works in most places is a newline to
37665break the line, plus a tab character to move to the instruction field
37666(written as '\n\t').  Some assemblers allow semicolons as a line
37667separator.  However, note that some assembler dialects use semicolons to
37668start a comment.
37669
37670 Do not expect a sequence of 'asm' statements to remain perfectly
37671consecutive after compilation, even when you are using the 'volatile'
37672qualifier.  If certain instructions need to remain consecutive in the
37673output, put them in a single multi-instruction 'asm' statement.
37674
37675 Accessing data from C programs without using input/output operands
37676(such as by using global symbols directly from the assembler template)
37677may not work as expected.  Similarly, calling functions directly from an
37678assembler template requires a detailed understanding of the target
37679assembler and ABI.
37680
37681 Since GCC does not parse the assembler template, it has no visibility
37682of any symbols it references.  This may result in GCC discarding those
37683symbols as unreferenced unless they are also listed as input, output, or
37684goto operands.
37685
37686Special format strings
37687......................
37688
37689In addition to the tokens described by the input, output, and goto
37690operands, these tokens have special meanings in the assembler template:
37691
37692'%%'
37693     Outputs a single '%' into the assembler code.
37694
37695'%='
37696     Outputs a number that is unique to each instance of the 'asm'
37697     statement in the entire compilation.  This option is useful when
37698     creating local labels and referring to them multiple times in a
37699     single template that generates multiple assembler instructions.
37700
37701'%{'
37702'%|'
37703'%}'
37704     Outputs '{', '|', and '}' characters (respectively) into the
37705     assembler code.  When unescaped, these characters have special
37706     meaning to indicate multiple assembler dialects, as described
37707     below.
37708
37709Multiple assembler dialects in 'asm' templates
37710..............................................
37711
37712On targets such as x86, GCC supports multiple assembler dialects.  The
37713'-masm' option controls which dialect GCC uses as its default for inline
37714assembler.  The target-specific documentation for the '-masm' option
37715contains the list of supported dialects, as well as the default dialect
37716if the option is not specified.  This information may be important to
37717understand, since assembler code that works correctly when compiled
37718using one dialect will likely fail if compiled using another.  *Note x86
37719Options::.
37720
37721 If your code needs to support multiple assembler dialects (for example,
37722if you are writing public headers that need to support a variety of
37723compilation options), use constructs of this form:
37724
37725     { dialect0 | dialect1 | dialect2... }
37726
37727 This construct outputs 'dialect0' when using dialect #0 to compile the
37728code, 'dialect1' for dialect #1, etc.  If there are fewer alternatives
37729within the braces than the number of dialects the compiler supports, the
37730construct outputs nothing.
37731
37732 For example, if an x86 compiler supports two dialects ('att', 'intel'),
37733an assembler template such as this:
37734
37735     "bt{l %[Offset],%[Base] | %[Base],%[Offset]}; jc %l2"
37736
37737is equivalent to one of
37738
37739     "btl %[Offset],%[Base] ; jc %l2"   /* att dialect */
37740     "bt %[Base],%[Offset]; jc %l2"     /* intel dialect */
37741
37742 Using that same compiler, this code:
37743
37744     "xchg{l}\t{%%}ebx, %1"
37745
37746corresponds to either
37747
37748     "xchgl\t%%ebx, %1"                 /* att dialect */
37749     "xchg\tebx, %1"                    /* intel dialect */
37750
37751 There is no support for nesting dialect alternatives.
37752
377536.47.2.3 Output Operands
37754........................
37755
37756An 'asm' statement has zero or more output operands indicating the names
37757of C variables modified by the assembler code.
37758
37759 In this i386 example, 'old' (referred to in the template string as
37760'%0') and '*Base' (as '%1') are outputs and 'Offset' ('%2') is an input:
37761
37762     bool old;
37763
37764     __asm__ ("btsl %2,%1\n\t" // Turn on zero-based bit #Offset in Base.
37765              "sbb %0,%0"      // Use the CF to calculate old.
37766        : "=r" (old), "+rm" (*Base)
37767        : "Ir" (Offset)
37768        : "cc");
37769
37770     return old;
37771
37772 Operands are separated by commas.  Each operand has this format:
37773
37774     [ [ASMSYMBOLICNAME] ] CONSTRAINT (CVARIABLENAME)
37775
37776ASMSYMBOLICNAME
37777     Specifies a symbolic name for the operand.  Reference the name in
37778     the assembler template by enclosing it in square brackets (i.e.
37779     '%[Value]').  The scope of the name is the 'asm' statement that
37780     contains the definition.  Any valid C variable name is acceptable,
37781     including names already defined in the surrounding code.  No two
37782     operands within the same 'asm' statement can use the same symbolic
37783     name.
37784
37785     When not using an ASMSYMBOLICNAME, use the (zero-based) position of
37786     the operand in the list of operands in the assembler template.  For
37787     example if there are three output operands, use '%0' in the
37788     template to refer to the first, '%1' for the second, and '%2' for
37789     the third.
37790
37791CONSTRAINT
37792     A string constant specifying constraints on the placement of the
37793     operand; *Note Constraints::, for details.
37794
37795     Output constraints must begin with either '=' (a variable
37796     overwriting an existing value) or '+' (when reading and writing).
37797     When using '=', do not assume the location contains the existing
37798     value on entry to the 'asm', except when the operand is tied to an
37799     input; *note Input Operands: InputOperands.
37800
37801     After the prefix, there must be one or more additional constraints
37802     (*note Constraints::) that describe where the value resides.
37803     Common constraints include 'r' for register and 'm' for memory.
37804     When you list more than one possible location (for example,
37805     '"=rm"'), the compiler chooses the most efficient one based on the
37806     current context.  If you list as many alternates as the 'asm'
37807     statement allows, you permit the optimizers to produce the best
37808     possible code.  If you must use a specific register, but your
37809     Machine Constraints do not provide sufficient control to select the
37810     specific register you want, local register variables may provide a
37811     solution (*note Local Register Variables::).
37812
37813CVARIABLENAME
37814     Specifies a C lvalue expression to hold the output, typically a
37815     variable name.  The enclosing parentheses are a required part of
37816     the syntax.
37817
37818 When the compiler selects the registers to use to represent the output
37819operands, it does not use any of the clobbered registers (*note Clobbers
37820and Scratch Registers::).
37821
37822 Output operand expressions must be lvalues.  The compiler cannot check
37823whether the operands have data types that are reasonable for the
37824instruction being executed.  For output expressions that are not
37825directly addressable (for example a bit-field), the constraint must
37826allow a register.  In that case, GCC uses the register as the output of
37827the 'asm', and then stores that register into the output.
37828
37829 Operands using the '+' constraint modifier count as two operands (that
37830is, both as input and output) towards the total maximum of 30 operands
37831per 'asm' statement.
37832
37833 Use the '&' constraint modifier (*note Modifiers::) on all output
37834operands that must not overlap an input.  Otherwise, GCC may allocate
37835the output operand in the same register as an unrelated input operand,
37836on the assumption that the assembler code consumes its inputs before
37837producing outputs.  This assumption may be false if the assembler code
37838actually consists of more than one instruction.
37839
37840 The same problem can occur if one output parameter (A) allows a
37841register constraint and another output parameter (B) allows a memory
37842constraint.  The code generated by GCC to access the memory address in B
37843can contain registers which _might_ be shared by A, and GCC considers
37844those registers to be inputs to the asm.  As above, GCC assumes that
37845such input registers are consumed before any outputs are written.  This
37846assumption may result in incorrect behavior if the 'asm' statement
37847writes to A before using B.  Combining the '&' modifier with the
37848register constraint on A ensures that modifying A does not affect the
37849address referenced by B.  Otherwise, the location of B is undefined if A
37850is modified before using B.
37851
37852 'asm' supports operand modifiers on operands (for example '%k2' instead
37853of simply '%2').  Typically these qualifiers are hardware dependent.
37854The list of supported modifiers for x86 is found at *note x86 Operand
37855modifiers: x86Operandmodifiers.
37856
37857 If the C code that follows the 'asm' makes no use of any of the output
37858operands, use 'volatile' for the 'asm' statement to prevent the
37859optimizers from discarding the 'asm' statement as unneeded (see *note
37860Volatile::).
37861
37862 This code makes no use of the optional ASMSYMBOLICNAME.  Therefore it
37863references the first output operand as '%0' (were there a second, it
37864would be '%1', etc).  The number of the first input operand is one
37865greater than that of the last output operand.  In this i386 example,
37866that makes 'Mask' referenced as '%1':
37867
37868     uint32_t Mask = 1234;
37869     uint32_t Index;
37870
37871       asm ("bsfl %1, %0"
37872          : "=r" (Index)
37873          : "r" (Mask)
37874          : "cc");
37875
37876 That code overwrites the variable 'Index' ('='), placing the value in a
37877register ('r').  Using the generic 'r' constraint instead of a
37878constraint for a specific register allows the compiler to pick the
37879register to use, which can result in more efficient code.  This may not
37880be possible if an assembler instruction requires a specific register.
37881
37882 The following i386 example uses the ASMSYMBOLICNAME syntax.  It
37883produces the same result as the code above, but some may consider it
37884more readable or more maintainable since reordering index numbers is not
37885necessary when adding or removing operands.  The names 'aIndex' and
37886'aMask' are only used in this example to emphasize which names get used
37887where.  It is acceptable to reuse the names 'Index' and 'Mask'.
37888
37889     uint32_t Mask = 1234;
37890     uint32_t Index;
37891
37892       asm ("bsfl %[aMask], %[aIndex]"
37893          : [aIndex] "=r" (Index)
37894          : [aMask] "r" (Mask)
37895          : "cc");
37896
37897 Here are some more examples of output operands.
37898
37899     uint32_t c = 1;
37900     uint32_t d;
37901     uint32_t *e = &c;
37902
37903     asm ("mov %[e], %[d]"
37904        : [d] "=rm" (d)
37905        : [e] "rm" (*e));
37906
37907 Here, 'd' may either be in a register or in memory.  Since the compiler
37908might already have the current value of the 'uint32_t' location pointed
37909to by 'e' in a register, you can enable it to choose the best location
37910for 'd' by specifying both constraints.
37911
379126.47.2.4 Flag Output Operands
37913.............................
37914
37915Some targets have a special register that holds the "flags" for the
37916result of an operation or comparison.  Normally, the contents of that
37917register are either unmodifed by the asm, or the 'asm' statement is
37918considered to clobber the contents.
37919
37920 On some targets, a special form of output operand exists by which
37921conditions in the flags register may be outputs of the asm.  The set of
37922conditions supported are target specific, but the general rule is that
37923the output variable must be a scalar integer, and the value is boolean.
37924When supported, the target defines the preprocessor symbol
37925'__GCC_ASM_FLAG_OUTPUTS__'.
37926
37927 Because of the special nature of the flag output operands, the
37928constraint may not include alternatives.
37929
37930 Most often, the target has only one flags register, and thus is an
37931implied operand of many instructions.  In this case, the operand should
37932not be referenced within the assembler template via '%0' etc, as there's
37933no corresponding text in the assembly language.
37934
37935ARM
37936AArch64
37937     The flag output constraints for the ARM family are of the form
37938     '=@ccCOND' where COND is one of the standard conditions defined in
37939     the ARM ARM for 'ConditionHolds'.
37940
37941     'eq'
37942          Z flag set, or equal
37943     'ne'
37944          Z flag clear or not equal
37945     'cs'
37946     'hs'
37947          C flag set or unsigned greater than equal
37948     'cc'
37949     'lo'
37950          C flag clear or unsigned less than
37951     'mi'
37952          N flag set or "minus"
37953     'pl'
37954          N flag clear or "plus"
37955     'vs'
37956          V flag set or signed overflow
37957     'vc'
37958          V flag clear
37959     'hi'
37960          unsigned greater than
37961     'ls'
37962          unsigned less than equal
37963     'ge'
37964          signed greater than equal
37965     'lt'
37966          signed less than
37967     'gt'
37968          signed greater than
37969     'le'
37970          signed less than equal
37971
37972     The flag output constraints are not supported in thumb1 mode.
37973
37974x86 family
37975     The flag output constraints for the x86 family are of the form
37976     '=@ccCOND' where COND is one of the standard conditions defined in
37977     the ISA manual for 'jCC' or 'setCC'.
37978
37979     'a'
37980          "above" or unsigned greater than
37981     'ae'
37982          "above or equal" or unsigned greater than or equal
37983     'b'
37984          "below" or unsigned less than
37985     'be'
37986          "below or equal" or unsigned less than or equal
37987     'c'
37988          carry flag set
37989     'e'
37990     'z'
37991          "equal" or zero flag set
37992     'g'
37993          signed greater than
37994     'ge'
37995          signed greater than or equal
37996     'l'
37997          signed less than
37998     'le'
37999          signed less than or equal
38000     'o'
38001          overflow flag set
38002     'p'
38003          parity flag set
38004     's'
38005          sign flag set
38006     'na'
38007     'nae'
38008     'nb'
38009     'nbe'
38010     'nc'
38011     'ne'
38012     'ng'
38013     'nge'
38014     'nl'
38015     'nle'
38016     'no'
38017     'np'
38018     'ns'
38019     'nz'
38020          "not" FLAG, or inverted versions of those above
38021
380226.47.2.5 Input Operands
38023.......................
38024
38025Input operands make values from C variables and expressions available to
38026the assembly code.
38027
38028 Operands are separated by commas.  Each operand has this format:
38029
38030     [ [ASMSYMBOLICNAME] ] CONSTRAINT (CEXPRESSION)
38031
38032ASMSYMBOLICNAME
38033     Specifies a symbolic name for the operand.  Reference the name in
38034     the assembler template by enclosing it in square brackets (i.e.
38035     '%[Value]').  The scope of the name is the 'asm' statement that
38036     contains the definition.  Any valid C variable name is acceptable,
38037     including names already defined in the surrounding code.  No two
38038     operands within the same 'asm' statement can use the same symbolic
38039     name.
38040
38041     When not using an ASMSYMBOLICNAME, use the (zero-based) position of
38042     the operand in the list of operands in the assembler template.  For
38043     example if there are two output operands and three inputs, use '%2'
38044     in the template to refer to the first input operand, '%3' for the
38045     second, and '%4' for the third.
38046
38047CONSTRAINT
38048     A string constant specifying constraints on the placement of the
38049     operand; *Note Constraints::, for details.
38050
38051     Input constraint strings may not begin with either '=' or '+'.
38052     When you list more than one possible location (for example,
38053     '"irm"'), the compiler chooses the most efficient one based on the
38054     current context.  If you must use a specific register, but your
38055     Machine Constraints do not provide sufficient control to select the
38056     specific register you want, local register variables may provide a
38057     solution (*note Local Register Variables::).
38058
38059     Input constraints can also be digits (for example, '"0"').  This
38060     indicates that the specified input must be in the same place as the
38061     output constraint at the (zero-based) index in the output
38062     constraint list.  When using ASMSYMBOLICNAME syntax for the output
38063     operands, you may use these names (enclosed in brackets '[]')
38064     instead of digits.
38065
38066CEXPRESSION
38067     This is the C variable or expression being passed to the 'asm'
38068     statement as input.  The enclosing parentheses are a required part
38069     of the syntax.
38070
38071 When the compiler selects the registers to use to represent the input
38072operands, it does not use any of the clobbered registers (*note Clobbers
38073and Scratch Registers::).
38074
38075 If there are no output operands but there are input operands, place two
38076consecutive colons where the output operands would go:
38077
38078     __asm__ ("some instructions"
38079        : /* No outputs. */
38080        : "r" (Offset / 8));
38081
38082 *Warning:* Do _not_ modify the contents of input-only operands (except
38083for inputs tied to outputs).  The compiler assumes that on exit from the
38084'asm' statement these operands contain the same values as they had
38085before executing the statement.  It is _not_ possible to use clobbers to
38086inform the compiler that the values in these inputs are changing.  One
38087common work-around is to tie the changing input variable to an output
38088variable that never gets used.  Note, however, that if the code that
38089follows the 'asm' statement makes no use of any of the output operands,
38090the GCC optimizers may discard the 'asm' statement as unneeded (see
38091*note Volatile::).
38092
38093 'asm' supports operand modifiers on operands (for example '%k2' instead
38094of simply '%2').  Typically these qualifiers are hardware dependent.
38095The list of supported modifiers for x86 is found at *note x86 Operand
38096modifiers: x86Operandmodifiers.
38097
38098 In this example using the fictitious 'combine' instruction, the
38099constraint '"0"' for input operand 1 says that it must occupy the same
38100location as output operand 0.  Only input operands may use numbers in
38101constraints, and they must each refer to an output operand.  Only a
38102number (or the symbolic assembler name) in the constraint can guarantee
38103that one operand is in the same place as another.  The mere fact that
38104'foo' is the value of both operands is not enough to guarantee that they
38105are in the same place in the generated assembler code.
38106
38107     asm ("combine %2, %0"
38108        : "=r" (foo)
38109        : "0" (foo), "g" (bar));
38110
38111 Here is an example using symbolic names.
38112
38113     asm ("cmoveq %1, %2, %[result]"
38114        : [result] "=r"(result)
38115        : "r" (test), "r" (new), "[result]" (old));
38116
381176.47.2.6 Clobbers and Scratch Registers
38118.......................................
38119
38120While the compiler is aware of changes to entries listed in the output
38121operands, the inline 'asm' code may modify more than just the outputs.
38122For example, calculations may require additional registers, or the
38123processor may overwrite a register as a side effect of a particular
38124assembler instruction.  In order to inform the compiler of these
38125changes, list them in the clobber list.  Clobber list items are either
38126register names or the special clobbers (listed below).  Each clobber
38127list item is a string constant enclosed in double quotes and separated
38128by commas.
38129
38130 Clobber descriptions may not in any way overlap with an input or output
38131operand.  For example, you may not have an operand describing a register
38132class with one member when listing that register in the clobber list.
38133Variables declared to live in specific registers (*note Explicit
38134Register Variables::) and used as 'asm' input or output operands must
38135have no part mentioned in the clobber description.  In particular, there
38136is no way to specify that input operands get modified without also
38137specifying them as output operands.
38138
38139 When the compiler selects which registers to use to represent input and
38140output operands, it does not use any of the clobbered registers.  As a
38141result, clobbered registers are available for any use in the assembler
38142code.
38143
38144 Another restriction is that the clobber list should not contain the
38145stack pointer register.  This is because the compiler requires the value
38146of the stack pointer to be the same after an 'asm' statement as it was
38147on entry to the statement.  However, previous versions of GCC did not
38148enforce this rule and allowed the stack pointer to appear in the list,
38149with unclear semantics.  This behavior is deprecated and listing the
38150stack pointer may become an error in future versions of GCC.
38151
38152 Here is a realistic example for the VAX showing the use of clobbered
38153registers:
38154
38155     asm volatile ("movc3 %0, %1, %2"
38156                        : /* No outputs. */
38157                        : "g" (from), "g" (to), "g" (count)
38158                        : "r0", "r1", "r2", "r3", "r4", "r5", "memory");
38159
38160 Also, there are two special clobber arguments:
38161
38162'"cc"'
38163     The '"cc"' clobber indicates that the assembler code modifies the
38164     flags register.  On some machines, GCC represents the condition
38165     codes as a specific hardware register; '"cc"' serves to name this
38166     register.  On other machines, condition code handling is different,
38167     and specifying '"cc"' has no effect.  But it is valid no matter
38168     what the target.
38169
38170'"memory"'
38171     The '"memory"' clobber tells the compiler that the assembly code
38172     performs memory reads or writes to items other than those listed in
38173     the input and output operands (for example, accessing the memory
38174     pointed to by one of the input parameters).  To ensure memory
38175     contains correct values, GCC may need to flush specific register
38176     values to memory before executing the 'asm'.  Further, the compiler
38177     does not assume that any values read from memory before an 'asm'
38178     remain unchanged after that 'asm'; it reloads them as needed.
38179     Using the '"memory"' clobber effectively forms a read/write memory
38180     barrier for the compiler.
38181
38182     Note that this clobber does not prevent the _processor_ from doing
38183     speculative reads past the 'asm' statement.  To prevent that, you
38184     need processor-specific fence instructions.
38185
38186 Flushing registers to memory has performance implications and may be an
38187issue for time-sensitive code.  You can provide better information to
38188GCC to avoid this, as shown in the following examples.  At a minimum,
38189aliasing rules allow GCC to know what memory _doesn't_ need to be
38190flushed.
38191
38192 Here is a fictitious sum of squares instruction, that takes two
38193pointers to floating point values in memory and produces a floating
38194point register output.  Notice that 'x', and 'y' both appear twice in
38195the 'asm' parameters, once to specify memory accessed, and once to
38196specify a base register used by the 'asm'.  You won't normally be
38197wasting a register by doing this as GCC can use the same register for
38198both purposes.  However, it would be foolish to use both '%1' and '%3'
38199for 'x' in this 'asm' and expect them to be the same.  In fact, '%3' may
38200well not be a register.  It might be a symbolic memory reference to the
38201object pointed to by 'x'.
38202
38203     asm ("sumsq %0, %1, %2"
38204          : "+f" (result)
38205          : "r" (x), "r" (y), "m" (*x), "m" (*y));
38206
38207 Here is a fictitious '*z++ = *x++ * *y++' instruction.  Notice that the
38208'x', 'y' and 'z' pointer registers must be specified as input/output
38209because the 'asm' modifies them.
38210
38211     asm ("vecmul %0, %1, %2"
38212          : "+r" (z), "+r" (x), "+r" (y), "=m" (*z)
38213          : "m" (*x), "m" (*y));
38214
38215 An x86 example where the string memory argument is of unknown length.
38216
38217     asm("repne scasb"
38218         : "=c" (count), "+D" (p)
38219         : "m" (*(const char (*)[]) p), "0" (-1), "a" (0));
38220
38221 If you know the above will only be reading a ten byte array then you
38222could instead use a memory input like: '"m" (*(const char (*)[10]) p)'.
38223
38224 Here is an example of a PowerPC vector scale implemented in assembly,
38225complete with vector and condition code clobbers, and some initialized
38226offset registers that are unchanged by the 'asm'.
38227
38228     void
38229     dscal (size_t n, double *x, double alpha)
38230     {
38231       asm ("/* lots of asm here */"
38232            : "+m" (*(double (*)[n]) x), "+&r" (n), "+b" (x)
38233            : "d" (alpha), "b" (32), "b" (48), "b" (64),
38234              "b" (80), "b" (96), "b" (112)
38235            : "cr0",
38236              "vs32","vs33","vs34","vs35","vs36","vs37","vs38","vs39",
38237              "vs40","vs41","vs42","vs43","vs44","vs45","vs46","vs47");
38238     }
38239
38240 Rather than allocating fixed registers via clobbers to provide scratch
38241registers for an 'asm' statement, an alternative is to define a variable
38242and make it an early-clobber output as with 'a2' and 'a3' in the example
38243below.  This gives the compiler register allocator more freedom.  You
38244can also define a variable and make it an output tied to an input as
38245with 'a0' and 'a1', tied respectively to 'ap' and 'lda'.  Of course,
38246with tied outputs your 'asm' can't use the input value after modifying
38247the output register since they are one and the same register.  What's
38248more, if you omit the early-clobber on the output, it is possible that
38249GCC might allocate the same register to another of the inputs if GCC
38250could prove they had the same value on entry to the 'asm'.  This is why
38251'a1' has an early-clobber.  Its tied input, 'lda' might conceivably be
38252known to have the value 16 and without an early-clobber share the same
38253register as '%11'.  On the other hand, 'ap' can't be the same as any of
38254the other inputs, so an early-clobber on 'a0' is not needed.  It is also
38255not desirable in this case.  An early-clobber on 'a0' would cause GCC to
38256allocate a separate register for the '"m" (*(const double (*)[]) ap)'
38257input.  Note that tying an input to an output is the way to set up an
38258initialized temporary register modified by an 'asm' statement.  An input
38259not tied to an output is assumed by GCC to be unchanged, for example
38260'"b" (16)' below sets up '%11' to 16, and GCC might use that register in
38261following code if the value 16 happened to be needed.  You can even use
38262a normal 'asm' output for a scratch if all inputs that might share the
38263same register are consumed before the scratch is used.  The VSX
38264registers clobbered by the 'asm' statement could have used this
38265technique except for GCC's limit on the number of 'asm' parameters.
38266
38267     static void
38268     dgemv_kernel_4x4 (long n, const double *ap, long lda,
38269                       const double *x, double *y, double alpha)
38270     {
38271       double *a0;
38272       double *a1;
38273       double *a2;
38274       double *a3;
38275
38276       __asm__
38277         (
38278          /* lots of asm here */
38279          "#n=%1 ap=%8=%12 lda=%13 x=%7=%10 y=%0=%2 alpha=%9 o16=%11\n"
38280          "#a0=%3 a1=%4 a2=%5 a3=%6"
38281          :
38282            "+m" (*(double (*)[n]) y),
38283            "+&r" (n),	// 1
38284            "+b" (y),	// 2
38285            "=b" (a0),	// 3
38286            "=&b" (a1),	// 4
38287            "=&b" (a2),	// 5
38288            "=&b" (a3)	// 6
38289          :
38290            "m" (*(const double (*)[n]) x),
38291            "m" (*(const double (*)[]) ap),
38292            "d" (alpha),	// 9
38293            "r" (x),		// 10
38294            "b" (16),	// 11
38295            "3" (ap),	// 12
38296            "4" (lda)	// 13
38297          :
38298            "cr0",
38299            "vs32","vs33","vs34","vs35","vs36","vs37",
38300            "vs40","vs41","vs42","vs43","vs44","vs45","vs46","vs47"
38301          );
38302     }
38303
383046.47.2.7 Goto Labels
38305....................
38306
38307'asm goto' allows assembly code to jump to one or more C labels.  The
38308GOTOLABELS section in an 'asm goto' statement contains a comma-separated
38309list of all C labels to which the assembler code may jump.  GCC assumes
38310that 'asm' execution falls through to the next statement (if this is not
38311the case, consider using the '__builtin_unreachable' intrinsic after the
38312'asm' statement).  Optimization of 'asm goto' may be improved by using
38313the 'hot' and 'cold' label attributes (*note Label Attributes::).
38314
38315 An 'asm goto' statement cannot have outputs.  This is due to an
38316internal restriction of the compiler: control transfer instructions
38317cannot have outputs.  If the assembler code does modify anything, use
38318the '"memory"' clobber to force the optimizers to flush all register
38319values to memory and reload them if necessary after the 'asm' statement.
38320
38321 Also note that an 'asm goto' statement is always implicitly considered
38322volatile.
38323
38324 To reference a label in the assembler template, prefix it with '%l'
38325(lowercase 'L') followed by its (zero-based) position in GOTOLABELS plus
38326the number of input operands.  For example, if the 'asm' has three
38327inputs and references two labels, refer to the first label as '%l3' and
38328the second as '%l4').
38329
38330 Alternately, you can reference labels using the actual C label name
38331enclosed in brackets.  For example, to reference a label named 'carry',
38332you can use '%l[carry]'.  The label must still be listed in the
38333GOTOLABELS section when using this approach.
38334
38335 Here is an example of 'asm goto' for i386:
38336
38337     asm goto (
38338         "btl %1, %0\n\t"
38339         "jc %l2"
38340         : /* No outputs. */
38341         : "r" (p1), "r" (p2)
38342         : "cc"
38343         : carry);
38344
38345     return 0;
38346
38347     carry:
38348     return 1;
38349
38350 The following example shows an 'asm goto' that uses a memory clobber.
38351
38352     int frob(int x)
38353     {
38354       int y;
38355       asm goto ("frob %%r5, %1; jc %l[error]; mov (%2), %%r5"
38356                 : /* No outputs. */
38357                 : "r"(x), "r"(&y)
38358                 : "r5", "memory"
38359                 : error);
38360       return y;
38361     error:
38362       return -1;
38363     }
38364
383656.47.2.8 x86 Operand Modifiers
38366..............................
38367
38368References to input, output, and goto operands in the assembler template
38369of extended 'asm' statements can use modifiers to affect the way the
38370operands are formatted in the code output to the assembler.  For
38371example, the following code uses the 'h' and 'b' modifiers for x86:
38372
38373     uint16_t  num;
38374     asm volatile ("xchg %h0, %b0" : "+a" (num) );
38375
38376These modifiers generate this assembler code:
38377
38378     xchg %ah, %al
38379
38380 The rest of this discussion uses the following code for illustrative
38381purposes.
38382
38383     int main()
38384     {
38385        int iInt = 1;
38386
38387     top:
38388
38389        asm volatile goto ("some assembler instructions here"
38390        : /* No outputs. */
38391        : "q" (iInt), "X" (sizeof(unsigned char) + 1), "i" (42)
38392        : /* No clobbers. */
38393        : top);
38394     }
38395
38396 With no modifiers, this is what the output from the operands would be
38397for the 'att' and 'intel' dialects of assembler:
38398
38399Operand   'att'  'intel'
38400-----------------------------------
38401'%0'      '%eax' 'eax'
38402'%1'      '$2'   '2'
38403'%3'      '$.L3' 'OFFSET
38404                 FLAT:.L3'
38405
38406 The table below shows the list of supported modifiers and their
38407effects.
38408
38409Modifier   Description                                  Operand   'att'   'intel'
38410------------------------------------------------------------------------------------
38411'A'        Print an absolute memory reference.          '%A0'     '*%rax' 'rax'
38412'b'        Print the QImode name of the register.       '%b0'     '%al'   'al'
38413'c'        Require a constant operand and print the     '%c1'     '2'     '2'
38414           constant expression with no punctuation.
38415'E'        Print the address in Double Integer          '%E1'     '%(rax)''[rax]'
38416           (DImode) mode (8 bytes) when the target is
38417           64-bit.  Otherwise mode is unspecified
38418           (VOIDmode).
38419'h'        Print the QImode name for a "high"           '%h0'     '%ah'   'ah'
38420           register.
38421'H'        Add 8 bytes to an offsettable memory         '%H0'     '8(%rax)''8[rax]'
38422           reference.  Useful when accessing the high
38423           8 bytes of SSE values.  For a memref in
38424           (%rax), it generates
38425'k'        Print the SImode name of the register.       '%k0'     '%eax'  'eax'
38426'l'        Print the label name with no punctuation.    '%l3'     '.L3'   '.L3'
38427'p'        Print raw symbol name (without               '%p2'     '42'    '42'
38428           syntax-specific prefixes).
38429'P'        If used for a function, print the PLT
38430           suffix and generate PIC code.  For
38431           example, emit 'foo@PLT' instead of 'foo'
38432           for the function foo().  If used for a
38433           constant, drop all syntax-specific
38434           prefixes and issue the bare constant.  See
38435           'p' above.
38436'q'        Print the DImode name of the register.       '%q0'     '%rax'  'rax'
38437'w'        Print the HImode name of the register.       '%w0'     '%ax'   'ax'
38438'z'        Print the opcode suffix for the size of      '%z0'     'l'
38439           the current integer operand (one of
38440           'b'/'w'/'l'/'q').
38441
38442 'V' is a special modifier which prints the name of the full integer
38443register without '%'.
38444
384456.47.2.9 x86 Floating-Point 'asm' Operands
38446..........................................
38447
38448On x86 targets, there are several rules on the usage of stack-like
38449registers in the operands of an 'asm'.  These rules apply only to the
38450operands that are stack-like registers:
38451
38452  1. Given a set of input registers that die in an 'asm', it is
38453     necessary to know which are implicitly popped by the 'asm', and
38454     which must be explicitly popped by GCC.
38455
38456     An input register that is implicitly popped by the 'asm' must be
38457     explicitly clobbered, unless it is constrained to match an output
38458     operand.
38459
38460  2. For any input register that is implicitly popped by an 'asm', it is
38461     necessary to know how to adjust the stack to compensate for the
38462     pop.  If any non-popped input is closer to the top of the reg-stack
38463     than the implicitly popped register, it would not be possible to
38464     know what the stack looked like--it's not clear how the rest of the
38465     stack "slides up".
38466
38467     All implicitly popped input registers must be closer to the top of
38468     the reg-stack than any input that is not implicitly popped.
38469
38470     It is possible that if an input dies in an 'asm', the compiler
38471     might use the input register for an output reload.  Consider this
38472     example:
38473
38474          asm ("foo" : "=t" (a) : "f" (b));
38475
38476     This code says that input 'b' is not popped by the 'asm', and that
38477     the 'asm' pushes a result onto the reg-stack, i.e., the stack is
38478     one deeper after the 'asm' than it was before.  But, it is possible
38479     that reload may think that it can use the same register for both
38480     the input and the output.
38481
38482     To prevent this from happening, if any input operand uses the 'f'
38483     constraint, all output register constraints must use the '&'
38484     early-clobber modifier.
38485
38486     The example above is correctly written as:
38487
38488          asm ("foo" : "=&t" (a) : "f" (b));
38489
38490  3. Some operands need to be in particular places on the stack.  All
38491     output operands fall in this category--GCC has no other way to know
38492     which registers the outputs appear in unless you indicate this in
38493     the constraints.
38494
38495     Output operands must specifically indicate which register an output
38496     appears in after an 'asm'.  '=f' is not allowed: the operand
38497     constraints must select a class with a single register.
38498
38499  4. Output operands may not be "inserted" between existing stack
38500     registers.  Since no 387 opcode uses a read/write operand, all
38501     output operands are dead before the 'asm', and are pushed by the
38502     'asm'.  It makes no sense to push anywhere but the top of the
38503     reg-stack.
38504
38505     Output operands must start at the top of the reg-stack: output
38506     operands may not "skip" a register.
38507
38508  5. Some 'asm' statements may need extra stack space for internal
38509     calculations.  This can be guaranteed by clobbering stack registers
38510     unrelated to the inputs and outputs.
38511
38512 This 'asm' takes one input, which is internally popped, and produces
38513two outputs.
38514
38515     asm ("fsincos" : "=t" (cos), "=u" (sin) : "0" (inp));
38516
38517This 'asm' takes two inputs, which are popped by the 'fyl2xp1' opcode,
38518and replaces them with one output.  The 'st(1)' clobber is necessary for
38519the compiler to know that 'fyl2xp1' pops both inputs.
38520
38521     asm ("fyl2xp1" : "=t" (result) : "0" (x), "u" (y) : "st(1)");
38522
38523
38524File: gcc.info,  Node: Constraints,  Next: Asm Labels,  Prev: Extended Asm,  Up: Using Assembly Language with C
38525
385266.47.3 Constraints for 'asm' Operands
38527-------------------------------------
38528
38529Here are specific details on what constraint letters you can use with
38530'asm' operands.  Constraints can say whether an operand may be in a
38531register, and which kinds of register; whether the operand can be a
38532memory reference, and which kinds of address; whether the operand may be
38533an immediate constant, and which possible values it may have.
38534Constraints can also require two operands to match.  Side-effects aren't
38535allowed in operands of inline 'asm', unless '<' or '>' constraints are
38536used, because there is no guarantee that the side effects will happen
38537exactly once in an instruction that can update the addressing register.
38538
38539* Menu:
38540
38541* Simple Constraints::  Basic use of constraints.
38542* Multi-Alternative::   When an insn has two alternative constraint-patterns.
38543* Modifiers::           More precise control over effects of constraints.
38544* Machine Constraints:: Special constraints for some particular machines.
38545
38546
38547File: gcc.info,  Node: Simple Constraints,  Next: Multi-Alternative,  Up: Constraints
38548
385496.47.3.1 Simple Constraints
38550...........................
38551
38552The simplest kind of constraint is a string full of letters, each of
38553which describes one kind of operand that is permitted.  Here are the
38554letters that are allowed:
38555
38556whitespace
38557     Whitespace characters are ignored and can be inserted at any
38558     position except the first.  This enables each alternative for
38559     different operands to be visually aligned in the machine
38560     description even if they have different number of constraints and
38561     modifiers.
38562
38563'm'
38564     A memory operand is allowed, with any kind of address that the
38565     machine supports in general.  Note that the letter used for the
38566     general memory constraint can be re-defined by a back end using the
38567     'TARGET_MEM_CONSTRAINT' macro.
38568
38569'o'
38570     A memory operand is allowed, but only if the address is
38571     "offsettable".  This means that adding a small integer (actually,
38572     the width in bytes of the operand, as determined by its machine
38573     mode) may be added to the address and the result is also a valid
38574     memory address.
38575
38576     For example, an address which is constant is offsettable; so is an
38577     address that is the sum of a register and a constant (as long as a
38578     slightly larger constant is also within the range of
38579     address-offsets supported by the machine); but an autoincrement or
38580     autodecrement address is not offsettable.  More complicated
38581     indirect/indexed addresses may or may not be offsettable depending
38582     on the other addressing modes that the machine supports.
38583
38584     Note that in an output operand which can be matched by another
38585     operand, the constraint letter 'o' is valid only when accompanied
38586     by both '<' (if the target machine has predecrement addressing) and
38587     '>' (if the target machine has preincrement addressing).
38588
38589'V'
38590     A memory operand that is not offsettable.  In other words, anything
38591     that would fit the 'm' constraint but not the 'o' constraint.
38592
38593'<'
38594     A memory operand with autodecrement addressing (either predecrement
38595     or postdecrement) is allowed.  In inline 'asm' this constraint is
38596     only allowed if the operand is used exactly once in an instruction
38597     that can handle the side effects.  Not using an operand with '<' in
38598     constraint string in the inline 'asm' pattern at all or using it in
38599     multiple instructions isn't valid, because the side effects
38600     wouldn't be performed or would be performed more than once.
38601     Furthermore, on some targets the operand with '<' in constraint
38602     string must be accompanied by special instruction suffixes like
38603     '%U0' instruction suffix on PowerPC or '%P0' on IA-64.
38604
38605'>'
38606     A memory operand with autoincrement addressing (either preincrement
38607     or postincrement) is allowed.  In inline 'asm' the same
38608     restrictions as for '<' apply.
38609
38610'r'
38611     A register operand is allowed provided that it is in a general
38612     register.
38613
38614'i'
38615     An immediate integer operand (one with constant value) is allowed.
38616     This includes symbolic constants whose values will be known only at
38617     assembly time or later.
38618
38619'n'
38620     An immediate integer operand with a known numeric value is allowed.
38621     Many systems cannot support assembly-time constants for operands
38622     less than a word wide.  Constraints for these operands should use
38623     'n' rather than 'i'.
38624
38625'I', 'J', 'K', ... 'P'
38626     Other letters in the range 'I' through 'P' may be defined in a
38627     machine-dependent fashion to permit immediate integer operands with
38628     explicit integer values in specified ranges.  For example, on the
38629     68000, 'I' is defined to stand for the range of values 1 to 8.
38630     This is the range permitted as a shift count in the shift
38631     instructions.
38632
38633'E'
38634     An immediate floating operand (expression code 'const_double') is
38635     allowed, but only if the target floating point format is the same
38636     as that of the host machine (on which the compiler is running).
38637
38638'F'
38639     An immediate floating operand (expression code 'const_double' or
38640     'const_vector') is allowed.
38641
38642'G', 'H'
38643     'G' and 'H' may be defined in a machine-dependent fashion to permit
38644     immediate floating operands in particular ranges of values.
38645
38646's'
38647     An immediate integer operand whose value is not an explicit integer
38648     is allowed.
38649
38650     This might appear strange; if an insn allows a constant operand
38651     with a value not known at compile time, it certainly must allow any
38652     known value.  So why use 's' instead of 'i'?  Sometimes it allows
38653     better code to be generated.
38654
38655     For example, on the 68000 in a fullword instruction it is possible
38656     to use an immediate operand; but if the immediate value is between
38657     -128 and 127, better code results from loading the value into a
38658     register and using the register.  This is because the load into the
38659     register can be done with a 'moveq' instruction.  We arrange for
38660     this to happen by defining the letter 'K' to mean "any integer
38661     outside the range -128 to 127", and then specifying 'Ks' in the
38662     operand constraints.
38663
38664'g'
38665     Any register, memory or immediate integer operand is allowed,
38666     except for registers that are not general registers.
38667
38668'X'
38669     Any operand whatsoever is allowed.
38670
38671'0', '1', '2', ... '9'
38672     An operand that matches the specified operand number is allowed.
38673     If a digit is used together with letters within the same
38674     alternative, the digit should come last.
38675
38676     This number is allowed to be more than a single digit.  If multiple
38677     digits are encountered consecutively, they are interpreted as a
38678     single decimal integer.  There is scant chance for ambiguity, since
38679     to-date it has never been desirable that '10' be interpreted as
38680     matching either operand 1 _or_ operand 0.  Should this be desired,
38681     one can use multiple alternatives instead.
38682
38683     This is called a "matching constraint" and what it really means is
38684     that the assembler has only a single operand that fills two roles
38685     which 'asm' distinguishes.  For example, an add instruction uses
38686     two input operands and an output operand, but on most CISC machines
38687     an add instruction really has only two operands, one of them an
38688     input-output operand:
38689
38690          addl #35,r12
38691
38692     Matching constraints are used in these circumstances.  More
38693     precisely, the two operands that match must include one input-only
38694     operand and one output-only operand.  Moreover, the digit must be a
38695     smaller number than the number of the operand that uses it in the
38696     constraint.
38697
38698'p'
38699     An operand that is a valid memory address is allowed.  This is for
38700     "load address" and "push address" instructions.
38701
38702     'p' in the constraint must be accompanied by 'address_operand' as
38703     the predicate in the 'match_operand'.  This predicate interprets
38704     the mode specified in the 'match_operand' as the mode of the memory
38705     reference for which the address would be valid.
38706
38707OTHER-LETTERS
38708     Other letters can be defined in machine-dependent fashion to stand
38709     for particular classes of registers or other arbitrary operand
38710     types.  'd', 'a' and 'f' are defined on the 68000/68020 to stand
38711     for data, address and floating point registers.
38712
38713
38714File: gcc.info,  Node: Multi-Alternative,  Next: Modifiers,  Prev: Simple Constraints,  Up: Constraints
38715
387166.47.3.2 Multiple Alternative Constraints
38717.........................................
38718
38719Sometimes a single instruction has multiple alternative sets of possible
38720operands.  For example, on the 68000, a logical-or instruction can
38721combine register or an immediate value into memory, or it can combine
38722any kind of operand into a register; but it cannot combine one memory
38723location into another.
38724
38725 These constraints are represented as multiple alternatives.  An
38726alternative can be described by a series of letters for each operand.
38727The overall constraint for an operand is made from the letters for this
38728operand from the first alternative, a comma, the letters for this
38729operand from the second alternative, a comma, and so on until the last
38730alternative.  All operands for a single instruction must have the same
38731number of alternatives.
38732
38733 So the first alternative for the 68000's logical-or could be written as
38734'"+m" (output) : "ir" (input)'.  The second could be '"+r" (output):
38735"irm" (input)'.  However, the fact that two memory locations cannot be
38736used in a single instruction prevents simply using '"+rm" (output) :
38737"irm" (input)'.  Using multi-alternatives, this might be written as
38738'"+m,r" (output) : "ir,irm" (input)'.  This describes all the available
38739alternatives to the compiler, allowing it to choose the most efficient
38740one for the current conditions.
38741
38742 There is no way within the template to determine which alternative was
38743chosen.  However you may be able to wrap your 'asm' statements with
38744builtins such as '__builtin_constant_p' to achieve the desired results.
38745
38746
38747File: gcc.info,  Node: Modifiers,  Next: Machine Constraints,  Prev: Multi-Alternative,  Up: Constraints
38748
387496.47.3.3 Constraint Modifier Characters
38750.......................................
38751
38752Here are constraint modifier characters.
38753
38754'='
38755     Means that this operand is written to by this instruction: the
38756     previous value is discarded and replaced by new data.
38757
38758'+'
38759     Means that this operand is both read and written by the
38760     instruction.
38761
38762     When the compiler fixes up the operands to satisfy the constraints,
38763     it needs to know which operands are read by the instruction and
38764     which are written by it.  '=' identifies an operand which is only
38765     written; '+' identifies an operand that is both read and written;
38766     all other operands are assumed to only be read.
38767
38768     If you specify '=' or '+' in a constraint, you put it in the first
38769     character of the constraint string.
38770
38771'&'
38772     Means (in a particular alternative) that this operand is an
38773     "earlyclobber" operand, which is written before the instruction is
38774     finished using the input operands.  Therefore, this operand may not
38775     lie in a register that is read by the instruction or as part of any
38776     memory address.
38777
38778     '&' applies only to the alternative in which it is written.  In
38779     constraints with multiple alternatives, sometimes one alternative
38780     requires '&' while others do not.  See, for example, the 'movdf'
38781     insn of the 68000.
38782
38783     A operand which is read by the instruction can be tied to an
38784     earlyclobber operand if its only use as an input occurs before the
38785     early result is written.  Adding alternatives of this form often
38786     allows GCC to produce better code when only some of the read
38787     operands can be affected by the earlyclobber.  See, for example,
38788     the 'mulsi3' insn of the ARM.
38789
38790     Furthermore, if the "earlyclobber" operand is also a read/write
38791     operand, then that operand is written only after it's used.
38792
38793     '&' does not obviate the need to write '=' or '+'.  As
38794     "earlyclobber" operands are always written, a read-only
38795     "earlyclobber" operand is ill-formed and will be rejected by the
38796     compiler.
38797
38798'%'
38799     Declares the instruction to be commutative for this operand and the
38800     following operand.  This means that the compiler may interchange
38801     the two operands if that is the cheapest way to make all operands
38802     fit the constraints.  '%' applies to all alternatives and must
38803     appear as the first character in the constraint.  Only read-only
38804     operands can use '%'.
38805
38806     GCC can only handle one commutative pair in an asm; if you use
38807     more, the compiler may fail.  Note that you need not use the
38808     modifier if the two alternatives are strictly identical; this would
38809     only waste time in the reload pass.
38810
38811
38812File: gcc.info,  Node: Machine Constraints,  Prev: Modifiers,  Up: Constraints
38813
388146.47.3.4 Constraints for Particular Machines
38815............................................
38816
38817Whenever possible, you should use the general-purpose constraint letters
38818in 'asm' arguments, since they will convey meaning more readily to
38819people reading your code.  Failing that, use the constraint letters that
38820usually have very similar meanings across architectures.  The most
38821commonly used constraints are 'm' and 'r' (for memory and
38822general-purpose registers respectively; *note Simple Constraints::), and
38823'I', usually the letter indicating the most common immediate-constant
38824format.
38825
38826 Each architecture defines additional constraints.  These constraints
38827are used by the compiler itself for instruction generation, as well as
38828for 'asm' statements; therefore, some of the constraints are not
38829particularly useful for 'asm'.  Here is a summary of some of the
38830machine-dependent constraints available on some particular machines; it
38831includes both constraints that are useful for 'asm' and constraints that
38832aren't.  The compiler source file mentioned in the table heading for
38833each architecture is the definitive reference for the meanings of that
38834architecture's constraints.
38835
38836_AArch64 family--'config/aarch64/constraints.md'_
38837     'k'
38838          The stack pointer register ('SP')
38839
38840     'w'
38841          Floating point register, Advanced SIMD vector register or SVE
38842          vector register
38843
38844     'x'
38845          Like 'w', but restricted to registers 0 to 15 inclusive.
38846
38847     'y'
38848          Like 'w', but restricted to registers 0 to 7 inclusive.
38849
38850     'Upl'
38851          One of the low eight SVE predicate registers ('P0' to 'P7')
38852
38853     'Upa'
38854          Any of the SVE predicate registers ('P0' to 'P15')
38855
38856     'I'
38857          Integer constant that is valid as an immediate operand in an
38858          'ADD' instruction
38859
38860     'J'
38861          Integer constant that is valid as an immediate operand in a
38862          'SUB' instruction (once negated)
38863
38864     'K'
38865          Integer constant that can be used with a 32-bit logical
38866          instruction
38867
38868     'L'
38869          Integer constant that can be used with a 64-bit logical
38870          instruction
38871
38872     'M'
38873          Integer constant that is valid as an immediate operand in a
38874          32-bit 'MOV' pseudo instruction.  The 'MOV' may be assembled
38875          to one of several different machine instructions depending on
38876          the value
38877
38878     'N'
38879          Integer constant that is valid as an immediate operand in a
38880          64-bit 'MOV' pseudo instruction
38881
38882     'S'
38883          An absolute symbolic address or a label reference
38884
38885     'Y'
38886          Floating point constant zero
38887
38888     'Z'
38889          Integer constant zero
38890
38891     'Ush'
38892          The high part (bits 12 and upwards) of the pc-relative address
38893          of a symbol within 4GB of the instruction
38894
38895     'Q'
38896          A memory address which uses a single base register with no
38897          offset
38898
38899     'Ump'
38900          A memory address suitable for a load/store pair instruction in
38901          SI, DI, SF and DF modes
38902
38903_AMD GCN --'config/gcn/constraints.md'_
38904     'I'
38905          Immediate integer in the range -16 to 64
38906
38907     'J'
38908          Immediate 16-bit signed integer
38909
38910     'Kf'
38911          Immediate constant -1
38912
38913     'L'
38914          Immediate 15-bit unsigned integer
38915
38916     'A'
38917          Immediate constant that can be inlined in an instruction
38918          encoding: integer -16..64, or float 0.0, +/-0.5, +/-1.0,
38919          +/-2.0, +/-4.0, 1.0/(2.0*PI)
38920
38921     'B'
38922          Immediate 32-bit signed integer that can be attached to an
38923          instruction encoding
38924
38925     'C'
38926          Immediate 32-bit integer in range -16..4294967295 (i.e.
38927          32-bit unsigned integer or 'A' constraint)
38928
38929     'DA'
38930          Immediate 64-bit constant that can be split into two 'A'
38931          constants
38932
38933     'DB'
38934          Immediate 64-bit constant that can be split into two 'B'
38935          constants
38936
38937     'U'
38938          Any 'unspec'
38939
38940     'Y'
38941          Any 'symbol_ref' or 'label_ref'
38942
38943     'v'
38944          VGPR register
38945
38946     'Sg'
38947          SGPR register
38948
38949     'SD'
38950          SGPR registers valid for instruction destinations, including
38951          VCC, M0 and EXEC
38952
38953     'SS'
38954          SGPR registers valid for instruction sources, including VCC,
38955          M0, EXEC and SCC
38956
38957     'Sm'
38958          SGPR registers valid as a source for scalar memory
38959          instructions (excludes M0 and EXEC)
38960
38961     'Sv'
38962          SGPR registers valid as a source or destination for vector
38963          instructions (excludes EXEC)
38964
38965     'ca'
38966          All condition registers: SCC, VCCZ, EXECZ
38967
38968     'cs'
38969          Scalar condition register: SCC
38970
38971     'cV'
38972          Vector condition register: VCC, VCC_LO, VCC_HI
38973
38974     'e'
38975          EXEC register (EXEC_LO and EXEC_HI)
38976
38977     'RB'
38978          Memory operand with address space suitable for 'buffer_*'
38979          instructions
38980
38981     'RF'
38982          Memory operand with address space suitable for 'flat_*'
38983          instructions
38984
38985     'RS'
38986          Memory operand with address space suitable for 's_*'
38987          instructions
38988
38989     'RL'
38990          Memory operand with address space suitable for 'ds_*' LDS
38991          instructions
38992
38993     'RG'
38994          Memory operand with address space suitable for 'ds_*' GDS
38995          instructions
38996
38997     'RD'
38998          Memory operand with address space suitable for any 'ds_*'
38999          instructions
39000
39001     'RM'
39002          Memory operand with address space suitable for 'global_*'
39003          instructions
39004
39005_ARC --'config/arc/constraints.md'_
39006     'q'
39007          Registers usable in ARCompact 16-bit instructions: 'r0'-'r3',
39008          'r12'-'r15'.  This constraint can only match when the '-mq'
39009          option is in effect.
39010
39011     'e'
39012          Registers usable as base-regs of memory addresses in ARCompact
39013          16-bit memory instructions: 'r0'-'r3', 'r12'-'r15', 'sp'.
39014          This constraint can only match when the '-mq' option is in
39015          effect.
39016     'D'
39017          ARC FPX (dpfp) 64-bit registers.  'D0', 'D1'.
39018
39019     'I'
39020          A signed 12-bit integer constant.
39021
39022     'Cal'
39023          constant for arithmetic/logical operations.  This might be any
39024          constant that can be put into a long immediate by the assmbler
39025          or linker without involving a PIC relocation.
39026
39027     'K'
39028          A 3-bit unsigned integer constant.
39029
39030     'L'
39031          A 6-bit unsigned integer constant.
39032
39033     'CnL'
39034          One's complement of a 6-bit unsigned integer constant.
39035
39036     'CmL'
39037          Two's complement of a 6-bit unsigned integer constant.
39038
39039     'M'
39040          A 5-bit unsigned integer constant.
39041
39042     'O'
39043          A 7-bit unsigned integer constant.
39044
39045     'P'
39046          A 8-bit unsigned integer constant.
39047
39048     'H'
39049          Any const_double value.
39050
39051_ARM family--'config/arm/constraints.md'_
39052
39053     'h'
39054          In Thumb state, the core registers 'r8'-'r15'.
39055
39056     'k'
39057          The stack pointer register.
39058
39059     'l'
39060          In Thumb State the core registers 'r0'-'r7'.  In ARM state
39061          this is an alias for the 'r' constraint.
39062
39063     't'
39064          VFP floating-point registers 's0'-'s31'.  Used for 32 bit
39065          values.
39066
39067     'w'
39068          VFP floating-point registers 'd0'-'d31' and the appropriate
39069          subset 'd0'-'d15' based on command line options.  Used for 64
39070          bit values only.  Not valid for Thumb1.
39071
39072     'y'
39073          The iWMMX co-processor registers.
39074
39075     'z'
39076          The iWMMX GR registers.
39077
39078     'G'
39079          The floating-point constant 0.0
39080
39081     'I'
39082          Integer that is valid as an immediate operand in a data
39083          processing instruction.  That is, an integer in the range 0 to
39084          255 rotated by a multiple of 2
39085
39086     'J'
39087          Integer in the range -4095 to 4095
39088
39089     'K'
39090          Integer that satisfies constraint 'I' when inverted (ones
39091          complement)
39092
39093     'L'
39094          Integer that satisfies constraint 'I' when negated (twos
39095          complement)
39096
39097     'M'
39098          Integer in the range 0 to 32
39099
39100     'Q'
39101          A memory reference where the exact address is in a single
39102          register (''m'' is preferable for 'asm' statements)
39103
39104     'R'
39105          An item in the constant pool
39106
39107     'S'
39108          A symbol in the text segment of the current file
39109
39110     'Uv'
39111          A memory reference suitable for VFP load/store insns
39112          (reg+constant offset)
39113
39114     'Uy'
39115          A memory reference suitable for iWMMXt load/store
39116          instructions.
39117
39118     'Uq'
39119          A memory reference suitable for the ARMv4 ldrsb instruction.
39120
39121_AVR family--'config/avr/constraints.md'_
39122     'l'
39123          Registers from r0 to r15
39124
39125     'a'
39126          Registers from r16 to r23
39127
39128     'd'
39129          Registers from r16 to r31
39130
39131     'w'
39132          Registers from r24 to r31.  These registers can be used in
39133          'adiw' command
39134
39135     'e'
39136          Pointer register (r26-r31)
39137
39138     'b'
39139          Base pointer register (r28-r31)
39140
39141     'q'
39142          Stack pointer register (SPH:SPL)
39143
39144     't'
39145          Temporary register r0
39146
39147     'x'
39148          Register pair X (r27:r26)
39149
39150     'y'
39151          Register pair Y (r29:r28)
39152
39153     'z'
39154          Register pair Z (r31:r30)
39155
39156     'I'
39157          Constant greater than -1, less than 64
39158
39159     'J'
39160          Constant greater than -64, less than 1
39161
39162     'K'
39163          Constant integer 2
39164
39165     'L'
39166          Constant integer 0
39167
39168     'M'
39169          Constant that fits in 8 bits
39170
39171     'N'
39172          Constant integer -1
39173
39174     'O'
39175          Constant integer 8, 16, or 24
39176
39177     'P'
39178          Constant integer 1
39179
39180     'G'
39181          A floating point constant 0.0
39182
39183     'Q'
39184          A memory address based on Y or Z pointer with displacement.
39185
39186_Blackfin family--'config/bfin/constraints.md'_
39187     'a'
39188          P register
39189
39190     'd'
39191          D register
39192
39193     'z'
39194          A call clobbered P register.
39195
39196     'qN'
39197          A single register.  If N is in the range 0 to 7, the
39198          corresponding D register.  If it is 'A', then the register P0.
39199
39200     'D'
39201          Even-numbered D register
39202
39203     'W'
39204          Odd-numbered D register
39205
39206     'e'
39207          Accumulator register.
39208
39209     'A'
39210          Even-numbered accumulator register.
39211
39212     'B'
39213          Odd-numbered accumulator register.
39214
39215     'b'
39216          I register
39217
39218     'v'
39219          B register
39220
39221     'f'
39222          M register
39223
39224     'c'
39225          Registers used for circular buffering, i.e. I, B, or L
39226          registers.
39227
39228     'C'
39229          The CC register.
39230
39231     't'
39232          LT0 or LT1.
39233
39234     'k'
39235          LC0 or LC1.
39236
39237     'u'
39238          LB0 or LB1.
39239
39240     'x'
39241          Any D, P, B, M, I or L register.
39242
39243     'y'
39244          Additional registers typically used only in prologues and
39245          epilogues: RETS, RETN, RETI, RETX, RETE, ASTAT, SEQSTAT and
39246          USP.
39247
39248     'w'
39249          Any register except accumulators or CC.
39250
39251     'Ksh'
39252          Signed 16 bit integer (in the range -32768 to 32767)
39253
39254     'Kuh'
39255          Unsigned 16 bit integer (in the range 0 to 65535)
39256
39257     'Ks7'
39258          Signed 7 bit integer (in the range -64 to 63)
39259
39260     'Ku7'
39261          Unsigned 7 bit integer (in the range 0 to 127)
39262
39263     'Ku5'
39264          Unsigned 5 bit integer (in the range 0 to 31)
39265
39266     'Ks4'
39267          Signed 4 bit integer (in the range -8 to 7)
39268
39269     'Ks3'
39270          Signed 3 bit integer (in the range -3 to 4)
39271
39272     'Ku3'
39273          Unsigned 3 bit integer (in the range 0 to 7)
39274
39275     'PN'
39276          Constant N, where N is a single-digit constant in the range 0
39277          to 4.
39278
39279     'PA'
39280          An integer equal to one of the MACFLAG_XXX constants that is
39281          suitable for use with either accumulator.
39282
39283     'PB'
39284          An integer equal to one of the MACFLAG_XXX constants that is
39285          suitable for use only with accumulator A1.
39286
39287     'M1'
39288          Constant 255.
39289
39290     'M2'
39291          Constant 65535.
39292
39293     'J'
39294          An integer constant with exactly a single bit set.
39295
39296     'L'
39297          An integer constant with all bits set except exactly one.
39298
39299     'H'
39300
39301     'Q'
39302          Any SYMBOL_REF.
39303
39304_CR16 Architecture--'config/cr16/cr16.h'_
39305
39306     'b'
39307          Registers from r0 to r14 (registers without stack pointer)
39308
39309     't'
39310          Register from r0 to r11 (all 16-bit registers)
39311
39312     'p'
39313          Register from r12 to r15 (all 32-bit registers)
39314
39315     'I'
39316          Signed constant that fits in 4 bits
39317
39318     'J'
39319          Signed constant that fits in 5 bits
39320
39321     'K'
39322          Signed constant that fits in 6 bits
39323
39324     'L'
39325          Unsigned constant that fits in 4 bits
39326
39327     'M'
39328          Signed constant that fits in 32 bits
39329
39330     'N'
39331          Check for 64 bits wide constants for add/sub instructions
39332
39333     'G'
39334          Floating point constant that is legal for store immediate
39335
39336_C-SKY--'config/csky/constraints.md'_
39337
39338     'a'
39339          The mini registers r0 - r7.
39340
39341     'b'
39342          The low registers r0 - r15.
39343
39344     'c'
39345          C register.
39346
39347     'y'
39348          HI and LO registers.
39349
39350     'l'
39351          LO register.
39352
39353     'h'
39354          HI register.
39355
39356     'v'
39357          Vector registers.
39358
39359     'z'
39360          Stack pointer register (SP).
39361
39362_Epiphany--'config/epiphany/constraints.md'_
39363     'U16'
39364          An unsigned 16-bit constant.
39365
39366     'K'
39367          An unsigned 5-bit constant.
39368
39369     'L'
39370          A signed 11-bit constant.
39371
39372     'Cm1'
39373          A signed 11-bit constant added to -1.  Can only match when the
39374          '-m1reg-REG' option is active.
39375
39376     'Cl1'
39377          Left-shift of -1, i.e., a bit mask with a block of leading
39378          ones, the rest being a block of trailing zeroes.  Can only
39379          match when the '-m1reg-REG' option is active.
39380
39381     'Cr1'
39382          Right-shift of -1, i.e., a bit mask with a trailing block of
39383          ones, the rest being zeroes.  Or to put it another way, one
39384          less than a power of two.  Can only match when the
39385          '-m1reg-REG' option is active.
39386
39387     'Cal'
39388          Constant for arithmetic/logical operations.  This is like 'i',
39389          except that for position independent code, no symbols /
39390          expressions needing relocations are allowed.
39391
39392     'Csy'
39393          Symbolic constant for call/jump instruction.
39394
39395     'Rcs'
39396          The register class usable in short insns.  This is a register
39397          class constraint, and can thus drive register allocation.
39398          This constraint won't match unless '-mprefer-short-insn-regs'
39399          is in effect.
39400
39401     'Rsc'
39402          The the register class of registers that can be used to hold a
39403          sibcall call address.  I.e., a caller-saved register.
39404
39405     'Rct'
39406          Core control register class.
39407
39408     'Rgs'
39409          The register group usable in short insns.  This constraint
39410          does not use a register class, so that it only passively
39411          matches suitable registers, and doesn't drive register
39412          allocation.
39413
39414     'Rra'
39415          Matches the return address if it can be replaced with the link
39416          register.
39417
39418     'Rcc'
39419          Matches the integer condition code register.
39420
39421     'Sra'
39422          Matches the return address if it is in a stack slot.
39423
39424     'Cfm'
39425          Matches control register values to switch fp mode, which are
39426          encapsulated in 'UNSPEC_FP_MODE'.
39427
39428_FRV--'config/frv/frv.h'_
39429     'a'
39430          Register in the class 'ACC_REGS' ('acc0' to 'acc7').
39431
39432     'b'
39433          Register in the class 'EVEN_ACC_REGS' ('acc0' to 'acc7').
39434
39435     'c'
39436          Register in the class 'CC_REGS' ('fcc0' to 'fcc3' and 'icc0'
39437          to 'icc3').
39438
39439     'd'
39440          Register in the class 'GPR_REGS' ('gr0' to 'gr63').
39441
39442     'e'
39443          Register in the class 'EVEN_REGS' ('gr0' to 'gr63').  Odd
39444          registers are excluded not in the class but through the use of
39445          a machine mode larger than 4 bytes.
39446
39447     'f'
39448          Register in the class 'FPR_REGS' ('fr0' to 'fr63').
39449
39450     'h'
39451          Register in the class 'FEVEN_REGS' ('fr0' to 'fr63').  Odd
39452          registers are excluded not in the class but through the use of
39453          a machine mode larger than 4 bytes.
39454
39455     'l'
39456          Register in the class 'LR_REG' (the 'lr' register).
39457
39458     'q'
39459          Register in the class 'QUAD_REGS' ('gr2' to 'gr63').  Register
39460          numbers not divisible by 4 are excluded not in the class but
39461          through the use of a machine mode larger than 8 bytes.
39462
39463     't'
39464          Register in the class 'ICC_REGS' ('icc0' to 'icc3').
39465
39466     'u'
39467          Register in the class 'FCC_REGS' ('fcc0' to 'fcc3').
39468
39469     'v'
39470          Register in the class 'ICR_REGS' ('cc4' to 'cc7').
39471
39472     'w'
39473          Register in the class 'FCR_REGS' ('cc0' to 'cc3').
39474
39475     'x'
39476          Register in the class 'QUAD_FPR_REGS' ('fr0' to 'fr63').
39477          Register numbers not divisible by 4 are excluded not in the
39478          class but through the use of a machine mode larger than 8
39479          bytes.
39480
39481     'z'
39482          Register in the class 'SPR_REGS' ('lcr' and 'lr').
39483
39484     'A'
39485          Register in the class 'QUAD_ACC_REGS' ('acc0' to 'acc7').
39486
39487     'B'
39488          Register in the class 'ACCG_REGS' ('accg0' to 'accg7').
39489
39490     'C'
39491          Register in the class 'CR_REGS' ('cc0' to 'cc7').
39492
39493     'G'
39494          Floating point constant zero
39495
39496     'I'
39497          6-bit signed integer constant
39498
39499     'J'
39500          10-bit signed integer constant
39501
39502     'L'
39503          16-bit signed integer constant
39504
39505     'M'
39506          16-bit unsigned integer constant
39507
39508     'N'
39509          12-bit signed integer constant that is negative--i.e. in the
39510          range of -2048 to -1
39511
39512     'O'
39513          Constant zero
39514
39515     'P'
39516          12-bit signed integer constant that is greater than zero--i.e.
39517          in the range of 1 to 2047.
39518
39519_FT32--'config/ft32/constraints.md'_
39520     'A'
39521          An absolute address
39522
39523     'B'
39524          An offset address
39525
39526     'W'
39527          A register indirect memory operand
39528
39529     'e'
39530          An offset address.
39531
39532     'f'
39533          An offset address.
39534
39535     'O'
39536          The constant zero or one
39537
39538     'I'
39539          A 16-bit signed constant (-32768 ... 32767)
39540
39541     'w'
39542          A bitfield mask suitable for bext or bins
39543
39544     'x'
39545          An inverted bitfield mask suitable for bext or bins
39546
39547     'L'
39548          A 16-bit unsigned constant, multiple of 4 (0 ... 65532)
39549
39550     'S'
39551          A 20-bit signed constant (-524288 ... 524287)
39552
39553     'b'
39554          A constant for a bitfield width (1 ... 16)
39555
39556     'KA'
39557          A 10-bit signed constant (-512 ... 511)
39558
39559_Hewlett-Packard PA-RISC--'config/pa/pa.h'_
39560     'a'
39561          General register 1
39562
39563     'f'
39564          Floating point register
39565
39566     'q'
39567          Shift amount register
39568
39569     'x'
39570          Floating point register (deprecated)
39571
39572     'y'
39573          Upper floating point register (32-bit), floating point
39574          register (64-bit)
39575
39576     'Z'
39577          Any register
39578
39579     'I'
39580          Signed 11-bit integer constant
39581
39582     'J'
39583          Signed 14-bit integer constant
39584
39585     'K'
39586          Integer constant that can be deposited with a 'zdepi'
39587          instruction
39588
39589     'L'
39590          Signed 5-bit integer constant
39591
39592     'M'
39593          Integer constant 0
39594
39595     'N'
39596          Integer constant that can be loaded with a 'ldil' instruction
39597
39598     'O'
39599          Integer constant whose value plus one is a power of 2
39600
39601     'P'
39602          Integer constant that can be used for 'and' operations in
39603          'depi' and 'extru' instructions
39604
39605     'S'
39606          Integer constant 31
39607
39608     'U'
39609          Integer constant 63
39610
39611     'G'
39612          Floating-point constant 0.0
39613
39614     'A'
39615          A 'lo_sum' data-linkage-table memory operand
39616
39617     'Q'
39618          A memory operand that can be used as the destination operand
39619          of an integer store instruction
39620
39621     'R'
39622          A scaled or unscaled indexed memory operand
39623
39624     'T'
39625          A memory operand for floating-point loads and stores
39626
39627     'W'
39628          A register indirect memory operand
39629
39630_Intel IA-64--'config/ia64/ia64.h'_
39631     'a'
39632          General register 'r0' to 'r3' for 'addl' instruction
39633
39634     'b'
39635          Branch register
39636
39637     'c'
39638          Predicate register ('c' as in "conditional")
39639
39640     'd'
39641          Application register residing in M-unit
39642
39643     'e'
39644          Application register residing in I-unit
39645
39646     'f'
39647          Floating-point register
39648
39649     'm'
39650          Memory operand.  If used together with '<' or '>', the operand
39651          can have postincrement and postdecrement which require
39652          printing with '%Pn' on IA-64.
39653
39654     'G'
39655          Floating-point constant 0.0 or 1.0
39656
39657     'I'
39658          14-bit signed integer constant
39659
39660     'J'
39661          22-bit signed integer constant
39662
39663     'K'
39664          8-bit signed integer constant for logical instructions
39665
39666     'L'
39667          8-bit adjusted signed integer constant for compare pseudo-ops
39668
39669     'M'
39670          6-bit unsigned integer constant for shift counts
39671
39672     'N'
39673          9-bit signed integer constant for load and store
39674          postincrements
39675
39676     'O'
39677          The constant zero
39678
39679     'P'
39680          0 or -1 for 'dep' instruction
39681
39682     'Q'
39683          Non-volatile memory for floating-point loads and stores
39684
39685     'R'
39686          Integer constant in the range 1 to 4 for 'shladd' instruction
39687
39688     'S'
39689          Memory operand except postincrement and postdecrement.  This
39690          is now roughly the same as 'm' when not used together with '<'
39691          or '>'.
39692
39693_M32C--'config/m32c/m32c.c'_
39694     'Rsp'
39695     'Rfb'
39696     'Rsb'
39697          '$sp', '$fb', '$sb'.
39698
39699     'Rcr'
39700          Any control register, when they're 16 bits wide (nothing if
39701          control registers are 24 bits wide)
39702
39703     'Rcl'
39704          Any control register, when they're 24 bits wide.
39705
39706     'R0w'
39707     'R1w'
39708     'R2w'
39709     'R3w'
39710          $r0, $r1, $r2, $r3.
39711
39712     'R02'
39713          $r0 or $r2, or $r2r0 for 32 bit values.
39714
39715     'R13'
39716          $r1 or $r3, or $r3r1 for 32 bit values.
39717
39718     'Rdi'
39719          A register that can hold a 64 bit value.
39720
39721     'Rhl'
39722          $r0 or $r1 (registers with addressable high/low bytes)
39723
39724     'R23'
39725          $r2 or $r3
39726
39727     'Raa'
39728          Address registers
39729
39730     'Raw'
39731          Address registers when they're 16 bits wide.
39732
39733     'Ral'
39734          Address registers when they're 24 bits wide.
39735
39736     'Rqi'
39737          Registers that can hold QI values.
39738
39739     'Rad'
39740          Registers that can be used with displacements ($a0, $a1, $sb).
39741
39742     'Rsi'
39743          Registers that can hold 32 bit values.
39744
39745     'Rhi'
39746          Registers that can hold 16 bit values.
39747
39748     'Rhc'
39749          Registers chat can hold 16 bit values, including all control
39750          registers.
39751
39752     'Rra'
39753          $r0 through R1, plus $a0 and $a1.
39754
39755     'Rfl'
39756          The flags register.
39757
39758     'Rmm'
39759          The memory-based pseudo-registers $mem0 through $mem15.
39760
39761     'Rpi'
39762          Registers that can hold pointers (16 bit registers for r8c,
39763          m16c; 24 bit registers for m32cm, m32c).
39764
39765     'Rpa'
39766          Matches multiple registers in a PARALLEL to form a larger
39767          register.  Used to match function return values.
39768
39769     'Is3'
39770          -8 ... 7
39771
39772     'IS1'
39773          -128 ... 127
39774
39775     'IS2'
39776          -32768 ... 32767
39777
39778     'IU2'
39779          0 ... 65535
39780
39781     'In4'
39782          -8 ... -1 or 1 ... 8
39783
39784     'In5'
39785          -16 ... -1 or 1 ... 16
39786
39787     'In6'
39788          -32 ... -1 or 1 ... 32
39789
39790     'IM2'
39791          -65536 ... -1
39792
39793     'Ilb'
39794          An 8 bit value with exactly one bit set.
39795
39796     'Ilw'
39797          A 16 bit value with exactly one bit set.
39798
39799     'Sd'
39800          The common src/dest memory addressing modes.
39801
39802     'Sa'
39803          Memory addressed using $a0 or $a1.
39804
39805     'Si'
39806          Memory addressed with immediate addresses.
39807
39808     'Ss'
39809          Memory addressed using the stack pointer ($sp).
39810
39811     'Sf'
39812          Memory addressed using the frame base register ($fb).
39813
39814     'Ss'
39815          Memory addressed using the small base register ($sb).
39816
39817     'S1'
39818          $r1h
39819
39820_MicroBlaze--'config/microblaze/constraints.md'_
39821     'd'
39822          A general register ('r0' to 'r31').
39823
39824     'z'
39825          A status register ('rmsr', '$fcc1' to '$fcc7').
39826
39827_MIPS--'config/mips/constraints.md'_
39828     'd'
39829          A general-purpose register.  This is equivalent to 'r' unless
39830          generating MIPS16 code, in which case the MIPS16 register set
39831          is used.
39832
39833     'f'
39834          A floating-point register (if available).
39835
39836     'h'
39837          Formerly the 'hi' register.  This constraint is no longer
39838          supported.
39839
39840     'l'
39841          The 'lo' register.  Use this register to store values that are
39842          no bigger than a word.
39843
39844     'x'
39845          The concatenated 'hi' and 'lo' registers.  Use this register
39846          to store doubleword values.
39847
39848     'c'
39849          A register suitable for use in an indirect jump.  This will
39850          always be '$25' for '-mabicalls'.
39851
39852     'v'
39853          Register '$3'.  Do not use this constraint in new code; it is
39854          retained only for compatibility with glibc.
39855
39856     'y'
39857          Equivalent to 'r'; retained for backwards compatibility.
39858
39859     'z'
39860          A floating-point condition code register.
39861
39862     'I'
39863          A signed 16-bit constant (for arithmetic instructions).
39864
39865     'J'
39866          Integer zero.
39867
39868     'K'
39869          An unsigned 16-bit constant (for logic instructions).
39870
39871     'L'
39872          A signed 32-bit constant in which the lower 16 bits are zero.
39873          Such constants can be loaded using 'lui'.
39874
39875     'M'
39876          A constant that cannot be loaded using 'lui', 'addiu' or
39877          'ori'.
39878
39879     'N'
39880          A constant in the range -65535 to -1 (inclusive).
39881
39882     'O'
39883          A signed 15-bit constant.
39884
39885     'P'
39886          A constant in the range 1 to 65535 (inclusive).
39887
39888     'G'
39889          Floating-point zero.
39890
39891     'R'
39892          An address that can be used in a non-macro load or store.
39893
39894     'ZC'
39895          A memory operand whose address is formed by a base register
39896          and offset that is suitable for use in instructions with the
39897          same addressing mode as 'll' and 'sc'.
39898
39899     'ZD'
39900          An address suitable for a 'prefetch' instruction, or for any
39901          other instruction with the same addressing mode as 'prefetch'.
39902
39903_Motorola 680x0--'config/m68k/constraints.md'_
39904     'a'
39905          Address register
39906
39907     'd'
39908          Data register
39909
39910     'f'
39911          68881 floating-point register, if available
39912
39913     'I'
39914          Integer in the range 1 to 8
39915
39916     'J'
39917          16-bit signed number
39918
39919     'K'
39920          Signed number whose magnitude is greater than 0x80
39921
39922     'L'
39923          Integer in the range -8 to -1
39924
39925     'M'
39926          Signed number whose magnitude is greater than 0x100
39927
39928     'N'
39929          Range 24 to 31, rotatert:SI 8 to 1 expressed as rotate
39930
39931     'O'
39932          16 (for rotate using swap)
39933
39934     'P'
39935          Range 8 to 15, rotatert:HI 8 to 1 expressed as rotate
39936
39937     'R'
39938          Numbers that mov3q can handle
39939
39940     'G'
39941          Floating point constant that is not a 68881 constant
39942
39943     'S'
39944          Operands that satisfy 'm' when -mpcrel is in effect
39945
39946     'T'
39947          Operands that satisfy 's' when -mpcrel is not in effect
39948
39949     'Q'
39950          Address register indirect addressing mode
39951
39952     'U'
39953          Register offset addressing
39954
39955     'W'
39956          const_call_operand
39957
39958     'Cs'
39959          symbol_ref or const
39960
39961     'Ci'
39962          const_int
39963
39964     'C0'
39965          const_int 0
39966
39967     'Cj'
39968          Range of signed numbers that don't fit in 16 bits
39969
39970     'Cmvq'
39971          Integers valid for mvq
39972
39973     'Capsw'
39974          Integers valid for a moveq followed by a swap
39975
39976     'Cmvz'
39977          Integers valid for mvz
39978
39979     'Cmvs'
39980          Integers valid for mvs
39981
39982     'Ap'
39983          push_operand
39984
39985     'Ac'
39986          Non-register operands allowed in clr
39987
39988_Moxie--'config/moxie/constraints.md'_
39989     'A'
39990          An absolute address
39991
39992     'B'
39993          An offset address
39994
39995     'W'
39996          A register indirect memory operand
39997
39998     'I'
39999          A constant in the range of 0 to 255.
40000
40001     'N'
40002          A constant in the range of 0 to -255.
40003
40004_MSP430-'config/msp430/constraints.md'_
40005
40006     'R12'
40007          Register R12.
40008
40009     'R13'
40010          Register R13.
40011
40012     'K'
40013          Integer constant 1.
40014
40015     'L'
40016          Integer constant -1^20..1^19.
40017
40018     'M'
40019          Integer constant 1-4.
40020
40021     'Ya'
40022          Memory references which do not require an extended MOVX
40023          instruction.
40024
40025     'Yl'
40026          Memory reference, labels only.
40027
40028     'Ys'
40029          Memory reference, stack only.
40030
40031_NDS32--'config/nds32/constraints.md'_
40032     'w'
40033          LOW register class $r0 to $r7 constraint for V3/V3M ISA.
40034     'l'
40035          LOW register class $r0 to $r7.
40036     'd'
40037          MIDDLE register class $r0 to $r11, $r16 to $r19.
40038     'h'
40039          HIGH register class $r12 to $r14, $r20 to $r31.
40040     't'
40041          Temporary assist register $ta (i.e. $r15).
40042     'k'
40043          Stack register $sp.
40044     'Iu03'
40045          Unsigned immediate 3-bit value.
40046     'In03'
40047          Negative immediate 3-bit value in the range of -7-0.
40048     'Iu04'
40049          Unsigned immediate 4-bit value.
40050     'Is05'
40051          Signed immediate 5-bit value.
40052     'Iu05'
40053          Unsigned immediate 5-bit value.
40054     'In05'
40055          Negative immediate 5-bit value in the range of -31-0.
40056     'Ip05'
40057          Unsigned immediate 5-bit value for movpi45 instruction with
40058          range 16-47.
40059     'Iu06'
40060          Unsigned immediate 6-bit value constraint for addri36.sp
40061          instruction.
40062     'Iu08'
40063          Unsigned immediate 8-bit value.
40064     'Iu09'
40065          Unsigned immediate 9-bit value.
40066     'Is10'
40067          Signed immediate 10-bit value.
40068     'Is11'
40069          Signed immediate 11-bit value.
40070     'Is15'
40071          Signed immediate 15-bit value.
40072     'Iu15'
40073          Unsigned immediate 15-bit value.
40074     'Ic15'
40075          A constant which is not in the range of imm15u but ok for bclr
40076          instruction.
40077     'Ie15'
40078          A constant which is not in the range of imm15u but ok for bset
40079          instruction.
40080     'It15'
40081          A constant which is not in the range of imm15u but ok for btgl
40082          instruction.
40083     'Ii15'
40084          A constant whose compliment value is in the range of imm15u
40085          and ok for bitci instruction.
40086     'Is16'
40087          Signed immediate 16-bit value.
40088     'Is17'
40089          Signed immediate 17-bit value.
40090     'Is19'
40091          Signed immediate 19-bit value.
40092     'Is20'
40093          Signed immediate 20-bit value.
40094     'Ihig'
40095          The immediate value that can be simply set high 20-bit.
40096     'Izeb'
40097          The immediate value 0xff.
40098     'Izeh'
40099          The immediate value 0xffff.
40100     'Ixls'
40101          The immediate value 0x01.
40102     'Ix11'
40103          The immediate value 0x7ff.
40104     'Ibms'
40105          The immediate value with power of 2.
40106     'Ifex'
40107          The immediate value with power of 2 minus 1.
40108     'U33'
40109          Memory constraint for 333 format.
40110     'U45'
40111          Memory constraint for 45 format.
40112     'U37'
40113          Memory constraint for 37 format.
40114
40115_Nios II family--'config/nios2/constraints.md'_
40116
40117     'I'
40118          Integer that is valid as an immediate operand in an
40119          instruction taking a signed 16-bit number.  Range -32768 to
40120          32767.
40121
40122     'J'
40123          Integer that is valid as an immediate operand in an
40124          instruction taking an unsigned 16-bit number.  Range 0 to
40125          65535.
40126
40127     'K'
40128          Integer that is valid as an immediate operand in an
40129          instruction taking only the upper 16-bits of a 32-bit number.
40130          Range 32-bit numbers with the lower 16-bits being 0.
40131
40132     'L'
40133          Integer that is valid as an immediate operand for a shift
40134          instruction.  Range 0 to 31.
40135
40136     'M'
40137          Integer that is valid as an immediate operand for only the
40138          value 0.  Can be used in conjunction with the format modifier
40139          'z' to use 'r0' instead of '0' in the assembly output.
40140
40141     'N'
40142          Integer that is valid as an immediate operand for a custom
40143          instruction opcode.  Range 0 to 255.
40144
40145     'P'
40146          An immediate operand for R2 andchi/andci instructions.
40147
40148     'S'
40149          Matches immediates which are addresses in the small data
40150          section and therefore can be added to 'gp' as a 16-bit
40151          immediate to re-create their 32-bit value.
40152
40153     'U'
40154          Matches constants suitable as an operand for the rdprs and
40155          cache instructions.
40156
40157     'v'
40158          A memory operand suitable for Nios II R2 load/store exclusive
40159          instructions.
40160
40161     'w'
40162          A memory operand suitable for load/store IO and cache
40163          instructions.
40164
40165_OpenRISC--'config/or1k/constraints.md'_
40166     'I'
40167          Integer that is valid as an immediate operand in an
40168          instruction taking a signed 16-bit number.  Range -32768 to
40169          32767.
40170
40171     'K'
40172          Integer that is valid as an immediate operand in an
40173          instruction taking an unsigned 16-bit number.  Range 0 to
40174          65535.
40175
40176     'M'
40177          Signed 16-bit constant shifted left 16 bits.  (Used with
40178          'l.movhi')
40179
40180     'O'
40181          Zero
40182
40183_PDP-11--'config/pdp11/constraints.md'_
40184     'a'
40185          Floating point registers AC0 through AC3.  These can be loaded
40186          from/to memory with a single instruction.
40187
40188     'd'
40189          Odd numbered general registers (R1, R3, R5).  These are used
40190          for 16-bit multiply operations.
40191
40192     'D'
40193          A memory reference that is encoded within the opcode, but not
40194          auto-increment or auto-decrement.
40195
40196     'f'
40197          Any of the floating point registers (AC0 through AC5).
40198
40199     'G'
40200          Floating point constant 0.
40201
40202     'h'
40203          Floating point registers AC4 and AC5.  These cannot be loaded
40204          from/to memory with a single instruction.
40205
40206     'I'
40207          An integer constant that fits in 16 bits.
40208
40209     'J'
40210          An integer constant whose low order 16 bits are zero.
40211
40212     'K'
40213          An integer constant that does not meet the constraints for
40214          codes 'I' or 'J'.
40215
40216     'L'
40217          The integer constant 1.
40218
40219     'M'
40220          The integer constant -1.
40221
40222     'N'
40223          The integer constant 0.
40224
40225     'O'
40226          Integer constants 0 through 3; shifts by these amounts are
40227          handled as multiple single-bit shifts rather than a single
40228          variable-length shift.
40229
40230     'Q'
40231          A memory reference which requires an additional word (address
40232          or offset) after the opcode.
40233
40234     'R'
40235          A memory reference that is encoded within the opcode.
40236
40237_PowerPC and IBM RS6000--'config/rs6000/constraints.md'_
40238     'r'
40239          A general purpose register (GPR), 'r0'...'r31'.
40240
40241     'b'
40242          A base register.  Like 'r', but 'r0' is not allowed, so
40243          'r1'...'r31'.
40244
40245     'f'
40246          A floating point register (FPR), 'f0'...'f31'.
40247
40248     'd'
40249          A floating point register.  This is the same as 'f' nowadays;
40250          historically 'f' was for single-precision and 'd' was for
40251          double-precision floating point.
40252
40253     'v'
40254          An Altivec vector register (VR), 'v0'...'v31'.
40255
40256     'wa'
40257          A VSX register (VSR), 'vs0'...'vs63'.  This is either an FPR
40258          ('vs0'...'vs31' are 'f0'...'f31') or a VR ('vs32'...'vs63' are
40259          'v0'...'v31').
40260
40261          When using 'wa', you should use the '%x' output modifier, so
40262          that the correct register number is printed.  For example:
40263
40264               asm ("xvadddp %x0,%x1,%x2"
40265                    : "=wa" (v1)
40266                    : "wa" (v2), "wa" (v3));
40267
40268          You should not use '%x' for 'v' operands:
40269
40270               asm ("xsaddqp %0,%1,%2"
40271                    : "=v" (v1)
40272                    : "v" (v2), "v" (v3));
40273
40274     'c'
40275          The count register, 'ctr'.
40276
40277     'l'
40278          The link register, 'lr'.
40279
40280     'x'
40281          Condition register field 0, 'cr0'.
40282
40283     'y'
40284          Any condition register field, 'cr0'...'cr7'.
40285
40286     'I'
40287          A signed 16-bit constant.
40288
40289     'J'
40290          An unsigned 16-bit constant shifted left 16 bits (use 'L'
40291          instead for 'SImode' constants).
40292
40293     'K'
40294          An unsigned 16-bit constant.
40295
40296     'L'
40297          A signed 16-bit constant shifted left 16 bits.
40298
40299     'eI'
40300          A signed 34-bit integer constant if prefixed instructions are
40301          supported.
40302
40303     'm'
40304          A memory operand.  Normally, 'm' does not allow addresses that
40305          update the base register.  If the '<' or '>' constraint is
40306          also used, they are allowed and therefore on PowerPC targets
40307          in that case it is only safe to use 'm<>' in an 'asm'
40308          statement if that 'asm' statement accesses the operand exactly
40309          once.  The 'asm' statement must also use '%U<OPNO>' as a
40310          placeholder for the "update" flag in the corresponding load or
40311          store instruction.  For example:
40312
40313               asm ("st%U0 %1,%0" : "=m<>" (mem) : "r" (val));
40314
40315          is correct but:
40316
40317               asm ("st %1,%0" : "=m<>" (mem) : "r" (val));
40318
40319          is not.
40320
40321     'Q'
40322          A memory operand addressed by just a base register.
40323
40324     'Z'
40325          A memory operand accessed with indexed or indirect addressing.
40326
40327     'a'
40328          An indexed or indirect address.
40329
40330_PRU--'config/pru/constraints.md'_
40331     'I'
40332          An unsigned 8-bit integer constant.
40333
40334     'J'
40335          An unsigned 16-bit integer constant.
40336
40337     'L'
40338          An unsigned 5-bit integer constant (for shift counts).
40339
40340     'T'
40341          A text segment (program memory) constant label.
40342
40343     'Z'
40344          Integer constant zero.
40345
40346_RL78--'config/rl78/constraints.md'_
40347
40348     'Int3'
40349          An integer constant in the range 1 ... 7.
40350     'Int8'
40351          An integer constant in the range 0 ... 255.
40352     'J'
40353          An integer constant in the range -255 ... 0
40354     'K'
40355          The integer constant 1.
40356     'L'
40357          The integer constant -1.
40358     'M'
40359          The integer constant 0.
40360     'N'
40361          The integer constant 2.
40362     'O'
40363          The integer constant -2.
40364     'P'
40365          An integer constant in the range 1 ... 15.
40366     'Qbi'
40367          The built-in compare types-eq, ne, gtu, ltu, geu, and leu.
40368     'Qsc'
40369          The synthetic compare types-gt, lt, ge, and le.
40370     'Wab'
40371          A memory reference with an absolute address.
40372     'Wbc'
40373          A memory reference using 'BC' as a base register, with an
40374          optional offset.
40375     'Wca'
40376          A memory reference using 'AX', 'BC', 'DE', or 'HL' for the
40377          address, for calls.
40378     'Wcv'
40379          A memory reference using any 16-bit register pair for the
40380          address, for calls.
40381     'Wd2'
40382          A memory reference using 'DE' as a base register, with an
40383          optional offset.
40384     'Wde'
40385          A memory reference using 'DE' as a base register, without any
40386          offset.
40387     'Wfr'
40388          Any memory reference to an address in the far address space.
40389     'Wh1'
40390          A memory reference using 'HL' as a base register, with an
40391          optional one-byte offset.
40392     'Whb'
40393          A memory reference using 'HL' as a base register, with 'B' or
40394          'C' as the index register.
40395     'Whl'
40396          A memory reference using 'HL' as a base register, without any
40397          offset.
40398     'Ws1'
40399          A memory reference using 'SP' as a base register, with an
40400          optional one-byte offset.
40401     'Y'
40402          Any memory reference to an address in the near address space.
40403     'A'
40404          The 'AX' register.
40405     'B'
40406          The 'BC' register.
40407     'D'
40408          The 'DE' register.
40409     'R'
40410          'A' through 'L' registers.
40411     'S'
40412          The 'SP' register.
40413     'T'
40414          The 'HL' register.
40415     'Z08W'
40416          The 16-bit 'R8' register.
40417     'Z10W'
40418          The 16-bit 'R10' register.
40419     'Zint'
40420          The registers reserved for interrupts ('R24' to 'R31').
40421     'a'
40422          The 'A' register.
40423     'b'
40424          The 'B' register.
40425     'c'
40426          The 'C' register.
40427     'd'
40428          The 'D' register.
40429     'e'
40430          The 'E' register.
40431     'h'
40432          The 'H' register.
40433     'l'
40434          The 'L' register.
40435     'v'
40436          The virtual registers.
40437     'w'
40438          The 'PSW' register.
40439     'x'
40440          The 'X' register.
40441
40442_RISC-V--'config/riscv/constraints.md'_
40443
40444     'f'
40445          A floating-point register (if available).
40446
40447     'I'
40448          An I-type 12-bit signed immediate.
40449
40450     'J'
40451          Integer zero.
40452
40453     'K'
40454          A 5-bit unsigned immediate for CSR access instructions.
40455
40456     'A'
40457          An address that is held in a general-purpose register.
40458
40459_RX--'config/rx/constraints.md'_
40460     'Q'
40461          An address which does not involve register indirect addressing
40462          or pre/post increment/decrement addressing.
40463
40464     'Symbol'
40465          A symbol reference.
40466
40467     'Int08'
40468          A constant in the range -256 to 255, inclusive.
40469
40470     'Sint08'
40471          A constant in the range -128 to 127, inclusive.
40472
40473     'Sint16'
40474          A constant in the range -32768 to 32767, inclusive.
40475
40476     'Sint24'
40477          A constant in the range -8388608 to 8388607, inclusive.
40478
40479     'Uint04'
40480          A constant in the range 0 to 15, inclusive.
40481
40482_S/390 and zSeries--'config/s390/s390.h'_
40483     'a'
40484          Address register (general purpose register except r0)
40485
40486     'c'
40487          Condition code register
40488
40489     'd'
40490          Data register (arbitrary general purpose register)
40491
40492     'f'
40493          Floating-point register
40494
40495     'I'
40496          Unsigned 8-bit constant (0-255)
40497
40498     'J'
40499          Unsigned 12-bit constant (0-4095)
40500
40501     'K'
40502          Signed 16-bit constant (-32768-32767)
40503
40504     'L'
40505          Value appropriate as displacement.
40506          '(0..4095)'
40507               for short displacement
40508          '(-524288..524287)'
40509               for long displacement
40510
40511     'M'
40512          Constant integer with a value of 0x7fffffff.
40513
40514     'N'
40515          Multiple letter constraint followed by 4 parameter letters.
40516          '0..9:'
40517               number of the part counting from most to least
40518               significant
40519          'H,Q:'
40520               mode of the part
40521          'D,S,H:'
40522               mode of the containing operand
40523          '0,F:'
40524               value of the other parts (F--all bits set)
40525          The constraint matches if the specified part of a constant has
40526          a value different from its other parts.
40527
40528     'Q'
40529          Memory reference without index register and with short
40530          displacement.
40531
40532     'R'
40533          Memory reference with index register and short displacement.
40534
40535     'S'
40536          Memory reference without index register but with long
40537          displacement.
40538
40539     'T'
40540          Memory reference with index register and long displacement.
40541
40542     'U'
40543          Pointer with short displacement.
40544
40545     'W'
40546          Pointer with long displacement.
40547
40548     'Y'
40549          Shift count operand.
40550
40551_SPARC--'config/sparc/sparc.h'_
40552     'f'
40553          Floating-point register on the SPARC-V8 architecture and lower
40554          floating-point register on the SPARC-V9 architecture.
40555
40556     'e'
40557          Floating-point register.  It is equivalent to 'f' on the
40558          SPARC-V8 architecture and contains both lower and upper
40559          floating-point registers on the SPARC-V9 architecture.
40560
40561     'c'
40562          Floating-point condition code register.
40563
40564     'd'
40565          Lower floating-point register.  It is only valid on the
40566          SPARC-V9 architecture when the Visual Instruction Set is
40567          available.
40568
40569     'b'
40570          Floating-point register.  It is only valid on the SPARC-V9
40571          architecture when the Visual Instruction Set is available.
40572
40573     'h'
40574          64-bit global or out register for the SPARC-V8+ architecture.
40575
40576     'C'
40577          The constant all-ones, for floating-point.
40578
40579     'A'
40580          Signed 5-bit constant
40581
40582     'D'
40583          A vector constant
40584
40585     'I'
40586          Signed 13-bit constant
40587
40588     'J'
40589          Zero
40590
40591     'K'
40592          32-bit constant with the low 12 bits clear (a constant that
40593          can be loaded with the 'sethi' instruction)
40594
40595     'L'
40596          A constant in the range supported by 'movcc' instructions
40597          (11-bit signed immediate)
40598
40599     'M'
40600          A constant in the range supported by 'movrcc' instructions
40601          (10-bit signed immediate)
40602
40603     'N'
40604          Same as 'K', except that it verifies that bits that are not in
40605          the lower 32-bit range are all zero.  Must be used instead of
40606          'K' for modes wider than 'SImode'
40607
40608     'O'
40609          The constant 4096
40610
40611     'G'
40612          Floating-point zero
40613
40614     'H'
40615          Signed 13-bit constant, sign-extended to 32 or 64 bits
40616
40617     'P'
40618          The constant -1
40619
40620     'Q'
40621          Floating-point constant whose integral representation can be
40622          moved into an integer register using a single sethi
40623          instruction
40624
40625     'R'
40626          Floating-point constant whose integral representation can be
40627          moved into an integer register using a single mov instruction
40628
40629     'S'
40630          Floating-point constant whose integral representation can be
40631          moved into an integer register using a high/lo_sum instruction
40632          sequence
40633
40634     'T'
40635          Memory address aligned to an 8-byte boundary
40636
40637     'U'
40638          Even register
40639
40640     'W'
40641          Memory address for 'e' constraint registers
40642
40643     'w'
40644          Memory address with only a base register
40645
40646     'Y'
40647          Vector zero
40648
40649_TI C6X family--'config/c6x/constraints.md'_
40650     'a'
40651          Register file A (A0-A31).
40652
40653     'b'
40654          Register file B (B0-B31).
40655
40656     'A'
40657          Predicate registers in register file A (A0-A2 on C64X and
40658          higher, A1 and A2 otherwise).
40659
40660     'B'
40661          Predicate registers in register file B (B0-B2).
40662
40663     'C'
40664          A call-used register in register file B (B0-B9, B16-B31).
40665
40666     'Da'
40667          Register file A, excluding predicate registers (A3-A31, plus
40668          A0 if not C64X or higher).
40669
40670     'Db'
40671          Register file B, excluding predicate registers (B3-B31).
40672
40673     'Iu4'
40674          Integer constant in the range 0 ... 15.
40675
40676     'Iu5'
40677          Integer constant in the range 0 ... 31.
40678
40679     'In5'
40680          Integer constant in the range -31 ... 0.
40681
40682     'Is5'
40683          Integer constant in the range -16 ... 15.
40684
40685     'I5x'
40686          Integer constant that can be the operand of an ADDA or a SUBA
40687          insn.
40688
40689     'IuB'
40690          Integer constant in the range 0 ... 65535.
40691
40692     'IsB'
40693          Integer constant in the range -32768 ... 32767.
40694
40695     'IsC'
40696          Integer constant in the range -2^{20} ... 2^{20} - 1.
40697
40698     'Jc'
40699          Integer constant that is a valid mask for the clr instruction.
40700
40701     'Js'
40702          Integer constant that is a valid mask for the set instruction.
40703
40704     'Q'
40705          Memory location with A base register.
40706
40707     'R'
40708          Memory location with B base register.
40709
40710     'Z'
40711          Register B14 (aka DP).
40712
40713_TILE-Gx--'config/tilegx/constraints.md'_
40714     'R00'
40715     'R01'
40716     'R02'
40717     'R03'
40718     'R04'
40719     'R05'
40720     'R06'
40721     'R07'
40722     'R08'
40723     'R09'
40724     'R10'
40725          Each of these represents a register constraint for an
40726          individual register, from r0 to r10.
40727
40728     'I'
40729          Signed 8-bit integer constant.
40730
40731     'J'
40732          Signed 16-bit integer constant.
40733
40734     'K'
40735          Unsigned 16-bit integer constant.
40736
40737     'L'
40738          Integer constant that fits in one signed byte when incremented
40739          by one (-129 ... 126).
40740
40741     'm'
40742          Memory operand.  If used together with '<' or '>', the operand
40743          can have postincrement which requires printing with '%In' and
40744          '%in' on TILE-Gx.  For example:
40745
40746               asm ("st_add %I0,%1,%i0" : "=m<>" (*mem) : "r" (val));
40747
40748     'M'
40749          A bit mask suitable for the BFINS instruction.
40750
40751     'N'
40752          Integer constant that is a byte tiled out eight times.
40753
40754     'O'
40755          The integer zero constant.
40756
40757     'P'
40758          Integer constant that is a sign-extended byte tiled out as
40759          four shorts.
40760
40761     'Q'
40762          Integer constant that fits in one signed byte when incremented
40763          (-129 ... 126), but excluding -1.
40764
40765     'S'
40766          Integer constant that has all 1 bits consecutive and starting
40767          at bit 0.
40768
40769     'T'
40770          A 16-bit fragment of a got, tls, or pc-relative reference.
40771
40772     'U'
40773          Memory operand except postincrement.  This is roughly the same
40774          as 'm' when not used together with '<' or '>'.
40775
40776     'W'
40777          An 8-element vector constant with identical elements.
40778
40779     'Y'
40780          A 4-element vector constant with identical elements.
40781
40782     'Z0'
40783          The integer constant 0xffffffff.
40784
40785     'Z1'
40786          The integer constant 0xffffffff00000000.
40787
40788_TILEPro--'config/tilepro/constraints.md'_
40789     'R00'
40790     'R01'
40791     'R02'
40792     'R03'
40793     'R04'
40794     'R05'
40795     'R06'
40796     'R07'
40797     'R08'
40798     'R09'
40799     'R10'
40800          Each of these represents a register constraint for an
40801          individual register, from r0 to r10.
40802
40803     'I'
40804          Signed 8-bit integer constant.
40805
40806     'J'
40807          Signed 16-bit integer constant.
40808
40809     'K'
40810          Nonzero integer constant with low 16 bits zero.
40811
40812     'L'
40813          Integer constant that fits in one signed byte when incremented
40814          by one (-129 ... 126).
40815
40816     'm'
40817          Memory operand.  If used together with '<' or '>', the operand
40818          can have postincrement which requires printing with '%In' and
40819          '%in' on TILEPro.  For example:
40820
40821               asm ("swadd %I0,%1,%i0" : "=m<>" (mem) : "r" (val));
40822
40823     'M'
40824          A bit mask suitable for the MM instruction.
40825
40826     'N'
40827          Integer constant that is a byte tiled out four times.
40828
40829     'O'
40830          The integer zero constant.
40831
40832     'P'
40833          Integer constant that is a sign-extended byte tiled out as two
40834          shorts.
40835
40836     'Q'
40837          Integer constant that fits in one signed byte when incremented
40838          (-129 ... 126), but excluding -1.
40839
40840     'T'
40841          A symbolic operand, or a 16-bit fragment of a got, tls, or
40842          pc-relative reference.
40843
40844     'U'
40845          Memory operand except postincrement.  This is roughly the same
40846          as 'm' when not used together with '<' or '>'.
40847
40848     'W'
40849          A 4-element vector constant with identical elements.
40850
40851     'Y'
40852          A 2-element vector constant with identical elements.
40853
40854_Visium--'config/visium/constraints.md'_
40855     'b'
40856          EAM register 'mdb'
40857
40858     'c'
40859          EAM register 'mdc'
40860
40861     'f'
40862          Floating point register
40863
40864     'l'
40865          General register, but not 'r29', 'r30' and 'r31'
40866
40867     't'
40868          Register 'r1'
40869
40870     'u'
40871          Register 'r2'
40872
40873     'v'
40874          Register 'r3'
40875
40876     'G'
40877          Floating-point constant 0.0
40878
40879     'J'
40880          Integer constant in the range 0 ..  65535 (16-bit immediate)
40881
40882     'K'
40883          Integer constant in the range 1 ..  31 (5-bit immediate)
40884
40885     'L'
40886          Integer constant in the range -65535 ..  -1 (16-bit negative
40887          immediate)
40888
40889     'M'
40890          Integer constant -1
40891
40892     'O'
40893          Integer constant 0
40894
40895     'P'
40896          Integer constant 32
40897
40898_x86 family--'config/i386/constraints.md'_
40899     'R'
40900          Legacy register--the eight integer registers available on all
40901          i386 processors ('a', 'b', 'c', 'd', 'si', 'di', 'bp', 'sp').
40902
40903     'q'
40904          Any register accessible as 'Rl'.  In 32-bit mode, 'a', 'b',
40905          'c', and 'd'; in 64-bit mode, any integer register.
40906
40907     'Q'
40908          Any register accessible as 'Rh': 'a', 'b', 'c', and 'd'.
40909
40910     'a'
40911          The 'a' register.
40912
40913     'b'
40914          The 'b' register.
40915
40916     'c'
40917          The 'c' register.
40918
40919     'd'
40920          The 'd' register.
40921
40922     'S'
40923          The 'si' register.
40924
40925     'D'
40926          The 'di' register.
40927
40928     'A'
40929          The 'a' and 'd' registers.  This class is used for
40930          instructions that return double word results in the 'ax:dx'
40931          register pair.  Single word values will be allocated either in
40932          'ax' or 'dx'.  For example on i386 the following implements
40933          'rdtsc':
40934
40935               unsigned long long rdtsc (void)
40936               {
40937                 unsigned long long tick;
40938                 __asm__ __volatile__("rdtsc":"=A"(tick));
40939                 return tick;
40940               }
40941
40942          This is not correct on x86-64 as it would allocate tick in
40943          either 'ax' or 'dx'.  You have to use the following variant
40944          instead:
40945
40946               unsigned long long rdtsc (void)
40947               {
40948                 unsigned int tickl, tickh;
40949                 __asm__ __volatile__("rdtsc":"=a"(tickl),"=d"(tickh));
40950                 return ((unsigned long long)tickh << 32)|tickl;
40951               }
40952
40953     'U'
40954          The call-clobbered integer registers.
40955
40956     'f'
40957          Any 80387 floating-point (stack) register.
40958
40959     't'
40960          Top of 80387 floating-point stack ('%st(0)').
40961
40962     'u'
40963          Second from top of 80387 floating-point stack ('%st(1)').
40964
40965     'y'
40966          Any MMX register.
40967
40968     'x'
40969          Any SSE register.
40970
40971     'v'
40972          Any EVEX encodable SSE register ('%xmm0-%xmm31').
40973
40974     'Yz'
40975          First SSE register ('%xmm0').
40976
40977     'I'
40978          Integer constant in the range 0 ... 31, for 32-bit shifts.
40979
40980     'J'
40981          Integer constant in the range 0 ... 63, for 64-bit shifts.
40982
40983     'K'
40984          Signed 8-bit integer constant.
40985
40986     'L'
40987          '0xFF' or '0xFFFF', for andsi as a zero-extending move.
40988
40989     'M'
40990          0, 1, 2, or 3 (shifts for the 'lea' instruction).
40991
40992     'N'
40993          Unsigned 8-bit integer constant (for 'in' and 'out'
40994          instructions).
40995
40996     'G'
40997          Standard 80387 floating point constant.
40998
40999     'C'
41000          SSE constant zero operand.
41001
41002     'e'
41003          32-bit signed integer constant, or a symbolic reference known
41004          to fit that range (for immediate operands in sign-extending
41005          x86-64 instructions).
41006
41007     'We'
41008          32-bit signed integer constant, or a symbolic reference known
41009          to fit that range (for sign-extending conversion operations
41010          that require non-'VOIDmode' immediate operands).
41011
41012     'Wz'
41013          32-bit unsigned integer constant, or a symbolic reference
41014          known to fit that range (for zero-extending conversion
41015          operations that require non-'VOIDmode' immediate operands).
41016
41017     'Wd'
41018          128-bit integer constant where both the high and low 64-bit
41019          word satisfy the 'e' constraint.
41020
41021     'Z'
41022          32-bit unsigned integer constant, or a symbolic reference
41023          known to fit that range (for immediate operands in
41024          zero-extending x86-64 instructions).
41025
41026     'Tv'
41027          VSIB address operand.
41028
41029     'Ts'
41030          Address operand without segment register.
41031
41032_Xstormy16--'config/stormy16/stormy16.h'_
41033     'a'
41034          Register r0.
41035
41036     'b'
41037          Register r1.
41038
41039     'c'
41040          Register r2.
41041
41042     'd'
41043          Register r8.
41044
41045     'e'
41046          Registers r0 through r7.
41047
41048     't'
41049          Registers r0 and r1.
41050
41051     'y'
41052          The carry register.
41053
41054     'z'
41055          Registers r8 and r9.
41056
41057     'I'
41058          A constant between 0 and 3 inclusive.
41059
41060     'J'
41061          A constant that has exactly one bit set.
41062
41063     'K'
41064          A constant that has exactly one bit clear.
41065
41066     'L'
41067          A constant between 0 and 255 inclusive.
41068
41069     'M'
41070          A constant between -255 and 0 inclusive.
41071
41072     'N'
41073          A constant between -3 and 0 inclusive.
41074
41075     'O'
41076          A constant between 1 and 4 inclusive.
41077
41078     'P'
41079          A constant between -4 and -1 inclusive.
41080
41081     'Q'
41082          A memory reference that is a stack push.
41083
41084     'R'
41085          A memory reference that is a stack pop.
41086
41087     'S'
41088          A memory reference that refers to a constant address of known
41089          value.
41090
41091     'T'
41092          The register indicated by Rx (not implemented yet).
41093
41094     'U'
41095          A constant that is not between 2 and 15 inclusive.
41096
41097     'Z'
41098          The constant 0.
41099
41100_Xtensa--'config/xtensa/constraints.md'_
41101     'a'
41102          General-purpose 32-bit register
41103
41104     'b'
41105          One-bit boolean register
41106
41107     'A'
41108          MAC16 40-bit accumulator register
41109
41110     'I'
41111          Signed 12-bit integer constant, for use in MOVI instructions
41112
41113     'J'
41114          Signed 8-bit integer constant, for use in ADDI instructions
41115
41116     'K'
41117          Integer constant valid for BccI instructions
41118
41119     'L'
41120          Unsigned constant valid for BccUI instructions
41121
41122
41123File: gcc.info,  Node: Asm Labels,  Next: Explicit Register Variables,  Prev: Constraints,  Up: Using Assembly Language with C
41124
411256.47.4 Controlling Names Used in Assembler Code
41126-----------------------------------------------
41127
41128You can specify the name to be used in the assembler code for a C
41129function or variable by writing the 'asm' (or '__asm__') keyword after
41130the declarator.  It is up to you to make sure that the assembler names
41131you choose do not conflict with any other assembler symbols, or
41132reference registers.
41133
41134Assembler names for data:
41135.........................
41136
41137This sample shows how to specify the assembler name for data:
41138
41139     int foo asm ("myfoo") = 2;
41140
41141This specifies that the name to be used for the variable 'foo' in the
41142assembler code should be 'myfoo' rather than the usual '_foo'.
41143
41144 On systems where an underscore is normally prepended to the name of a C
41145variable, this feature allows you to define names for the linker that do
41146not start with an underscore.
41147
41148 GCC does not support using this feature with a non-static local
41149variable since such variables do not have assembler names.  If you are
41150trying to put the variable in a particular register, see *note Explicit
41151Register Variables::.
41152
41153Assembler names for functions:
41154..............................
41155
41156To specify the assembler name for functions, write a declaration for the
41157function before its definition and put 'asm' there, like this:
41158
41159     int func (int x, int y) asm ("MYFUNC");
41160
41161     int func (int x, int y)
41162     {
41163        /* ... */
41164
41165This specifies that the name to be used for the function 'func' in the
41166assembler code should be 'MYFUNC'.
41167
41168
41169File: gcc.info,  Node: Explicit Register Variables,  Next: Size of an asm,  Prev: Asm Labels,  Up: Using Assembly Language with C
41170
411716.47.5 Variables in Specified Registers
41172---------------------------------------
41173
41174GNU C allows you to associate specific hardware registers with C
41175variables.  In almost all cases, allowing the compiler to assign
41176registers produces the best code.  However under certain unusual
41177circumstances, more precise control over the variable storage is
41178required.
41179
41180 Both global and local variables can be associated with a register.  The
41181consequences of performing this association are very different between
41182the two, as explained in the sections below.
41183
41184* Menu:
41185
41186* Global Register Variables::   Variables declared at global scope.
41187* Local Register Variables::    Variables declared within a function.
41188
41189
41190File: gcc.info,  Node: Global Register Variables,  Next: Local Register Variables,  Up: Explicit Register Variables
41191
411926.47.5.1 Defining Global Register Variables
41193...........................................
41194
41195You can define a global register variable and associate it with a
41196specified register like this:
41197
41198     register int *foo asm ("r12");
41199
41200Here 'r12' is the name of the register that should be used.  Note that
41201this is the same syntax used for defining local register variables, but
41202for a global variable the declaration appears outside a function.  The
41203'register' keyword is required, and cannot be combined with 'static'.
41204The register name must be a valid register name for the target platform.
41205
41206 Do not use type qualifiers such as 'const' and 'volatile', as the
41207outcome may be contrary to expectations.  In particular, using the
41208'volatile' qualifier does not fully prevent the compiler from optimizing
41209accesses to the register.
41210
41211 Registers are a scarce resource on most systems and allowing the
41212compiler to manage their usage usually results in the best code.
41213However, under special circumstances it can make sense to reserve some
41214globally.  For example this may be useful in programs such as
41215programming language interpreters that have a couple of global variables
41216that are accessed very often.
41217
41218 After defining a global register variable, for the current compilation
41219unit:
41220
41221   * If the register is a call-saved register, call ABI is affected: the
41222     register will not be restored in function epilogue sequences after
41223     the variable has been assigned.  Therefore, functions cannot safely
41224     return to callers that assume standard ABI.
41225   * Conversely, if the register is a call-clobbered register, making
41226     calls to functions that use standard ABI may lose contents of the
41227     variable.  Such calls may be created by the compiler even if none
41228     are evident in the original program, for example when libgcc
41229     functions are used to make up for unavailable instructions.
41230   * Accesses to the variable may be optimized as usual and the register
41231     remains available for allocation and use in any computations,
41232     provided that observable values of the variable are not affected.
41233   * If the variable is referenced in inline assembly, the type of
41234     access must be provided to the compiler via constraints (*note
41235     Constraints::).  Accesses from basic asms are not supported.
41236
41237 Note that these points _only_ apply to code that is compiled with the
41238definition.  The behavior of code that is merely linked in (for example
41239code from libraries) is not affected.
41240
41241 If you want to recompile source files that do not actually use your
41242global register variable so they do not use the specified register for
41243any other purpose, you need not actually add the global register
41244declaration to their source code.  It suffices to specify the compiler
41245option '-ffixed-REG' (*note Code Gen Options::) to reserve the register.
41246
41247Declaring the variable
41248......................
41249
41250Global register variables cannot have initial values, because an
41251executable file has no means to supply initial contents for a register.
41252
41253 When selecting a register, choose one that is normally saved and
41254restored by function calls on your machine.  This ensures that code
41255which is unaware of this reservation (such as library routines) will
41256restore it before returning.
41257
41258 On machines with register windows, be sure to choose a global register
41259that is not affected magically by the function call mechanism.
41260
41261Using the variable
41262..................
41263
41264When calling routines that are not aware of the reservation, be cautious
41265if those routines call back into code which uses them.  As an example,
41266if you call the system library version of 'qsort', it may clobber your
41267registers during execution, but (if you have selected appropriate
41268registers) it will restore them before returning.  However it will _not_
41269restore them before calling 'qsort''s comparison function.  As a result,
41270global values will not reliably be available to the comparison function
41271unless the 'qsort' function itself is rebuilt.
41272
41273 Similarly, it is not safe to access the global register variables from
41274signal handlers or from more than one thread of control.  Unless you
41275recompile them specially for the task at hand, the system library
41276routines may temporarily use the register for other things.
41277Furthermore, since the register is not reserved exclusively for the
41278variable, accessing it from handlers of asynchronous signals may observe
41279unrelated temporary values residing in the register.
41280
41281 On most machines, 'longjmp' restores to each global register variable
41282the value it had at the time of the 'setjmp'.  On some machines,
41283however, 'longjmp' does not change the value of global register
41284variables.  To be portable, the function that called 'setjmp' should
41285make other arrangements to save the values of the global register
41286variables, and to restore them in a 'longjmp'.  This way, the same thing
41287happens regardless of what 'longjmp' does.
41288
41289
41290File: gcc.info,  Node: Local Register Variables,  Prev: Global Register Variables,  Up: Explicit Register Variables
41291
412926.47.5.2 Specifying Registers for Local Variables
41293.................................................
41294
41295You can define a local register variable and associate it with a
41296specified register like this:
41297
41298     register int *foo asm ("r12");
41299
41300Here 'r12' is the name of the register that should be used.  Note that
41301this is the same syntax used for defining global register variables, but
41302for a local variable the declaration appears within a function.  The
41303'register' keyword is required, and cannot be combined with 'static'.
41304The register name must be a valid register name for the target platform.
41305
41306 Do not use type qualifiers such as 'const' and 'volatile', as the
41307outcome may be contrary to expectations.  In particular, when the
41308'const' qualifier is used, the compiler may substitute the variable with
41309its initializer in 'asm' statements, which may cause the corresponding
41310operand to appear in a different register.
41311
41312 As with global register variables, it is recommended that you choose a
41313register that is normally saved and restored by function calls on your
41314machine, so that calls to library routines will not clobber it.
41315
41316 The only supported use for this feature is to specify registers for
41317input and output operands when calling Extended 'asm' (*note Extended
41318Asm::).  This may be necessary if the constraints for a particular
41319machine don't provide sufficient control to select the desired register.
41320To force an operand into a register, create a local variable and specify
41321the register name after the variable's declaration.  Then use the local
41322variable for the 'asm' operand and specify any constraint letter that
41323matches the register:
41324
41325     register int *p1 asm ("r0") = ...;
41326     register int *p2 asm ("r1") = ...;
41327     register int *result asm ("r0");
41328     asm ("sysint" : "=r" (result) : "0" (p1), "r" (p2));
41329
41330 _Warning:_ In the above example, be aware that a register (for example
41331'r0') can be call-clobbered by subsequent code, including function calls
41332and library calls for arithmetic operators on other variables (for
41333example the initialization of 'p2').  In this case, use temporary
41334variables for expressions between the register assignments:
41335
41336     int t1 = ...;
41337     register int *p1 asm ("r0") = ...;
41338     register int *p2 asm ("r1") = t1;
41339     register int *result asm ("r0");
41340     asm ("sysint" : "=r" (result) : "0" (p1), "r" (p2));
41341
41342 Defining a register variable does not reserve the register.  Other than
41343when invoking the Extended 'asm', the contents of the specified register
41344are not guaranteed.  For this reason, the following uses are explicitly
41345_not_ supported.  If they appear to work, it is only happenstance, and
41346may stop working as intended due to (seemingly) unrelated changes in
41347surrounding code, or even minor changes in the optimization of a future
41348version of gcc:
41349
41350   * Passing parameters to or from Basic 'asm'
41351   * Passing parameters to or from Extended 'asm' without using input or
41352     output operands.
41353   * Passing parameters to or from routines written in assembler (or
41354     other languages) using non-standard calling conventions.
41355
41356 Some developers use Local Register Variables in an attempt to improve
41357gcc's allocation of registers, especially in large functions.  In this
41358case the register name is essentially a hint to the register allocator.
41359While in some instances this can generate better code, improvements are
41360subject to the whims of the allocator/optimizers.  Since there are no
41361guarantees that your improvements won't be lost, this usage of Local
41362Register Variables is discouraged.
41363
41364 On the MIPS platform, there is related use for local register variables
41365with slightly different characteristics (*note Defining coprocessor
41366specifics for MIPS targets: (gccint)MIPS Coprocessors.).
41367
41368
41369File: gcc.info,  Node: Size of an asm,  Prev: Explicit Register Variables,  Up: Using Assembly Language with C
41370
413716.47.6 Size of an 'asm'
41372-----------------------
41373
41374Some targets require that GCC track the size of each instruction used in
41375order to generate correct code.  Because the final length of the code
41376produced by an 'asm' statement is only known by the assembler, GCC must
41377make an estimate as to how big it will be.  It does this by counting the
41378number of instructions in the pattern of the 'asm' and multiplying that
41379by the length of the longest instruction supported by that processor.
41380(When working out the number of instructions, it assumes that any
41381occurrence of a newline or of whatever statement separator character is
41382supported by the assembler -- typically ';' -- indicates the end of an
41383instruction.)
41384
41385 Normally, GCC's estimate is adequate to ensure that correct code is
41386generated, but it is possible to confuse the compiler if you use pseudo
41387instructions or assembler macros that expand into multiple real
41388instructions, or if you use assembler directives that expand to more
41389space in the object file than is needed for a single instruction.  If
41390this happens then the assembler may produce a diagnostic saying that a
41391label is unreachable.
41392
41393 This size is also used for inlining decisions.  If you use 'asm inline'
41394instead of just 'asm', then for inlining purposes the size of the asm is
41395taken as the minimum size, ignoring how many instructions GCC thinks it
41396is.
41397
41398
41399File: gcc.info,  Node: Alternate Keywords,  Next: Incomplete Enums,  Prev: Using Assembly Language with C,  Up: C Extensions
41400
414016.48 Alternate Keywords
41402=======================
41403
41404'-ansi' and the various '-std' options disable certain keywords.  This
41405causes trouble when you want to use GNU C extensions, or a
41406general-purpose header file that should be usable by all programs,
41407including ISO C programs.  The keywords 'asm', 'typeof' and 'inline' are
41408not available in programs compiled with '-ansi' or '-std' (although
41409'inline' can be used in a program compiled with '-std=c99' or a later
41410standard).  The ISO C99 keyword 'restrict' is only available when
41411'-std=gnu99' (which will eventually be the default) or '-std=c99' (or
41412the equivalent '-std=iso9899:1999'), or an option for a later standard
41413version, is used.
41414
41415 The way to solve these problems is to put '__' at the beginning and end
41416of each problematical keyword.  For example, use '__asm__' instead of
41417'asm', and '__inline__' instead of 'inline'.
41418
41419 Other C compilers won't accept these alternative keywords; if you want
41420to compile with another compiler, you can define the alternate keywords
41421as macros to replace them with the customary keywords.  It looks like
41422this:
41423
41424     #ifndef __GNUC__
41425     #define __asm__ asm
41426     #endif
41427
41428 '-pedantic' and other options cause warnings for many GNU C extensions.
41429You can prevent such warnings within one expression by writing
41430'__extension__' before the expression.  '__extension__' has no effect
41431aside from this.
41432
41433
41434File: gcc.info,  Node: Incomplete Enums,  Next: Function Names,  Prev: Alternate Keywords,  Up: C Extensions
41435
414366.49 Incomplete 'enum' Types
41437============================
41438
41439You can define an 'enum' tag without specifying its possible values.
41440This results in an incomplete type, much like what you get if you write
41441'struct foo' without describing the elements.  A later declaration that
41442does specify the possible values completes the type.
41443
41444 You cannot allocate variables or storage using the type while it is
41445incomplete.  However, you can work with pointers to that type.
41446
41447 This extension may not be very useful, but it makes the handling of
41448'enum' more consistent with the way 'struct' and 'union' are handled.
41449
41450 This extension is not supported by GNU C++.
41451
41452
41453File: gcc.info,  Node: Function Names,  Next: Return Address,  Prev: Incomplete Enums,  Up: C Extensions
41454
414556.50 Function Names as Strings
41456==============================
41457
41458GCC provides three magic constants that hold the name of the current
41459function as a string.  In C++11 and later modes, all three are treated
41460as constant expressions and can be used in 'constexpr' constexts.  The
41461first of these constants is '__func__', which is part of the C99
41462standard:
41463
41464 The identifier '__func__' is implicitly declared by the translator as
41465if, immediately following the opening brace of each function definition,
41466the declaration
41467
41468     static const char __func__[] = "function-name";
41469
41470appeared, where function-name is the name of the lexically-enclosing
41471function.  This name is the unadorned name of the function.  As an
41472extension, at file (or, in C++, namespace scope), '__func__' evaluates
41473to the empty string.
41474
41475 '__FUNCTION__' is another name for '__func__', provided for backward
41476compatibility with old versions of GCC.
41477
41478 In C, '__PRETTY_FUNCTION__' is yet another name for '__func__', except
41479that at file scope (or, in C++, namespace scope), it evaluates to the
41480string '"top level"'.  In addition, in C++, '__PRETTY_FUNCTION__'
41481contains the signature of the function as well as its bare name.  For
41482example, this program:
41483
41484     extern "C" int printf (const char *, ...);
41485
41486     class a {
41487      public:
41488       void sub (int i)
41489         {
41490           printf ("__FUNCTION__ = %s\n", __FUNCTION__);
41491           printf ("__PRETTY_FUNCTION__ = %s\n", __PRETTY_FUNCTION__);
41492         }
41493     };
41494
41495     int
41496     main (void)
41497     {
41498       a ax;
41499       ax.sub (0);
41500       return 0;
41501     }
41502
41503gives this output:
41504
41505     __FUNCTION__ = sub
41506     __PRETTY_FUNCTION__ = void a::sub(int)
41507
41508 These identifiers are variables, not preprocessor macros, and may not
41509be used to initialize 'char' arrays or be concatenated with string
41510literals.
41511
41512
41513File: gcc.info,  Node: Return Address,  Next: Vector Extensions,  Prev: Function Names,  Up: C Extensions
41514
415156.51 Getting the Return or Frame Address of a Function
41516======================================================
41517
41518These functions may be used to get information about the callers of a
41519function.
41520
41521 -- Built-in Function: void * __builtin_return_address (unsigned int
41522          LEVEL)
41523     This function returns the return address of the current function,
41524     or of one of its callers.  The LEVEL argument is number of frames
41525     to scan up the call stack.  A value of '0' yields the return
41526     address of the current function, a value of '1' yields the return
41527     address of the caller of the current function, and so forth.  When
41528     inlining the expected behavior is that the function returns the
41529     address of the function that is returned to.  To work around this
41530     behavior use the 'noinline' function attribute.
41531
41532     The LEVEL argument must be a constant integer.
41533
41534     On some machines it may be impossible to determine the return
41535     address of any function other than the current one; in such cases,
41536     or when the top of the stack has been reached, this function
41537     returns an unspecified value.  In addition,
41538     '__builtin_frame_address' may be used to determine if the top of
41539     the stack has been reached.
41540
41541     Additional post-processing of the returned value may be needed, see
41542     '__builtin_extract_return_addr'.
41543
41544     The stored representation of the return address in memory may be
41545     different from the address returned by '__builtin_return_address'.
41546     For example, on AArch64 the stored address may be mangled with
41547     return address signing whereas the address returned by
41548     '__builtin_return_address' is not.
41549
41550     Calling this function with a nonzero argument can have
41551     unpredictable effects, including crashing the calling program.  As
41552     a result, calls that are considered unsafe are diagnosed when the
41553     '-Wframe-address' option is in effect.  Such calls should only be
41554     made in debugging situations.
41555
41556     On targets where code addresses are representable as 'void *',
41557          void *addr = __builtin_extract_return_addr (__builtin_return_address (0));
41558     gives the code address where the current function would return.
41559     For example, such an address may be used with 'dladdr' or other
41560     interfaces that work with code addresses.
41561
41562 -- Built-in Function: void * __builtin_extract_return_addr (void *ADDR)
41563     The address as returned by '__builtin_return_address' may have to
41564     be fed through this function to get the actual encoded address.
41565     For example, on the 31-bit S/390 platform the highest bit has to be
41566     masked out, or on SPARC platforms an offset has to be added for the
41567     true next instruction to be executed.
41568
41569     If no fixup is needed, this function simply passes through ADDR.
41570
41571 -- Built-in Function: void * __builtin_frob_return_addr (void *ADDR)
41572     This function does the reverse of '__builtin_extract_return_addr'.
41573
41574 -- Built-in Function: void * __builtin_frame_address (unsigned int
41575          LEVEL)
41576     This function is similar to '__builtin_return_address', but it
41577     returns the address of the function frame rather than the return
41578     address of the function.  Calling '__builtin_frame_address' with a
41579     value of '0' yields the frame address of the current function, a
41580     value of '1' yields the frame address of the caller of the current
41581     function, and so forth.
41582
41583     The frame is the area on the stack that holds local variables and
41584     saved registers.  The frame address is normally the address of the
41585     first word pushed on to the stack by the function.  However, the
41586     exact definition depends upon the processor and the calling
41587     convention.  If the processor has a dedicated frame pointer
41588     register, and the function has a frame, then
41589     '__builtin_frame_address' returns the value of the frame pointer
41590     register.
41591
41592     On some machines it may be impossible to determine the frame
41593     address of any function other than the current one; in such cases,
41594     or when the top of the stack has been reached, this function
41595     returns '0' if the first frame pointer is properly initialized by
41596     the startup code.
41597
41598     Calling this function with a nonzero argument can have
41599     unpredictable effects, including crashing the calling program.  As
41600     a result, calls that are considered unsafe are diagnosed when the
41601     '-Wframe-address' option is in effect.  Such calls should only be
41602     made in debugging situations.
41603
41604
41605File: gcc.info,  Node: Vector Extensions,  Next: Offsetof,  Prev: Return Address,  Up: C Extensions
41606
416076.52 Using Vector Instructions through Built-in Functions
41608=========================================================
41609
41610On some targets, the instruction set contains SIMD vector instructions
41611which operate on multiple values contained in one large register at the
41612same time.  For example, on the x86 the MMX, 3DNow! and SSE extensions
41613can be used this way.
41614
41615 The first step in using these extensions is to provide the necessary
41616data types.  This should be done using an appropriate 'typedef':
41617
41618     typedef int v4si __attribute__ ((vector_size (16)));
41619
41620The 'int' type specifies the "base type", while the attribute specifies
41621the vector size for the variable, measured in bytes.  For example, the
41622declaration above causes the compiler to set the mode for the 'v4si'
41623type to be 16 bytes wide and divided into 'int' sized units.  For a
4162432-bit 'int' this means a vector of 4 units of 4 bytes, and the
41625corresponding mode of 'foo' is V4SI.
41626
41627 The 'vector_size' attribute is only applicable to integral and floating
41628scalars, although arrays, pointers, and function return values are
41629allowed in conjunction with this construct.  Only sizes that are
41630positive power-of-two multiples of the base type size are currently
41631allowed.
41632
41633 All the basic integer types can be used as base types, both as signed
41634and as unsigned: 'char', 'short', 'int', 'long', 'long long'.  In
41635addition, 'float' and 'double' can be used to build floating-point
41636vector types.
41637
41638 Specifying a combination that is not valid for the current architecture
41639causes GCC to synthesize the instructions using a narrower mode.  For
41640example, if you specify a variable of type 'V4SI' and your architecture
41641does not allow for this specific SIMD type, GCC produces code that uses
416424 'SIs'.
41643
41644 The types defined in this manner can be used with a subset of normal C
41645operations.  Currently, GCC allows using the following operators on
41646these types: '+, -, *, /, unary minus, ^, |, &, ~, %'.
41647
41648 The operations behave like C++ 'valarrays'.  Addition is defined as the
41649addition of the corresponding elements of the operands.  For example, in
41650the code below, each of the 4 elements in A is added to the
41651corresponding 4 elements in B and the resulting vector is stored in C.
41652
41653     typedef int v4si __attribute__ ((vector_size (16)));
41654
41655     v4si a, b, c;
41656
41657     c = a + b;
41658
41659 Subtraction, multiplication, division, and the logical operations
41660operate in a similar manner.  Likewise, the result of using the unary
41661minus or complement operators on a vector type is a vector whose
41662elements are the negative or complemented values of the corresponding
41663elements in the operand.
41664
41665 It is possible to use shifting operators '<<', '>>' on integer-type
41666vectors.  The operation is defined as following: '{a0, a1, ..., an} >>
41667{b0, b1, ..., bn} == {a0 >> b0, a1 >> b1, ..., an >> bn}'.  Vector
41668operands must have the same number of elements.
41669
41670 For convenience, it is allowed to use a binary vector operation where
41671one operand is a scalar.  In that case the compiler transforms the
41672scalar operand into a vector where each element is the scalar from the
41673operation.  The transformation happens only if the scalar could be
41674safely converted to the vector-element type.  Consider the following
41675code.
41676
41677     typedef int v4si __attribute__ ((vector_size (16)));
41678
41679     v4si a, b, c;
41680     long l;
41681
41682     a = b + 1;    /* a = b + {1,1,1,1}; */
41683     a = 2 * b;    /* a = {2,2,2,2} * b; */
41684
41685     a = l + a;    /* Error, cannot convert long to int. */
41686
41687 Vectors can be subscripted as if the vector were an array with the same
41688number of elements and base type.  Out of bound accesses invoke
41689undefined behavior at run time.  Warnings for out of bound accesses for
41690vector subscription can be enabled with '-Warray-bounds'.
41691
41692 Vector comparison is supported with standard comparison operators: '==,
41693!=, <, <=, >, >='.  Comparison operands can be vector expressions of
41694integer-type or real-type.  Comparison between integer-type vectors and
41695real-type vectors are not supported.  The result of the comparison is a
41696vector of the same width and number of elements as the comparison
41697operands with a signed integral element type.
41698
41699 Vectors are compared element-wise producing 0 when comparison is false
41700and -1 (constant of the appropriate type where all bits are set)
41701otherwise.  Consider the following example.
41702
41703     typedef int v4si __attribute__ ((vector_size (16)));
41704
41705     v4si a = {1,2,3,4};
41706     v4si b = {3,2,1,4};
41707     v4si c;
41708
41709     c = a >  b;     /* The result would be {0, 0,-1, 0}  */
41710     c = a == b;     /* The result would be {0,-1, 0,-1}  */
41711
41712 In C++, the ternary operator '?:' is available.  'a?b:c', where 'b' and
41713'c' are vectors of the same type and 'a' is an integer vector with the
41714same number of elements of the same size as 'b' and 'c', computes all
41715three arguments and creates a vector '{a[0]?b[0]:c[0], a[1]?b[1]:c[1],
41716...}'.  Note that unlike in OpenCL, 'a' is thus interpreted as 'a != 0'
41717and not 'a < 0'.  As in the case of binary operations, this syntax is
41718also accepted when one of 'b' or 'c' is a scalar that is then
41719transformed into a vector.  If both 'b' and 'c' are scalars and the type
41720of 'true?b:c' has the same size as the element type of 'a', then 'b' and
41721'c' are converted to a vector type whose elements have this type and
41722with the same number of elements as 'a'.
41723
41724 In C++, the logic operators '!, &&, ||' are available for vectors.
41725'!v' is equivalent to 'v == 0', 'a && b' is equivalent to 'a!=0 & b!=0'
41726and 'a || b' is equivalent to 'a!=0 | b!=0'.  For mixed operations
41727between a scalar 's' and a vector 'v', 's && v' is equivalent to
41728's?v!=0:0' (the evaluation is short-circuit) and 'v && s' is equivalent
41729to 'v!=0 & (s?-1:0)'.
41730
41731 Vector shuffling is available using functions '__builtin_shuffle (vec,
41732mask)' and '__builtin_shuffle (vec0, vec1, mask)'.  Both functions
41733construct a permutation of elements from one or two vectors and return a
41734vector of the same type as the input vector(s).  The MASK is an integral
41735vector with the same width (W) and element count (N) as the output
41736vector.
41737
41738 The elements of the input vectors are numbered in memory ordering of
41739VEC0 beginning at 0 and VEC1 beginning at N.  The elements of MASK are
41740considered modulo N in the single-operand case and modulo 2*N in the
41741two-operand case.
41742
41743 Consider the following example,
41744
41745     typedef int v4si __attribute__ ((vector_size (16)));
41746
41747     v4si a = {1,2,3,4};
41748     v4si b = {5,6,7,8};
41749     v4si mask1 = {0,1,1,3};
41750     v4si mask2 = {0,4,2,5};
41751     v4si res;
41752
41753     res = __builtin_shuffle (a, mask1);       /* res is {1,2,2,4}  */
41754     res = __builtin_shuffle (a, b, mask2);    /* res is {1,5,3,6}  */
41755
41756 Note that '__builtin_shuffle' is intentionally semantically compatible
41757with the OpenCL 'shuffle' and 'shuffle2' functions.
41758
41759 You can declare variables and use them in function calls and returns,
41760as well as in assignments and some casts.  You can specify a vector type
41761as a return type for a function.  Vector types can also be used as
41762function arguments.  It is possible to cast from one vector type to
41763another, provided they are of the same size (in fact, you can also cast
41764vectors to and from other datatypes of the same size).
41765
41766 You cannot operate between vectors of different lengths or different
41767signedness without a cast.
41768
41769 Vector conversion is available using the '__builtin_convertvector (vec,
41770vectype)' function.  VEC must be an expression with integral or floating
41771vector type and VECTYPE an integral or floating vector type with the
41772same number of elements.  The result has VECTYPE type and value of a C
41773cast of every element of VEC to the element type of VECTYPE.
41774
41775 Consider the following example,
41776     typedef int v4si __attribute__ ((vector_size (16)));
41777     typedef float v4sf __attribute__ ((vector_size (16)));
41778     typedef double v4df __attribute__ ((vector_size (32)));
41779     typedef unsigned long long v4di __attribute__ ((vector_size (32)));
41780
41781     v4si a = {1,-2,3,-4};
41782     v4sf b = {1.5f,-2.5f,3.f,7.f};
41783     v4di c = {1ULL,5ULL,0ULL,10ULL};
41784     v4sf d = __builtin_convertvector (a, v4sf); /* d is {1.f,-2.f,3.f,-4.f} */
41785     /* Equivalent of:
41786        v4sf d = { (float)a[0], (float)a[1], (float)a[2], (float)a[3] }; */
41787     v4df e = __builtin_convertvector (a, v4df); /* e is {1.,-2.,3.,-4.} */
41788     v4df f = __builtin_convertvector (b, v4df); /* f is {1.5,-2.5,3.,7.} */
41789     v4si g = __builtin_convertvector (f, v4si); /* g is {1,-2,3,7} */
41790     v4si h = __builtin_convertvector (c, v4si); /* h is {1,5,0,10} */
41791
41792 Sometimes it is desirable to write code using a mix of generic vector
41793operations (for clarity) and machine-specific vector intrinsics (to
41794access vector instructions that are not exposed via generic built-ins).
41795On x86, intrinsic functions for integer vectors typically use the same
41796vector type '__m128i' irrespective of how they interpret the vector,
41797making it necessary to cast their arguments and return values from/to
41798other vector types.  In C, you can make use of a 'union' type:
41799     #include <immintrin.h>
41800
41801     typedef unsigned char u8x16 __attribute__ ((vector_size (16)));
41802     typedef unsigned int  u32x4 __attribute__ ((vector_size (16)));
41803
41804     typedef union {
41805             __m128i mm;
41806             u8x16   u8;
41807             u32x4   u32;
41808     } v128;
41809
41810for variables that can be used with both built-in operators and x86
41811intrinsics:
41812
41813     v128 x, y = { 0 };
41814     memcpy (&x, ptr, sizeof x);
41815     y.u8  += 0x80;
41816     x.mm  = _mm_adds_epu8 (x.mm, y.mm);
41817     x.u32 &= 0xffffff;
41818
41819     /* Instead of a variable, a compound literal may be used to pass the
41820        return value of an intrinsic call to a function expecting the union: */
41821     v128 foo (v128);
41822     x = foo ((v128) {_mm_adds_epu8 (x.mm, y.mm)});
41823
41824
41825File: gcc.info,  Node: Offsetof,  Next: __sync Builtins,  Prev: Vector Extensions,  Up: C Extensions
41826
418276.53 Support for 'offsetof'
41828===========================
41829
41830GCC implements for both C and C++ a syntactic extension to implement the
41831'offsetof' macro.
41832
41833     primary:
41834             "__builtin_offsetof" "(" typename "," offsetof_member_designator ")"
41835
41836     offsetof_member_designator:
41837               identifier
41838             | offsetof_member_designator "." identifier
41839             | offsetof_member_designator "[" expr "]"
41840
41841 This extension is sufficient such that
41842
41843     #define offsetof(TYPE, MEMBER)  __builtin_offsetof (TYPE, MEMBER)
41844
41845is a suitable definition of the 'offsetof' macro.  In C++, TYPE may be
41846dependent.  In either case, MEMBER may consist of a single identifier,
41847or a sequence of member accesses and array references.
41848
41849
41850File: gcc.info,  Node: __sync Builtins,  Next: __atomic Builtins,  Prev: Offsetof,  Up: C Extensions
41851
418526.54 Legacy '__sync' Built-in Functions for Atomic Memory Access
41853================================================================
41854
41855The following built-in functions are intended to be compatible with
41856those described in the 'Intel Itanium Processor-specific Application
41857Binary Interface', section 7.4.  As such, they depart from normal GCC
41858practice by not using the '__builtin_' prefix and also by being
41859overloaded so that they work on multiple types.
41860
41861 The definition given in the Intel documentation allows only for the use
41862of the types 'int', 'long', 'long long' or their unsigned counterparts.
41863GCC allows any scalar type that is 1, 2, 4 or 8 bytes in size other than
41864the C type '_Bool' or the C++ type 'bool'.  Operations on pointer
41865arguments are performed as if the operands were of the 'uintptr_t' type.
41866That is, they are not scaled by the size of the type to which the
41867pointer points.
41868
41869 These functions are implemented in terms of the '__atomic' builtins
41870(*note __atomic Builtins::).  They should not be used for new code which
41871should use the '__atomic' builtins instead.
41872
41873 Not all operations are supported by all target processors.  If a
41874particular operation cannot be implemented on the target processor, a
41875warning is generated and a call to an external function is generated.
41876The external function carries the same name as the built-in version,
41877with an additional suffix '_N' where N is the size of the data type.
41878
41879 In most cases, these built-in functions are considered a "full
41880barrier".  That is, no memory operand is moved across the operation,
41881either forward or backward.  Further, instructions are issued as
41882necessary to prevent the processor from speculating loads across the
41883operation and from queuing stores after the operation.
41884
41885 All of the routines are described in the Intel documentation to take
41886"an optional list of variables protected by the memory barrier".  It's
41887not clear what is meant by that; it could mean that _only_ the listed
41888variables are protected, or it could mean a list of additional variables
41889to be protected.  The list is ignored by GCC which treats it as empty.
41890GCC interprets an empty list as meaning that all globally accessible
41891variables should be protected.
41892
41893'TYPE __sync_fetch_and_add (TYPE *ptr, TYPE value, ...)'
41894'TYPE __sync_fetch_and_sub (TYPE *ptr, TYPE value, ...)'
41895'TYPE __sync_fetch_and_or (TYPE *ptr, TYPE value, ...)'
41896'TYPE __sync_fetch_and_and (TYPE *ptr, TYPE value, ...)'
41897'TYPE __sync_fetch_and_xor (TYPE *ptr, TYPE value, ...)'
41898'TYPE __sync_fetch_and_nand (TYPE *ptr, TYPE value, ...)'
41899     These built-in functions perform the operation suggested by the
41900     name, and returns the value that had previously been in memory.
41901     That is, operations on integer operands have the following
41902     semantics.  Operations on pointer arguments are performed as if the
41903     operands were of the 'uintptr_t' type.  That is, they are not
41904     scaled by the size of the type to which the pointer points.
41905
41906          { tmp = *ptr; *ptr OP= value; return tmp; }
41907          { tmp = *ptr; *ptr = ~(tmp & value); return tmp; }   // nand
41908
41909     The object pointed to by the first argument must be of integer or
41910     pointer type.  It must not be a boolean type.
41911
41912     _Note:_ GCC 4.4 and later implement '__sync_fetch_and_nand' as
41913     '*ptr = ~(tmp & value)' instead of '*ptr = ~tmp & value'.
41914
41915'TYPE __sync_add_and_fetch (TYPE *ptr, TYPE value, ...)'
41916'TYPE __sync_sub_and_fetch (TYPE *ptr, TYPE value, ...)'
41917'TYPE __sync_or_and_fetch (TYPE *ptr, TYPE value, ...)'
41918'TYPE __sync_and_and_fetch (TYPE *ptr, TYPE value, ...)'
41919'TYPE __sync_xor_and_fetch (TYPE *ptr, TYPE value, ...)'
41920'TYPE __sync_nand_and_fetch (TYPE *ptr, TYPE value, ...)'
41921     These built-in functions perform the operation suggested by the
41922     name, and return the new value.  That is, operations on integer
41923     operands have the following semantics.  Operations on pointer
41924     operands are performed as if the operand's type were 'uintptr_t'.
41925
41926          { *ptr OP= value; return *ptr; }
41927          { *ptr = ~(*ptr & value); return *ptr; }   // nand
41928
41929     The same constraints on arguments apply as for the corresponding
41930     '__sync_op_and_fetch' built-in functions.
41931
41932     _Note:_ GCC 4.4 and later implement '__sync_nand_and_fetch' as
41933     '*ptr = ~(*ptr & value)' instead of '*ptr = ~*ptr & value'.
41934
41935'bool __sync_bool_compare_and_swap (TYPE *ptr, TYPE oldval, TYPE newval, ...)'
41936'TYPE __sync_val_compare_and_swap (TYPE *ptr, TYPE oldval, TYPE newval, ...)'
41937     These built-in functions perform an atomic compare and swap.  That
41938     is, if the current value of '*PTR' is OLDVAL, then write NEWVAL
41939     into '*PTR'.
41940
41941     The "bool" version returns 'true' if the comparison is successful
41942     and NEWVAL is written.  The "val" version returns the contents of
41943     '*PTR' before the operation.
41944
41945'__sync_synchronize (...)'
41946     This built-in function issues a full memory barrier.
41947
41948'TYPE __sync_lock_test_and_set (TYPE *ptr, TYPE value, ...)'
41949     This built-in function, as described by Intel, is not a traditional
41950     test-and-set operation, but rather an atomic exchange operation.
41951     It writes VALUE into '*PTR', and returns the previous contents of
41952     '*PTR'.
41953
41954     Many targets have only minimal support for such locks, and do not
41955     support a full exchange operation.  In this case, a target may
41956     support reduced functionality here by which the _only_ valid value
41957     to store is the immediate constant 1.  The exact value actually
41958     stored in '*PTR' is implementation defined.
41959
41960     This built-in function is not a full barrier, but rather an
41961     "acquire barrier".  This means that references after the operation
41962     cannot move to (or be speculated to) before the operation, but
41963     previous memory stores may not be globally visible yet, and
41964     previous memory loads may not yet be satisfied.
41965
41966'void __sync_lock_release (TYPE *ptr, ...)'
41967     This built-in function releases the lock acquired by
41968     '__sync_lock_test_and_set'.  Normally this means writing the
41969     constant 0 to '*PTR'.
41970
41971     This built-in function is not a full barrier, but rather a "release
41972     barrier".  This means that all previous memory stores are globally
41973     visible, and all previous memory loads have been satisfied, but
41974     following memory reads are not prevented from being speculated to
41975     before the barrier.
41976
41977
41978File: gcc.info,  Node: __atomic Builtins,  Next: Integer Overflow Builtins,  Prev: __sync Builtins,  Up: C Extensions
41979
419806.55 Built-in Functions for Memory Model Aware Atomic Operations
41981================================================================
41982
41983The following built-in functions approximately match the requirements
41984for the C++11 memory model.  They are all identified by being prefixed
41985with '__atomic' and most are overloaded so that they work with multiple
41986types.
41987
41988 These functions are intended to replace the legacy '__sync' builtins.
41989The main difference is that the memory order that is requested is a
41990parameter to the functions.  New code should always use the '__atomic'
41991builtins rather than the '__sync' builtins.
41992
41993 Note that the '__atomic' builtins assume that programs will conform to
41994the C++11 memory model.  In particular, they assume that programs are
41995free of data races.  See the C++11 standard for detailed requirements.
41996
41997 The '__atomic' builtins can be used with any integral scalar or pointer
41998type that is 1, 2, 4, or 8 bytes in length.  16-byte integral types are
41999also allowed if '__int128' (*note __int128::) is supported by the
42000architecture.
42001
42002 The four non-arithmetic functions (load, store, exchange, and
42003compare_exchange) all have a generic version as well.  This generic
42004version works on any data type.  It uses the lock-free built-in function
42005if the specific data type size makes that possible; otherwise, an
42006external call is left to be resolved at run time.  This external call is
42007the same format with the addition of a 'size_t' parameter inserted as
42008the first parameter indicating the size of the object being pointed to.
42009All objects must be the same size.
42010
42011 There are 6 different memory orders that can be specified.  These map
42012to the C++11 memory orders with the same names, see the C++11 standard
42013or the GCC wiki on atomic synchronization
42014(http://gcc.gnu.org/wiki/Atomic/GCCMM/AtomicSync) for detailed
42015definitions.  Individual targets may also support additional memory
42016orders for use on specific architectures.  Refer to the target
42017documentation for details of these.
42018
42019 An atomic operation can both constrain code motion and be mapped to
42020hardware instructions for synchronization between threads (e.g., a
42021fence).  To which extent this happens is controlled by the memory
42022orders, which are listed here in approximately ascending order of
42023strength.  The description of each memory order is only meant to roughly
42024illustrate the effects and is not a specification; see the C++11 memory
42025model for precise semantics.
42026
42027'__ATOMIC_RELAXED'
42028     Implies no inter-thread ordering constraints.
42029'__ATOMIC_CONSUME'
42030     This is currently implemented using the stronger '__ATOMIC_ACQUIRE'
42031     memory order because of a deficiency in C++11's semantics for
42032     'memory_order_consume'.
42033'__ATOMIC_ACQUIRE'
42034     Creates an inter-thread happens-before constraint from the release
42035     (or stronger) semantic store to this acquire load.  Can prevent
42036     hoisting of code to before the operation.
42037'__ATOMIC_RELEASE'
42038     Creates an inter-thread happens-before constraint to acquire (or
42039     stronger) semantic loads that read from this release store.  Can
42040     prevent sinking of code to after the operation.
42041'__ATOMIC_ACQ_REL'
42042     Combines the effects of both '__ATOMIC_ACQUIRE' and
42043     '__ATOMIC_RELEASE'.
42044'__ATOMIC_SEQ_CST'
42045     Enforces total ordering with all other '__ATOMIC_SEQ_CST'
42046     operations.
42047
42048 Note that in the C++11 memory model, _fences_ (e.g.,
42049'__atomic_thread_fence') take effect in combination with other atomic
42050operations on specific memory locations (e.g., atomic loads); operations
42051on specific memory locations do not necessarily affect other operations
42052in the same way.
42053
42054 Target architectures are encouraged to provide their own patterns for
42055each of the atomic built-in functions.  If no target is provided, the
42056original non-memory model set of '__sync' atomic built-in functions are
42057used, along with any required synchronization fences surrounding it in
42058order to achieve the proper behavior.  Execution in this case is subject
42059to the same restrictions as those built-in functions.
42060
42061 If there is no pattern or mechanism to provide a lock-free instruction
42062sequence, a call is made to an external routine with the same parameters
42063to be resolved at run time.
42064
42065 When implementing patterns for these built-in functions, the memory
42066order parameter can be ignored as long as the pattern implements the
42067most restrictive '__ATOMIC_SEQ_CST' memory order.  Any of the other
42068memory orders execute correctly with this memory order but they may not
42069execute as efficiently as they could with a more appropriate
42070implementation of the relaxed requirements.
42071
42072 Note that the C++11 standard allows for the memory order parameter to
42073be determined at run time rather than at compile time.  These built-in
42074functions map any run-time value to '__ATOMIC_SEQ_CST' rather than
42075invoke a runtime library call or inline a switch statement.  This is
42076standard compliant, safe, and the simplest approach for now.
42077
42078 The memory order parameter is a signed int, but only the lower 16 bits
42079are reserved for the memory order.  The remainder of the signed int is
42080reserved for target use and should be 0.  Use of the predefined atomic
42081values ensures proper usage.
42082
42083 -- Built-in Function: TYPE __atomic_load_n (TYPE *ptr, int memorder)
42084     This built-in function implements an atomic load operation.  It
42085     returns the contents of '*PTR'.
42086
42087     The valid memory order variants are '__ATOMIC_RELAXED',
42088     '__ATOMIC_SEQ_CST', '__ATOMIC_ACQUIRE', and '__ATOMIC_CONSUME'.
42089
42090 -- Built-in Function: void __atomic_load (TYPE *ptr, TYPE *ret, int
42091          memorder)
42092     This is the generic version of an atomic load.  It returns the
42093     contents of '*PTR' in '*RET'.
42094
42095 -- Built-in Function: void __atomic_store_n (TYPE *ptr, TYPE val, int
42096          memorder)
42097     This built-in function implements an atomic store operation.  It
42098     writes 'VAL' into '*PTR'.
42099
42100     The valid memory order variants are '__ATOMIC_RELAXED',
42101     '__ATOMIC_SEQ_CST', and '__ATOMIC_RELEASE'.
42102
42103 -- Built-in Function: void __atomic_store (TYPE *ptr, TYPE *val, int
42104          memorder)
42105     This is the generic version of an atomic store.  It stores the
42106     value of '*VAL' into '*PTR'.
42107
42108 -- Built-in Function: TYPE __atomic_exchange_n (TYPE *ptr, TYPE val,
42109          int memorder)
42110     This built-in function implements an atomic exchange operation.  It
42111     writes VAL into '*PTR', and returns the previous contents of
42112     '*PTR'.
42113
42114     The valid memory order variants are '__ATOMIC_RELAXED',
42115     '__ATOMIC_SEQ_CST', '__ATOMIC_ACQUIRE', '__ATOMIC_RELEASE', and
42116     '__ATOMIC_ACQ_REL'.
42117
42118 -- Built-in Function: void __atomic_exchange (TYPE *ptr, TYPE *val,
42119          TYPE *ret, int memorder)
42120     This is the generic version of an atomic exchange.  It stores the
42121     contents of '*VAL' into '*PTR'.  The original value of '*PTR' is
42122     copied into '*RET'.
42123
42124 -- Built-in Function: bool __atomic_compare_exchange_n (TYPE *ptr, TYPE
42125          *expected, TYPE desired, bool weak, int success_memorder, int
42126          failure_memorder)
42127     This built-in function implements an atomic compare and exchange
42128     operation.  This compares the contents of '*PTR' with the contents
42129     of '*EXPECTED'.  If equal, the operation is a _read-modify-write_
42130     operation that writes DESIRED into '*PTR'.  If they are not equal,
42131     the operation is a _read_ and the current contents of '*PTR' are
42132     written into '*EXPECTED'.  WEAK is 'true' for weak
42133     compare_exchange, which may fail spuriously, and 'false' for the
42134     strong variation, which never fails spuriously.  Many targets only
42135     offer the strong variation and ignore the parameter.  When in
42136     doubt, use the strong variation.
42137
42138     If DESIRED is written into '*PTR' then 'true' is returned and
42139     memory is affected according to the memory order specified by
42140     SUCCESS_MEMORDER.  There are no restrictions on what memory order
42141     can be used here.
42142
42143     Otherwise, 'false' is returned and memory is affected according to
42144     FAILURE_MEMORDER.  This memory order cannot be '__ATOMIC_RELEASE'
42145     nor '__ATOMIC_ACQ_REL'.  It also cannot be a stronger order than
42146     that specified by SUCCESS_MEMORDER.
42147
42148 -- Built-in Function: bool __atomic_compare_exchange (TYPE *ptr, TYPE
42149          *expected, TYPE *desired, bool weak, int success_memorder, int
42150          failure_memorder)
42151     This built-in function implements the generic version of
42152     '__atomic_compare_exchange'.  The function is virtually identical
42153     to '__atomic_compare_exchange_n', except the desired value is also
42154     a pointer.
42155
42156 -- Built-in Function: TYPE __atomic_add_fetch (TYPE *ptr, TYPE val, int
42157          memorder)
42158 -- Built-in Function: TYPE __atomic_sub_fetch (TYPE *ptr, TYPE val, int
42159          memorder)
42160 -- Built-in Function: TYPE __atomic_and_fetch (TYPE *ptr, TYPE val, int
42161          memorder)
42162 -- Built-in Function: TYPE __atomic_xor_fetch (TYPE *ptr, TYPE val, int
42163          memorder)
42164 -- Built-in Function: TYPE __atomic_or_fetch (TYPE *ptr, TYPE val, int
42165          memorder)
42166 -- Built-in Function: TYPE __atomic_nand_fetch (TYPE *ptr, TYPE val,
42167          int memorder)
42168     These built-in functions perform the operation suggested by the
42169     name, and return the result of the operation.  Operations on
42170     pointer arguments are performed as if the operands were of the
42171     'uintptr_t' type.  That is, they are not scaled by the size of the
42172     type to which the pointer points.
42173
42174          { *ptr OP= val; return *ptr; }
42175          { *ptr = ~(*ptr & val); return *ptr; } // nand
42176
42177     The object pointed to by the first argument must be of integer or
42178     pointer type.  It must not be a boolean type.  All memory orders
42179     are valid.
42180
42181 -- Built-in Function: TYPE __atomic_fetch_add (TYPE *ptr, TYPE val, int
42182          memorder)
42183 -- Built-in Function: TYPE __atomic_fetch_sub (TYPE *ptr, TYPE val, int
42184          memorder)
42185 -- Built-in Function: TYPE __atomic_fetch_and (TYPE *ptr, TYPE val, int
42186          memorder)
42187 -- Built-in Function: TYPE __atomic_fetch_xor (TYPE *ptr, TYPE val, int
42188          memorder)
42189 -- Built-in Function: TYPE __atomic_fetch_or (TYPE *ptr, TYPE val, int
42190          memorder)
42191 -- Built-in Function: TYPE __atomic_fetch_nand (TYPE *ptr, TYPE val,
42192          int memorder)
42193     These built-in functions perform the operation suggested by the
42194     name, and return the value that had previously been in '*PTR'.
42195     Operations on pointer arguments are performed as if the operands
42196     were of the 'uintptr_t' type.  That is, they are not scaled by the
42197     size of the type to which the pointer points.
42198
42199          { tmp = *ptr; *ptr OP= val; return tmp; }
42200          { tmp = *ptr; *ptr = ~(*ptr & val); return tmp; } // nand
42201
42202     The same constraints on arguments apply as for the corresponding
42203     '__atomic_op_fetch' built-in functions.  All memory orders are
42204     valid.
42205
42206 -- Built-in Function: bool __atomic_test_and_set (void *ptr, int
42207          memorder)
42208
42209     This built-in function performs an atomic test-and-set operation on
42210     the byte at '*PTR'.  The byte is set to some implementation defined
42211     nonzero "set" value and the return value is 'true' if and only if
42212     the previous contents were "set".  It should be only used for
42213     operands of type 'bool' or 'char'.  For other types only part of
42214     the value may be set.
42215
42216     All memory orders are valid.
42217
42218 -- Built-in Function: void __atomic_clear (bool *ptr, int memorder)
42219
42220     This built-in function performs an atomic clear operation on
42221     '*PTR'.  After the operation, '*PTR' contains 0.  It should be only
42222     used for operands of type 'bool' or 'char' and in conjunction with
42223     '__atomic_test_and_set'.  For other types it may only clear
42224     partially.  If the type is not 'bool' prefer using
42225     '__atomic_store'.
42226
42227     The valid memory order variants are '__ATOMIC_RELAXED',
42228     '__ATOMIC_SEQ_CST', and '__ATOMIC_RELEASE'.
42229
42230 -- Built-in Function: void __atomic_thread_fence (int memorder)
42231
42232     This built-in function acts as a synchronization fence between
42233     threads based on the specified memory order.
42234
42235     All memory orders are valid.
42236
42237 -- Built-in Function: void __atomic_signal_fence (int memorder)
42238
42239     This built-in function acts as a synchronization fence between a
42240     thread and signal handlers based in the same thread.
42241
42242     All memory orders are valid.
42243
42244 -- Built-in Function: bool __atomic_always_lock_free (size_t size, void
42245          *ptr)
42246
42247     This built-in function returns 'true' if objects of SIZE bytes
42248     always generate lock-free atomic instructions for the target
42249     architecture.  SIZE must resolve to a compile-time constant and the
42250     result also resolves to a compile-time constant.
42251
42252     PTR is an optional pointer to the object that may be used to
42253     determine alignment.  A value of 0 indicates typical alignment
42254     should be used.  The compiler may also ignore this parameter.
42255
42256          if (__atomic_always_lock_free (sizeof (long long), 0))
42257
42258 -- Built-in Function: bool __atomic_is_lock_free (size_t size, void
42259          *ptr)
42260
42261     This built-in function returns 'true' if objects of SIZE bytes
42262     always generate lock-free atomic instructions for the target
42263     architecture.  If the built-in function is not known to be
42264     lock-free, a call is made to a runtime routine named
42265     '__atomic_is_lock_free'.
42266
42267     PTR is an optional pointer to the object that may be used to
42268     determine alignment.  A value of 0 indicates typical alignment
42269     should be used.  The compiler may also ignore this parameter.
42270
42271
42272File: gcc.info,  Node: Integer Overflow Builtins,  Next: x86 specific memory model extensions for transactional memory,  Prev: __atomic Builtins,  Up: C Extensions
42273
422746.56 Built-in Functions to Perform Arithmetic with Overflow Checking
42275====================================================================
42276
42277The following built-in functions allow performing simple arithmetic
42278operations together with checking whether the operations overflowed.
42279
42280 -- Built-in Function: bool __builtin_add_overflow (TYPE1 a, TYPE2 b,
42281          TYPE3 *res)
42282 -- Built-in Function: bool __builtin_sadd_overflow (int a, int b, int
42283          *res)
42284 -- Built-in Function: bool __builtin_saddl_overflow (long int a, long
42285          int b, long int *res)
42286 -- Built-in Function: bool __builtin_saddll_overflow (long long int a,
42287          long long int b, long long int *res)
42288 -- Built-in Function: bool __builtin_uadd_overflow (unsigned int a,
42289          unsigned int b, unsigned int *res)
42290 -- Built-in Function: bool __builtin_uaddl_overflow (unsigned long int
42291          a, unsigned long int b, unsigned long int *res)
42292 -- Built-in Function: bool __builtin_uaddll_overflow (unsigned long
42293          long int a, unsigned long long int b, unsigned long long int
42294          *res)
42295
42296     These built-in functions promote the first two operands into
42297     infinite precision signed type and perform addition on those
42298     promoted operands.  The result is then cast to the type the third
42299     pointer argument points to and stored there.  If the stored result
42300     is equal to the infinite precision result, the built-in functions
42301     return 'false', otherwise they return 'true'.  As the addition is
42302     performed in infinite signed precision, these built-in functions
42303     have fully defined behavior for all argument values.
42304
42305     The first built-in function allows arbitrary integral types for
42306     operands and the result type must be pointer to some integral type
42307     other than enumerated or boolean type, the rest of the built-in
42308     functions have explicit integer types.
42309
42310     The compiler will attempt to use hardware instructions to implement
42311     these built-in functions where possible, like conditional jump on
42312     overflow after addition, conditional jump on carry etc.
42313
42314 -- Built-in Function: bool __builtin_sub_overflow (TYPE1 a, TYPE2 b,
42315          TYPE3 *res)
42316 -- Built-in Function: bool __builtin_ssub_overflow (int a, int b, int
42317          *res)
42318 -- Built-in Function: bool __builtin_ssubl_overflow (long int a, long
42319          int b, long int *res)
42320 -- Built-in Function: bool __builtin_ssubll_overflow (long long int a,
42321          long long int b, long long int *res)
42322 -- Built-in Function: bool __builtin_usub_overflow (unsigned int a,
42323          unsigned int b, unsigned int *res)
42324 -- Built-in Function: bool __builtin_usubl_overflow (unsigned long int
42325          a, unsigned long int b, unsigned long int *res)
42326 -- Built-in Function: bool __builtin_usubll_overflow (unsigned long
42327          long int a, unsigned long long int b, unsigned long long int
42328          *res)
42329
42330     These built-in functions are similar to the add overflow checking
42331     built-in functions above, except they perform subtraction, subtract
42332     the second argument from the first one, instead of addition.
42333
42334 -- Built-in Function: bool __builtin_mul_overflow (TYPE1 a, TYPE2 b,
42335          TYPE3 *res)
42336 -- Built-in Function: bool __builtin_smul_overflow (int a, int b, int
42337          *res)
42338 -- Built-in Function: bool __builtin_smull_overflow (long int a, long
42339          int b, long int *res)
42340 -- Built-in Function: bool __builtin_smulll_overflow (long long int a,
42341          long long int b, long long int *res)
42342 -- Built-in Function: bool __builtin_umul_overflow (unsigned int a,
42343          unsigned int b, unsigned int *res)
42344 -- Built-in Function: bool __builtin_umull_overflow (unsigned long int
42345          a, unsigned long int b, unsigned long int *res)
42346 -- Built-in Function: bool __builtin_umulll_overflow (unsigned long
42347          long int a, unsigned long long int b, unsigned long long int
42348          *res)
42349
42350     These built-in functions are similar to the add overflow checking
42351     built-in functions above, except they perform multiplication,
42352     instead of addition.
42353
42354 The following built-in functions allow checking if simple arithmetic
42355operation would overflow.
42356
42357 -- Built-in Function: bool __builtin_add_overflow_p (TYPE1 a, TYPE2 b,
42358          TYPE3 c)
42359 -- Built-in Function: bool __builtin_sub_overflow_p (TYPE1 a, TYPE2 b,
42360          TYPE3 c)
42361 -- Built-in Function: bool __builtin_mul_overflow_p (TYPE1 a, TYPE2 b,
42362          TYPE3 c)
42363
42364     These built-in functions are similar to '__builtin_add_overflow',
42365     '__builtin_sub_overflow', or '__builtin_mul_overflow', except that
42366     they don't store the result of the arithmetic operation anywhere
42367     and the last argument is not a pointer, but some expression with
42368     integral type other than enumerated or boolean type.
42369
42370     The built-in functions promote the first two operands into infinite
42371     precision signed type and perform addition on those promoted
42372     operands.  The result is then cast to the type of the third
42373     argument.  If the cast result is equal to the infinite precision
42374     result, the built-in functions return 'false', otherwise they
42375     return 'true'.  The value of the third argument is ignored, just
42376     the side effects in the third argument are evaluated, and no
42377     integral argument promotions are performed on the last argument.
42378     If the third argument is a bit-field, the type used for the result
42379     cast has the precision and signedness of the given bit-field,
42380     rather than precision and signedness of the underlying type.
42381
42382     For example, the following macro can be used to portably check, at
42383     compile-time, whether or not adding two constant integers will
42384     overflow, and perform the addition only when it is known to be safe
42385     and not to trigger a '-Woverflow' warning.
42386
42387          #define INT_ADD_OVERFLOW_P(a, b) \
42388             __builtin_add_overflow_p (a, b, (__typeof__ ((a) + (b))) 0)
42389
42390          enum {
42391              A = INT_MAX, B = 3,
42392              C = INT_ADD_OVERFLOW_P (A, B) ? 0 : A + B,
42393              D = __builtin_add_overflow_p (1, SCHAR_MAX, (signed char) 0)
42394          };
42395
42396     The compiler will attempt to use hardware instructions to implement
42397     these built-in functions where possible, like conditional jump on
42398     overflow after addition, conditional jump on carry etc.
42399
42400
42401File: gcc.info,  Node: x86 specific memory model extensions for transactional memory,  Next: Object Size Checking,  Prev: Integer Overflow Builtins,  Up: C Extensions
42402
424036.57 x86-Specific Memory Model Extensions for Transactional Memory
42404==================================================================
42405
42406The x86 architecture supports additional memory ordering flags to mark
42407critical sections for hardware lock elision.  These must be specified in
42408addition to an existing memory order to atomic intrinsics.
42409
42410'__ATOMIC_HLE_ACQUIRE'
42411     Start lock elision on a lock variable.  Memory order must be
42412     '__ATOMIC_ACQUIRE' or stronger.
42413'__ATOMIC_HLE_RELEASE'
42414     End lock elision on a lock variable.  Memory order must be
42415     '__ATOMIC_RELEASE' or stronger.
42416
42417 When a lock acquire fails, it is required for good performance to abort
42418the transaction quickly.  This can be done with a '_mm_pause'.
42419
42420     #include <immintrin.h> // For _mm_pause
42421
42422     int lockvar;
42423
42424     /* Acquire lock with lock elision */
42425     while (__atomic_exchange_n(&lockvar, 1, __ATOMIC_ACQUIRE|__ATOMIC_HLE_ACQUIRE))
42426         _mm_pause(); /* Abort failed transaction */
42427     ...
42428     /* Free lock with lock elision */
42429     __atomic_store_n(&lockvar, 0, __ATOMIC_RELEASE|__ATOMIC_HLE_RELEASE);
42430
42431
42432File: gcc.info,  Node: Object Size Checking,  Next: Other Builtins,  Prev: x86 specific memory model extensions for transactional memory,  Up: C Extensions
42433
424346.58 Object Size Checking Built-in Functions
42435============================================
42436
42437GCC implements a limited buffer overflow protection mechanism that can
42438prevent some buffer overflow attacks by determining the sizes of objects
42439into which data is about to be written and preventing the writes when
42440the size isn't sufficient.  The built-in functions described below yield
42441the best results when used together and when optimization is enabled.
42442For example, to detect object sizes across function boundaries or to
42443follow pointer assignments through non-trivial control flow they rely on
42444various optimization passes enabled with '-O2'.  However, to a limited
42445extent, they can be used without optimization as well.
42446
42447 -- Built-in Function: size_t __builtin_object_size (const void * PTR,
42448          int TYPE)
42449     is a built-in construct that returns a constant number of bytes
42450     from PTR to the end of the object PTR pointer points to (if known
42451     at compile time).  To determine the sizes of dynamically allocated
42452     objects the function relies on the allocation functions called to
42453     obtain the storage to be declared with the 'alloc_size' attribute
42454     (*note Common Function Attributes::).  '__builtin_object_size'
42455     never evaluates its arguments for side effects.  If there are any
42456     side effects in them, it returns '(size_t) -1' for TYPE 0 or 1 and
42457     '(size_t) 0' for TYPE 2 or 3.  If there are multiple objects PTR
42458     can point to and all of them are known at compile time, the
42459     returned number is the maximum of remaining byte counts in those
42460     objects if TYPE & 2 is 0 and minimum if nonzero.  If it is not
42461     possible to determine which objects PTR points to at compile time,
42462     '__builtin_object_size' should return '(size_t) -1' for TYPE 0 or 1
42463     and '(size_t) 0' for TYPE 2 or 3.
42464
42465     TYPE is an integer constant from 0 to 3.  If the least significant
42466     bit is clear, objects are whole variables, if it is set, a closest
42467     surrounding subobject is considered the object a pointer points to.
42468     The second bit determines if maximum or minimum of remaining bytes
42469     is computed.
42470
42471          struct V { char buf1[10]; int b; char buf2[10]; } var;
42472          char *p = &var.buf1[1], *q = &var.b;
42473
42474          /* Here the object p points to is var.  */
42475          assert (__builtin_object_size (p, 0) == sizeof (var) - 1);
42476          /* The subobject p points to is var.buf1.  */
42477          assert (__builtin_object_size (p, 1) == sizeof (var.buf1) - 1);
42478          /* The object q points to is var.  */
42479          assert (__builtin_object_size (q, 0)
42480                  == (char *) (&var + 1) - (char *) &var.b);
42481          /* The subobject q points to is var.b.  */
42482          assert (__builtin_object_size (q, 1) == sizeof (var.b));
42483
42484 There are built-in functions added for many common string operation
42485functions, e.g., for 'memcpy' '__builtin___memcpy_chk' built-in is
42486provided.  This built-in has an additional last argument, which is the
42487number of bytes remaining in the object the DEST argument points to or
42488'(size_t) -1' if the size is not known.
42489
42490 The built-in functions are optimized into the normal string functions
42491like 'memcpy' if the last argument is '(size_t) -1' or if it is known at
42492compile time that the destination object will not be overflowed.  If the
42493compiler can determine at compile time that the object will always be
42494overflowed, it issues a warning.
42495
42496 The intended use can be e.g.
42497
42498     #undef memcpy
42499     #define bos0(dest) __builtin_object_size (dest, 0)
42500     #define memcpy(dest, src, n) \
42501       __builtin___memcpy_chk (dest, src, n, bos0 (dest))
42502
42503     char *volatile p;
42504     char buf[10];
42505     /* It is unknown what object p points to, so this is optimized
42506        into plain memcpy - no checking is possible.  */
42507     memcpy (p, "abcde", n);
42508     /* Destination is known and length too.  It is known at compile
42509        time there will be no overflow.  */
42510     memcpy (&buf[5], "abcde", 5);
42511     /* Destination is known, but the length is not known at compile time.
42512        This will result in __memcpy_chk call that can check for overflow
42513        at run time.  */
42514     memcpy (&buf[5], "abcde", n);
42515     /* Destination is known and it is known at compile time there will
42516        be overflow.  There will be a warning and __memcpy_chk call that
42517        will abort the program at run time.  */
42518     memcpy (&buf[6], "abcde", 5);
42519
42520 Such built-in functions are provided for 'memcpy', 'mempcpy',
42521'memmove', 'memset', 'strcpy', 'stpcpy', 'strncpy', 'strcat' and
42522'strncat'.
42523
42524 There are also checking built-in functions for formatted output
42525functions.
42526     int __builtin___sprintf_chk (char *s, int flag, size_t os, const char *fmt, ...);
42527     int __builtin___snprintf_chk (char *s, size_t maxlen, int flag, size_t os,
42528                                   const char *fmt, ...);
42529     int __builtin___vsprintf_chk (char *s, int flag, size_t os, const char *fmt,
42530                                   va_list ap);
42531     int __builtin___vsnprintf_chk (char *s, size_t maxlen, int flag, size_t os,
42532                                    const char *fmt, va_list ap);
42533
42534 The added FLAG argument is passed unchanged to '__sprintf_chk' etc.
42535functions and can contain implementation specific flags on what
42536additional security measures the checking function might take, such as
42537handling '%n' differently.
42538
42539 The OS argument is the object size S points to, like in the other
42540built-in functions.  There is a small difference in the behavior though,
42541if OS is '(size_t) -1', the built-in functions are optimized into the
42542non-checking functions only if FLAG is 0, otherwise the checking
42543function is called with OS argument set to '(size_t) -1'.
42544
42545 In addition to this, there are checking built-in functions
42546'__builtin___printf_chk', '__builtin___vprintf_chk',
42547'__builtin___fprintf_chk' and '__builtin___vfprintf_chk'.  These have
42548just one additional argument, FLAG, right before format string FMT.  If
42549the compiler is able to optimize them to 'fputc' etc. functions, it
42550does, otherwise the checking function is called and the FLAG argument
42551passed to it.
42552
42553
42554File: gcc.info,  Node: Other Builtins,  Next: Target Builtins,  Prev: Object Size Checking,  Up: C Extensions
42555
425566.59 Other Built-in Functions Provided by GCC
42557=============================================
42558
42559GCC provides a large number of built-in functions other than the ones
42560mentioned above.  Some of these are for internal use in the processing
42561of exceptions or variable-length argument lists and are not documented
42562here because they may change from time to time; we do not recommend
42563general use of these functions.
42564
42565 The remaining functions are provided for optimization purposes.
42566
42567 With the exception of built-ins that have library equivalents such as
42568the standard C library functions discussed below, or that expand to
42569library calls, GCC built-in functions are always expanded inline and
42570thus do not have corresponding entry points and their address cannot be
42571obtained.  Attempting to use them in an expression other than a function
42572call results in a compile-time error.
42573
42574 GCC includes built-in versions of many of the functions in the standard
42575C library.  These functions come in two forms: one whose names start
42576with the '__builtin_' prefix, and the other without.  Both forms have
42577the same type (including prototype), the same address (when their
42578address is taken), and the same meaning as the C library functions even
42579if you specify the '-fno-builtin' option *note C Dialect Options::).
42580Many of these functions are only optimized in certain cases; if they are
42581not optimized in a particular case, a call to the library function is
42582emitted.
42583
42584 Outside strict ISO C mode ('-ansi', '-std=c90', '-std=c99' or
42585'-std=c11'), the functions '_exit', 'alloca', 'bcmp', 'bzero',
42586'dcgettext', 'dgettext', 'dremf', 'dreml', 'drem', 'exp10f', 'exp10l',
42587'exp10', 'ffsll', 'ffsl', 'ffs', 'fprintf_unlocked', 'fputs_unlocked',
42588'gammaf', 'gammal', 'gamma', 'gammaf_r', 'gammal_r', 'gamma_r',
42589'gettext', 'index', 'isascii', 'j0f', 'j0l', 'j0', 'j1f', 'j1l', 'j1',
42590'jnf', 'jnl', 'jn', 'lgammaf_r', 'lgammal_r', 'lgamma_r', 'mempcpy',
42591'pow10f', 'pow10l', 'pow10', 'printf_unlocked', 'rindex', 'roundeven',
42592'roundevenf', 'roudnevenl', 'scalbf', 'scalbl', 'scalb', 'signbit',
42593'signbitf', 'signbitl', 'signbitd32', 'signbitd64', 'signbitd128',
42594'significandf', 'significandl', 'significand', 'sincosf', 'sincosl',
42595'sincos', 'stpcpy', 'stpncpy', 'strcasecmp', 'strdup', 'strfmon',
42596'strncasecmp', 'strndup', 'strnlen', 'toascii', 'y0f', 'y0l', 'y0',
42597'y1f', 'y1l', 'y1', 'ynf', 'ynl' and 'yn' may be handled as built-in
42598functions.  All these functions have corresponding versions prefixed
42599with '__builtin_', which may be used even in strict C90 mode.
42600
42601 The ISO C99 functions '_Exit', 'acoshf', 'acoshl', 'acosh', 'asinhf',
42602'asinhl', 'asinh', 'atanhf', 'atanhl', 'atanh', 'cabsf', 'cabsl',
42603'cabs', 'cacosf', 'cacoshf', 'cacoshl', 'cacosh', 'cacosl', 'cacos',
42604'cargf', 'cargl', 'carg', 'casinf', 'casinhf', 'casinhl', 'casinh',
42605'casinl', 'casin', 'catanf', 'catanhf', 'catanhl', 'catanh', 'catanl',
42606'catan', 'cbrtf', 'cbrtl', 'cbrt', 'ccosf', 'ccoshf', 'ccoshl', 'ccosh',
42607'ccosl', 'ccos', 'cexpf', 'cexpl', 'cexp', 'cimagf', 'cimagl', 'cimag',
42608'clogf', 'clogl', 'clog', 'conjf', 'conjl', 'conj', 'copysignf',
42609'copysignl', 'copysign', 'cpowf', 'cpowl', 'cpow', 'cprojf', 'cprojl',
42610'cproj', 'crealf', 'creall', 'creal', 'csinf', 'csinhf', 'csinhl',
42611'csinh', 'csinl', 'csin', 'csqrtf', 'csqrtl', 'csqrt', 'ctanf',
42612'ctanhf', 'ctanhl', 'ctanh', 'ctanl', 'ctan', 'erfcf', 'erfcl', 'erfc',
42613'erff', 'erfl', 'erf', 'exp2f', 'exp2l', 'exp2', 'expm1f', 'expm1l',
42614'expm1', 'fdimf', 'fdiml', 'fdim', 'fmaf', 'fmal', 'fmaxf', 'fmaxl',
42615'fmax', 'fma', 'fminf', 'fminl', 'fmin', 'hypotf', 'hypotl', 'hypot',
42616'ilogbf', 'ilogbl', 'ilogb', 'imaxabs', 'isblank', 'iswblank',
42617'lgammaf', 'lgammal', 'lgamma', 'llabs', 'llrintf', 'llrintl', 'llrint',
42618'llroundf', 'llroundl', 'llround', 'log1pf', 'log1pl', 'log1p', 'log2f',
42619'log2l', 'log2', 'logbf', 'logbl', 'logb', 'lrintf', 'lrintl', 'lrint',
42620'lroundf', 'lroundl', 'lround', 'nearbyintf', 'nearbyintl', 'nearbyint',
42621'nextafterf', 'nextafterl', 'nextafter', 'nexttowardf', 'nexttowardl',
42622'nexttoward', 'remainderf', 'remainderl', 'remainder', 'remquof',
42623'remquol', 'remquo', 'rintf', 'rintl', 'rint', 'roundf', 'roundl',
42624'round', 'scalblnf', 'scalblnl', 'scalbln', 'scalbnf', 'scalbnl',
42625'scalbn', 'snprintf', 'tgammaf', 'tgammal', 'tgamma', 'truncf',
42626'truncl', 'trunc', 'vfscanf', 'vscanf', 'vsnprintf' and 'vsscanf' are
42627handled as built-in functions except in strict ISO C90 mode ('-ansi' or
42628'-std=c90').
42629
42630 There are also built-in versions of the ISO C99 functions 'acosf',
42631'acosl', 'asinf', 'asinl', 'atan2f', 'atan2l', 'atanf', 'atanl',
42632'ceilf', 'ceill', 'cosf', 'coshf', 'coshl', 'cosl', 'expf', 'expl',
42633'fabsf', 'fabsl', 'floorf', 'floorl', 'fmodf', 'fmodl', 'frexpf',
42634'frexpl', 'ldexpf', 'ldexpl', 'log10f', 'log10l', 'logf', 'logl',
42635'modfl', 'modf', 'powf', 'powl', 'sinf', 'sinhf', 'sinhl', 'sinl',
42636'sqrtf', 'sqrtl', 'tanf', 'tanhf', 'tanhl' and 'tanl' that are
42637recognized in any mode since ISO C90 reserves these names for the
42638purpose to which ISO C99 puts them.  All these functions have
42639corresponding versions prefixed with '__builtin_'.
42640
42641 There are also built-in functions '__builtin_fabsfN',
42642'__builtin_fabsfNx', '__builtin_copysignfN' and '__builtin_copysignfNx',
42643corresponding to the TS 18661-3 functions 'fabsfN', 'fabsfNx',
42644'copysignfN' and 'copysignfNx', for supported types '_FloatN' and
42645'_FloatNx'.
42646
42647 There are also GNU extension functions 'clog10', 'clog10f' and
42648'clog10l' which names are reserved by ISO C99 for future use.  All these
42649functions have versions prefixed with '__builtin_'.
42650
42651 The ISO C94 functions 'iswalnum', 'iswalpha', 'iswcntrl', 'iswdigit',
42652'iswgraph', 'iswlower', 'iswprint', 'iswpunct', 'iswspace', 'iswupper',
42653'iswxdigit', 'towlower' and 'towupper' are handled as built-in functions
42654except in strict ISO C90 mode ('-ansi' or '-std=c90').
42655
42656 The ISO C90 functions 'abort', 'abs', 'acos', 'asin', 'atan2', 'atan',
42657'calloc', 'ceil', 'cosh', 'cos', 'exit', 'exp', 'fabs', 'floor', 'fmod',
42658'fprintf', 'fputs', 'free', 'frexp', 'fscanf', 'isalnum', 'isalpha',
42659'iscntrl', 'isdigit', 'isgraph', 'islower', 'isprint', 'ispunct',
42660'isspace', 'isupper', 'isxdigit', 'tolower', 'toupper', 'labs', 'ldexp',
42661'log10', 'log', 'malloc', 'memchr', 'memcmp', 'memcpy', 'memset',
42662'modf', 'pow', 'printf', 'putchar', 'puts', 'realloc', 'scanf', 'sinh',
42663'sin', 'snprintf', 'sprintf', 'sqrt', 'sscanf', 'strcat', 'strchr',
42664'strcmp', 'strcpy', 'strcspn', 'strlen', 'strncat', 'strncmp',
42665'strncpy', 'strpbrk', 'strrchr', 'strspn', 'strstr', 'tanh', 'tan',
42666'vfprintf', 'vprintf' and 'vsprintf' are all recognized as built-in
42667functions unless '-fno-builtin' is specified (or '-fno-builtin-FUNCTION'
42668is specified for an individual function).  All of these functions have
42669corresponding versions prefixed with '__builtin_'.
42670
42671 GCC provides built-in versions of the ISO C99 floating-point comparison
42672macros that avoid raising exceptions for unordered operands.  They have
42673the same names as the standard macros ( 'isgreater', 'isgreaterequal',
42674'isless', 'islessequal', 'islessgreater', and 'isunordered') , with
42675'__builtin_' prefixed.  We intend for a library implementor to be able
42676to simply '#define' each standard macro to its built-in equivalent.  In
42677the same fashion, GCC provides 'fpclassify', 'isfinite', 'isinf_sign',
42678'isnormal' and 'signbit' built-ins used with '__builtin_' prefixed.  The
42679'isinf' and 'isnan' built-in functions appear both with and without the
42680'__builtin_' prefix.
42681
42682 -- Built-in Function: void *__builtin_alloca (size_t size)
42683     The '__builtin_alloca' function must be called at block scope.  The
42684     function allocates an object SIZE bytes large on the stack of the
42685     calling function.  The object is aligned on the default stack
42686     alignment boundary for the target determined by the
42687     '__BIGGEST_ALIGNMENT__' macro.  The '__builtin_alloca' function
42688     returns a pointer to the first byte of the allocated object.  The
42689     lifetime of the allocated object ends just before the calling
42690     function returns to its caller.  This is so even when
42691     '__builtin_alloca' is called within a nested block.
42692
42693     For example, the following function allocates eight objects of 'n'
42694     bytes each on the stack, storing a pointer to each in consecutive
42695     elements of the array 'a'.  It then passes the array to function
42696     'g' which can safely use the storage pointed to by each of the
42697     array elements.
42698
42699          void f (unsigned n)
42700          {
42701            void *a [8];
42702            for (int i = 0; i != 8; ++i)
42703              a [i] = __builtin_alloca (n);
42704
42705            g (a, n);   // safe
42706          }
42707
42708     Since the '__builtin_alloca' function doesn't validate its argument
42709     it is the responsibility of its caller to make sure the argument
42710     doesn't cause it to exceed the stack size limit.  The
42711     '__builtin_alloca' function is provided to make it possible to
42712     allocate on the stack arrays of bytes with an upper bound that may
42713     be computed at run time.  Since C99 Variable Length Arrays offer
42714     similar functionality under a portable, more convenient, and safer
42715     interface they are recommended instead, in both C99 and C++
42716     programs where GCC provides them as an extension.  *Note Variable
42717     Length::, for details.
42718
42719 -- Built-in Function: void *__builtin_alloca_with_align (size_t size,
42720          size_t alignment)
42721     The '__builtin_alloca_with_align' function must be called at block
42722     scope.  The function allocates an object SIZE bytes large on the
42723     stack of the calling function.  The allocated object is aligned on
42724     the boundary specified by the argument ALIGNMENT whose unit is
42725     given in bits (not bytes).  The SIZE argument must be positive and
42726     not exceed the stack size limit.  The ALIGNMENT argument must be a
42727     constant integer expression that evaluates to a power of 2 greater
42728     than or equal to 'CHAR_BIT' and less than some unspecified maximum.
42729     Invocations with other values are rejected with an error indicating
42730     the valid bounds.  The function returns a pointer to the first byte
42731     of the allocated object.  The lifetime of the allocated object ends
42732     at the end of the block in which the function was called.  The
42733     allocated storage is released no later than just before the calling
42734     function returns to its caller, but may be released at the end of
42735     the block in which the function was called.
42736
42737     For example, in the following function the call to 'g' is unsafe
42738     because when 'overalign' is non-zero, the space allocated by
42739     '__builtin_alloca_with_align' may have been released at the end of
42740     the 'if' statement in which it was called.
42741
42742          void f (unsigned n, bool overalign)
42743          {
42744            void *p;
42745            if (overalign)
42746              p = __builtin_alloca_with_align (n, 64 /* bits */);
42747            else
42748              p = __builtin_alloc (n);
42749
42750            g (p, n);   // unsafe
42751          }
42752
42753     Since the '__builtin_alloca_with_align' function doesn't validate
42754     its SIZE argument it is the responsibility of its caller to make
42755     sure the argument doesn't cause it to exceed the stack size limit.
42756     The '__builtin_alloca_with_align' function is provided to make it
42757     possible to allocate on the stack overaligned arrays of bytes with
42758     an upper bound that may be computed at run time.  Since C99
42759     Variable Length Arrays offer the same functionality under a
42760     portable, more convenient, and safer interface they are recommended
42761     instead, in both C99 and C++ programs where GCC provides them as an
42762     extension.  *Note Variable Length::, for details.
42763
42764 -- Built-in Function: void *__builtin_alloca_with_align_and_max (size_t
42765          size, size_t alignment, size_t max_size)
42766     Similar to '__builtin_alloca_with_align' but takes an extra
42767     argument specifying an upper bound for SIZE in case its value
42768     cannot be computed at compile time, for use by '-fstack-usage',
42769     '-Wstack-usage' and '-Walloca-larger-than'.  MAX_SIZE must be a
42770     constant integer expression, it has no effect on code generation
42771     and no attempt is made to check its compatibility with SIZE.
42772
42773 -- Built-in Function: bool __builtin_has_attribute (TYPE-OR-EXPRESSION,
42774          ATTRIBUTE)
42775     The '__builtin_has_attribute' function evaluates to an integer
42776     constant expression equal to 'true' if the symbol or type
42777     referenced by the TYPE-OR-EXPRESSION argument has been declared
42778     with the ATTRIBUTE referenced by the second argument.  For an
42779     TYPE-OR-EXPRESSION argument that does not reference a symbol, since
42780     attributes do not apply to expressions the built-in consider the
42781     type of the argument.  Neither argument is evaluated.  The
42782     TYPE-OR-EXPRESSION argument is subject to the same restrictions as
42783     the argument to 'typeof' (*note Typeof::).  The ATTRIBUTE argument
42784     is an attribute name optionally followed by a comma-separated list
42785     of arguments enclosed in parentheses.  Both forms of attribute
42786     names--with and without double leading and trailing
42787     underscores--are recognized.  *Note Attribute Syntax::, for
42788     details.  When no attribute arguments are specified for an
42789     attribute that expects one or more arguments the function returns
42790     'true' if TYPE-OR-EXPRESSION has been declared with the attribute
42791     regardless of the attribute argument values.  Arguments provided
42792     for an attribute that expects some are validated and matched up to
42793     the provided number.  The function returns 'true' if all provided
42794     arguments match.  For example, the first call to the function below
42795     evaluates to 'true' because 'x' is declared with the 'aligned'
42796     attribute but the second call evaluates to 'false' because 'x' is
42797     declared 'aligned (8)' and not 'aligned (4)'.
42798
42799          __attribute__ ((aligned (8))) int x;
42800          _Static_assert (__builtin_has_attribute (x, aligned), "aligned");
42801          _Static_assert (!__builtin_has_attribute (x, aligned (4)), "aligned (4)");
42802
42803     Due to a limitation the '__builtin_has_attribute' function returns
42804     'false' for the 'mode' attribute even if the type or variable
42805     referenced by the TYPE-OR-EXPRESSION argument was declared with
42806     one.  The function is also not supported with labels, and in C with
42807     enumerators.
42808
42809     Note that unlike the '__has_attribute' preprocessor operator which
42810     is suitable for use in '#if' preprocessing directives
42811     '__builtin_has_attribute' is an intrinsic function that is not
42812     recognized in such contexts.
42813
42814 -- Built-in Function: TYPE __builtin_speculation_safe_value (TYPE val,
42815          TYPE failval)
42816
42817     This built-in function can be used to help mitigate against unsafe
42818     speculative execution.  TYPE may be any integral type or any
42819     pointer type.
42820
42821       1. If the CPU is not speculatively executing the code, then VAL
42822          is returned.
42823       2. If the CPU is executing speculatively then either:
42824             * The function may cause execution to pause until it is
42825               known that the code is no-longer being executed
42826               speculatively (in which case VAL can be returned, as
42827               above); or
42828             * The function may use target-dependent speculation
42829               tracking state to cause FAILVAL to be returned when it is
42830               known that speculative execution has incorrectly
42831               predicted a conditional branch operation.
42832
42833     The second argument, FAILVAL, is optional and defaults to zero if
42834     omitted.
42835
42836     GCC defines the preprocessor macro
42837     '__HAVE_BUILTIN_SPECULATION_SAFE_VALUE' for targets that have been
42838     updated to support this builtin.
42839
42840     The built-in function can be used where a variable appears to be
42841     used in a safe way, but the CPU, due to speculative execution may
42842     temporarily ignore the bounds checks.  Consider, for example, the
42843     following function:
42844
42845          int array[500];
42846          int f (unsigned untrusted_index)
42847          {
42848            if (untrusted_index < 500)
42849              return array[untrusted_index];
42850            return 0;
42851          }
42852
42853     If the function is called repeatedly with 'untrusted_index' less
42854     than the limit of 500, then a branch predictor will learn that the
42855     block of code that returns a value stored in 'array' will be
42856     executed.  If the function is subsequently called with an
42857     out-of-range value it will still try to execute that block of code
42858     first until the CPU determines that the prediction was incorrect
42859     (the CPU will unwind any incorrect operations at that point).
42860     However, depending on how the result of the function is used, it
42861     might be possible to leave traces in the cache that can reveal what
42862     was stored at the out-of-bounds location.  The built-in function
42863     can be used to provide some protection against leaking data in this
42864     way by changing the code to:
42865
42866          int array[500];
42867          int f (unsigned untrusted_index)
42868          {
42869            if (untrusted_index < 500)
42870              return array[__builtin_speculation_safe_value (untrusted_index)];
42871            return 0;
42872          }
42873
42874     The built-in function will either cause execution to stall until
42875     the conditional branch has been fully resolved, or it may permit
42876     speculative execution to continue, but using 0 instead of
42877     'untrusted_value' if that exceeds the limit.
42878
42879     If accessing any memory location is potentially unsafe when
42880     speculative execution is incorrect, then the code can be rewritten
42881     as
42882
42883          int array[500];
42884          int f (unsigned untrusted_index)
42885          {
42886            if (untrusted_index < 500)
42887              return *__builtin_speculation_safe_value (&array[untrusted_index], NULL);
42888            return 0;
42889          }
42890
42891     which will cause a 'NULL' pointer to be used for the unsafe case.
42892
42893 -- Built-in Function: int __builtin_types_compatible_p (TYPE1, TYPE2)
42894
42895     You can use the built-in function '__builtin_types_compatible_p' to
42896     determine whether two types are the same.
42897
42898     This built-in function returns 1 if the unqualified versions of the
42899     types TYPE1 and TYPE2 (which are types, not expressions) are
42900     compatible, 0 otherwise.  The result of this built-in function can
42901     be used in integer constant expressions.
42902
42903     This built-in function ignores top level qualifiers (e.g., 'const',
42904     'volatile').  For example, 'int' is equivalent to 'const int'.
42905
42906     The type 'int[]' and 'int[5]' are compatible.  On the other hand,
42907     'int' and 'char *' are not compatible, even if the size of their
42908     types, on the particular architecture are the same.  Also, the
42909     amount of pointer indirection is taken into account when
42910     determining similarity.  Consequently, 'short *' is not similar to
42911     'short **'.  Furthermore, two types that are typedefed are
42912     considered compatible if their underlying types are compatible.
42913
42914     An 'enum' type is not considered to be compatible with another
42915     'enum' type even if both are compatible with the same integer type;
42916     this is what the C standard specifies.  For example, 'enum {foo,
42917     bar}' is not similar to 'enum {hot, dog}'.
42918
42919     You typically use this function in code whose execution varies
42920     depending on the arguments' types.  For example:
42921
42922          #define foo(x)                                                  \
42923            ({                                                           \
42924              typeof (x) tmp = (x);                                       \
42925              if (__builtin_types_compatible_p (typeof (x), long double)) \
42926                tmp = foo_long_double (tmp);                              \
42927              else if (__builtin_types_compatible_p (typeof (x), double)) \
42928                tmp = foo_double (tmp);                                   \
42929              else if (__builtin_types_compatible_p (typeof (x), float))  \
42930                tmp = foo_float (tmp);                                    \
42931              else                                                        \
42932                abort ();                                                 \
42933              tmp;                                                        \
42934            })
42935
42936     _Note:_ This construct is only available for C.
42937
42938 -- Built-in Function: TYPE __builtin_call_with_static_chain (CALL_EXP,
42939          POINTER_EXP)
42940
42941     The CALL_EXP expression must be a function call, and the
42942     POINTER_EXP expression must be a pointer.  The POINTER_EXP is
42943     passed to the function call in the target's static chain location.
42944     The result of builtin is the result of the function call.
42945
42946     _Note:_ This builtin is only available for C.  This builtin can be
42947     used to call Go closures from C.
42948
42949 -- Built-in Function: TYPE __builtin_choose_expr (CONST_EXP, EXP1,
42950          EXP2)
42951
42952     You can use the built-in function '__builtin_choose_expr' to
42953     evaluate code depending on the value of a constant expression.
42954     This built-in function returns EXP1 if CONST_EXP, which is an
42955     integer constant expression, is nonzero.  Otherwise it returns
42956     EXP2.
42957
42958     This built-in function is analogous to the '? :' operator in C,
42959     except that the expression returned has its type unaltered by
42960     promotion rules.  Also, the built-in function does not evaluate the
42961     expression that is not chosen.  For example, if CONST_EXP evaluates
42962     to 'true', EXP2 is not evaluated even if it has side effects.
42963
42964     This built-in function can return an lvalue if the chosen argument
42965     is an lvalue.
42966
42967     If EXP1 is returned, the return type is the same as EXP1's type.
42968     Similarly, if EXP2 is returned, its return type is the same as
42969     EXP2.
42970
42971     Example:
42972
42973          #define foo(x)                                                    \
42974            __builtin_choose_expr (                                         \
42975              __builtin_types_compatible_p (typeof (x), double),            \
42976              foo_double (x),                                               \
42977              __builtin_choose_expr (                                       \
42978                __builtin_types_compatible_p (typeof (x), float),           \
42979                foo_float (x),                                              \
42980                /* The void expression results in a compile-time error  \
42981                   when assigning the result to something.  */          \
42982                (void)0))
42983
42984     _Note:_ This construct is only available for C.  Furthermore, the
42985     unused expression (EXP1 or EXP2 depending on the value of
42986     CONST_EXP) may still generate syntax errors.  This may change in
42987     future revisions.
42988
42989 -- Built-in Function: TYPE __builtin_tgmath (FUNCTIONS, ARGUMENTS)
42990
42991     The built-in function '__builtin_tgmath', available only for C and
42992     Objective-C, calls a function determined according to the rules of
42993     '<tgmath.h>' macros.  It is intended to be used in implementations
42994     of that header, so that expansions of macros from that header only
42995     expand each of their arguments once, to avoid problems when calls
42996     to such macros are nested inside the arguments of other calls to
42997     such macros; in addition, it results in better diagnostics for
42998     invalid calls to '<tgmath.h>' macros than implementations using
42999     other GNU C language features.  For example, the 'pow' type-generic
43000     macro might be defined as:
43001
43002          #define pow(a, b) __builtin_tgmath (powf, pow, powl, \
43003                                              cpowf, cpow, cpowl, a, b)
43004
43005     The arguments to '__builtin_tgmath' are at least two pointers to
43006     functions, followed by the arguments to the type-generic macro
43007     (which will be passed as arguments to the selected function).  All
43008     the pointers to functions must be pointers to prototyped functions,
43009     none of which may have variable arguments, and all of which must
43010     have the same number of parameters; the number of parameters of the
43011     first function determines how many arguments to '__builtin_tgmath'
43012     are interpreted as function pointers, and how many as the arguments
43013     to the called function.
43014
43015     The types of the specified functions must all be different, but
43016     related to each other in the same way as a set of functions that
43017     may be selected between by a macro in '<tgmath.h>'.  This means
43018     that the functions are parameterized by a floating-point type T,
43019     different for each such function.  The function return types may
43020     all be the same type, or they may be T for each function, or they
43021     may be the real type corresponding to T for each function (if some
43022     of the types T are complex).  Likewise, for each parameter
43023     position, the type of the parameter in that position may always be
43024     the same type, or may be T for each function (this case must apply
43025     for at least one parameter position), or may be the real type
43026     corresponding to T for each function.
43027
43028     The standard rules for '<tgmath.h>' macros are used to find a
43029     common type U from the types of the arguments for parameters whose
43030     types vary between the functions; complex integer types (a GNU
43031     extension) are treated like '_Complex double' for this purpose (or
43032     '_Complex _Float64' if all the function return types are the same
43033     '_FloatN' or '_FloatNx' type).  If the function return types vary,
43034     or are all the same integer type, the function called is the one
43035     for which T is U, and it is an error if there is no such function.
43036     If the function return types are all the same floating-point type,
43037     the type-generic macro is taken to be one of those from TS 18661
43038     that rounds the result to a narrower type; if there is a function
43039     for which T is U, it is called, and otherwise the first function,
43040     if any, for which T has at least the range and precision of U is
43041     called, and it is an error if there is no such function.
43042
43043 -- Built-in Function: TYPE __builtin_complex (REAL, IMAG)
43044
43045     The built-in function '__builtin_complex' is provided for use in
43046     implementing the ISO C11 macros 'CMPLXF', 'CMPLX' and 'CMPLXL'.
43047     REAL and IMAG must have the same type, a real binary floating-point
43048     type, and the result has the corresponding complex type with real
43049     and imaginary parts REAL and IMAG.  Unlike 'REAL + I * IMAG', this
43050     works even when infinities, NaNs and negative zeros are involved.
43051
43052 -- Built-in Function: int __builtin_constant_p (EXP)
43053     You can use the built-in function '__builtin_constant_p' to
43054     determine if a value is known to be constant at compile time and
43055     hence that GCC can perform constant-folding on expressions
43056     involving that value.  The argument of the function is the value to
43057     test.  The function returns the integer 1 if the argument is known
43058     to be a compile-time constant and 0 if it is not known to be a
43059     compile-time constant.  A return of 0 does not indicate that the
43060     value is _not_ a constant, but merely that GCC cannot prove it is a
43061     constant with the specified value of the '-O' option.
43062
43063     You typically use this function in an embedded application where
43064     memory is a critical resource.  If you have some complex
43065     calculation, you may want it to be folded if it involves constants,
43066     but need to call a function if it does not.  For example:
43067
43068          #define Scale_Value(X)      \
43069            (__builtin_constant_p (X) \
43070            ? ((X) * SCALE + OFFSET) : Scale (X))
43071
43072     You may use this built-in function in either a macro or an inline
43073     function.  However, if you use it in an inlined function and pass
43074     an argument of the function as the argument to the built-in, GCC
43075     never returns 1 when you call the inline function with a string
43076     constant or compound literal (*note Compound Literals::) and does
43077     not return 1 when you pass a constant numeric value to the inline
43078     function unless you specify the '-O' option.
43079
43080     You may also use '__builtin_constant_p' in initializers for static
43081     data.  For instance, you can write
43082
43083          static const int table[] = {
43084             __builtin_constant_p (EXPRESSION) ? (EXPRESSION) : -1,
43085             /* ... */
43086          };
43087
43088     This is an acceptable initializer even if EXPRESSION is not a
43089     constant expression, including the case where
43090     '__builtin_constant_p' returns 1 because EXPRESSION can be folded
43091     to a constant but EXPRESSION contains operands that are not
43092     otherwise permitted in a static initializer (for example, '0 && foo
43093     ()').  GCC must be more conservative about evaluating the built-in
43094     in this case, because it has no opportunity to perform
43095     optimization.
43096
43097 -- Built-in Function: bool __builtin_is_constant_evaluated (void)
43098     The '__builtin_is_constant_evaluated' function is available only in
43099     C++.  The built-in is intended to be used by implementations of the
43100     'std::is_constant_evaluated' C++ function.  Programs should make
43101     use of the latter function rather than invoking the built-in
43102     directly.
43103
43104     The main use case of the built-in is to determine whether a
43105     'constexpr' function is being called in a 'constexpr' context.  A
43106     call to the function evaluates to a core constant expression with
43107     the value 'true' if and only if it occurs within the evaluation of
43108     an expression or conversion that is manifestly constant-evaluated
43109     as defined in the C++ standard.  Manifestly constant-evaluated
43110     contexts include constant-expressions, the conditions of 'constexpr
43111     if' statements, constraint-expressions, and initializers of
43112     variables usable in constant expressions.  For more details refer
43113     to the latest revision of the C++ standard.
43114
43115 -- Built-in Function: long __builtin_expect (long EXP, long C)
43116     You may use '__builtin_expect' to provide the compiler with branch
43117     prediction information.  In general, you should prefer to use
43118     actual profile feedback for this ('-fprofile-arcs'), as programmers
43119     are notoriously bad at predicting how their programs actually
43120     perform.  However, there are applications in which this data is
43121     hard to collect.
43122
43123     The return value is the value of EXP, which should be an integral
43124     expression.  The semantics of the built-in are that it is expected
43125     that EXP == C.  For example:
43126
43127          if (__builtin_expect (x, 0))
43128            foo ();
43129
43130     indicates that we do not expect to call 'foo', since we expect 'x'
43131     to be zero.  Since you are limited to integral expressions for EXP,
43132     you should use constructions such as
43133
43134          if (__builtin_expect (ptr != NULL, 1))
43135            foo (*ptr);
43136
43137     when testing pointer or floating-point values.
43138
43139     For the purposes of branch prediction optimizations, the
43140     probability that a '__builtin_expect' expression is 'true' is
43141     controlled by GCC's 'builtin-expect-probability' parameter, which
43142     defaults to 90%.
43143
43144     You can also use '__builtin_expect_with_probability' to explicitly
43145     assign a probability value to individual expressions.  If the
43146     built-in is used in a loop construct, the provided probability will
43147     influence the expected number of iterations made by loop
43148     optimizations.
43149
43150 -- Built-in Function: long __builtin_expect_with_probability
43151     (long EXP, long C, double PROBABILITY)
43152
43153     This function has the same semantics as '__builtin_expect', but the
43154     caller provides the expected probability that EXP == C.  The last
43155     argument, PROBABILITY, is a floating-point value in the range 0.0
43156     to 1.0, inclusive.  The PROBABILITY argument must be constant
43157     floating-point expression.
43158
43159 -- Built-in Function: void __builtin_trap (void)
43160     This function causes the program to exit abnormally.  GCC
43161     implements this function by using a target-dependent mechanism
43162     (such as intentionally executing an illegal instruction) or by
43163     calling 'abort'.  The mechanism used may vary from release to
43164     release so you should not rely on any particular implementation.
43165
43166 -- Built-in Function: void __builtin_unreachable (void)
43167     If control flow reaches the point of the '__builtin_unreachable',
43168     the program is undefined.  It is useful in situations where the
43169     compiler cannot deduce the unreachability of the code.
43170
43171     One such case is immediately following an 'asm' statement that
43172     either never terminates, or one that transfers control elsewhere
43173     and never returns.  In this example, without the
43174     '__builtin_unreachable', GCC issues a warning that control reaches
43175     the end of a non-void function.  It also generates code to return
43176     after the 'asm'.
43177
43178          int f (int c, int v)
43179          {
43180            if (c)
43181              {
43182                return v;
43183              }
43184            else
43185              {
43186                asm("jmp error_handler");
43187                __builtin_unreachable ();
43188              }
43189          }
43190
43191     Because the 'asm' statement unconditionally transfers control out
43192     of the function, control never reaches the end of the function
43193     body.  The '__builtin_unreachable' is in fact unreachable and
43194     communicates this fact to the compiler.
43195
43196     Another use for '__builtin_unreachable' is following a call a
43197     function that never returns but that is not declared
43198     '__attribute__((noreturn))', as in this example:
43199
43200          void function_that_never_returns (void);
43201
43202          int g (int c)
43203          {
43204            if (c)
43205              {
43206                return 1;
43207              }
43208            else
43209              {
43210                function_that_never_returns ();
43211                __builtin_unreachable ();
43212              }
43213          }
43214
43215 -- Built-in Function: void * __builtin_assume_aligned (const void *EXP,
43216          size_t ALIGN, ...)
43217     This function returns its first argument, and allows the compiler
43218     to assume that the returned pointer is at least ALIGN bytes
43219     aligned.  This built-in can have either two or three arguments, if
43220     it has three, the third argument should have integer type, and if
43221     it is nonzero means misalignment offset.  For example:
43222
43223          void *x = __builtin_assume_aligned (arg, 16);
43224
43225     means that the compiler can assume 'x', set to 'arg', is at least
43226     16-byte aligned, while:
43227
43228          void *x = __builtin_assume_aligned (arg, 32, 8);
43229
43230     means that the compiler can assume for 'x', set to 'arg', that
43231     '(char *) x - 8' is 32-byte aligned.
43232
43233 -- Built-in Function: int __builtin_LINE ()
43234     This function is the equivalent of the preprocessor '__LINE__'
43235     macro and returns a constant integer expression that evaluates to
43236     the line number of the invocation of the built-in.  When used as a
43237     C++ default argument for a function F, it returns the line number
43238     of the call to F.
43239
43240 -- Built-in Function: const char * __builtin_FUNCTION ()
43241     This function is the equivalent of the '__FUNCTION__' symbol and
43242     returns an address constant pointing to the name of the function
43243     from which the built-in was invoked, or the empty string if the
43244     invocation is not at function scope.  When used as a C++ default
43245     argument for a function F, it returns the name of F's caller or the
43246     empty string if the call was not made at function scope.
43247
43248 -- Built-in Function: const char * __builtin_FILE ()
43249     This function is the equivalent of the preprocessor '__FILE__'
43250     macro and returns an address constant pointing to the file name
43251     containing the invocation of the built-in, or the empty string if
43252     the invocation is not at function scope.  When used as a C++
43253     default argument for a function F, it returns the file name of the
43254     call to F or the empty string if the call was not made at function
43255     scope.
43256
43257     For example, in the following, each call to function 'foo' will
43258     print a line similar to '"file.c:123: foo: message"' with the name
43259     of the file and the line number of the 'printf' call, the name of
43260     the function 'foo', followed by the word 'message'.
43261
43262          const char*
43263          function (const char *func = __builtin_FUNCTION ())
43264          {
43265            return func;
43266          }
43267
43268          void foo (void)
43269          {
43270            printf ("%s:%i: %s: message\n", file (), line (), function ());
43271          }
43272
43273 -- Built-in Function: void __builtin___clear_cache (void *BEGIN, void
43274          *END)
43275     This function is used to flush the processor's instruction cache
43276     for the region of memory between BEGIN inclusive and END exclusive.
43277     Some targets require that the instruction cache be flushed, after
43278     modifying memory containing code, in order to obtain deterministic
43279     behavior.
43280
43281     If the target does not require instruction cache flushes,
43282     '__builtin___clear_cache' has no effect.  Otherwise either
43283     instructions are emitted in-line to clear the instruction cache or
43284     a call to the '__clear_cache' function in libgcc is made.
43285
43286 -- Built-in Function: void __builtin_prefetch (const void *ADDR, ...)
43287     This function is used to minimize cache-miss latency by moving data
43288     into a cache before it is accessed.  You can insert calls to
43289     '__builtin_prefetch' into code for which you know addresses of data
43290     in memory that is likely to be accessed soon.  If the target
43291     supports them, data prefetch instructions are generated.  If the
43292     prefetch is done early enough before the access then the data will
43293     be in the cache by the time it is accessed.
43294
43295     The value of ADDR is the address of the memory to prefetch.  There
43296     are two optional arguments, RW and LOCALITY.  The value of RW is a
43297     compile-time constant one or zero; one means that the prefetch is
43298     preparing for a write to the memory address and zero, the default,
43299     means that the prefetch is preparing for a read.  The value
43300     LOCALITY must be a compile-time constant integer between zero and
43301     three.  A value of zero means that the data has no temporal
43302     locality, so it need not be left in the cache after the access.  A
43303     value of three means that the data has a high degree of temporal
43304     locality and should be left in all levels of cache possible.
43305     Values of one and two mean, respectively, a low or moderate degree
43306     of temporal locality.  The default is three.
43307
43308          for (i = 0; i < n; i++)
43309            {
43310              a[i] = a[i] + b[i];
43311              __builtin_prefetch (&a[i+j], 1, 1);
43312              __builtin_prefetch (&b[i+j], 0, 1);
43313              /* ... */
43314            }
43315
43316     Data prefetch does not generate faults if ADDR is invalid, but the
43317     address expression itself must be valid.  For example, a prefetch
43318     of 'p->next' does not fault if 'p->next' is not a valid address,
43319     but evaluation faults if 'p' is not a valid address.
43320
43321     If the target does not support data prefetch, the address
43322     expression is evaluated if it includes side effects but no other
43323     code is generated and GCC does not issue a warning.
43324
43325 -- Built-in Function: size_t __builtin_object_size (const void * PTR,
43326          int TYPE)
43327     Returns the size of an object pointed to by PTR.  *Note Object Size
43328     Checking::, for a detailed description of the function.
43329
43330 -- Built-in Function: double __builtin_huge_val (void)
43331     Returns a positive infinity, if supported by the floating-point
43332     format, else 'DBL_MAX'.  This function is suitable for implementing
43333     the ISO C macro 'HUGE_VAL'.
43334
43335 -- Built-in Function: float __builtin_huge_valf (void)
43336     Similar to '__builtin_huge_val', except the return type is 'float'.
43337
43338 -- Built-in Function: long double __builtin_huge_vall (void)
43339     Similar to '__builtin_huge_val', except the return type is 'long
43340     double'.
43341
43342 -- Built-in Function: _FloatN __builtin_huge_valfN (void)
43343     Similar to '__builtin_huge_val', except the return type is
43344     '_FloatN'.
43345
43346 -- Built-in Function: _FloatNx __builtin_huge_valfNx (void)
43347     Similar to '__builtin_huge_val', except the return type is
43348     '_FloatNx'.
43349
43350 -- Built-in Function: int __builtin_fpclassify (int, int, int, int,
43351          int, ...)
43352     This built-in implements the C99 fpclassify functionality.  The
43353     first five int arguments should be the target library's notion of
43354     the possible FP classes and are used for return values.  They must
43355     be constant values and they must appear in this order: 'FP_NAN',
43356     'FP_INFINITE', 'FP_NORMAL', 'FP_SUBNORMAL' and 'FP_ZERO'.  The
43357     ellipsis is for exactly one floating-point value to classify.  GCC
43358     treats the last argument as type-generic, which means it does not
43359     do default promotion from float to double.
43360
43361 -- Built-in Function: double __builtin_inf (void)
43362     Similar to '__builtin_huge_val', except a warning is generated if
43363     the target floating-point format does not support infinities.
43364
43365 -- Built-in Function: _Decimal32 __builtin_infd32 (void)
43366     Similar to '__builtin_inf', except the return type is '_Decimal32'.
43367
43368 -- Built-in Function: _Decimal64 __builtin_infd64 (void)
43369     Similar to '__builtin_inf', except the return type is '_Decimal64'.
43370
43371 -- Built-in Function: _Decimal128 __builtin_infd128 (void)
43372     Similar to '__builtin_inf', except the return type is
43373     '_Decimal128'.
43374
43375 -- Built-in Function: float __builtin_inff (void)
43376     Similar to '__builtin_inf', except the return type is 'float'.
43377     This function is suitable for implementing the ISO C99 macro
43378     'INFINITY'.
43379
43380 -- Built-in Function: long double __builtin_infl (void)
43381     Similar to '__builtin_inf', except the return type is 'long
43382     double'.
43383
43384 -- Built-in Function: _FloatN __builtin_inffN (void)
43385     Similar to '__builtin_inf', except the return type is '_FloatN'.
43386
43387 -- Built-in Function: _FloatN __builtin_inffNx (void)
43388     Similar to '__builtin_inf', except the return type is '_FloatNx'.
43389
43390 -- Built-in Function: int __builtin_isinf_sign (...)
43391     Similar to 'isinf', except the return value is -1 for an argument
43392     of '-Inf' and 1 for an argument of '+Inf'.  Note while the
43393     parameter list is an ellipsis, this function only accepts exactly
43394     one floating-point argument.  GCC treats this parameter as
43395     type-generic, which means it does not do default promotion from
43396     float to double.
43397
43398 -- Built-in Function: double __builtin_nan (const char *str)
43399     This is an implementation of the ISO C99 function 'nan'.
43400
43401     Since ISO C99 defines this function in terms of 'strtod', which we
43402     do not implement, a description of the parsing is in order.  The
43403     string is parsed as by 'strtol'; that is, the base is recognized by
43404     leading '0' or '0x' prefixes.  The number parsed is placed in the
43405     significand such that the least significant bit of the number is at
43406     the least significant bit of the significand.  The number is
43407     truncated to fit the significand field provided.  The significand
43408     is forced to be a quiet NaN.
43409
43410     This function, if given a string literal all of which would have
43411     been consumed by 'strtol', is evaluated early enough that it is
43412     considered a compile-time constant.
43413
43414 -- Built-in Function: _Decimal32 __builtin_nand32 (const char *str)
43415     Similar to '__builtin_nan', except the return type is '_Decimal32'.
43416
43417 -- Built-in Function: _Decimal64 __builtin_nand64 (const char *str)
43418     Similar to '__builtin_nan', except the return type is '_Decimal64'.
43419
43420 -- Built-in Function: _Decimal128 __builtin_nand128 (const char *str)
43421     Similar to '__builtin_nan', except the return type is
43422     '_Decimal128'.
43423
43424 -- Built-in Function: float __builtin_nanf (const char *str)
43425     Similar to '__builtin_nan', except the return type is 'float'.
43426
43427 -- Built-in Function: long double __builtin_nanl (const char *str)
43428     Similar to '__builtin_nan', except the return type is 'long
43429     double'.
43430
43431 -- Built-in Function: _FloatN __builtin_nanfN (const char *str)
43432     Similar to '__builtin_nan', except the return type is '_FloatN'.
43433
43434 -- Built-in Function: _FloatNx __builtin_nanfNx (const char *str)
43435     Similar to '__builtin_nan', except the return type is '_FloatNx'.
43436
43437 -- Built-in Function: double __builtin_nans (const char *str)
43438     Similar to '__builtin_nan', except the significand is forced to be
43439     a signaling NaN.  The 'nans' function is proposed by WG14 N965.
43440
43441 -- Built-in Function: float __builtin_nansf (const char *str)
43442     Similar to '__builtin_nans', except the return type is 'float'.
43443
43444 -- Built-in Function: long double __builtin_nansl (const char *str)
43445     Similar to '__builtin_nans', except the return type is 'long
43446     double'.
43447
43448 -- Built-in Function: _FloatN __builtin_nansfN (const char *str)
43449     Similar to '__builtin_nans', except the return type is '_FloatN'.
43450
43451 -- Built-in Function: _FloatNx __builtin_nansfNx (const char *str)
43452     Similar to '__builtin_nans', except the return type is '_FloatNx'.
43453
43454 -- Built-in Function: int __builtin_ffs (int x)
43455     Returns one plus the index of the least significant 1-bit of X, or
43456     if X is zero, returns zero.
43457
43458 -- Built-in Function: int __builtin_clz (unsigned int x)
43459     Returns the number of leading 0-bits in X, starting at the most
43460     significant bit position.  If X is 0, the result is undefined.
43461
43462 -- Built-in Function: int __builtin_ctz (unsigned int x)
43463     Returns the number of trailing 0-bits in X, starting at the least
43464     significant bit position.  If X is 0, the result is undefined.
43465
43466 -- Built-in Function: int __builtin_clrsb (int x)
43467     Returns the number of leading redundant sign bits in X, i.e. the
43468     number of bits following the most significant bit that are
43469     identical to it.  There are no special cases for 0 or other values.
43470
43471 -- Built-in Function: int __builtin_popcount (unsigned int x)
43472     Returns the number of 1-bits in X.
43473
43474 -- Built-in Function: int __builtin_parity (unsigned int x)
43475     Returns the parity of X, i.e. the number of 1-bits in X modulo 2.
43476
43477 -- Built-in Function: int __builtin_ffsl (long)
43478     Similar to '__builtin_ffs', except the argument type is 'long'.
43479
43480 -- Built-in Function: int __builtin_clzl (unsigned long)
43481     Similar to '__builtin_clz', except the argument type is 'unsigned
43482     long'.
43483
43484 -- Built-in Function: int __builtin_ctzl (unsigned long)
43485     Similar to '__builtin_ctz', except the argument type is 'unsigned
43486     long'.
43487
43488 -- Built-in Function: int __builtin_clrsbl (long)
43489     Similar to '__builtin_clrsb', except the argument type is 'long'.
43490
43491 -- Built-in Function: int __builtin_popcountl (unsigned long)
43492     Similar to '__builtin_popcount', except the argument type is
43493     'unsigned long'.
43494
43495 -- Built-in Function: int __builtin_parityl (unsigned long)
43496     Similar to '__builtin_parity', except the argument type is
43497     'unsigned long'.
43498
43499 -- Built-in Function: int __builtin_ffsll (long long)
43500     Similar to '__builtin_ffs', except the argument type is 'long
43501     long'.
43502
43503 -- Built-in Function: int __builtin_clzll (unsigned long long)
43504     Similar to '__builtin_clz', except the argument type is 'unsigned
43505     long long'.
43506
43507 -- Built-in Function: int __builtin_ctzll (unsigned long long)
43508     Similar to '__builtin_ctz', except the argument type is 'unsigned
43509     long long'.
43510
43511 -- Built-in Function: int __builtin_clrsbll (long long)
43512     Similar to '__builtin_clrsb', except the argument type is 'long
43513     long'.
43514
43515 -- Built-in Function: int __builtin_popcountll (unsigned long long)
43516     Similar to '__builtin_popcount', except the argument type is
43517     'unsigned long long'.
43518
43519 -- Built-in Function: int __builtin_parityll (unsigned long long)
43520     Similar to '__builtin_parity', except the argument type is
43521     'unsigned long long'.
43522
43523 -- Built-in Function: double __builtin_powi (double, int)
43524     Returns the first argument raised to the power of the second.
43525     Unlike the 'pow' function no guarantees about precision and
43526     rounding are made.
43527
43528 -- Built-in Function: float __builtin_powif (float, int)
43529     Similar to '__builtin_powi', except the argument and return types
43530     are 'float'.
43531
43532 -- Built-in Function: long double __builtin_powil (long double, int)
43533     Similar to '__builtin_powi', except the argument and return types
43534     are 'long double'.
43535
43536 -- Built-in Function: uint16_t __builtin_bswap16 (uint16_t x)
43537     Returns X with the order of the bytes reversed; for example,
43538     '0xaabb' becomes '0xbbaa'.  Byte here always means exactly 8 bits.
43539
43540 -- Built-in Function: uint32_t __builtin_bswap32 (uint32_t x)
43541     Similar to '__builtin_bswap16', except the argument and return
43542     types are 32 bit.
43543
43544 -- Built-in Function: uint64_t __builtin_bswap64 (uint64_t x)
43545     Similar to '__builtin_bswap32', except the argument and return
43546     types are 64 bit.
43547
43548 -- Built-in Function: Pmode __builtin_extend_pointer (void * x)
43549     On targets where the user visible pointer size is smaller than the
43550     size of an actual hardware address this function returns the
43551     extended user pointer.  Targets where this is true included ILP32
43552     mode on x86_64 or Aarch64.  This function is mainly useful when
43553     writing inline assembly code.
43554
43555 -- Built-in Function: int __builtin_goacc_parlevel_id (int x)
43556     Returns the openacc gang, worker or vector id depending on whether
43557     X is 0, 1 or 2.
43558
43559 -- Built-in Function: int __builtin_goacc_parlevel_size (int x)
43560     Returns the openacc gang, worker or vector size depending on
43561     whether X is 0, 1 or 2.
43562
43563
43564File: gcc.info,  Node: Target Builtins,  Next: Target Format Checks,  Prev: Other Builtins,  Up: C Extensions
43565
435666.60 Built-in Functions Specific to Particular Target Machines
43567==============================================================
43568
43569On some target machines, GCC supports many built-in functions specific
43570to those machines.  Generally these generate calls to specific machine
43571instructions, but allow the compiler to schedule those calls.
43572
43573* Menu:
43574
43575* AArch64 Built-in Functions::
43576* Alpha Built-in Functions::
43577* Altera Nios II Built-in Functions::
43578* ARC Built-in Functions::
43579* ARC SIMD Built-in Functions::
43580* ARM iWMMXt Built-in Functions::
43581* ARM C Language Extensions (ACLE)::
43582* ARM Floating Point Status and Control Intrinsics::
43583* ARM ARMv8-M Security Extensions::
43584* AVR Built-in Functions::
43585* Blackfin Built-in Functions::
43586* BPF Built-in Functions::
43587* BPF Kernel Helpers::
43588* FR-V Built-in Functions::
43589* MIPS DSP Built-in Functions::
43590* MIPS Paired-Single Support::
43591* MIPS Loongson Built-in Functions::
43592* MIPS SIMD Architecture (MSA) Support::
43593* Other MIPS Built-in Functions::
43594* MSP430 Built-in Functions::
43595* NDS32 Built-in Functions::
43596* picoChip Built-in Functions::
43597* Basic PowerPC Built-in Functions::
43598* PowerPC AltiVec/VSX Built-in Functions::
43599* PowerPC Hardware Transactional Memory Built-in Functions::
43600* PowerPC Atomic Memory Operation Functions::
43601* PowerPC Matrix-Multiply Assist Built-in Functions::
43602* RX Built-in Functions::
43603* S/390 System z Built-in Functions::
43604* SH Built-in Functions::
43605* SPARC VIS Built-in Functions::
43606* TI C6X Built-in Functions::
43607* TILE-Gx Built-in Functions::
43608* TILEPro Built-in Functions::
43609* x86 Built-in Functions::
43610* x86 transactional memory intrinsics::
43611* x86 control-flow protection intrinsics::
43612
43613
43614File: gcc.info,  Node: AArch64 Built-in Functions,  Next: Alpha Built-in Functions,  Up: Target Builtins
43615
436166.60.1 AArch64 Built-in Functions
43617---------------------------------
43618
43619These built-in functions are available for the AArch64 family of
43620processors.
43621     unsigned int __builtin_aarch64_get_fpcr ()
43622     void __builtin_aarch64_set_fpcr (unsigned int)
43623     unsigned int __builtin_aarch64_get_fpsr ()
43624     void __builtin_aarch64_set_fpsr (unsigned int)
43625
43626
43627File: gcc.info,  Node: Alpha Built-in Functions,  Next: Altera Nios II Built-in Functions,  Prev: AArch64 Built-in Functions,  Up: Target Builtins
43628
436296.60.2 Alpha Built-in Functions
43630-------------------------------
43631
43632These built-in functions are available for the Alpha family of
43633processors, depending on the command-line switches used.
43634
43635 The following built-in functions are always available.  They all
43636generate the machine instruction that is part of the name.
43637
43638     long __builtin_alpha_implver (void)
43639     long __builtin_alpha_rpcc (void)
43640     long __builtin_alpha_amask (long)
43641     long __builtin_alpha_cmpbge (long, long)
43642     long __builtin_alpha_extbl (long, long)
43643     long __builtin_alpha_extwl (long, long)
43644     long __builtin_alpha_extll (long, long)
43645     long __builtin_alpha_extql (long, long)
43646     long __builtin_alpha_extwh (long, long)
43647     long __builtin_alpha_extlh (long, long)
43648     long __builtin_alpha_extqh (long, long)
43649     long __builtin_alpha_insbl (long, long)
43650     long __builtin_alpha_inswl (long, long)
43651     long __builtin_alpha_insll (long, long)
43652     long __builtin_alpha_insql (long, long)
43653     long __builtin_alpha_inswh (long, long)
43654     long __builtin_alpha_inslh (long, long)
43655     long __builtin_alpha_insqh (long, long)
43656     long __builtin_alpha_mskbl (long, long)
43657     long __builtin_alpha_mskwl (long, long)
43658     long __builtin_alpha_mskll (long, long)
43659     long __builtin_alpha_mskql (long, long)
43660     long __builtin_alpha_mskwh (long, long)
43661     long __builtin_alpha_msklh (long, long)
43662     long __builtin_alpha_mskqh (long, long)
43663     long __builtin_alpha_umulh (long, long)
43664     long __builtin_alpha_zap (long, long)
43665     long __builtin_alpha_zapnot (long, long)
43666
43667 The following built-in functions are always with '-mmax' or '-mcpu=CPU'
43668where CPU is 'pca56' or later.  They all generate the machine
43669instruction that is part of the name.
43670
43671     long __builtin_alpha_pklb (long)
43672     long __builtin_alpha_pkwb (long)
43673     long __builtin_alpha_unpkbl (long)
43674     long __builtin_alpha_unpkbw (long)
43675     long __builtin_alpha_minub8 (long, long)
43676     long __builtin_alpha_minsb8 (long, long)
43677     long __builtin_alpha_minuw4 (long, long)
43678     long __builtin_alpha_minsw4 (long, long)
43679     long __builtin_alpha_maxub8 (long, long)
43680     long __builtin_alpha_maxsb8 (long, long)
43681     long __builtin_alpha_maxuw4 (long, long)
43682     long __builtin_alpha_maxsw4 (long, long)
43683     long __builtin_alpha_perr (long, long)
43684
43685 The following built-in functions are always with '-mcix' or '-mcpu=CPU'
43686where CPU is 'ev67' or later.  They all generate the machine instruction
43687that is part of the name.
43688
43689     long __builtin_alpha_cttz (long)
43690     long __builtin_alpha_ctlz (long)
43691     long __builtin_alpha_ctpop (long)
43692
43693 The following built-in functions are available on systems that use the
43694OSF/1 PALcode.  Normally they invoke the 'rduniq' and 'wruniq' PAL
43695calls, but when invoked with '-mtls-kernel', they invoke 'rdval' and
43696'wrval'.
43697
43698     void *__builtin_thread_pointer (void)
43699     void __builtin_set_thread_pointer (void *)
43700
43701
43702File: gcc.info,  Node: Altera Nios II Built-in Functions,  Next: ARC Built-in Functions,  Prev: Alpha Built-in Functions,  Up: Target Builtins
43703
437046.60.3 Altera Nios II Built-in Functions
43705----------------------------------------
43706
43707These built-in functions are available for the Altera Nios II family of
43708processors.
43709
43710 The following built-in functions are always available.  They all
43711generate the machine instruction that is part of the name.
43712
43713     int __builtin_ldbio (volatile const void *)
43714     int __builtin_ldbuio (volatile const void *)
43715     int __builtin_ldhio (volatile const void *)
43716     int __builtin_ldhuio (volatile const void *)
43717     int __builtin_ldwio (volatile const void *)
43718     void __builtin_stbio (volatile void *, int)
43719     void __builtin_sthio (volatile void *, int)
43720     void __builtin_stwio (volatile void *, int)
43721     void __builtin_sync (void)
43722     int __builtin_rdctl (int)
43723     int __builtin_rdprs (int, int)
43724     void __builtin_wrctl (int, int)
43725     void __builtin_flushd (volatile void *)
43726     void __builtin_flushda (volatile void *)
43727     int __builtin_wrpie (int);
43728     void __builtin_eni (int);
43729     int __builtin_ldex (volatile const void *)
43730     int __builtin_stex (volatile void *, int)
43731     int __builtin_ldsex (volatile const void *)
43732     int __builtin_stsex (volatile void *, int)
43733
43734 The following built-in functions are always available.  They all
43735generate a Nios II Custom Instruction.  The name of the function
43736represents the types that the function takes and returns.  The letter
43737before the 'n' is the return type or void if absent.  The 'n' represents
43738the first parameter to all the custom instructions, the custom
43739instruction number.  The two letters after the 'n' represent the up to
43740two parameters to the function.
43741
43742 The letters represent the following data types:
43743'<no letter>'
43744     'void' for return type and no parameter for parameter types.
43745
43746'i'
43747     'int' for return type and parameter type
43748
43749'f'
43750     'float' for return type and parameter type
43751
43752'p'
43753     'void *' for return type and parameter type
43754
43755 And the function names are:
43756     void __builtin_custom_n (void)
43757     void __builtin_custom_ni (int)
43758     void __builtin_custom_nf (float)
43759     void __builtin_custom_np (void *)
43760     void __builtin_custom_nii (int, int)
43761     void __builtin_custom_nif (int, float)
43762     void __builtin_custom_nip (int, void *)
43763     void __builtin_custom_nfi (float, int)
43764     void __builtin_custom_nff (float, float)
43765     void __builtin_custom_nfp (float, void *)
43766     void __builtin_custom_npi (void *, int)
43767     void __builtin_custom_npf (void *, float)
43768     void __builtin_custom_npp (void *, void *)
43769     int __builtin_custom_in (void)
43770     int __builtin_custom_ini (int)
43771     int __builtin_custom_inf (float)
43772     int __builtin_custom_inp (void *)
43773     int __builtin_custom_inii (int, int)
43774     int __builtin_custom_inif (int, float)
43775     int __builtin_custom_inip (int, void *)
43776     int __builtin_custom_infi (float, int)
43777     int __builtin_custom_inff (float, float)
43778     int __builtin_custom_infp (float, void *)
43779     int __builtin_custom_inpi (void *, int)
43780     int __builtin_custom_inpf (void *, float)
43781     int __builtin_custom_inpp (void *, void *)
43782     float __builtin_custom_fn (void)
43783     float __builtin_custom_fni (int)
43784     float __builtin_custom_fnf (float)
43785     float __builtin_custom_fnp (void *)
43786     float __builtin_custom_fnii (int, int)
43787     float __builtin_custom_fnif (int, float)
43788     float __builtin_custom_fnip (int, void *)
43789     float __builtin_custom_fnfi (float, int)
43790     float __builtin_custom_fnff (float, float)
43791     float __builtin_custom_fnfp (float, void *)
43792     float __builtin_custom_fnpi (void *, int)
43793     float __builtin_custom_fnpf (void *, float)
43794     float __builtin_custom_fnpp (void *, void *)
43795     void * __builtin_custom_pn (void)
43796     void * __builtin_custom_pni (int)
43797     void * __builtin_custom_pnf (float)
43798     void * __builtin_custom_pnp (void *)
43799     void * __builtin_custom_pnii (int, int)
43800     void * __builtin_custom_pnif (int, float)
43801     void * __builtin_custom_pnip (int, void *)
43802     void * __builtin_custom_pnfi (float, int)
43803     void * __builtin_custom_pnff (float, float)
43804     void * __builtin_custom_pnfp (float, void *)
43805     void * __builtin_custom_pnpi (void *, int)
43806     void * __builtin_custom_pnpf (void *, float)
43807     void * __builtin_custom_pnpp (void *, void *)
43808
43809
43810File: gcc.info,  Node: ARC Built-in Functions,  Next: ARC SIMD Built-in Functions,  Prev: Altera Nios II Built-in Functions,  Up: Target Builtins
43811
438126.60.4 ARC Built-in Functions
43813-----------------------------
43814
43815The following built-in functions are provided for ARC targets.  The
43816built-ins generate the corresponding assembly instructions.  In the
43817examples given below, the generated code often requires an operand or
43818result to be in a register.  Where necessary further code will be
43819generated to ensure this is true, but for brevity this is not described
43820in each case.
43821
43822 _Note:_ Using a built-in to generate an instruction not supported by a
43823target may cause problems.  At present the compiler is not guaranteed to
43824detect such misuse, and as a result an internal compiler error may be
43825generated.
43826
43827 -- Built-in Function: int __builtin_arc_aligned (void *VAL, int
43828          ALIGNVAL)
43829     Return 1 if VAL is known to have the byte alignment given by
43830     ALIGNVAL, otherwise return 0.  Note that this is different from
43831          __alignof__(*(char *)VAL) >= alignval
43832     because __alignof__ sees only the type of the dereference, whereas
43833     __builtin_arc_align uses alignment information from the pointer as
43834     well as from the pointed-to type.  The information available will
43835     depend on optimization level.
43836
43837 -- Built-in Function: void __builtin_arc_brk (void)
43838     Generates
43839          brk
43840
43841 -- Built-in Function: unsigned int __builtin_arc_core_read (unsigned
43842          int REGNO)
43843     The operand is the number of a register to be read.  Generates:
43844          mov  DEST, rREGNO
43845     where the value in DEST will be the result returned from the
43846     built-in.
43847
43848 -- Built-in Function: void __builtin_arc_core_write (unsigned int
43849          REGNO, unsigned int VAL)
43850     The first operand is the number of a register to be written, the
43851     second operand is a compile time constant to write into that
43852     register.  Generates:
43853          mov  rREGNO, VAL
43854
43855 -- Built-in Function: int __builtin_arc_divaw (int A, int B)
43856     Only available if either '-mcpu=ARC700' or '-meA' is set.
43857     Generates:
43858          divaw  DEST, A, B
43859     where the value in DEST will be the result returned from the
43860     built-in.
43861
43862 -- Built-in Function: void __builtin_arc_flag (unsigned int A)
43863     Generates
43864          flag  A
43865
43866 -- Built-in Function: unsigned int __builtin_arc_lr (unsigned int AUXR)
43867     The operand, AUXV, is the address of an auxiliary register and must
43868     be a compile time constant.  Generates:
43869          lr  DEST, [AUXR]
43870     Where the value in DEST will be the result returned from the
43871     built-in.
43872
43873 -- Built-in Function: void __builtin_arc_mul64 (int A, int B)
43874     Only available with '-mmul64'.  Generates:
43875          mul64  A, B
43876
43877 -- Built-in Function: void __builtin_arc_mulu64 (unsigned int A,
43878          unsigned int B)
43879     Only available with '-mmul64'.  Generates:
43880          mulu64  A, B
43881
43882 -- Built-in Function: void __builtin_arc_nop (void)
43883     Generates:
43884          nop
43885
43886 -- Built-in Function: int __builtin_arc_norm (int SRC)
43887     Only valid if the 'norm' instruction is available through the
43888     '-mnorm' option or by default with '-mcpu=ARC700'.  Generates:
43889          norm  DEST, SRC
43890     Where the value in DEST will be the result returned from the
43891     built-in.
43892
43893 -- Built-in Function: short int __builtin_arc_normw (short int SRC)
43894     Only valid if the 'normw' instruction is available through the
43895     '-mnorm' option or by default with '-mcpu=ARC700'.  Generates:
43896          normw  DEST, SRC
43897     Where the value in DEST will be the result returned from the
43898     built-in.
43899
43900 -- Built-in Function: void __builtin_arc_rtie (void)
43901     Generates:
43902          rtie
43903
43904 -- Built-in Function: void __builtin_arc_sleep (int A
43905     Generates:
43906          sleep  A
43907
43908 -- Built-in Function: void __builtin_arc_sr (unsigned int AUXR,
43909          unsigned int VAL)
43910     The first argument, AUXV, is the address of an auxiliary register,
43911     the second argument, VAL, is a compile time constant to be written
43912     to the register.  Generates:
43913          sr  AUXR, [VAL]
43914
43915 -- Built-in Function: int __builtin_arc_swap (int SRC)
43916     Only valid with '-mswap'.  Generates:
43917          swap  DEST, SRC
43918     Where the value in DEST will be the result returned from the
43919     built-in.
43920
43921 -- Built-in Function: void __builtin_arc_swi (void)
43922     Generates:
43923          swi
43924
43925 -- Built-in Function: void __builtin_arc_sync (void)
43926     Only available with '-mcpu=ARC700'.  Generates:
43927          sync
43928
43929 -- Built-in Function: void __builtin_arc_trap_s (unsigned int C)
43930     Only available with '-mcpu=ARC700'.  Generates:
43931          trap_s  C
43932
43933 -- Built-in Function: void __builtin_arc_unimp_s (void)
43934     Only available with '-mcpu=ARC700'.  Generates:
43935          unimp_s
43936
43937 The instructions generated by the following builtins are not considered
43938as candidates for scheduling.  They are not moved around by the compiler
43939during scheduling, and thus can be expected to appear where they are put
43940in the C code:
43941     __builtin_arc_brk()
43942     __builtin_arc_core_read()
43943     __builtin_arc_core_write()
43944     __builtin_arc_flag()
43945     __builtin_arc_lr()
43946     __builtin_arc_sleep()
43947     __builtin_arc_sr()
43948     __builtin_arc_swi()
43949
43950
43951File: gcc.info,  Node: ARC SIMD Built-in Functions,  Next: ARM iWMMXt Built-in Functions,  Prev: ARC Built-in Functions,  Up: Target Builtins
43952
439536.60.5 ARC SIMD Built-in Functions
43954----------------------------------
43955
43956SIMD builtins provided by the compiler can be used to generate the
43957vector instructions.  This section describes the available builtins and
43958their usage in programs.  With the '-msimd' option, the compiler
43959provides 128-bit vector types, which can be specified using the
43960'vector_size' attribute.  The header file 'arc-simd.h' can be included
43961to use the following predefined types:
43962     typedef int __v4si   __attribute__((vector_size(16)));
43963     typedef short __v8hi __attribute__((vector_size(16)));
43964
43965 These types can be used to define 128-bit variables.  The built-in
43966functions listed in the following section can be used on these variables
43967to generate the vector operations.
43968
43969 For all builtins, '__builtin_arc_SOMEINSN', the header file
43970'arc-simd.h' also provides equivalent macros called '_SOMEINSN' that can
43971be used for programming ease and improved readability.  The following
43972macros for DMA control are also provided:
43973     #define _setup_dma_in_channel_reg _vdiwr
43974     #define _setup_dma_out_channel_reg _vdowr
43975
43976 The following is a complete list of all the SIMD built-ins provided for
43977ARC, grouped by calling signature.
43978
43979 The following take two '__v8hi' arguments and return a '__v8hi' result:
43980     __v8hi __builtin_arc_vaddaw (__v8hi, __v8hi)
43981     __v8hi __builtin_arc_vaddw (__v8hi, __v8hi)
43982     __v8hi __builtin_arc_vand (__v8hi, __v8hi)
43983     __v8hi __builtin_arc_vandaw (__v8hi, __v8hi)
43984     __v8hi __builtin_arc_vavb (__v8hi, __v8hi)
43985     __v8hi __builtin_arc_vavrb (__v8hi, __v8hi)
43986     __v8hi __builtin_arc_vbic (__v8hi, __v8hi)
43987     __v8hi __builtin_arc_vbicaw (__v8hi, __v8hi)
43988     __v8hi __builtin_arc_vdifaw (__v8hi, __v8hi)
43989     __v8hi __builtin_arc_vdifw (__v8hi, __v8hi)
43990     __v8hi __builtin_arc_veqw (__v8hi, __v8hi)
43991     __v8hi __builtin_arc_vh264f (__v8hi, __v8hi)
43992     __v8hi __builtin_arc_vh264ft (__v8hi, __v8hi)
43993     __v8hi __builtin_arc_vh264fw (__v8hi, __v8hi)
43994     __v8hi __builtin_arc_vlew (__v8hi, __v8hi)
43995     __v8hi __builtin_arc_vltw (__v8hi, __v8hi)
43996     __v8hi __builtin_arc_vmaxaw (__v8hi, __v8hi)
43997     __v8hi __builtin_arc_vmaxw (__v8hi, __v8hi)
43998     __v8hi __builtin_arc_vminaw (__v8hi, __v8hi)
43999     __v8hi __builtin_arc_vminw (__v8hi, __v8hi)
44000     __v8hi __builtin_arc_vmr1aw (__v8hi, __v8hi)
44001     __v8hi __builtin_arc_vmr1w (__v8hi, __v8hi)
44002     __v8hi __builtin_arc_vmr2aw (__v8hi, __v8hi)
44003     __v8hi __builtin_arc_vmr2w (__v8hi, __v8hi)
44004     __v8hi __builtin_arc_vmr3aw (__v8hi, __v8hi)
44005     __v8hi __builtin_arc_vmr3w (__v8hi, __v8hi)
44006     __v8hi __builtin_arc_vmr4aw (__v8hi, __v8hi)
44007     __v8hi __builtin_arc_vmr4w (__v8hi, __v8hi)
44008     __v8hi __builtin_arc_vmr5aw (__v8hi, __v8hi)
44009     __v8hi __builtin_arc_vmr5w (__v8hi, __v8hi)
44010     __v8hi __builtin_arc_vmr6aw (__v8hi, __v8hi)
44011     __v8hi __builtin_arc_vmr6w (__v8hi, __v8hi)
44012     __v8hi __builtin_arc_vmr7aw (__v8hi, __v8hi)
44013     __v8hi __builtin_arc_vmr7w (__v8hi, __v8hi)
44014     __v8hi __builtin_arc_vmrb (__v8hi, __v8hi)
44015     __v8hi __builtin_arc_vmulaw (__v8hi, __v8hi)
44016     __v8hi __builtin_arc_vmulfaw (__v8hi, __v8hi)
44017     __v8hi __builtin_arc_vmulfw (__v8hi, __v8hi)
44018     __v8hi __builtin_arc_vmulw (__v8hi, __v8hi)
44019     __v8hi __builtin_arc_vnew (__v8hi, __v8hi)
44020     __v8hi __builtin_arc_vor (__v8hi, __v8hi)
44021     __v8hi __builtin_arc_vsubaw (__v8hi, __v8hi)
44022     __v8hi __builtin_arc_vsubw (__v8hi, __v8hi)
44023     __v8hi __builtin_arc_vsummw (__v8hi, __v8hi)
44024     __v8hi __builtin_arc_vvc1f (__v8hi, __v8hi)
44025     __v8hi __builtin_arc_vvc1ft (__v8hi, __v8hi)
44026     __v8hi __builtin_arc_vxor (__v8hi, __v8hi)
44027     __v8hi __builtin_arc_vxoraw (__v8hi, __v8hi)
44028
44029 The following take one '__v8hi' and one 'int' argument and return a
44030'__v8hi' result:
44031
44032     __v8hi __builtin_arc_vbaddw (__v8hi, int)
44033     __v8hi __builtin_arc_vbmaxw (__v8hi, int)
44034     __v8hi __builtin_arc_vbminw (__v8hi, int)
44035     __v8hi __builtin_arc_vbmulaw (__v8hi, int)
44036     __v8hi __builtin_arc_vbmulfw (__v8hi, int)
44037     __v8hi __builtin_arc_vbmulw (__v8hi, int)
44038     __v8hi __builtin_arc_vbrsubw (__v8hi, int)
44039     __v8hi __builtin_arc_vbsubw (__v8hi, int)
44040
44041 The following take one '__v8hi' argument and one 'int' argument which
44042must be a 3-bit compile time constant indicating a register number
44043I0-I7.  They return a '__v8hi' result.
44044     __v8hi __builtin_arc_vasrw (__v8hi, const int)
44045     __v8hi __builtin_arc_vsr8 (__v8hi, const int)
44046     __v8hi __builtin_arc_vsr8aw (__v8hi, const int)
44047
44048 The following take one '__v8hi' argument and one 'int' argument which
44049must be a 6-bit compile time constant.  They return a '__v8hi' result.
44050     __v8hi __builtin_arc_vasrpwbi (__v8hi, const int)
44051     __v8hi __builtin_arc_vasrrpwbi (__v8hi, const int)
44052     __v8hi __builtin_arc_vasrrwi (__v8hi, const int)
44053     __v8hi __builtin_arc_vasrsrwi (__v8hi, const int)
44054     __v8hi __builtin_arc_vasrwi (__v8hi, const int)
44055     __v8hi __builtin_arc_vsr8awi (__v8hi, const int)
44056     __v8hi __builtin_arc_vsr8i (__v8hi, const int)
44057
44058 The following take one '__v8hi' argument and one 'int' argument which
44059must be a 8-bit compile time constant.  They return a '__v8hi' result.
44060     __v8hi __builtin_arc_vd6tapf (__v8hi, const int)
44061     __v8hi __builtin_arc_vmvaw (__v8hi, const int)
44062     __v8hi __builtin_arc_vmvw (__v8hi, const int)
44063     __v8hi __builtin_arc_vmvzw (__v8hi, const int)
44064
44065 The following take two 'int' arguments, the second of which which must
44066be a 8-bit compile time constant.  They return a '__v8hi' result:
44067     __v8hi __builtin_arc_vmovaw (int, const int)
44068     __v8hi __builtin_arc_vmovw (int, const int)
44069     __v8hi __builtin_arc_vmovzw (int, const int)
44070
44071 The following take a single '__v8hi' argument and return a '__v8hi'
44072result:
44073     __v8hi __builtin_arc_vabsaw (__v8hi)
44074     __v8hi __builtin_arc_vabsw (__v8hi)
44075     __v8hi __builtin_arc_vaddsuw (__v8hi)
44076     __v8hi __builtin_arc_vexch1 (__v8hi)
44077     __v8hi __builtin_arc_vexch2 (__v8hi)
44078     __v8hi __builtin_arc_vexch4 (__v8hi)
44079     __v8hi __builtin_arc_vsignw (__v8hi)
44080     __v8hi __builtin_arc_vupbaw (__v8hi)
44081     __v8hi __builtin_arc_vupbw (__v8hi)
44082     __v8hi __builtin_arc_vupsbaw (__v8hi)
44083     __v8hi __builtin_arc_vupsbw (__v8hi)
44084
44085 The following take two 'int' arguments and return no result:
44086     void __builtin_arc_vdirun (int, int)
44087     void __builtin_arc_vdorun (int, int)
44088
44089 The following take two 'int' arguments and return no result.  The first
44090argument must a 3-bit compile time constant indicating one of the
44091DR0-DR7 DMA setup channels:
44092     void __builtin_arc_vdiwr (const int, int)
44093     void __builtin_arc_vdowr (const int, int)
44094
44095 The following take an 'int' argument and return no result:
44096     void __builtin_arc_vendrec (int)
44097     void __builtin_arc_vrec (int)
44098     void __builtin_arc_vrecrun (int)
44099     void __builtin_arc_vrun (int)
44100
44101 The following take a '__v8hi' argument and two 'int' arguments and
44102return a '__v8hi' result.  The second argument must be a 3-bit compile
44103time constants, indicating one the registers I0-I7, and the third
44104argument must be an 8-bit compile time constant.
44105
44106 _Note:_ Although the equivalent hardware instructions do not take an
44107SIMD register as an operand, these builtins overwrite the relevant bits
44108of the '__v8hi' register provided as the first argument with the value
44109loaded from the '[Ib, u8]' location in the SDM.
44110
44111     __v8hi __builtin_arc_vld32 (__v8hi, const int, const int)
44112     __v8hi __builtin_arc_vld32wh (__v8hi, const int, const int)
44113     __v8hi __builtin_arc_vld32wl (__v8hi, const int, const int)
44114     __v8hi __builtin_arc_vld64 (__v8hi, const int, const int)
44115
44116 The following take two 'int' arguments and return a '__v8hi' result.
44117The first argument must be a 3-bit compile time constants, indicating
44118one the registers I0-I7, and the second argument must be an 8-bit
44119compile time constant.
44120
44121     __v8hi __builtin_arc_vld128 (const int, const int)
44122     __v8hi __builtin_arc_vld64w (const int, const int)
44123
44124 The following take a '__v8hi' argument and two 'int' arguments and
44125return no result.  The second argument must be a 3-bit compile time
44126constants, indicating one the registers I0-I7, and the third argument
44127must be an 8-bit compile time constant.
44128
44129     void __builtin_arc_vst128 (__v8hi, const int, const int)
44130     void __builtin_arc_vst64 (__v8hi, const int, const int)
44131
44132 The following take a '__v8hi' argument and three 'int' arguments and
44133return no result.  The second argument must be a 3-bit compile-time
44134constant, identifying the 16-bit sub-register to be stored, the third
44135argument must be a 3-bit compile time constants, indicating one the
44136registers I0-I7, and the fourth argument must be an 8-bit compile time
44137constant.
44138
44139     void __builtin_arc_vst16_n (__v8hi, const int, const int, const int)
44140     void __builtin_arc_vst32_n (__v8hi, const int, const int, const int)
44141
44142
44143File: gcc.info,  Node: ARM iWMMXt Built-in Functions,  Next: ARM C Language Extensions (ACLE),  Prev: ARC SIMD Built-in Functions,  Up: Target Builtins
44144
441456.60.6 ARM iWMMXt Built-in Functions
44146------------------------------------
44147
44148These built-in functions are available for the ARM family of processors
44149when the '-mcpu=iwmmxt' switch is used:
44150
44151     typedef int v2si __attribute__ ((vector_size (8)));
44152     typedef short v4hi __attribute__ ((vector_size (8)));
44153     typedef char v8qi __attribute__ ((vector_size (8)));
44154
44155     int __builtin_arm_getwcgr0 (void)
44156     void __builtin_arm_setwcgr0 (int)
44157     int __builtin_arm_getwcgr1 (void)
44158     void __builtin_arm_setwcgr1 (int)
44159     int __builtin_arm_getwcgr2 (void)
44160     void __builtin_arm_setwcgr2 (int)
44161     int __builtin_arm_getwcgr3 (void)
44162     void __builtin_arm_setwcgr3 (int)
44163     int __builtin_arm_textrmsb (v8qi, int)
44164     int __builtin_arm_textrmsh (v4hi, int)
44165     int __builtin_arm_textrmsw (v2si, int)
44166     int __builtin_arm_textrmub (v8qi, int)
44167     int __builtin_arm_textrmuh (v4hi, int)
44168     int __builtin_arm_textrmuw (v2si, int)
44169     v8qi __builtin_arm_tinsrb (v8qi, int, int)
44170     v4hi __builtin_arm_tinsrh (v4hi, int, int)
44171     v2si __builtin_arm_tinsrw (v2si, int, int)
44172     long long __builtin_arm_tmia (long long, int, int)
44173     long long __builtin_arm_tmiabb (long long, int, int)
44174     long long __builtin_arm_tmiabt (long long, int, int)
44175     long long __builtin_arm_tmiaph (long long, int, int)
44176     long long __builtin_arm_tmiatb (long long, int, int)
44177     long long __builtin_arm_tmiatt (long long, int, int)
44178     int __builtin_arm_tmovmskb (v8qi)
44179     int __builtin_arm_tmovmskh (v4hi)
44180     int __builtin_arm_tmovmskw (v2si)
44181     long long __builtin_arm_waccb (v8qi)
44182     long long __builtin_arm_wacch (v4hi)
44183     long long __builtin_arm_waccw (v2si)
44184     v8qi __builtin_arm_waddb (v8qi, v8qi)
44185     v8qi __builtin_arm_waddbss (v8qi, v8qi)
44186     v8qi __builtin_arm_waddbus (v8qi, v8qi)
44187     v4hi __builtin_arm_waddh (v4hi, v4hi)
44188     v4hi __builtin_arm_waddhss (v4hi, v4hi)
44189     v4hi __builtin_arm_waddhus (v4hi, v4hi)
44190     v2si __builtin_arm_waddw (v2si, v2si)
44191     v2si __builtin_arm_waddwss (v2si, v2si)
44192     v2si __builtin_arm_waddwus (v2si, v2si)
44193     v8qi __builtin_arm_walign (v8qi, v8qi, int)
44194     long long __builtin_arm_wand(long long, long long)
44195     long long __builtin_arm_wandn (long long, long long)
44196     v8qi __builtin_arm_wavg2b (v8qi, v8qi)
44197     v8qi __builtin_arm_wavg2br (v8qi, v8qi)
44198     v4hi __builtin_arm_wavg2h (v4hi, v4hi)
44199     v4hi __builtin_arm_wavg2hr (v4hi, v4hi)
44200     v8qi __builtin_arm_wcmpeqb (v8qi, v8qi)
44201     v4hi __builtin_arm_wcmpeqh (v4hi, v4hi)
44202     v2si __builtin_arm_wcmpeqw (v2si, v2si)
44203     v8qi __builtin_arm_wcmpgtsb (v8qi, v8qi)
44204     v4hi __builtin_arm_wcmpgtsh (v4hi, v4hi)
44205     v2si __builtin_arm_wcmpgtsw (v2si, v2si)
44206     v8qi __builtin_arm_wcmpgtub (v8qi, v8qi)
44207     v4hi __builtin_arm_wcmpgtuh (v4hi, v4hi)
44208     v2si __builtin_arm_wcmpgtuw (v2si, v2si)
44209     long long __builtin_arm_wmacs (long long, v4hi, v4hi)
44210     long long __builtin_arm_wmacsz (v4hi, v4hi)
44211     long long __builtin_arm_wmacu (long long, v4hi, v4hi)
44212     long long __builtin_arm_wmacuz (v4hi, v4hi)
44213     v4hi __builtin_arm_wmadds (v4hi, v4hi)
44214     v4hi __builtin_arm_wmaddu (v4hi, v4hi)
44215     v8qi __builtin_arm_wmaxsb (v8qi, v8qi)
44216     v4hi __builtin_arm_wmaxsh (v4hi, v4hi)
44217     v2si __builtin_arm_wmaxsw (v2si, v2si)
44218     v8qi __builtin_arm_wmaxub (v8qi, v8qi)
44219     v4hi __builtin_arm_wmaxuh (v4hi, v4hi)
44220     v2si __builtin_arm_wmaxuw (v2si, v2si)
44221     v8qi __builtin_arm_wminsb (v8qi, v8qi)
44222     v4hi __builtin_arm_wminsh (v4hi, v4hi)
44223     v2si __builtin_arm_wminsw (v2si, v2si)
44224     v8qi __builtin_arm_wminub (v8qi, v8qi)
44225     v4hi __builtin_arm_wminuh (v4hi, v4hi)
44226     v2si __builtin_arm_wminuw (v2si, v2si)
44227     v4hi __builtin_arm_wmulsm (v4hi, v4hi)
44228     v4hi __builtin_arm_wmulul (v4hi, v4hi)
44229     v4hi __builtin_arm_wmulum (v4hi, v4hi)
44230     long long __builtin_arm_wor (long long, long long)
44231     v2si __builtin_arm_wpackdss (long long, long long)
44232     v2si __builtin_arm_wpackdus (long long, long long)
44233     v8qi __builtin_arm_wpackhss (v4hi, v4hi)
44234     v8qi __builtin_arm_wpackhus (v4hi, v4hi)
44235     v4hi __builtin_arm_wpackwss (v2si, v2si)
44236     v4hi __builtin_arm_wpackwus (v2si, v2si)
44237     long long __builtin_arm_wrord (long long, long long)
44238     long long __builtin_arm_wrordi (long long, int)
44239     v4hi __builtin_arm_wrorh (v4hi, long long)
44240     v4hi __builtin_arm_wrorhi (v4hi, int)
44241     v2si __builtin_arm_wrorw (v2si, long long)
44242     v2si __builtin_arm_wrorwi (v2si, int)
44243     v2si __builtin_arm_wsadb (v2si, v8qi, v8qi)
44244     v2si __builtin_arm_wsadbz (v8qi, v8qi)
44245     v2si __builtin_arm_wsadh (v2si, v4hi, v4hi)
44246     v2si __builtin_arm_wsadhz (v4hi, v4hi)
44247     v4hi __builtin_arm_wshufh (v4hi, int)
44248     long long __builtin_arm_wslld (long long, long long)
44249     long long __builtin_arm_wslldi (long long, int)
44250     v4hi __builtin_arm_wsllh (v4hi, long long)
44251     v4hi __builtin_arm_wsllhi (v4hi, int)
44252     v2si __builtin_arm_wsllw (v2si, long long)
44253     v2si __builtin_arm_wsllwi (v2si, int)
44254     long long __builtin_arm_wsrad (long long, long long)
44255     long long __builtin_arm_wsradi (long long, int)
44256     v4hi __builtin_arm_wsrah (v4hi, long long)
44257     v4hi __builtin_arm_wsrahi (v4hi, int)
44258     v2si __builtin_arm_wsraw (v2si, long long)
44259     v2si __builtin_arm_wsrawi (v2si, int)
44260     long long __builtin_arm_wsrld (long long, long long)
44261     long long __builtin_arm_wsrldi (long long, int)
44262     v4hi __builtin_arm_wsrlh (v4hi, long long)
44263     v4hi __builtin_arm_wsrlhi (v4hi, int)
44264     v2si __builtin_arm_wsrlw (v2si, long long)
44265     v2si __builtin_arm_wsrlwi (v2si, int)
44266     v8qi __builtin_arm_wsubb (v8qi, v8qi)
44267     v8qi __builtin_arm_wsubbss (v8qi, v8qi)
44268     v8qi __builtin_arm_wsubbus (v8qi, v8qi)
44269     v4hi __builtin_arm_wsubh (v4hi, v4hi)
44270     v4hi __builtin_arm_wsubhss (v4hi, v4hi)
44271     v4hi __builtin_arm_wsubhus (v4hi, v4hi)
44272     v2si __builtin_arm_wsubw (v2si, v2si)
44273     v2si __builtin_arm_wsubwss (v2si, v2si)
44274     v2si __builtin_arm_wsubwus (v2si, v2si)
44275     v4hi __builtin_arm_wunpckehsb (v8qi)
44276     v2si __builtin_arm_wunpckehsh (v4hi)
44277     long long __builtin_arm_wunpckehsw (v2si)
44278     v4hi __builtin_arm_wunpckehub (v8qi)
44279     v2si __builtin_arm_wunpckehuh (v4hi)
44280     long long __builtin_arm_wunpckehuw (v2si)
44281     v4hi __builtin_arm_wunpckelsb (v8qi)
44282     v2si __builtin_arm_wunpckelsh (v4hi)
44283     long long __builtin_arm_wunpckelsw (v2si)
44284     v4hi __builtin_arm_wunpckelub (v8qi)
44285     v2si __builtin_arm_wunpckeluh (v4hi)
44286     long long __builtin_arm_wunpckeluw (v2si)
44287     v8qi __builtin_arm_wunpckihb (v8qi, v8qi)
44288     v4hi __builtin_arm_wunpckihh (v4hi, v4hi)
44289     v2si __builtin_arm_wunpckihw (v2si, v2si)
44290     v8qi __builtin_arm_wunpckilb (v8qi, v8qi)
44291     v4hi __builtin_arm_wunpckilh (v4hi, v4hi)
44292     v2si __builtin_arm_wunpckilw (v2si, v2si)
44293     long long __builtin_arm_wxor (long long, long long)
44294     long long __builtin_arm_wzero ()
44295
44296
44297File: gcc.info,  Node: ARM C Language Extensions (ACLE),  Next: ARM Floating Point Status and Control Intrinsics,  Prev: ARM iWMMXt Built-in Functions,  Up: Target Builtins
44298
442996.60.7 ARM C Language Extensions (ACLE)
44300---------------------------------------
44301
44302GCC implements extensions for C as described in the ARM C Language
44303Extensions (ACLE) specification, which can be found at
44304<http://infocenter.arm.com/help/topic/com.arm.doc.ihi0053c/IHI0053C_acle_2_0.pdf>.
44305
44306 As a part of ACLE, GCC implements extensions for Advanced SIMD as
44307described in the ARM C Language Extensions Specification.  The complete
44308list of Advanced SIMD intrinsics can be found at
44309<http://infocenter.arm.com/help/topic/com.arm.doc.ihi0073a/IHI0073A_arm_neon_intrinsics_ref.pdf>.
44310The built-in intrinsics for the Advanced SIMD extension are available
44311when NEON is enabled.
44312
44313 Currently, ARM and AArch64 back ends do not support ACLE 2.0 fully.
44314Both back ends support CRC32 intrinsics and the ARM back end supports
44315the Coprocessor intrinsics, all from 'arm_acle.h'.  The ARM back end's
4431616-bit floating-point Advanced SIMD intrinsics currently comply to ACLE
44317v1.1.  AArch64's back end does not have support for 16-bit floating
44318point Advanced SIMD intrinsics yet.
44319
44320 See *note ARM Options:: and *note AArch64 Options:: for more
44321information on the availability of extensions.
44322
44323
44324File: gcc.info,  Node: ARM Floating Point Status and Control Intrinsics,  Next: ARM ARMv8-M Security Extensions,  Prev: ARM C Language Extensions (ACLE),  Up: Target Builtins
44325
443266.60.8 ARM Floating Point Status and Control Intrinsics
44327-------------------------------------------------------
44328
44329These built-in functions are available for the ARM family of processors
44330with floating-point unit.
44331
44332     unsigned int __builtin_arm_get_fpscr ()
44333     void __builtin_arm_set_fpscr (unsigned int)
44334
44335
44336File: gcc.info,  Node: ARM ARMv8-M Security Extensions,  Next: AVR Built-in Functions,  Prev: ARM Floating Point Status and Control Intrinsics,  Up: Target Builtins
44337
443386.60.9 ARM ARMv8-M Security Extensions
44339--------------------------------------
44340
44341GCC implements the ARMv8-M Security Extensions as described in the
44342ARMv8-M Security Extensions: Requirements on Development Tools
44343Engineering Specification, which can be found at
44344<http://infocenter.arm.com/help/topic/com.arm.doc.ecm0359818/ECM0359818_armv8m_security_extensions_reqs_on_dev_tools_1_0.pdf>.
44345
44346 As part of the Security Extensions GCC implements two new function
44347attributes: 'cmse_nonsecure_entry' and 'cmse_nonsecure_call'.
44348
44349 As part of the Security Extensions GCC implements the intrinsics below.
44350FPTR is used here to mean any function pointer type.
44351
44352     cmse_address_info_t cmse_TT (void *)
44353     cmse_address_info_t cmse_TT_fptr (FPTR)
44354     cmse_address_info_t cmse_TTT (void *)
44355     cmse_address_info_t cmse_TTT_fptr (FPTR)
44356     cmse_address_info_t cmse_TTA (void *)
44357     cmse_address_info_t cmse_TTA_fptr (FPTR)
44358     cmse_address_info_t cmse_TTAT (void *)
44359     cmse_address_info_t cmse_TTAT_fptr (FPTR)
44360     void * cmse_check_address_range (void *, size_t, int)
44361     typeof(p) cmse_nsfptr_create (FPTR p)
44362     intptr_t cmse_is_nsfptr (FPTR)
44363     int cmse_nonsecure_caller (void)
44364
44365
44366File: gcc.info,  Node: AVR Built-in Functions,  Next: Blackfin Built-in Functions,  Prev: ARM ARMv8-M Security Extensions,  Up: Target Builtins
44367
443686.60.10 AVR Built-in Functions
44369------------------------------
44370
44371For each built-in function for AVR, there is an equally named, uppercase
44372built-in macro defined.  That way users can easily query if or if not a
44373specific built-in is implemented or not.  For example, if
44374'__builtin_avr_nop' is available the macro '__BUILTIN_AVR_NOP' is
44375defined to '1' and undefined otherwise.
44376
44377'void __builtin_avr_nop (void)'
44378'void __builtin_avr_sei (void)'
44379'void __builtin_avr_cli (void)'
44380'void __builtin_avr_sleep (void)'
44381'void __builtin_avr_wdr (void)'
44382'unsigned char __builtin_avr_swap (unsigned char)'
44383'unsigned int __builtin_avr_fmul (unsigned char, unsigned char)'
44384'int __builtin_avr_fmuls (char, char)'
44385'int __builtin_avr_fmulsu (char, unsigned char)'
44386     These built-in functions map to the respective machine instruction,
44387     i.e. 'nop', 'sei', 'cli', 'sleep', 'wdr', 'swap', 'fmul', 'fmuls'
44388     resp.  'fmulsu'.  The three 'fmul*' built-ins are implemented as
44389     library call if no hardware multiplier is available.
44390
44391'void __builtin_avr_delay_cycles (unsigned long ticks)'
44392     Delay execution for TICKS cycles.  Note that this built-in does not
44393     take into account the effect of interrupts that might increase
44394     delay time.  TICKS must be a compile-time integer constant; delays
44395     with a variable number of cycles are not supported.
44396
44397'char __builtin_avr_flash_segment (const __memx void*)'
44398     This built-in takes a byte address to the 24-bit *note address
44399     space: AVR Named Address Spaces. '__memx' and returns the number of
44400     the flash segment (the 64 KiB chunk) where the address points to.
44401     Counting starts at '0'.  If the address does not point to flash
44402     memory, return '-1'.
44403
44404'uint8_t __builtin_avr_insert_bits (uint32_t map, uint8_t bits, uint8_t val)'
44405     Insert bits from BITS into VAL and return the resulting value.  The
44406     nibbles of MAP determine how the insertion is performed: Let X be
44407     the N-th nibble of MAP
44408       1. If X is '0xf', then the N-th bit of VAL is returned unaltered.
44409
44410       2. If X is in the range 0...7, then the N-th result bit is set to
44411          the X-th bit of BITS
44412
44413       3. If X is in the range 8...'0xe', then the N-th result bit is
44414          undefined.
44415
44416     One typical use case for this built-in is adjusting input and
44417     output values to non-contiguous port layouts.  Some examples:
44418
44419          // same as val, bits is unused
44420          __builtin_avr_insert_bits (0xffffffff, bits, val)
44421
44422          // same as bits, val is unused
44423          __builtin_avr_insert_bits (0x76543210, bits, val)
44424
44425          // same as rotating bits by 4
44426          __builtin_avr_insert_bits (0x32107654, bits, 0)
44427
44428          // high nibble of result is the high nibble of val
44429          // low nibble of result is the low nibble of bits
44430          __builtin_avr_insert_bits (0xffff3210, bits, val)
44431
44432          // reverse the bit order of bits
44433          __builtin_avr_insert_bits (0x01234567, bits, 0)
44434
44435'void __builtin_avr_nops (unsigned count)'
44436     Insert COUNT 'NOP' instructions.  The number of instructions must
44437     be a compile-time integer constant.
44438
44439There are many more AVR-specific built-in functions that are used to
44440implement the ISO/IEC TR 18037 "Embedded C" fixed-point functions of
44441section 7.18a.6.  You don't need to use these built-ins directly.
44442Instead, use the declarations as supplied by the 'stdfix.h' header with
44443GNU-C99:
44444
44445     #include <stdfix.h>
44446
44447     // Re-interpret the bit representation of unsigned 16-bit
44448     // integer UVAL as Q-format 0.16 value.
44449     unsigned fract get_bits (uint_ur_t uval)
44450     {
44451         return urbits (uval);
44452     }
44453
44454
44455File: gcc.info,  Node: Blackfin Built-in Functions,  Next: BPF Built-in Functions,  Prev: AVR Built-in Functions,  Up: Target Builtins
44456
444576.60.11 Blackfin Built-in Functions
44458-----------------------------------
44459
44460Currently, there are two Blackfin-specific built-in functions.  These
44461are used for generating 'CSYNC' and 'SSYNC' machine insns without using
44462inline assembly; by using these built-in functions the compiler can
44463automatically add workarounds for hardware errata involving these
44464instructions.  These functions are named as follows:
44465
44466     void __builtin_bfin_csync (void)
44467     void __builtin_bfin_ssync (void)
44468
44469
44470File: gcc.info,  Node: BPF Built-in Functions,  Next: BPF Kernel Helpers,  Prev: Blackfin Built-in Functions,  Up: Target Builtins
44471
444726.60.12 BPF Built-in Functions
44473------------------------------
44474
44475The following built-in functions are available for eBPF targets.
44476
44477 -- Built-in Function: unsigned long long __builtin_bpf_load_byte
44478          (unsigned long long OFFSET)
44479     Load a byte from the 'struct sk_buff' packet data pointed by the
44480     register '%r6' and return it.
44481
44482 -- Built-in Function: unsigned long long __builtin_bpf_load_half
44483          (unsigned long long OFFSET)
44484     Load 16-bits from the 'struct sk_buff' packet data pointed by the
44485     register '%r6' and return it.
44486
44487 -- Built-in Function: unsigned long long __builtin_bpf_load_word
44488          (unsigned long long OFFSET)
44489     Load 32-bits from the 'struct sk_buff' packet data pointed by the
44490     register '%r6' and return it.
44491
44492
44493File: gcc.info,  Node: BPF Kernel Helpers,  Next: FR-V Built-in Functions,  Prev: BPF Built-in Functions,  Up: Target Builtins
44494
444956.60.13 BPF Kernel Helpers
44496--------------------------
44497
44498These built-in functions are available for calling kernel helpers, and
44499they are available depending on the kernel version selected as the CPU.
44500
44501 Rather than using the built-ins directly, it is preferred for programs
44502to include 'bpf-helpers.h' and use the wrappers defined there.
44503
44504 For a full description of what the helpers do, the arguments they take,
44505and the returned value, see the 'linux/include/uapi/linux/bpf.h' in a
44506Linux source tree.
44507
44508     void *__builtin_bpf_helper_map_lookup_elem (void *map, void *key)
44509     int   __builtin_bpf_helper_map_update_elem (void *map, void *key,
44510                                                 void *value,
44511                                                 unsigned long long flags)
44512     int   __builtin_bpf_helper_map_delete_elem (void *map, const void *key)
44513     int   __builtin_bpf_helper_map_push_elem (void *map, const void *value,
44514                                               unsigned long long flags)
44515     int   __builtin_bpf_helper_map_pop_elem (void *map, void *value)
44516     int   __builtin_bpf_helper_map_peek_elem (void *map, void *value)
44517     int __builtin_bpf_helper_clone_redirect (void *skb,
44518                                              unsigned int ifindex,
44519                                              unsigned long long flags)
44520     int __builtin_bpf_helper_skb_get_tunnel_key (void *ctx, void *key, int size, int flags)
44521     int __builtin_bpf_helper_skb_set_tunnel_key (void *ctx, void *key, int size, int flags)
44522     int __builtin_bpf_helper_skb_get_tunnel_opt (void *ctx, void *md, int size)
44523     int __builtin_bpf_helper_skb_set_tunnel_opt (void *ctx, void *md, int size)
44524     int __builtin_bpf_helper_skb_get_xfrm_state (void *ctx, int index, void *state,
44525     				     int size, int flags)
44526     static unsigned long long __builtin_bpf_helper_skb_cgroup_id (void *ctx)
44527     static unsigned long long __builtin_bpf_helper_skb_ancestor_cgroup_id
44528                                              (void *ctx, int level)
44529     int __builtin_bpf_helper_skb_vlan_push (void *ctx, __be16 vlan_proto, __u16 vlan_tci)
44530     int __builtin_bpf_helper_skb_vlan_pop (void *ctx)
44531     int __builtin_bpf_helper_skb_ecn_set_ce (void *ctx)
44532
44533     int __builtin_bpf_helper_skb_load_bytes (void *ctx, int off, void *to, int len)
44534     int __builtin_bpf_helper_skb_load_bytes_relative (void *ctx, int off, void *to, int len, __u32 start_header)
44535     int __builtin_bpf_helper_skb_store_bytes (void *ctx, int off, void *from, int len, int flags)
44536     int __builtin_bpf_helper_skb_under_cgroup (void *ctx, void *map, int index)
44537     int __builtin_bpf_helper_skb_change_head (void *, int len, int flags)
44538     int __builtin_bpf_helper_skb_pull_data (void *, int len)
44539     int __builtin_bpf_helper_skb_change_proto (void *ctx, __be16 proto, __u64 flags)
44540     int __builtin_bpf_helper_skb_change_type (void *ctx, __u32 type)
44541     int __builtin_bpf_helper_skb_change_tail (void *ctx, __u32 len, __u64 flags)
44542     int __builtin_bpf_helper_skb_adjust_room (void *ctx, __s32 len_diff, __u32 mode,
44543         				  unsigned long long flags)
44544
44545 Other helpers:
44546
44547     int __builtin_bpf_helper_probe_read (void *dst, unsigned int size, void *src)
44548     unsigned long long __builtin_bpf_helper_ktime_get_ns (void)
44549     int __builtin_bpf_helper_trace_printk (const char *fmt, unsigned int fmt_size, ...)
44550     void __builtin_bpf_helper_tail_call (void *ctx, void *prog_array_map, unsigned int index)
44551     unsigned int __builtin_bpf_helper_get_smp_processor_id (void)
44552     unsigned long long __builtin_bpf_helper_get_current_pid_tgid (void)
44553     unsigned long long __builtin_bpf_helper_get_current_uid_gid (void)
44554     int __builtin_bpf_helper_get_current_comm (void *buf, unsigned int size_of_buf)
44555     unsigned long long __builtin_bpf_helper_perf_event_read (void *map, unsigned long long flags)
44556
44557     int __builtin_bpf_helper_redirect (unsigned int ifindex, unsigned long long flags)
44558     int __builtin_bpf_helper_redirect_map (void *map, unsigned int key, unsigned long long flags)
44559     int __builtin_bpf_helper_perf_event_output (void *ctx,void *map, unsigned long long flags, void *data, unsigned long long size)
44560     int __builtin_bpf_helper_get_stackid (void *ctx, void *map, unsigned long long flags)
44561     int __builtin_bpf_helper_probe_write_user (void *dst, const void *src, unsigned int len)
44562     int __builtin_bpf_helper_current_task_under_cgroup (void *map, unsigned int index)
44563
44564     static unsigned long long __builtin_bpf_helper_get_prandom_u32 (void)
44565     int __builtin_bpf_helper_xdp_adjust_head (void *ctx, int offset)
44566     int __builtin_bpf_helper_xdp_adjust_meta (void *ctx, int offset)
44567     int __builtin_bpf_helper_get_socket_cookie (void *ctx)
44568     int __builtin_bpf_helper_setsockopt (void *ctx, int level, int optname, void *optval,
44569     			     int optlen)
44570     int __builtin_bpf_helper_getsockopt (void *ctx, int level, int optname, void *optval,
44571     			     int optlen)
44572     int __builtin_bpf_helper_sock_ops_cb_flags_set (void *ctx, int flags)
44573     int __builtin_bpf_helper_sk_redirect_map (void *ctx, void *map, int key, int flags)
44574     int __builtin_bpf_helper_sk_redirect_hash (void *ctx, void *map, void *key, int flags)
44575     int __builtin_bpf_helper_sock_map_update (void *map, void *key, void *value,
44576     				  unsigned long long flags)
44577     int __builtin_bpf_helper_sock_hash_update (void *map, void *key, void *value,
44578     				   unsigned long long flags)
44579     int __builtin_bpf_helper_perf_event_read_value (void *map, unsigned long long flags,
44580     					void *buf, unsigned int buf_size)
44581     int __builtin_bpf_helper_perf_prog_read_value (void *ctx, void *buf,
44582     				       unsigned int buf_size)
44583
44584     int __builtin_bpf_helper_override_return (void *ctx, unsigned long rc)
44585     int __builtin_bpf_helper_msg_redirect_map (void *ctx, void *map, int key, int flags)
44586     int __builtin_bpf_helper_msg_redirect_hash (void *ctx,
44587     				    void *map, void *key, int flags)
44588     int __builtin_bpf_helper_msg_apply_bytes (void *ctx, int len)
44589     int __builtin_bpf_helper_msg_cork_bytes (void *ctx, int len)
44590     int __builtin_bpf_helper_msg_pull_data (void *ctx, int start, int end, int flags)
44591     int __builtin_bpf_helper_msg_push_data (void *ctx, int start, int end, int flags)
44592     int __builtin_bpf_helper_msg_pop_data (void *ctx, int start, int cut, int flags)
44593     int __builtin_bpf_helper_bind (void *ctx, void *addr, int addr_len)
44594     int __builtin_bpf_helper_xdp_adjust_tail (void *ctx, int offset)
44595     int __builtin_bpf_helper_sk_select_reuseport (void *ctx, void *map, void *key, __u32 flags)
44596     int __builtin_bpf_helper_get_stack (void *ctx, void *buf, int size, int flags)
44597     int __builtin_bpf_helper_fib_lookup (void *ctx, struct bpf_fib_lookup *params,
44598     			     int plen, __u32 flags)
44599
44600     int __builtin_bpf_helper_lwt_push_encap (void *ctx, unsigned int type, void *hdr,
44601     				 unsigned int len)
44602     int __builtin_bpf_helper_lwt_seg6_store_bytes (void *ctx, unsigned int offset,
44603     				       void *from, unsigned int len)
44604     int __builtin_bpf_helper_lwt_seg6_action (void *ctx, unsigned int action, void *param,
44605     				  unsigned int param_len)
44606     int __builtin_bpf_helper_lwt_seg6_adjust_srh (void *ctx, unsigned int offset,
44607     				      unsigned int len)
44608     int __builtin_bpf_helper_rc_repeat (void *ctx)
44609     int __builtin_bpf_helper_rc_keydown (void *ctx, unsigned int protocol,
44610     			     unsigned long long scancode, unsigned int toggle)
44611     static unsigned long long __builtin_bpf_helper_get_current_cgroup_id (void)
44612     static void *__builtin_bpf_helper_get_local_storage (void *map, unsigned long long flags)
44613     static struct bpf_sock *__builtin_bpf_helper_sk_lookup_tcp (void *ctx, void *tuple, int size, unsigned long long netns_id, unsigned long long flags)
44614     static struct bpf_sock *__builtin_bpf_helper_sk_lookup_udp (void *ctx, void *tuple, int size, unsigned long long netns_id, unsigned long long flags)
44615     int __builtin_bpf_helper_sk_release (struct bpf_sock *sk)
44616     int __builtin_bpf_helper_rc_pointer_rel (void *ctx, int rel_x, int rel_y)
44617     static void __builtin_bpf_helper_spin_lock (struct bpf_spin_lock *lock)
44618     static void __builtin_bpf_helper_spin_unlock (struct bpf_spin_lock *lock)
44619
44620     static struct bpf_sock *__builtin_bpf_helper_sk_fullsock (struct bpf_sock *sk)
44621     static struct bpf_tcp_sock *__builtin_bpf_helper_tcp_sock (struct bpf_sock *sk)
44622     static struct bpf_sock *__builtin_bpf_helper_get_listener_sock (struct bpf_sock *sk)
44623
44624     int __builtin_bpf_helper_l3_csum_replace (void *ctx, int off, int from, int to, int flags)
44625     int __builtin_bpf_helper_l4_csum_replace (void *ctx, int off, int from, int to, int flags)
44626     int __builtin_bpf_helper_csum_diff (void *from, int from_size, void *to, int to_size, int seed)
44627
44628     static unsigned int __builtin_bpf_helper_get_cgroup_classid (void *ctx)
44629     static unsigned int __builtin_bpf_helper_get_route_realm (void *ctx)
44630     static unsigned int __builtin_bpf_helper_get_hash_recalc (void *ctx)
44631     static unsigned long long __builtin_bpf_helper_get_current_task (void *ctx)
44632
44633     static long long __builtin_bpf_helper_csum_update (void *ctx, __u32 csum)
44634     static void __builtin_bpf_helper_set_hash_invalid (void *ctx)
44635     int __builtin_bpf_helper_get_numa_node_id (void)
44636     int __builtin_bpf_helper_probe_read_str (void *ctx, __u32 size,
44637     				 const void *unsafe_ptr)
44638     static unsigned int __builtin_bpf_helper_get_socket_uid (void *ctx)
44639     static unsigned int __builtin_bpf_helper_set_hash (void *ctx, __u32 hash)
44640
44641
44642File: gcc.info,  Node: FR-V Built-in Functions,  Next: MIPS DSP Built-in Functions,  Prev: BPF Kernel Helpers,  Up: Target Builtins
44643
446446.60.14 FR-V Built-in Functions
44645-------------------------------
44646
44647GCC provides many FR-V-specific built-in functions.  In general, these
44648functions are intended to be compatible with those described by 'FR-V
44649Family, Softune C/C++ Compiler Manual (V6), Fujitsu Semiconductor'.  The
44650two exceptions are '__MDUNPACKH' and '__MBTOHE', the GCC forms of which
44651pass 128-bit values by pointer rather than by value.
44652
44653 Most of the functions are named after specific FR-V instructions.  Such
44654functions are said to be "directly mapped" and are summarized here in
44655tabular form.
44656
44657* Menu:
44658
44659* Argument Types::
44660* Directly-mapped Integer Functions::
44661* Directly-mapped Media Functions::
44662* Raw read/write Functions::
44663* Other Built-in Functions::
44664
44665
44666File: gcc.info,  Node: Argument Types,  Next: Directly-mapped Integer Functions,  Up: FR-V Built-in Functions
44667
446686.60.14.1 Argument Types
44669........................
44670
44671The arguments to the built-in functions can be divided into three
44672groups: register numbers, compile-time constants and run-time values.
44673In order to make this classification clear at a glance, the arguments
44674and return values are given the following pseudo types:
44675
44676Pseudo type    Real C type            Constant?   Description
44677'uh'           'unsigned short'       No          an unsigned halfword
44678'uw1'          'unsigned int'         No          an unsigned word
44679'sw1'          'int'                  No          a signed word
44680'uw2'          'unsigned long long'   No          an unsigned doubleword
44681'sw2'          'long long'            No          a signed doubleword
44682'const'        'int'                  Yes         an integer constant
44683'acc'          'int'                  Yes         an ACC register number
44684'iacc'         'int'                  Yes         an IACC register number
44685
44686 These pseudo types are not defined by GCC, they are simply a notational
44687convenience used in this manual.
44688
44689 Arguments of type 'uh', 'uw1', 'sw1', 'uw2' and 'sw2' are evaluated at
44690run time.  They correspond to register operands in the underlying FR-V
44691instructions.
44692
44693 'const' arguments represent immediate operands in the underlying FR-V
44694instructions.  They must be compile-time constants.
44695
44696 'acc' arguments are evaluated at compile time and specify the number of
44697an accumulator register.  For example, an 'acc' argument of 2 selects
44698the ACC2 register.
44699
44700 'iacc' arguments are similar to 'acc' arguments but specify the number
44701of an IACC register.  See *note Other Built-in Functions:: for more
44702details.
44703
44704
44705File: gcc.info,  Node: Directly-mapped Integer Functions,  Next: Directly-mapped Media Functions,  Prev: Argument Types,  Up: FR-V Built-in Functions
44706
447076.60.14.2 Directly-Mapped Integer Functions
44708...........................................
44709
44710The functions listed below map directly to FR-V I-type instructions.
44711
44712Function prototype               Example usage           Assembly output
44713'sw1 __ADDSS (sw1, sw1)'         'C = __ADDSS (A, B)'    'ADDSS A,B,C'
44714'sw1 __SCAN (sw1, sw1)'          'C = __SCAN (A, B)'     'SCAN A,B,C'
44715'sw1 __SCUTSS (sw1)'             'B = __SCUTSS (A)'      'SCUTSS A,B'
44716'sw1 __SLASS (sw1, sw1)'         'C = __SLASS (A, B)'    'SLASS A,B,C'
44717'void __SMASS (sw1, sw1)'        '__SMASS (A, B)'        'SMASS A,B'
44718'void __SMSSS (sw1, sw1)'        '__SMSSS (A, B)'        'SMSSS A,B'
44719'void __SMU (sw1, sw1)'          '__SMU (A, B)'          'SMU A,B'
44720'sw2 __SMUL (sw1, sw1)'          'C = __SMUL (A, B)'     'SMUL A,B,C'
44721'sw1 __SUBSS (sw1, sw1)'         'C = __SUBSS (A, B)'    'SUBSS A,B,C'
44722'uw2 __UMUL (uw1, uw1)'          'C = __UMUL (A, B)'     'UMUL A,B,C'
44723
44724
44725File: gcc.info,  Node: Directly-mapped Media Functions,  Next: Raw read/write Functions,  Prev: Directly-mapped Integer Functions,  Up: FR-V Built-in Functions
44726
447276.60.14.3 Directly-Mapped Media Functions
44728.........................................
44729
44730The functions listed below map directly to FR-V M-type instructions.
44731
44732Function prototype               Example usage           Assembly output
44733'uw1 __MABSHS (sw1)'             'B = __MABSHS (A)'      'MABSHS A,B'
44734'void __MADDACCS (acc, acc)'     '__MADDACCS (B, A)'     'MADDACCS A,B'
44735'sw1 __MADDHSS (sw1, sw1)'       'C = __MADDHSS (A,      'MADDHSS A,B,C'
44736                                 B)'
44737'uw1 __MADDHUS (uw1, uw1)'       'C = __MADDHUS (A,      'MADDHUS A,B,C'
44738                                 B)'
44739'uw1 __MAND (uw1, uw1)'          'C = __MAND (A, B)'     'MAND A,B,C'
44740'void __MASACCS (acc, acc)'      '__MASACCS (B, A)'      'MASACCS A,B'
44741'uw1 __MAVEH (uw1, uw1)'         'C = __MAVEH (A, B)'    'MAVEH A,B,C'
44742'uw2 __MBTOH (uw1)'              'B = __MBTOH (A)'       'MBTOH A,B'
44743'void __MBTOHE (uw1 *, uw1)'     '__MBTOHE (&B, A)'      'MBTOHE A,B'
44744'void __MCLRACC (acc)'           '__MCLRACC (A)'         'MCLRACC A'
44745'void __MCLRACCA (void)'         '__MCLRACCA ()'         'MCLRACCA'
44746'uw1 __Mcop1 (uw1, uw1)'         'C = __Mcop1 (A, B)'    'Mcop1 A,B,C'
44747'uw1 __Mcop2 (uw1, uw1)'         'C = __Mcop2 (A, B)'    'Mcop2 A,B,C'
44748'uw1 __MCPLHI (uw2, const)'      'C = __MCPLHI (A, B)'   'MCPLHI A,#B,C'
44749'uw1 __MCPLI (uw2, const)'       'C = __MCPLI (A, B)'    'MCPLI A,#B,C'
44750'void __MCPXIS (acc, sw1,        '__MCPXIS (C, A, B)'    'MCPXIS A,B,C'
44751sw1)'
44752'void __MCPXIU (acc, uw1,        '__MCPXIU (C, A, B)'    'MCPXIU A,B,C'
44753uw1)'
44754'void __MCPXRS (acc, sw1,        '__MCPXRS (C, A, B)'    'MCPXRS A,B,C'
44755sw1)'
44756'void __MCPXRU (acc, uw1,        '__MCPXRU (C, A, B)'    'MCPXRU A,B,C'
44757uw1)'
44758'uw1 __MCUT (acc, uw1)'          'C = __MCUT (A, B)'     'MCUT A,B,C'
44759'uw1 __MCUTSS (acc, sw1)'        'C = __MCUTSS (A, B)'   'MCUTSS A,B,C'
44760'void __MDADDACCS (acc, acc)'    '__MDADDACCS (B, A)'    'MDADDACCS A,B'
44761'void __MDASACCS (acc, acc)'     '__MDASACCS (B, A)'     'MDASACCS A,B'
44762'uw2 __MDCUTSSI (acc, const)'    'C = __MDCUTSSI (A,     'MDCUTSSI
44763                                 B)'                     A,#B,C'
44764'uw2 __MDPACKH (uw2, uw2)'       'C = __MDPACKH (A,      'MDPACKH A,B,C'
44765                                 B)'
44766'uw2 __MDROTLI (uw2, const)'     'C = __MDROTLI (A,      'MDROTLI
44767                                 B)'                     A,#B,C'
44768'void __MDSUBACCS (acc, acc)'    '__MDSUBACCS (B, A)'    'MDSUBACCS A,B'
44769'void __MDUNPACKH (uw1 *,        '__MDUNPACKH (&B, A)'   'MDUNPACKH A,B'
44770uw2)'
44771'uw2 __MEXPDHD (uw1, const)'     'C = __MEXPDHD (A,      'MEXPDHD
44772                                 B)'                     A,#B,C'
44773'uw1 __MEXPDHW (uw1, const)'     'C = __MEXPDHW (A,      'MEXPDHW
44774                                 B)'                     A,#B,C'
44775'uw1 __MHDSETH (uw1, const)'     'C = __MHDSETH (A,      'MHDSETH
44776                                 B)'                     A,#B,C'
44777'sw1 __MHDSETS (const)'          'B = __MHDSETS (A)'     'MHDSETS #A,B'
44778'uw1 __MHSETHIH (uw1, const)'    'B = __MHSETHIH (B,     'MHSETHIH #A,B'
44779                                 A)'
44780'sw1 __MHSETHIS (sw1, const)'    'B = __MHSETHIS (B,     'MHSETHIS #A,B'
44781                                 A)'
44782'uw1 __MHSETLOH (uw1, const)'    'B = __MHSETLOH (B,     'MHSETLOH #A,B'
44783                                 A)'
44784'sw1 __MHSETLOS (sw1, const)'    'B = __MHSETLOS (B,     'MHSETLOS #A,B'
44785                                 A)'
44786'uw1 __MHTOB (uw2)'              'B = __MHTOB (A)'       'MHTOB A,B'
44787'void __MMACHS (acc, sw1,        '__MMACHS (C, A, B)'    'MMACHS A,B,C'
44788sw1)'
44789'void __MMACHU (acc, uw1,        '__MMACHU (C, A, B)'    'MMACHU A,B,C'
44790uw1)'
44791'void __MMRDHS (acc, sw1,        '__MMRDHS (C, A, B)'    'MMRDHS A,B,C'
44792sw1)'
44793'void __MMRDHU (acc, uw1,        '__MMRDHU (C, A, B)'    'MMRDHU A,B,C'
44794uw1)'
44795'void __MMULHS (acc, sw1,        '__MMULHS (C, A, B)'    'MMULHS A,B,C'
44796sw1)'
44797'void __MMULHU (acc, uw1,        '__MMULHU (C, A, B)'    'MMULHU A,B,C'
44798uw1)'
44799'void __MMULXHS (acc, sw1,       '__MMULXHS (C, A, B)'   'MMULXHS A,B,C'
44800sw1)'
44801'void __MMULXHU (acc, uw1,       '__MMULXHU (C, A, B)'   'MMULXHU A,B,C'
44802uw1)'
44803'uw1 __MNOT (uw1)'               'B = __MNOT (A)'        'MNOT A,B'
44804'uw1 __MOR (uw1, uw1)'           'C = __MOR (A, B)'      'MOR A,B,C'
44805'uw1 __MPACKH (uh, uh)'          'C = __MPACKH (A, B)'   'MPACKH A,B,C'
44806'sw2 __MQADDHSS (sw2, sw2)'      'C = __MQADDHSS (A,     'MQADDHSS
44807                                 B)'                     A,B,C'
44808'uw2 __MQADDHUS (uw2, uw2)'      'C = __MQADDHUS (A,     'MQADDHUS
44809                                 B)'                     A,B,C'
44810'void __MQCPXIS (acc, sw2,       '__MQCPXIS (C, A, B)'   'MQCPXIS A,B,C'
44811sw2)'
44812'void __MQCPXIU (acc, uw2,       '__MQCPXIU (C, A, B)'   'MQCPXIU A,B,C'
44813uw2)'
44814'void __MQCPXRS (acc, sw2,       '__MQCPXRS (C, A, B)'   'MQCPXRS A,B,C'
44815sw2)'
44816'void __MQCPXRU (acc, uw2,       '__MQCPXRU (C, A, B)'   'MQCPXRU A,B,C'
44817uw2)'
44818'sw2 __MQLCLRHS (sw2, sw2)'      'C = __MQLCLRHS (A,     'MQLCLRHS
44819                                 B)'                     A,B,C'
44820'sw2 __MQLMTHS (sw2, sw2)'       'C = __MQLMTHS (A,      'MQLMTHS A,B,C'
44821                                 B)'
44822'void __MQMACHS (acc, sw2,       '__MQMACHS (C, A, B)'   'MQMACHS A,B,C'
44823sw2)'
44824'void __MQMACHU (acc, uw2,       '__MQMACHU (C, A, B)'   'MQMACHU A,B,C'
44825uw2)'
44826'void __MQMACXHS (acc, sw2,      '__MQMACXHS (C, A,      'MQMACXHS
44827sw2)'                            B)'                     A,B,C'
44828'void __MQMULHS (acc, sw2,       '__MQMULHS (C, A, B)'   'MQMULHS A,B,C'
44829sw2)'
44830'void __MQMULHU (acc, uw2,       '__MQMULHU (C, A, B)'   'MQMULHU A,B,C'
44831uw2)'
44832'void __MQMULXHS (acc, sw2,      '__MQMULXHS (C, A,      'MQMULXHS
44833sw2)'                            B)'                     A,B,C'
44834'void __MQMULXHU (acc, uw2,      '__MQMULXHU (C, A,      'MQMULXHU
44835uw2)'                            B)'                     A,B,C'
44836'sw2 __MQSATHS (sw2, sw2)'       'C = __MQSATHS (A,      'MQSATHS A,B,C'
44837                                 B)'
44838'uw2 __MQSLLHI (uw2, int)'       'C = __MQSLLHI (A,      'MQSLLHI A,B,C'
44839                                 B)'
44840'sw2 __MQSRAHI (sw2, int)'       'C = __MQSRAHI (A,      'MQSRAHI A,B,C'
44841                                 B)'
44842'sw2 __MQSUBHSS (sw2, sw2)'      'C = __MQSUBHSS (A,     'MQSUBHSS
44843                                 B)'                     A,B,C'
44844'uw2 __MQSUBHUS (uw2, uw2)'      'C = __MQSUBHUS (A,     'MQSUBHUS
44845                                 B)'                     A,B,C'
44846'void __MQXMACHS (acc, sw2,      '__MQXMACHS (C, A,      'MQXMACHS
44847sw2)'                            B)'                     A,B,C'
44848'void __MQXMACXHS (acc, sw2,     '__MQXMACXHS (C, A,     'MQXMACXHS
44849sw2)'                            B)'                     A,B,C'
44850'uw1 __MRDACC (acc)'             'B = __MRDACC (A)'      'MRDACC A,B'
44851'uw1 __MRDACCG (acc)'            'B = __MRDACCG (A)'     'MRDACCG A,B'
44852'uw1 __MROTLI (uw1, const)'      'C = __MROTLI (A, B)'   'MROTLI A,#B,C'
44853'uw1 __MROTRI (uw1, const)'      'C = __MROTRI (A, B)'   'MROTRI A,#B,C'
44854'sw1 __MSATHS (sw1, sw1)'        'C = __MSATHS (A, B)'   'MSATHS A,B,C'
44855'uw1 __MSATHU (uw1, uw1)'        'C = __MSATHU (A, B)'   'MSATHU A,B,C'
44856'uw1 __MSLLHI (uw1, const)'      'C = __MSLLHI (A, B)'   'MSLLHI A,#B,C'
44857'sw1 __MSRAHI (sw1, const)'      'C = __MSRAHI (A, B)'   'MSRAHI A,#B,C'
44858'uw1 __MSRLHI (uw1, const)'      'C = __MSRLHI (A, B)'   'MSRLHI A,#B,C'
44859'void __MSUBACCS (acc, acc)'     '__MSUBACCS (B, A)'     'MSUBACCS A,B'
44860'sw1 __MSUBHSS (sw1, sw1)'       'C = __MSUBHSS (A,      'MSUBHSS A,B,C'
44861                                 B)'
44862'uw1 __MSUBHUS (uw1, uw1)'       'C = __MSUBHUS (A,      'MSUBHUS A,B,C'
44863                                 B)'
44864'void __MTRAP (void)'            '__MTRAP ()'            'MTRAP'
44865'uw2 __MUNPACKH (uw1)'           'B = __MUNPACKH (A)'    'MUNPACKH A,B'
44866'uw1 __MWCUT (uw2, uw1)'         'C = __MWCUT (A, B)'    'MWCUT A,B,C'
44867'void __MWTACC (acc, uw1)'       '__MWTACC (B, A)'       'MWTACC A,B'
44868'void __MWTACCG (acc, uw1)'      '__MWTACCG (B, A)'      'MWTACCG A,B'
44869'uw1 __MXOR (uw1, uw1)'          'C = __MXOR (A, B)'     'MXOR A,B,C'
44870
44871
44872File: gcc.info,  Node: Raw read/write Functions,  Next: Other Built-in Functions,  Prev: Directly-mapped Media Functions,  Up: FR-V Built-in Functions
44873
448746.60.14.4 Raw Read/Write Functions
44875..................................
44876
44877This sections describes built-in functions related to read and write
44878instructions to access memory.  These functions generate 'membar'
44879instructions to flush the I/O load and stores where appropriate, as
44880described in Fujitsu's manual described above.
44881
44882'unsigned char __builtin_read8 (void *DATA)'
44883'unsigned short __builtin_read16 (void *DATA)'
44884'unsigned long __builtin_read32 (void *DATA)'
44885'unsigned long long __builtin_read64 (void *DATA)'
44886
44887'void __builtin_write8 (void *DATA, unsigned char DATUM)'
44888'void __builtin_write16 (void *DATA, unsigned short DATUM)'
44889'void __builtin_write32 (void *DATA, unsigned long DATUM)'
44890'void __builtin_write64 (void *DATA, unsigned long long DATUM)'
44891
44892
44893File: gcc.info,  Node: Other Built-in Functions,  Prev: Raw read/write Functions,  Up: FR-V Built-in Functions
44894
448956.60.14.5 Other Built-in Functions
44896..................................
44897
44898This section describes built-in functions that are not named after a
44899specific FR-V instruction.
44900
44901'sw2 __IACCreadll (iacc REG)'
44902     Return the full 64-bit value of IACC0.  The REG argument is
44903     reserved for future expansion and must be 0.
44904
44905'sw1 __IACCreadl (iacc REG)'
44906     Return the value of IACC0H if REG is 0 and IACC0L if REG is 1.
44907     Other values of REG are rejected as invalid.
44908
44909'void __IACCsetll (iacc REG, sw2 X)'
44910     Set the full 64-bit value of IACC0 to X.  The REG argument is
44911     reserved for future expansion and must be 0.
44912
44913'void __IACCsetl (iacc REG, sw1 X)'
44914     Set IACC0H to X if REG is 0 and IACC0L to X if REG is 1.  Other
44915     values of REG are rejected as invalid.
44916
44917'void __data_prefetch0 (const void *X)'
44918     Use the 'dcpl' instruction to load the contents of address X into
44919     the data cache.
44920
44921'void __data_prefetch (const void *X)'
44922     Use the 'nldub' instruction to load the contents of address X into
44923     the data cache.  The instruction is issued in slot I1.
44924
44925
44926File: gcc.info,  Node: MIPS DSP Built-in Functions,  Next: MIPS Paired-Single Support,  Prev: FR-V Built-in Functions,  Up: Target Builtins
44927
449286.60.15 MIPS DSP Built-in Functions
44929-----------------------------------
44930
44931The MIPS DSP Application-Specific Extension (ASE) includes new
44932instructions that are designed to improve the performance of DSP and
44933media applications.  It provides instructions that operate on packed
449348-bit/16-bit integer data, Q7, Q15 and Q31 fractional data.
44935
44936 GCC supports MIPS DSP operations using both the generic vector
44937extensions (*note Vector Extensions::) and a collection of MIPS-specific
44938built-in functions.  Both kinds of support are enabled by the '-mdsp'
44939command-line option.
44940
44941 Revision 2 of the ASE was introduced in the second half of 2006.  This
44942revision adds extra instructions to the original ASE, but is otherwise
44943backwards-compatible with it.  You can select revision 2 using the
44944command-line option '-mdspr2'; this option implies '-mdsp'.
44945
44946 The SCOUNT and POS bits of the DSP control register are global.  The
44947WRDSP, EXTPDP, EXTPDPV and MTHLIP instructions modify the SCOUNT and POS
44948bits.  During optimization, the compiler does not delete these
44949instructions and it does not delete calls to functions containing these
44950instructions.
44951
44952 At present, GCC only provides support for operations on 32-bit vectors.
44953The vector type associated with 8-bit integer data is usually called
44954'v4i8', the vector type associated with Q7 is usually called 'v4q7', the
44955vector type associated with 16-bit integer data is usually called
44956'v2i16', and the vector type associated with Q15 is usually called
44957'v2q15'.  They can be defined in C as follows:
44958
44959     typedef signed char v4i8 __attribute__ ((vector_size(4)));
44960     typedef signed char v4q7 __attribute__ ((vector_size(4)));
44961     typedef short v2i16 __attribute__ ((vector_size(4)));
44962     typedef short v2q15 __attribute__ ((vector_size(4)));
44963
44964 'v4i8', 'v4q7', 'v2i16' and 'v2q15' values are initialized in the same
44965way as aggregates.  For example:
44966
44967     v4i8 a = {1, 2, 3, 4};
44968     v4i8 b;
44969     b = (v4i8) {5, 6, 7, 8};
44970
44971     v2q15 c = {0x0fcb, 0x3a75};
44972     v2q15 d;
44973     d = (v2q15) {0.1234 * 0x1.0p15, 0.4567 * 0x1.0p15};
44974
44975 _Note:_ The CPU's endianness determines the order in which values are
44976packed.  On little-endian targets, the first value is the least
44977significant and the last value is the most significant.  The opposite
44978order applies to big-endian targets.  For example, the code above sets
44979the lowest byte of 'a' to '1' on little-endian targets and '4' on
44980big-endian targets.
44981
44982 _Note:_ Q7, Q15 and Q31 values must be initialized with their integer
44983representation.  As shown in this example, the integer representation of
44984a Q7 value can be obtained by multiplying the fractional value by
44985'0x1.0p7'.  The equivalent for Q15 values is to multiply by '0x1.0p15'.
44986The equivalent for Q31 values is to multiply by '0x1.0p31'.
44987
44988 The table below lists the 'v4i8' and 'v2q15' operations for which
44989hardware support exists.  'a' and 'b' are 'v4i8' values, and 'c' and 'd'
44990are 'v2q15' values.
44991
44992C code                               MIPS instruction
44993'a + b'                              'addu.qb'
44994'c + d'                              'addq.ph'
44995'a - b'                              'subu.qb'
44996'c - d'                              'subq.ph'
44997
44998 The table below lists the 'v2i16' operation for which hardware support
44999exists for the DSP ASE REV 2.  'e' and 'f' are 'v2i16' values.
45000
45001C code                               MIPS instruction
45002'e * f'                              'mul.ph'
45003
45004 It is easier to describe the DSP built-in functions if we first define
45005the following types:
45006
45007     typedef int q31;
45008     typedef int i32;
45009     typedef unsigned int ui32;
45010     typedef long long a64;
45011
45012 'q31' and 'i32' are actually the same as 'int', but we use 'q31' to
45013indicate a Q31 fractional value and 'i32' to indicate a 32-bit integer
45014value.  Similarly, 'a64' is the same as 'long long', but we use 'a64' to
45015indicate values that are placed in one of the four DSP accumulators
45016('$ac0', '$ac1', '$ac2' or '$ac3').
45017
45018 Also, some built-in functions prefer or require immediate numbers as
45019parameters, because the corresponding DSP instructions accept both
45020immediate numbers and register operands, or accept immediate numbers
45021only.  The immediate parameters are listed as follows.
45022
45023     imm0_3: 0 to 3.
45024     imm0_7: 0 to 7.
45025     imm0_15: 0 to 15.
45026     imm0_31: 0 to 31.
45027     imm0_63: 0 to 63.
45028     imm0_255: 0 to 255.
45029     imm_n32_31: -32 to 31.
45030     imm_n512_511: -512 to 511.
45031
45032 The following built-in functions map directly to a particular MIPS DSP
45033instruction.  Please refer to the architecture specification for details
45034on what each instruction does.
45035
45036     v2q15 __builtin_mips_addq_ph (v2q15, v2q15)
45037     v2q15 __builtin_mips_addq_s_ph (v2q15, v2q15)
45038     q31 __builtin_mips_addq_s_w (q31, q31)
45039     v4i8 __builtin_mips_addu_qb (v4i8, v4i8)
45040     v4i8 __builtin_mips_addu_s_qb (v4i8, v4i8)
45041     v2q15 __builtin_mips_subq_ph (v2q15, v2q15)
45042     v2q15 __builtin_mips_subq_s_ph (v2q15, v2q15)
45043     q31 __builtin_mips_subq_s_w (q31, q31)
45044     v4i8 __builtin_mips_subu_qb (v4i8, v4i8)
45045     v4i8 __builtin_mips_subu_s_qb (v4i8, v4i8)
45046     i32 __builtin_mips_addsc (i32, i32)
45047     i32 __builtin_mips_addwc (i32, i32)
45048     i32 __builtin_mips_modsub (i32, i32)
45049     i32 __builtin_mips_raddu_w_qb (v4i8)
45050     v2q15 __builtin_mips_absq_s_ph (v2q15)
45051     q31 __builtin_mips_absq_s_w (q31)
45052     v4i8 __builtin_mips_precrq_qb_ph (v2q15, v2q15)
45053     v2q15 __builtin_mips_precrq_ph_w (q31, q31)
45054     v2q15 __builtin_mips_precrq_rs_ph_w (q31, q31)
45055     v4i8 __builtin_mips_precrqu_s_qb_ph (v2q15, v2q15)
45056     q31 __builtin_mips_preceq_w_phl (v2q15)
45057     q31 __builtin_mips_preceq_w_phr (v2q15)
45058     v2q15 __builtin_mips_precequ_ph_qbl (v4i8)
45059     v2q15 __builtin_mips_precequ_ph_qbr (v4i8)
45060     v2q15 __builtin_mips_precequ_ph_qbla (v4i8)
45061     v2q15 __builtin_mips_precequ_ph_qbra (v4i8)
45062     v2q15 __builtin_mips_preceu_ph_qbl (v4i8)
45063     v2q15 __builtin_mips_preceu_ph_qbr (v4i8)
45064     v2q15 __builtin_mips_preceu_ph_qbla (v4i8)
45065     v2q15 __builtin_mips_preceu_ph_qbra (v4i8)
45066     v4i8 __builtin_mips_shll_qb (v4i8, imm0_7)
45067     v4i8 __builtin_mips_shll_qb (v4i8, i32)
45068     v2q15 __builtin_mips_shll_ph (v2q15, imm0_15)
45069     v2q15 __builtin_mips_shll_ph (v2q15, i32)
45070     v2q15 __builtin_mips_shll_s_ph (v2q15, imm0_15)
45071     v2q15 __builtin_mips_shll_s_ph (v2q15, i32)
45072     q31 __builtin_mips_shll_s_w (q31, imm0_31)
45073     q31 __builtin_mips_shll_s_w (q31, i32)
45074     v4i8 __builtin_mips_shrl_qb (v4i8, imm0_7)
45075     v4i8 __builtin_mips_shrl_qb (v4i8, i32)
45076     v2q15 __builtin_mips_shra_ph (v2q15, imm0_15)
45077     v2q15 __builtin_mips_shra_ph (v2q15, i32)
45078     v2q15 __builtin_mips_shra_r_ph (v2q15, imm0_15)
45079     v2q15 __builtin_mips_shra_r_ph (v2q15, i32)
45080     q31 __builtin_mips_shra_r_w (q31, imm0_31)
45081     q31 __builtin_mips_shra_r_w (q31, i32)
45082     v2q15 __builtin_mips_muleu_s_ph_qbl (v4i8, v2q15)
45083     v2q15 __builtin_mips_muleu_s_ph_qbr (v4i8, v2q15)
45084     v2q15 __builtin_mips_mulq_rs_ph (v2q15, v2q15)
45085     q31 __builtin_mips_muleq_s_w_phl (v2q15, v2q15)
45086     q31 __builtin_mips_muleq_s_w_phr (v2q15, v2q15)
45087     a64 __builtin_mips_dpau_h_qbl (a64, v4i8, v4i8)
45088     a64 __builtin_mips_dpau_h_qbr (a64, v4i8, v4i8)
45089     a64 __builtin_mips_dpsu_h_qbl (a64, v4i8, v4i8)
45090     a64 __builtin_mips_dpsu_h_qbr (a64, v4i8, v4i8)
45091     a64 __builtin_mips_dpaq_s_w_ph (a64, v2q15, v2q15)
45092     a64 __builtin_mips_dpaq_sa_l_w (a64, q31, q31)
45093     a64 __builtin_mips_dpsq_s_w_ph (a64, v2q15, v2q15)
45094     a64 __builtin_mips_dpsq_sa_l_w (a64, q31, q31)
45095     a64 __builtin_mips_mulsaq_s_w_ph (a64, v2q15, v2q15)
45096     a64 __builtin_mips_maq_s_w_phl (a64, v2q15, v2q15)
45097     a64 __builtin_mips_maq_s_w_phr (a64, v2q15, v2q15)
45098     a64 __builtin_mips_maq_sa_w_phl (a64, v2q15, v2q15)
45099     a64 __builtin_mips_maq_sa_w_phr (a64, v2q15, v2q15)
45100     i32 __builtin_mips_bitrev (i32)
45101     i32 __builtin_mips_insv (i32, i32)
45102     v4i8 __builtin_mips_repl_qb (imm0_255)
45103     v4i8 __builtin_mips_repl_qb (i32)
45104     v2q15 __builtin_mips_repl_ph (imm_n512_511)
45105     v2q15 __builtin_mips_repl_ph (i32)
45106     void __builtin_mips_cmpu_eq_qb (v4i8, v4i8)
45107     void __builtin_mips_cmpu_lt_qb (v4i8, v4i8)
45108     void __builtin_mips_cmpu_le_qb (v4i8, v4i8)
45109     i32 __builtin_mips_cmpgu_eq_qb (v4i8, v4i8)
45110     i32 __builtin_mips_cmpgu_lt_qb (v4i8, v4i8)
45111     i32 __builtin_mips_cmpgu_le_qb (v4i8, v4i8)
45112     void __builtin_mips_cmp_eq_ph (v2q15, v2q15)
45113     void __builtin_mips_cmp_lt_ph (v2q15, v2q15)
45114     void __builtin_mips_cmp_le_ph (v2q15, v2q15)
45115     v4i8 __builtin_mips_pick_qb (v4i8, v4i8)
45116     v2q15 __builtin_mips_pick_ph (v2q15, v2q15)
45117     v2q15 __builtin_mips_packrl_ph (v2q15, v2q15)
45118     i32 __builtin_mips_extr_w (a64, imm0_31)
45119     i32 __builtin_mips_extr_w (a64, i32)
45120     i32 __builtin_mips_extr_r_w (a64, imm0_31)
45121     i32 __builtin_mips_extr_s_h (a64, i32)
45122     i32 __builtin_mips_extr_rs_w (a64, imm0_31)
45123     i32 __builtin_mips_extr_rs_w (a64, i32)
45124     i32 __builtin_mips_extr_s_h (a64, imm0_31)
45125     i32 __builtin_mips_extr_r_w (a64, i32)
45126     i32 __builtin_mips_extp (a64, imm0_31)
45127     i32 __builtin_mips_extp (a64, i32)
45128     i32 __builtin_mips_extpdp (a64, imm0_31)
45129     i32 __builtin_mips_extpdp (a64, i32)
45130     a64 __builtin_mips_shilo (a64, imm_n32_31)
45131     a64 __builtin_mips_shilo (a64, i32)
45132     a64 __builtin_mips_mthlip (a64, i32)
45133     void __builtin_mips_wrdsp (i32, imm0_63)
45134     i32 __builtin_mips_rddsp (imm0_63)
45135     i32 __builtin_mips_lbux (void *, i32)
45136     i32 __builtin_mips_lhx (void *, i32)
45137     i32 __builtin_mips_lwx (void *, i32)
45138     a64 __builtin_mips_ldx (void *, i32) [MIPS64 only]
45139     i32 __builtin_mips_bposge32 (void)
45140     a64 __builtin_mips_madd (a64, i32, i32);
45141     a64 __builtin_mips_maddu (a64, ui32, ui32);
45142     a64 __builtin_mips_msub (a64, i32, i32);
45143     a64 __builtin_mips_msubu (a64, ui32, ui32);
45144     a64 __builtin_mips_mult (i32, i32);
45145     a64 __builtin_mips_multu (ui32, ui32);
45146
45147 The following built-in functions map directly to a particular MIPS DSP
45148REV 2 instruction.  Please refer to the architecture specification for
45149details on what each instruction does.
45150
45151     v4q7 __builtin_mips_absq_s_qb (v4q7);
45152     v2i16 __builtin_mips_addu_ph (v2i16, v2i16);
45153     v2i16 __builtin_mips_addu_s_ph (v2i16, v2i16);
45154     v4i8 __builtin_mips_adduh_qb (v4i8, v4i8);
45155     v4i8 __builtin_mips_adduh_r_qb (v4i8, v4i8);
45156     i32 __builtin_mips_append (i32, i32, imm0_31);
45157     i32 __builtin_mips_balign (i32, i32, imm0_3);
45158     i32 __builtin_mips_cmpgdu_eq_qb (v4i8, v4i8);
45159     i32 __builtin_mips_cmpgdu_lt_qb (v4i8, v4i8);
45160     i32 __builtin_mips_cmpgdu_le_qb (v4i8, v4i8);
45161     a64 __builtin_mips_dpa_w_ph (a64, v2i16, v2i16);
45162     a64 __builtin_mips_dps_w_ph (a64, v2i16, v2i16);
45163     v2i16 __builtin_mips_mul_ph (v2i16, v2i16);
45164     v2i16 __builtin_mips_mul_s_ph (v2i16, v2i16);
45165     q31 __builtin_mips_mulq_rs_w (q31, q31);
45166     v2q15 __builtin_mips_mulq_s_ph (v2q15, v2q15);
45167     q31 __builtin_mips_mulq_s_w (q31, q31);
45168     a64 __builtin_mips_mulsa_w_ph (a64, v2i16, v2i16);
45169     v4i8 __builtin_mips_precr_qb_ph (v2i16, v2i16);
45170     v2i16 __builtin_mips_precr_sra_ph_w (i32, i32, imm0_31);
45171     v2i16 __builtin_mips_precr_sra_r_ph_w (i32, i32, imm0_31);
45172     i32 __builtin_mips_prepend (i32, i32, imm0_31);
45173     v4i8 __builtin_mips_shra_qb (v4i8, imm0_7);
45174     v4i8 __builtin_mips_shra_r_qb (v4i8, imm0_7);
45175     v4i8 __builtin_mips_shra_qb (v4i8, i32);
45176     v4i8 __builtin_mips_shra_r_qb (v4i8, i32);
45177     v2i16 __builtin_mips_shrl_ph (v2i16, imm0_15);
45178     v2i16 __builtin_mips_shrl_ph (v2i16, i32);
45179     v2i16 __builtin_mips_subu_ph (v2i16, v2i16);
45180     v2i16 __builtin_mips_subu_s_ph (v2i16, v2i16);
45181     v4i8 __builtin_mips_subuh_qb (v4i8, v4i8);
45182     v4i8 __builtin_mips_subuh_r_qb (v4i8, v4i8);
45183     v2q15 __builtin_mips_addqh_ph (v2q15, v2q15);
45184     v2q15 __builtin_mips_addqh_r_ph (v2q15, v2q15);
45185     q31 __builtin_mips_addqh_w (q31, q31);
45186     q31 __builtin_mips_addqh_r_w (q31, q31);
45187     v2q15 __builtin_mips_subqh_ph (v2q15, v2q15);
45188     v2q15 __builtin_mips_subqh_r_ph (v2q15, v2q15);
45189     q31 __builtin_mips_subqh_w (q31, q31);
45190     q31 __builtin_mips_subqh_r_w (q31, q31);
45191     a64 __builtin_mips_dpax_w_ph (a64, v2i16, v2i16);
45192     a64 __builtin_mips_dpsx_w_ph (a64, v2i16, v2i16);
45193     a64 __builtin_mips_dpaqx_s_w_ph (a64, v2q15, v2q15);
45194     a64 __builtin_mips_dpaqx_sa_w_ph (a64, v2q15, v2q15);
45195     a64 __builtin_mips_dpsqx_s_w_ph (a64, v2q15, v2q15);
45196     a64 __builtin_mips_dpsqx_sa_w_ph (a64, v2q15, v2q15);
45197
45198
45199File: gcc.info,  Node: MIPS Paired-Single Support,  Next: MIPS Loongson Built-in Functions,  Prev: MIPS DSP Built-in Functions,  Up: Target Builtins
45200
452016.60.16 MIPS Paired-Single Support
45202----------------------------------
45203
45204The MIPS64 architecture includes a number of instructions that operate
45205on pairs of single-precision floating-point values.  Each pair is packed
45206into a 64-bit floating-point register, with one element being designated
45207the "upper half" and the other being designated the "lower half".
45208
45209 GCC supports paired-single operations using both the generic vector
45210extensions (*note Vector Extensions::) and a collection of MIPS-specific
45211built-in functions.  Both kinds of support are enabled by the
45212'-mpaired-single' command-line option.
45213
45214 The vector type associated with paired-single values is usually called
45215'v2sf'.  It can be defined in C as follows:
45216
45217     typedef float v2sf __attribute__ ((vector_size (8)));
45218
45219 'v2sf' values are initialized in the same way as aggregates.  For
45220example:
45221
45222     v2sf a = {1.5, 9.1};
45223     v2sf b;
45224     float e, f;
45225     b = (v2sf) {e, f};
45226
45227 _Note:_ The CPU's endianness determines which value is stored in the
45228upper half of a register and which value is stored in the lower half.
45229On little-endian targets, the first value is the lower one and the
45230second value is the upper one.  The opposite order applies to big-endian
45231targets.  For example, the code above sets the lower half of 'a' to
45232'1.5' on little-endian targets and '9.1' on big-endian targets.
45233
45234
45235File: gcc.info,  Node: MIPS Loongson Built-in Functions,  Next: MIPS SIMD Architecture (MSA) Support,  Prev: MIPS Paired-Single Support,  Up: Target Builtins
45236
452376.60.17 MIPS Loongson Built-in Functions
45238----------------------------------------
45239
45240GCC provides intrinsics to access the SIMD instructions provided by the
45241ST Microelectronics Loongson-2E and -2F processors.  These intrinsics,
45242available after inclusion of the 'loongson.h' header file, operate on
45243the following 64-bit vector types:
45244
45245   * 'uint8x8_t', a vector of eight unsigned 8-bit integers;
45246   * 'uint16x4_t', a vector of four unsigned 16-bit integers;
45247   * 'uint32x2_t', a vector of two unsigned 32-bit integers;
45248   * 'int8x8_t', a vector of eight signed 8-bit integers;
45249   * 'int16x4_t', a vector of four signed 16-bit integers;
45250   * 'int32x2_t', a vector of two signed 32-bit integers.
45251
45252 The intrinsics provided are listed below; each is named after the
45253machine instruction to which it corresponds, with suffixes added as
45254appropriate to distinguish intrinsics that expand to the same machine
45255instruction yet have different argument types.  Refer to the
45256architecture documentation for a description of the functionality of
45257each instruction.
45258
45259     int16x4_t packsswh (int32x2_t s, int32x2_t t);
45260     int8x8_t packsshb (int16x4_t s, int16x4_t t);
45261     uint8x8_t packushb (uint16x4_t s, uint16x4_t t);
45262     uint32x2_t paddw_u (uint32x2_t s, uint32x2_t t);
45263     uint16x4_t paddh_u (uint16x4_t s, uint16x4_t t);
45264     uint8x8_t paddb_u (uint8x8_t s, uint8x8_t t);
45265     int32x2_t paddw_s (int32x2_t s, int32x2_t t);
45266     int16x4_t paddh_s (int16x4_t s, int16x4_t t);
45267     int8x8_t paddb_s (int8x8_t s, int8x8_t t);
45268     uint64_t paddd_u (uint64_t s, uint64_t t);
45269     int64_t paddd_s (int64_t s, int64_t t);
45270     int16x4_t paddsh (int16x4_t s, int16x4_t t);
45271     int8x8_t paddsb (int8x8_t s, int8x8_t t);
45272     uint16x4_t paddush (uint16x4_t s, uint16x4_t t);
45273     uint8x8_t paddusb (uint8x8_t s, uint8x8_t t);
45274     uint64_t pandn_ud (uint64_t s, uint64_t t);
45275     uint32x2_t pandn_uw (uint32x2_t s, uint32x2_t t);
45276     uint16x4_t pandn_uh (uint16x4_t s, uint16x4_t t);
45277     uint8x8_t pandn_ub (uint8x8_t s, uint8x8_t t);
45278     int64_t pandn_sd (int64_t s, int64_t t);
45279     int32x2_t pandn_sw (int32x2_t s, int32x2_t t);
45280     int16x4_t pandn_sh (int16x4_t s, int16x4_t t);
45281     int8x8_t pandn_sb (int8x8_t s, int8x8_t t);
45282     uint16x4_t pavgh (uint16x4_t s, uint16x4_t t);
45283     uint8x8_t pavgb (uint8x8_t s, uint8x8_t t);
45284     uint32x2_t pcmpeqw_u (uint32x2_t s, uint32x2_t t);
45285     uint16x4_t pcmpeqh_u (uint16x4_t s, uint16x4_t t);
45286     uint8x8_t pcmpeqb_u (uint8x8_t s, uint8x8_t t);
45287     int32x2_t pcmpeqw_s (int32x2_t s, int32x2_t t);
45288     int16x4_t pcmpeqh_s (int16x4_t s, int16x4_t t);
45289     int8x8_t pcmpeqb_s (int8x8_t s, int8x8_t t);
45290     uint32x2_t pcmpgtw_u (uint32x2_t s, uint32x2_t t);
45291     uint16x4_t pcmpgth_u (uint16x4_t s, uint16x4_t t);
45292     uint8x8_t pcmpgtb_u (uint8x8_t s, uint8x8_t t);
45293     int32x2_t pcmpgtw_s (int32x2_t s, int32x2_t t);
45294     int16x4_t pcmpgth_s (int16x4_t s, int16x4_t t);
45295     int8x8_t pcmpgtb_s (int8x8_t s, int8x8_t t);
45296     uint16x4_t pextrh_u (uint16x4_t s, int field);
45297     int16x4_t pextrh_s (int16x4_t s, int field);
45298     uint16x4_t pinsrh_0_u (uint16x4_t s, uint16x4_t t);
45299     uint16x4_t pinsrh_1_u (uint16x4_t s, uint16x4_t t);
45300     uint16x4_t pinsrh_2_u (uint16x4_t s, uint16x4_t t);
45301     uint16x4_t pinsrh_3_u (uint16x4_t s, uint16x4_t t);
45302     int16x4_t pinsrh_0_s (int16x4_t s, int16x4_t t);
45303     int16x4_t pinsrh_1_s (int16x4_t s, int16x4_t t);
45304     int16x4_t pinsrh_2_s (int16x4_t s, int16x4_t t);
45305     int16x4_t pinsrh_3_s (int16x4_t s, int16x4_t t);
45306     int32x2_t pmaddhw (int16x4_t s, int16x4_t t);
45307     int16x4_t pmaxsh (int16x4_t s, int16x4_t t);
45308     uint8x8_t pmaxub (uint8x8_t s, uint8x8_t t);
45309     int16x4_t pminsh (int16x4_t s, int16x4_t t);
45310     uint8x8_t pminub (uint8x8_t s, uint8x8_t t);
45311     uint8x8_t pmovmskb_u (uint8x8_t s);
45312     int8x8_t pmovmskb_s (int8x8_t s);
45313     uint16x4_t pmulhuh (uint16x4_t s, uint16x4_t t);
45314     int16x4_t pmulhh (int16x4_t s, int16x4_t t);
45315     int16x4_t pmullh (int16x4_t s, int16x4_t t);
45316     int64_t pmuluw (uint32x2_t s, uint32x2_t t);
45317     uint8x8_t pasubub (uint8x8_t s, uint8x8_t t);
45318     uint16x4_t biadd (uint8x8_t s);
45319     uint16x4_t psadbh (uint8x8_t s, uint8x8_t t);
45320     uint16x4_t pshufh_u (uint16x4_t dest, uint16x4_t s, uint8_t order);
45321     int16x4_t pshufh_s (int16x4_t dest, int16x4_t s, uint8_t order);
45322     uint16x4_t psllh_u (uint16x4_t s, uint8_t amount);
45323     int16x4_t psllh_s (int16x4_t s, uint8_t amount);
45324     uint32x2_t psllw_u (uint32x2_t s, uint8_t amount);
45325     int32x2_t psllw_s (int32x2_t s, uint8_t amount);
45326     uint16x4_t psrlh_u (uint16x4_t s, uint8_t amount);
45327     int16x4_t psrlh_s (int16x4_t s, uint8_t amount);
45328     uint32x2_t psrlw_u (uint32x2_t s, uint8_t amount);
45329     int32x2_t psrlw_s (int32x2_t s, uint8_t amount);
45330     uint16x4_t psrah_u (uint16x4_t s, uint8_t amount);
45331     int16x4_t psrah_s (int16x4_t s, uint8_t amount);
45332     uint32x2_t psraw_u (uint32x2_t s, uint8_t amount);
45333     int32x2_t psraw_s (int32x2_t s, uint8_t amount);
45334     uint32x2_t psubw_u (uint32x2_t s, uint32x2_t t);
45335     uint16x4_t psubh_u (uint16x4_t s, uint16x4_t t);
45336     uint8x8_t psubb_u (uint8x8_t s, uint8x8_t t);
45337     int32x2_t psubw_s (int32x2_t s, int32x2_t t);
45338     int16x4_t psubh_s (int16x4_t s, int16x4_t t);
45339     int8x8_t psubb_s (int8x8_t s, int8x8_t t);
45340     uint64_t psubd_u (uint64_t s, uint64_t t);
45341     int64_t psubd_s (int64_t s, int64_t t);
45342     int16x4_t psubsh (int16x4_t s, int16x4_t t);
45343     int8x8_t psubsb (int8x8_t s, int8x8_t t);
45344     uint16x4_t psubush (uint16x4_t s, uint16x4_t t);
45345     uint8x8_t psubusb (uint8x8_t s, uint8x8_t t);
45346     uint32x2_t punpckhwd_u (uint32x2_t s, uint32x2_t t);
45347     uint16x4_t punpckhhw_u (uint16x4_t s, uint16x4_t t);
45348     uint8x8_t punpckhbh_u (uint8x8_t s, uint8x8_t t);
45349     int32x2_t punpckhwd_s (int32x2_t s, int32x2_t t);
45350     int16x4_t punpckhhw_s (int16x4_t s, int16x4_t t);
45351     int8x8_t punpckhbh_s (int8x8_t s, int8x8_t t);
45352     uint32x2_t punpcklwd_u (uint32x2_t s, uint32x2_t t);
45353     uint16x4_t punpcklhw_u (uint16x4_t s, uint16x4_t t);
45354     uint8x8_t punpcklbh_u (uint8x8_t s, uint8x8_t t);
45355     int32x2_t punpcklwd_s (int32x2_t s, int32x2_t t);
45356     int16x4_t punpcklhw_s (int16x4_t s, int16x4_t t);
45357     int8x8_t punpcklbh_s (int8x8_t s, int8x8_t t);
45358
45359* Menu:
45360
45361* Paired-Single Arithmetic::
45362* Paired-Single Built-in Functions::
45363* MIPS-3D Built-in Functions::
45364
45365
45366File: gcc.info,  Node: Paired-Single Arithmetic,  Next: Paired-Single Built-in Functions,  Up: MIPS Loongson Built-in Functions
45367
453686.60.17.1 Paired-Single Arithmetic
45369..................................
45370
45371The table below lists the 'v2sf' operations for which hardware support
45372exists.  'a', 'b' and 'c' are 'v2sf' values and 'x' is an integral
45373value.
45374
45375C code                               MIPS instruction
45376'a + b'                              'add.ps'
45377'a - b'                              'sub.ps'
45378'-a'                                 'neg.ps'
45379'a * b'                              'mul.ps'
45380'a * b + c'                          'madd.ps'
45381'a * b - c'                          'msub.ps'
45382'-(a * b + c)'                       'nmadd.ps'
45383'-(a * b - c)'                       'nmsub.ps'
45384'x ? a : b'                          'movn.ps'/'movz.ps'
45385
45386 Note that the multiply-accumulate instructions can be disabled using
45387the command-line option '-mno-fused-madd'.
45388
45389
45390File: gcc.info,  Node: Paired-Single Built-in Functions,  Next: MIPS-3D Built-in Functions,  Prev: Paired-Single Arithmetic,  Up: MIPS Loongson Built-in Functions
45391
453926.60.17.2 Paired-Single Built-in Functions
45393..........................................
45394
45395The following paired-single functions map directly to a particular MIPS
45396instruction.  Please refer to the architecture specification for details
45397on what each instruction does.
45398
45399'v2sf __builtin_mips_pll_ps (v2sf, v2sf)'
45400     Pair lower lower ('pll.ps').
45401
45402'v2sf __builtin_mips_pul_ps (v2sf, v2sf)'
45403     Pair upper lower ('pul.ps').
45404
45405'v2sf __builtin_mips_plu_ps (v2sf, v2sf)'
45406     Pair lower upper ('plu.ps').
45407
45408'v2sf __builtin_mips_puu_ps (v2sf, v2sf)'
45409     Pair upper upper ('puu.ps').
45410
45411'v2sf __builtin_mips_cvt_ps_s (float, float)'
45412     Convert pair to paired single ('cvt.ps.s').
45413
45414'float __builtin_mips_cvt_s_pl (v2sf)'
45415     Convert pair lower to single ('cvt.s.pl').
45416
45417'float __builtin_mips_cvt_s_pu (v2sf)'
45418     Convert pair upper to single ('cvt.s.pu').
45419
45420'v2sf __builtin_mips_abs_ps (v2sf)'
45421     Absolute value ('abs.ps').
45422
45423'v2sf __builtin_mips_alnv_ps (v2sf, v2sf, int)'
45424     Align variable ('alnv.ps').
45425
45426     _Note:_ The value of the third parameter must be 0 or 4 modulo 8,
45427     otherwise the result is unpredictable.  Please read the instruction
45428     description for details.
45429
45430 The following multi-instruction functions are also available.  In each
45431case, COND can be any of the 16 floating-point conditions: 'f', 'un',
45432'eq', 'ueq', 'olt', 'ult', 'ole', 'ule', 'sf', 'ngle', 'seq', 'ngl',
45433'lt', 'nge', 'le' or 'ngt'.
45434
45435'v2sf __builtin_mips_movt_c_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)'
45436'v2sf __builtin_mips_movf_c_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)'
45437     Conditional move based on floating-point comparison ('c.COND.ps',
45438     'movt.ps'/'movf.ps').
45439
45440     The 'movt' functions return the value X computed by:
45441
45442          c.COND.ps CC,A,B
45443          mov.ps X,C
45444          movt.ps X,D,CC
45445
45446     The 'movf' functions are similar but use 'movf.ps' instead of
45447     'movt.ps'.
45448
45449'int __builtin_mips_upper_c_COND_ps (v2sf A, v2sf B)'
45450'int __builtin_mips_lower_c_COND_ps (v2sf A, v2sf B)'
45451     Comparison of two paired-single values ('c.COND.ps',
45452     'bc1t'/'bc1f').
45453
45454     These functions compare A and B using 'c.COND.ps' and return either
45455     the upper or lower half of the result.  For example:
45456
45457          v2sf a, b;
45458          if (__builtin_mips_upper_c_eq_ps (a, b))
45459            upper_halves_are_equal ();
45460          else
45461            upper_halves_are_unequal ();
45462
45463          if (__builtin_mips_lower_c_eq_ps (a, b))
45464            lower_halves_are_equal ();
45465          else
45466            lower_halves_are_unequal ();
45467
45468
45469File: gcc.info,  Node: MIPS-3D Built-in Functions,  Prev: Paired-Single Built-in Functions,  Up: MIPS Loongson Built-in Functions
45470
454716.60.17.3 MIPS-3D Built-in Functions
45472....................................
45473
45474The MIPS-3D Application-Specific Extension (ASE) includes additional
45475paired-single instructions that are designed to improve the performance
45476of 3D graphics operations.  Support for these instructions is controlled
45477by the '-mips3d' command-line option.
45478
45479 The functions listed below map directly to a particular MIPS-3D
45480instruction.  Please refer to the architecture specification for more
45481details on what each instruction does.
45482
45483'v2sf __builtin_mips_addr_ps (v2sf, v2sf)'
45484     Reduction add ('addr.ps').
45485
45486'v2sf __builtin_mips_mulr_ps (v2sf, v2sf)'
45487     Reduction multiply ('mulr.ps').
45488
45489'v2sf __builtin_mips_cvt_pw_ps (v2sf)'
45490     Convert paired single to paired word ('cvt.pw.ps').
45491
45492'v2sf __builtin_mips_cvt_ps_pw (v2sf)'
45493     Convert paired word to paired single ('cvt.ps.pw').
45494
45495'float __builtin_mips_recip1_s (float)'
45496'double __builtin_mips_recip1_d (double)'
45497'v2sf __builtin_mips_recip1_ps (v2sf)'
45498     Reduced-precision reciprocal (sequence step 1) ('recip1.FMT').
45499
45500'float __builtin_mips_recip2_s (float, float)'
45501'double __builtin_mips_recip2_d (double, double)'
45502'v2sf __builtin_mips_recip2_ps (v2sf, v2sf)'
45503     Reduced-precision reciprocal (sequence step 2) ('recip2.FMT').
45504
45505'float __builtin_mips_rsqrt1_s (float)'
45506'double __builtin_mips_rsqrt1_d (double)'
45507'v2sf __builtin_mips_rsqrt1_ps (v2sf)'
45508     Reduced-precision reciprocal square root (sequence step 1)
45509     ('rsqrt1.FMT').
45510
45511'float __builtin_mips_rsqrt2_s (float, float)'
45512'double __builtin_mips_rsqrt2_d (double, double)'
45513'v2sf __builtin_mips_rsqrt2_ps (v2sf, v2sf)'
45514     Reduced-precision reciprocal square root (sequence step 2)
45515     ('rsqrt2.FMT').
45516
45517 The following multi-instruction functions are also available.  In each
45518case, COND can be any of the 16 floating-point conditions: 'f', 'un',
45519'eq', 'ueq', 'olt', 'ult', 'ole', 'ule', 'sf', 'ngle', 'seq', 'ngl',
45520'lt', 'nge', 'le' or 'ngt'.
45521
45522'int __builtin_mips_cabs_COND_s (float A, float B)'
45523'int __builtin_mips_cabs_COND_d (double A, double B)'
45524     Absolute comparison of two scalar values ('cabs.COND.FMT',
45525     'bc1t'/'bc1f').
45526
45527     These functions compare A and B using 'cabs.COND.s' or
45528     'cabs.COND.d' and return the result as a boolean value.  For
45529     example:
45530
45531          float a, b;
45532          if (__builtin_mips_cabs_eq_s (a, b))
45533            true ();
45534          else
45535            false ();
45536
45537'int __builtin_mips_upper_cabs_COND_ps (v2sf A, v2sf B)'
45538'int __builtin_mips_lower_cabs_COND_ps (v2sf A, v2sf B)'
45539     Absolute comparison of two paired-single values ('cabs.COND.ps',
45540     'bc1t'/'bc1f').
45541
45542     These functions compare A and B using 'cabs.COND.ps' and return
45543     either the upper or lower half of the result.  For example:
45544
45545          v2sf a, b;
45546          if (__builtin_mips_upper_cabs_eq_ps (a, b))
45547            upper_halves_are_equal ();
45548          else
45549            upper_halves_are_unequal ();
45550
45551          if (__builtin_mips_lower_cabs_eq_ps (a, b))
45552            lower_halves_are_equal ();
45553          else
45554            lower_halves_are_unequal ();
45555
45556'v2sf __builtin_mips_movt_cabs_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)'
45557'v2sf __builtin_mips_movf_cabs_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)'
45558     Conditional move based on absolute comparison ('cabs.COND.ps',
45559     'movt.ps'/'movf.ps').
45560
45561     The 'movt' functions return the value X computed by:
45562
45563          cabs.COND.ps CC,A,B
45564          mov.ps X,C
45565          movt.ps X,D,CC
45566
45567     The 'movf' functions are similar but use 'movf.ps' instead of
45568     'movt.ps'.
45569
45570'int __builtin_mips_any_c_COND_ps (v2sf A, v2sf B)'
45571'int __builtin_mips_all_c_COND_ps (v2sf A, v2sf B)'
45572'int __builtin_mips_any_cabs_COND_ps (v2sf A, v2sf B)'
45573'int __builtin_mips_all_cabs_COND_ps (v2sf A, v2sf B)'
45574     Comparison of two paired-single values ('c.COND.ps'/'cabs.COND.ps',
45575     'bc1any2t'/'bc1any2f').
45576
45577     These functions compare A and B using 'c.COND.ps' or
45578     'cabs.COND.ps'.  The 'any' forms return 'true' if either result is
45579     'true' and the 'all' forms return 'true' if both results are
45580     'true'.  For example:
45581
45582          v2sf a, b;
45583          if (__builtin_mips_any_c_eq_ps (a, b))
45584            one_is_true ();
45585          else
45586            both_are_false ();
45587
45588          if (__builtin_mips_all_c_eq_ps (a, b))
45589            both_are_true ();
45590          else
45591            one_is_false ();
45592
45593'int __builtin_mips_any_c_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)'
45594'int __builtin_mips_all_c_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)'
45595'int __builtin_mips_any_cabs_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)'
45596'int __builtin_mips_all_cabs_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)'
45597     Comparison of four paired-single values
45598     ('c.COND.ps'/'cabs.COND.ps', 'bc1any4t'/'bc1any4f').
45599
45600     These functions use 'c.COND.ps' or 'cabs.COND.ps' to compare A with
45601     B and to compare C with D.  The 'any' forms return 'true' if any of
45602     the four results are 'true' and the 'all' forms return 'true' if
45603     all four results are 'true'.  For example:
45604
45605          v2sf a, b, c, d;
45606          if (__builtin_mips_any_c_eq_4s (a, b, c, d))
45607            some_are_true ();
45608          else
45609            all_are_false ();
45610
45611          if (__builtin_mips_all_c_eq_4s (a, b, c, d))
45612            all_are_true ();
45613          else
45614            some_are_false ();
45615
45616
45617File: gcc.info,  Node: MIPS SIMD Architecture (MSA) Support,  Next: Other MIPS Built-in Functions,  Prev: MIPS Loongson Built-in Functions,  Up: Target Builtins
45618
456196.60.18 MIPS SIMD Architecture (MSA) Support
45620--------------------------------------------
45621
45622* Menu:
45623
45624* MIPS SIMD Architecture Built-in Functions::
45625
45626GCC provides intrinsics to access the SIMD instructions provided by the
45627MSA MIPS SIMD Architecture.  The interface is made available by
45628including '<msa.h>' and using '-mmsa -mhard-float -mfp64 -mnan=2008'.
45629For each '__builtin_msa_*', there is a shortened name of the intrinsic,
45630'__msa_*'.
45631
45632 MSA implements 128-bit wide vector registers, operating on 8-, 16-, 32-
45633and 64-bit integer, 16- and 32-bit fixed-point, or 32- and 64-bit
45634floating point data elements.  The following vectors typedefs are
45635included in 'msa.h':
45636   * 'v16i8', a vector of sixteen signed 8-bit integers;
45637   * 'v16u8', a vector of sixteen unsigned 8-bit integers;
45638   * 'v8i16', a vector of eight signed 16-bit integers;
45639   * 'v8u16', a vector of eight unsigned 16-bit integers;
45640   * 'v4i32', a vector of four signed 32-bit integers;
45641   * 'v4u32', a vector of four unsigned 32-bit integers;
45642   * 'v2i64', a vector of two signed 64-bit integers;
45643   * 'v2u64', a vector of two unsigned 64-bit integers;
45644   * 'v4f32', a vector of four 32-bit floats;
45645   * 'v2f64', a vector of two 64-bit doubles.
45646
45647 Instructions and corresponding built-ins may have additional
45648restrictions and/or input/output values manipulated:
45649   * 'imm0_1', an integer literal in range 0 to 1;
45650   * 'imm0_3', an integer literal in range 0 to 3;
45651   * 'imm0_7', an integer literal in range 0 to 7;
45652   * 'imm0_15', an integer literal in range 0 to 15;
45653   * 'imm0_31', an integer literal in range 0 to 31;
45654   * 'imm0_63', an integer literal in range 0 to 63;
45655   * 'imm0_255', an integer literal in range 0 to 255;
45656   * 'imm_n16_15', an integer literal in range -16 to 15;
45657   * 'imm_n512_511', an integer literal in range -512 to 511;
45658   * 'imm_n1024_1022', an integer literal in range -512 to 511 left
45659     shifted by 1 bit, i.e., -1024, -1022, ..., 1020, 1022;
45660   * 'imm_n2048_2044', an integer literal in range -512 to 511 left
45661     shifted by 2 bits, i.e., -2048, -2044, ..., 2040, 2044;
45662   * 'imm_n4096_4088', an integer literal in range -512 to 511 left
45663     shifted by 3 bits, i.e., -4096, -4088, ..., 4080, 4088;
45664   * 'imm1_4', an integer literal in range 1 to 4;
45665   * 'i32, i64, u32, u64, f32, f64', defined as follows:
45666
45667     {
45668     typedef int i32;
45669     #if __LONG_MAX__ == __LONG_LONG_MAX__
45670     typedef long i64;
45671     #else
45672     typedef long long i64;
45673     #endif
45674
45675     typedef unsigned int u32;
45676     #if __LONG_MAX__ == __LONG_LONG_MAX__
45677     typedef unsigned long u64;
45678     #else
45679     typedef unsigned long long u64;
45680     #endif
45681
45682     typedef double f64;
45683     typedef float f32;
45684     }
45685
45686
45687File: gcc.info,  Node: MIPS SIMD Architecture Built-in Functions,  Up: MIPS SIMD Architecture (MSA) Support
45688
456896.60.18.1 MIPS SIMD Architecture Built-in Functions
45690...................................................
45691
45692The intrinsics provided are listed below; each is named after the
45693machine instruction.
45694
45695     v16i8 __builtin_msa_add_a_b (v16i8, v16i8);
45696     v8i16 __builtin_msa_add_a_h (v8i16, v8i16);
45697     v4i32 __builtin_msa_add_a_w (v4i32, v4i32);
45698     v2i64 __builtin_msa_add_a_d (v2i64, v2i64);
45699
45700     v16i8 __builtin_msa_adds_a_b (v16i8, v16i8);
45701     v8i16 __builtin_msa_adds_a_h (v8i16, v8i16);
45702     v4i32 __builtin_msa_adds_a_w (v4i32, v4i32);
45703     v2i64 __builtin_msa_adds_a_d (v2i64, v2i64);
45704
45705     v16i8 __builtin_msa_adds_s_b (v16i8, v16i8);
45706     v8i16 __builtin_msa_adds_s_h (v8i16, v8i16);
45707     v4i32 __builtin_msa_adds_s_w (v4i32, v4i32);
45708     v2i64 __builtin_msa_adds_s_d (v2i64, v2i64);
45709
45710     v16u8 __builtin_msa_adds_u_b (v16u8, v16u8);
45711     v8u16 __builtin_msa_adds_u_h (v8u16, v8u16);
45712     v4u32 __builtin_msa_adds_u_w (v4u32, v4u32);
45713     v2u64 __builtin_msa_adds_u_d (v2u64, v2u64);
45714
45715     v16i8 __builtin_msa_addv_b (v16i8, v16i8);
45716     v8i16 __builtin_msa_addv_h (v8i16, v8i16);
45717     v4i32 __builtin_msa_addv_w (v4i32, v4i32);
45718     v2i64 __builtin_msa_addv_d (v2i64, v2i64);
45719
45720     v16i8 __builtin_msa_addvi_b (v16i8, imm0_31);
45721     v8i16 __builtin_msa_addvi_h (v8i16, imm0_31);
45722     v4i32 __builtin_msa_addvi_w (v4i32, imm0_31);
45723     v2i64 __builtin_msa_addvi_d (v2i64, imm0_31);
45724
45725     v16u8 __builtin_msa_and_v (v16u8, v16u8);
45726
45727     v16u8 __builtin_msa_andi_b (v16u8, imm0_255);
45728
45729     v16i8 __builtin_msa_asub_s_b (v16i8, v16i8);
45730     v8i16 __builtin_msa_asub_s_h (v8i16, v8i16);
45731     v4i32 __builtin_msa_asub_s_w (v4i32, v4i32);
45732     v2i64 __builtin_msa_asub_s_d (v2i64, v2i64);
45733
45734     v16u8 __builtin_msa_asub_u_b (v16u8, v16u8);
45735     v8u16 __builtin_msa_asub_u_h (v8u16, v8u16);
45736     v4u32 __builtin_msa_asub_u_w (v4u32, v4u32);
45737     v2u64 __builtin_msa_asub_u_d (v2u64, v2u64);
45738
45739     v16i8 __builtin_msa_ave_s_b (v16i8, v16i8);
45740     v8i16 __builtin_msa_ave_s_h (v8i16, v8i16);
45741     v4i32 __builtin_msa_ave_s_w (v4i32, v4i32);
45742     v2i64 __builtin_msa_ave_s_d (v2i64, v2i64);
45743
45744     v16u8 __builtin_msa_ave_u_b (v16u8, v16u8);
45745     v8u16 __builtin_msa_ave_u_h (v8u16, v8u16);
45746     v4u32 __builtin_msa_ave_u_w (v4u32, v4u32);
45747     v2u64 __builtin_msa_ave_u_d (v2u64, v2u64);
45748
45749     v16i8 __builtin_msa_aver_s_b (v16i8, v16i8);
45750     v8i16 __builtin_msa_aver_s_h (v8i16, v8i16);
45751     v4i32 __builtin_msa_aver_s_w (v4i32, v4i32);
45752     v2i64 __builtin_msa_aver_s_d (v2i64, v2i64);
45753
45754     v16u8 __builtin_msa_aver_u_b (v16u8, v16u8);
45755     v8u16 __builtin_msa_aver_u_h (v8u16, v8u16);
45756     v4u32 __builtin_msa_aver_u_w (v4u32, v4u32);
45757     v2u64 __builtin_msa_aver_u_d (v2u64, v2u64);
45758
45759     v16u8 __builtin_msa_bclr_b (v16u8, v16u8);
45760     v8u16 __builtin_msa_bclr_h (v8u16, v8u16);
45761     v4u32 __builtin_msa_bclr_w (v4u32, v4u32);
45762     v2u64 __builtin_msa_bclr_d (v2u64, v2u64);
45763
45764     v16u8 __builtin_msa_bclri_b (v16u8, imm0_7);
45765     v8u16 __builtin_msa_bclri_h (v8u16, imm0_15);
45766     v4u32 __builtin_msa_bclri_w (v4u32, imm0_31);
45767     v2u64 __builtin_msa_bclri_d (v2u64, imm0_63);
45768
45769     v16u8 __builtin_msa_binsl_b (v16u8, v16u8, v16u8);
45770     v8u16 __builtin_msa_binsl_h (v8u16, v8u16, v8u16);
45771     v4u32 __builtin_msa_binsl_w (v4u32, v4u32, v4u32);
45772     v2u64 __builtin_msa_binsl_d (v2u64, v2u64, v2u64);
45773
45774     v16u8 __builtin_msa_binsli_b (v16u8, v16u8, imm0_7);
45775     v8u16 __builtin_msa_binsli_h (v8u16, v8u16, imm0_15);
45776     v4u32 __builtin_msa_binsli_w (v4u32, v4u32, imm0_31);
45777     v2u64 __builtin_msa_binsli_d (v2u64, v2u64, imm0_63);
45778
45779     v16u8 __builtin_msa_binsr_b (v16u8, v16u8, v16u8);
45780     v8u16 __builtin_msa_binsr_h (v8u16, v8u16, v8u16);
45781     v4u32 __builtin_msa_binsr_w (v4u32, v4u32, v4u32);
45782     v2u64 __builtin_msa_binsr_d (v2u64, v2u64, v2u64);
45783
45784     v16u8 __builtin_msa_binsri_b (v16u8, v16u8, imm0_7);
45785     v8u16 __builtin_msa_binsri_h (v8u16, v8u16, imm0_15);
45786     v4u32 __builtin_msa_binsri_w (v4u32, v4u32, imm0_31);
45787     v2u64 __builtin_msa_binsri_d (v2u64, v2u64, imm0_63);
45788
45789     v16u8 __builtin_msa_bmnz_v (v16u8, v16u8, v16u8);
45790
45791     v16u8 __builtin_msa_bmnzi_b (v16u8, v16u8, imm0_255);
45792
45793     v16u8 __builtin_msa_bmz_v (v16u8, v16u8, v16u8);
45794
45795     v16u8 __builtin_msa_bmzi_b (v16u8, v16u8, imm0_255);
45796
45797     v16u8 __builtin_msa_bneg_b (v16u8, v16u8);
45798     v8u16 __builtin_msa_bneg_h (v8u16, v8u16);
45799     v4u32 __builtin_msa_bneg_w (v4u32, v4u32);
45800     v2u64 __builtin_msa_bneg_d (v2u64, v2u64);
45801
45802     v16u8 __builtin_msa_bnegi_b (v16u8, imm0_7);
45803     v8u16 __builtin_msa_bnegi_h (v8u16, imm0_15);
45804     v4u32 __builtin_msa_bnegi_w (v4u32, imm0_31);
45805     v2u64 __builtin_msa_bnegi_d (v2u64, imm0_63);
45806
45807     i32 __builtin_msa_bnz_b (v16u8);
45808     i32 __builtin_msa_bnz_h (v8u16);
45809     i32 __builtin_msa_bnz_w (v4u32);
45810     i32 __builtin_msa_bnz_d (v2u64);
45811
45812     i32 __builtin_msa_bnz_v (v16u8);
45813
45814     v16u8 __builtin_msa_bsel_v (v16u8, v16u8, v16u8);
45815
45816     v16u8 __builtin_msa_bseli_b (v16u8, v16u8, imm0_255);
45817
45818     v16u8 __builtin_msa_bset_b (v16u8, v16u8);
45819     v8u16 __builtin_msa_bset_h (v8u16, v8u16);
45820     v4u32 __builtin_msa_bset_w (v4u32, v4u32);
45821     v2u64 __builtin_msa_bset_d (v2u64, v2u64);
45822
45823     v16u8 __builtin_msa_bseti_b (v16u8, imm0_7);
45824     v8u16 __builtin_msa_bseti_h (v8u16, imm0_15);
45825     v4u32 __builtin_msa_bseti_w (v4u32, imm0_31);
45826     v2u64 __builtin_msa_bseti_d (v2u64, imm0_63);
45827
45828     i32 __builtin_msa_bz_b (v16u8);
45829     i32 __builtin_msa_bz_h (v8u16);
45830     i32 __builtin_msa_bz_w (v4u32);
45831     i32 __builtin_msa_bz_d (v2u64);
45832
45833     i32 __builtin_msa_bz_v (v16u8);
45834
45835     v16i8 __builtin_msa_ceq_b (v16i8, v16i8);
45836     v8i16 __builtin_msa_ceq_h (v8i16, v8i16);
45837     v4i32 __builtin_msa_ceq_w (v4i32, v4i32);
45838     v2i64 __builtin_msa_ceq_d (v2i64, v2i64);
45839
45840     v16i8 __builtin_msa_ceqi_b (v16i8, imm_n16_15);
45841     v8i16 __builtin_msa_ceqi_h (v8i16, imm_n16_15);
45842     v4i32 __builtin_msa_ceqi_w (v4i32, imm_n16_15);
45843     v2i64 __builtin_msa_ceqi_d (v2i64, imm_n16_15);
45844
45845     i32 __builtin_msa_cfcmsa (imm0_31);
45846
45847     v16i8 __builtin_msa_cle_s_b (v16i8, v16i8);
45848     v8i16 __builtin_msa_cle_s_h (v8i16, v8i16);
45849     v4i32 __builtin_msa_cle_s_w (v4i32, v4i32);
45850     v2i64 __builtin_msa_cle_s_d (v2i64, v2i64);
45851
45852     v16i8 __builtin_msa_cle_u_b (v16u8, v16u8);
45853     v8i16 __builtin_msa_cle_u_h (v8u16, v8u16);
45854     v4i32 __builtin_msa_cle_u_w (v4u32, v4u32);
45855     v2i64 __builtin_msa_cle_u_d (v2u64, v2u64);
45856
45857     v16i8 __builtin_msa_clei_s_b (v16i8, imm_n16_15);
45858     v8i16 __builtin_msa_clei_s_h (v8i16, imm_n16_15);
45859     v4i32 __builtin_msa_clei_s_w (v4i32, imm_n16_15);
45860     v2i64 __builtin_msa_clei_s_d (v2i64, imm_n16_15);
45861
45862     v16i8 __builtin_msa_clei_u_b (v16u8, imm0_31);
45863     v8i16 __builtin_msa_clei_u_h (v8u16, imm0_31);
45864     v4i32 __builtin_msa_clei_u_w (v4u32, imm0_31);
45865     v2i64 __builtin_msa_clei_u_d (v2u64, imm0_31);
45866
45867     v16i8 __builtin_msa_clt_s_b (v16i8, v16i8);
45868     v8i16 __builtin_msa_clt_s_h (v8i16, v8i16);
45869     v4i32 __builtin_msa_clt_s_w (v4i32, v4i32);
45870     v2i64 __builtin_msa_clt_s_d (v2i64, v2i64);
45871
45872     v16i8 __builtin_msa_clt_u_b (v16u8, v16u8);
45873     v8i16 __builtin_msa_clt_u_h (v8u16, v8u16);
45874     v4i32 __builtin_msa_clt_u_w (v4u32, v4u32);
45875     v2i64 __builtin_msa_clt_u_d (v2u64, v2u64);
45876
45877     v16i8 __builtin_msa_clti_s_b (v16i8, imm_n16_15);
45878     v8i16 __builtin_msa_clti_s_h (v8i16, imm_n16_15);
45879     v4i32 __builtin_msa_clti_s_w (v4i32, imm_n16_15);
45880     v2i64 __builtin_msa_clti_s_d (v2i64, imm_n16_15);
45881
45882     v16i8 __builtin_msa_clti_u_b (v16u8, imm0_31);
45883     v8i16 __builtin_msa_clti_u_h (v8u16, imm0_31);
45884     v4i32 __builtin_msa_clti_u_w (v4u32, imm0_31);
45885     v2i64 __builtin_msa_clti_u_d (v2u64, imm0_31);
45886
45887     i32 __builtin_msa_copy_s_b (v16i8, imm0_15);
45888     i32 __builtin_msa_copy_s_h (v8i16, imm0_7);
45889     i32 __builtin_msa_copy_s_w (v4i32, imm0_3);
45890     i64 __builtin_msa_copy_s_d (v2i64, imm0_1);
45891
45892     u32 __builtin_msa_copy_u_b (v16i8, imm0_15);
45893     u32 __builtin_msa_copy_u_h (v8i16, imm0_7);
45894     u32 __builtin_msa_copy_u_w (v4i32, imm0_3);
45895     u64 __builtin_msa_copy_u_d (v2i64, imm0_1);
45896
45897     void __builtin_msa_ctcmsa (imm0_31, i32);
45898
45899     v16i8 __builtin_msa_div_s_b (v16i8, v16i8);
45900     v8i16 __builtin_msa_div_s_h (v8i16, v8i16);
45901     v4i32 __builtin_msa_div_s_w (v4i32, v4i32);
45902     v2i64 __builtin_msa_div_s_d (v2i64, v2i64);
45903
45904     v16u8 __builtin_msa_div_u_b (v16u8, v16u8);
45905     v8u16 __builtin_msa_div_u_h (v8u16, v8u16);
45906     v4u32 __builtin_msa_div_u_w (v4u32, v4u32);
45907     v2u64 __builtin_msa_div_u_d (v2u64, v2u64);
45908
45909     v8i16 __builtin_msa_dotp_s_h (v16i8, v16i8);
45910     v4i32 __builtin_msa_dotp_s_w (v8i16, v8i16);
45911     v2i64 __builtin_msa_dotp_s_d (v4i32, v4i32);
45912
45913     v8u16 __builtin_msa_dotp_u_h (v16u8, v16u8);
45914     v4u32 __builtin_msa_dotp_u_w (v8u16, v8u16);
45915     v2u64 __builtin_msa_dotp_u_d (v4u32, v4u32);
45916
45917     v8i16 __builtin_msa_dpadd_s_h (v8i16, v16i8, v16i8);
45918     v4i32 __builtin_msa_dpadd_s_w (v4i32, v8i16, v8i16);
45919     v2i64 __builtin_msa_dpadd_s_d (v2i64, v4i32, v4i32);
45920
45921     v8u16 __builtin_msa_dpadd_u_h (v8u16, v16u8, v16u8);
45922     v4u32 __builtin_msa_dpadd_u_w (v4u32, v8u16, v8u16);
45923     v2u64 __builtin_msa_dpadd_u_d (v2u64, v4u32, v4u32);
45924
45925     v8i16 __builtin_msa_dpsub_s_h (v8i16, v16i8, v16i8);
45926     v4i32 __builtin_msa_dpsub_s_w (v4i32, v8i16, v8i16);
45927     v2i64 __builtin_msa_dpsub_s_d (v2i64, v4i32, v4i32);
45928
45929     v8i16 __builtin_msa_dpsub_u_h (v8i16, v16u8, v16u8);
45930     v4i32 __builtin_msa_dpsub_u_w (v4i32, v8u16, v8u16);
45931     v2i64 __builtin_msa_dpsub_u_d (v2i64, v4u32, v4u32);
45932
45933     v4f32 __builtin_msa_fadd_w (v4f32, v4f32);
45934     v2f64 __builtin_msa_fadd_d (v2f64, v2f64);
45935
45936     v4i32 __builtin_msa_fcaf_w (v4f32, v4f32);
45937     v2i64 __builtin_msa_fcaf_d (v2f64, v2f64);
45938
45939     v4i32 __builtin_msa_fceq_w (v4f32, v4f32);
45940     v2i64 __builtin_msa_fceq_d (v2f64, v2f64);
45941
45942     v4i32 __builtin_msa_fclass_w (v4f32);
45943     v2i64 __builtin_msa_fclass_d (v2f64);
45944
45945     v4i32 __builtin_msa_fcle_w (v4f32, v4f32);
45946     v2i64 __builtin_msa_fcle_d (v2f64, v2f64);
45947
45948     v4i32 __builtin_msa_fclt_w (v4f32, v4f32);
45949     v2i64 __builtin_msa_fclt_d (v2f64, v2f64);
45950
45951     v4i32 __builtin_msa_fcne_w (v4f32, v4f32);
45952     v2i64 __builtin_msa_fcne_d (v2f64, v2f64);
45953
45954     v4i32 __builtin_msa_fcor_w (v4f32, v4f32);
45955     v2i64 __builtin_msa_fcor_d (v2f64, v2f64);
45956
45957     v4i32 __builtin_msa_fcueq_w (v4f32, v4f32);
45958     v2i64 __builtin_msa_fcueq_d (v2f64, v2f64);
45959
45960     v4i32 __builtin_msa_fcule_w (v4f32, v4f32);
45961     v2i64 __builtin_msa_fcule_d (v2f64, v2f64);
45962
45963     v4i32 __builtin_msa_fcult_w (v4f32, v4f32);
45964     v2i64 __builtin_msa_fcult_d (v2f64, v2f64);
45965
45966     v4i32 __builtin_msa_fcun_w (v4f32, v4f32);
45967     v2i64 __builtin_msa_fcun_d (v2f64, v2f64);
45968
45969     v4i32 __builtin_msa_fcune_w (v4f32, v4f32);
45970     v2i64 __builtin_msa_fcune_d (v2f64, v2f64);
45971
45972     v4f32 __builtin_msa_fdiv_w (v4f32, v4f32);
45973     v2f64 __builtin_msa_fdiv_d (v2f64, v2f64);
45974
45975     v8i16 __builtin_msa_fexdo_h (v4f32, v4f32);
45976     v4f32 __builtin_msa_fexdo_w (v2f64, v2f64);
45977
45978     v4f32 __builtin_msa_fexp2_w (v4f32, v4i32);
45979     v2f64 __builtin_msa_fexp2_d (v2f64, v2i64);
45980
45981     v4f32 __builtin_msa_fexupl_w (v8i16);
45982     v2f64 __builtin_msa_fexupl_d (v4f32);
45983
45984     v4f32 __builtin_msa_fexupr_w (v8i16);
45985     v2f64 __builtin_msa_fexupr_d (v4f32);
45986
45987     v4f32 __builtin_msa_ffint_s_w (v4i32);
45988     v2f64 __builtin_msa_ffint_s_d (v2i64);
45989
45990     v4f32 __builtin_msa_ffint_u_w (v4u32);
45991     v2f64 __builtin_msa_ffint_u_d (v2u64);
45992
45993     v4f32 __builtin_msa_ffql_w (v8i16);
45994     v2f64 __builtin_msa_ffql_d (v4i32);
45995
45996     v4f32 __builtin_msa_ffqr_w (v8i16);
45997     v2f64 __builtin_msa_ffqr_d (v4i32);
45998
45999     v16i8 __builtin_msa_fill_b (i32);
46000     v8i16 __builtin_msa_fill_h (i32);
46001     v4i32 __builtin_msa_fill_w (i32);
46002     v2i64 __builtin_msa_fill_d (i64);
46003
46004     v4f32 __builtin_msa_flog2_w (v4f32);
46005     v2f64 __builtin_msa_flog2_d (v2f64);
46006
46007     v4f32 __builtin_msa_fmadd_w (v4f32, v4f32, v4f32);
46008     v2f64 __builtin_msa_fmadd_d (v2f64, v2f64, v2f64);
46009
46010     v4f32 __builtin_msa_fmax_w (v4f32, v4f32);
46011     v2f64 __builtin_msa_fmax_d (v2f64, v2f64);
46012
46013     v4f32 __builtin_msa_fmax_a_w (v4f32, v4f32);
46014     v2f64 __builtin_msa_fmax_a_d (v2f64, v2f64);
46015
46016     v4f32 __builtin_msa_fmin_w (v4f32, v4f32);
46017     v2f64 __builtin_msa_fmin_d (v2f64, v2f64);
46018
46019     v4f32 __builtin_msa_fmin_a_w (v4f32, v4f32);
46020     v2f64 __builtin_msa_fmin_a_d (v2f64, v2f64);
46021
46022     v4f32 __builtin_msa_fmsub_w (v4f32, v4f32, v4f32);
46023     v2f64 __builtin_msa_fmsub_d (v2f64, v2f64, v2f64);
46024
46025     v4f32 __builtin_msa_fmul_w (v4f32, v4f32);
46026     v2f64 __builtin_msa_fmul_d (v2f64, v2f64);
46027
46028     v4f32 __builtin_msa_frint_w (v4f32);
46029     v2f64 __builtin_msa_frint_d (v2f64);
46030
46031     v4f32 __builtin_msa_frcp_w (v4f32);
46032     v2f64 __builtin_msa_frcp_d (v2f64);
46033
46034     v4f32 __builtin_msa_frsqrt_w (v4f32);
46035     v2f64 __builtin_msa_frsqrt_d (v2f64);
46036
46037     v4i32 __builtin_msa_fsaf_w (v4f32, v4f32);
46038     v2i64 __builtin_msa_fsaf_d (v2f64, v2f64);
46039
46040     v4i32 __builtin_msa_fseq_w (v4f32, v4f32);
46041     v2i64 __builtin_msa_fseq_d (v2f64, v2f64);
46042
46043     v4i32 __builtin_msa_fsle_w (v4f32, v4f32);
46044     v2i64 __builtin_msa_fsle_d (v2f64, v2f64);
46045
46046     v4i32 __builtin_msa_fslt_w (v4f32, v4f32);
46047     v2i64 __builtin_msa_fslt_d (v2f64, v2f64);
46048
46049     v4i32 __builtin_msa_fsne_w (v4f32, v4f32);
46050     v2i64 __builtin_msa_fsne_d (v2f64, v2f64);
46051
46052     v4i32 __builtin_msa_fsor_w (v4f32, v4f32);
46053     v2i64 __builtin_msa_fsor_d (v2f64, v2f64);
46054
46055     v4f32 __builtin_msa_fsqrt_w (v4f32);
46056     v2f64 __builtin_msa_fsqrt_d (v2f64);
46057
46058     v4f32 __builtin_msa_fsub_w (v4f32, v4f32);
46059     v2f64 __builtin_msa_fsub_d (v2f64, v2f64);
46060
46061     v4i32 __builtin_msa_fsueq_w (v4f32, v4f32);
46062     v2i64 __builtin_msa_fsueq_d (v2f64, v2f64);
46063
46064     v4i32 __builtin_msa_fsule_w (v4f32, v4f32);
46065     v2i64 __builtin_msa_fsule_d (v2f64, v2f64);
46066
46067     v4i32 __builtin_msa_fsult_w (v4f32, v4f32);
46068     v2i64 __builtin_msa_fsult_d (v2f64, v2f64);
46069
46070     v4i32 __builtin_msa_fsun_w (v4f32, v4f32);
46071     v2i64 __builtin_msa_fsun_d (v2f64, v2f64);
46072
46073     v4i32 __builtin_msa_fsune_w (v4f32, v4f32);
46074     v2i64 __builtin_msa_fsune_d (v2f64, v2f64);
46075
46076     v4i32 __builtin_msa_ftint_s_w (v4f32);
46077     v2i64 __builtin_msa_ftint_s_d (v2f64);
46078
46079     v4u32 __builtin_msa_ftint_u_w (v4f32);
46080     v2u64 __builtin_msa_ftint_u_d (v2f64);
46081
46082     v8i16 __builtin_msa_ftq_h (v4f32, v4f32);
46083     v4i32 __builtin_msa_ftq_w (v2f64, v2f64);
46084
46085     v4i32 __builtin_msa_ftrunc_s_w (v4f32);
46086     v2i64 __builtin_msa_ftrunc_s_d (v2f64);
46087
46088     v4u32 __builtin_msa_ftrunc_u_w (v4f32);
46089     v2u64 __builtin_msa_ftrunc_u_d (v2f64);
46090
46091     v8i16 __builtin_msa_hadd_s_h (v16i8, v16i8);
46092     v4i32 __builtin_msa_hadd_s_w (v8i16, v8i16);
46093     v2i64 __builtin_msa_hadd_s_d (v4i32, v4i32);
46094
46095     v8u16 __builtin_msa_hadd_u_h (v16u8, v16u8);
46096     v4u32 __builtin_msa_hadd_u_w (v8u16, v8u16);
46097     v2u64 __builtin_msa_hadd_u_d (v4u32, v4u32);
46098
46099     v8i16 __builtin_msa_hsub_s_h (v16i8, v16i8);
46100     v4i32 __builtin_msa_hsub_s_w (v8i16, v8i16);
46101     v2i64 __builtin_msa_hsub_s_d (v4i32, v4i32);
46102
46103     v8i16 __builtin_msa_hsub_u_h (v16u8, v16u8);
46104     v4i32 __builtin_msa_hsub_u_w (v8u16, v8u16);
46105     v2i64 __builtin_msa_hsub_u_d (v4u32, v4u32);
46106
46107     v16i8 __builtin_msa_ilvev_b (v16i8, v16i8);
46108     v8i16 __builtin_msa_ilvev_h (v8i16, v8i16);
46109     v4i32 __builtin_msa_ilvev_w (v4i32, v4i32);
46110     v2i64 __builtin_msa_ilvev_d (v2i64, v2i64);
46111
46112     v16i8 __builtin_msa_ilvl_b (v16i8, v16i8);
46113     v8i16 __builtin_msa_ilvl_h (v8i16, v8i16);
46114     v4i32 __builtin_msa_ilvl_w (v4i32, v4i32);
46115     v2i64 __builtin_msa_ilvl_d (v2i64, v2i64);
46116
46117     v16i8 __builtin_msa_ilvod_b (v16i8, v16i8);
46118     v8i16 __builtin_msa_ilvod_h (v8i16, v8i16);
46119     v4i32 __builtin_msa_ilvod_w (v4i32, v4i32);
46120     v2i64 __builtin_msa_ilvod_d (v2i64, v2i64);
46121
46122     v16i8 __builtin_msa_ilvr_b (v16i8, v16i8);
46123     v8i16 __builtin_msa_ilvr_h (v8i16, v8i16);
46124     v4i32 __builtin_msa_ilvr_w (v4i32, v4i32);
46125     v2i64 __builtin_msa_ilvr_d (v2i64, v2i64);
46126
46127     v16i8 __builtin_msa_insert_b (v16i8, imm0_15, i32);
46128     v8i16 __builtin_msa_insert_h (v8i16, imm0_7, i32);
46129     v4i32 __builtin_msa_insert_w (v4i32, imm0_3, i32);
46130     v2i64 __builtin_msa_insert_d (v2i64, imm0_1, i64);
46131
46132     v16i8 __builtin_msa_insve_b (v16i8, imm0_15, v16i8);
46133     v8i16 __builtin_msa_insve_h (v8i16, imm0_7, v8i16);
46134     v4i32 __builtin_msa_insve_w (v4i32, imm0_3, v4i32);
46135     v2i64 __builtin_msa_insve_d (v2i64, imm0_1, v2i64);
46136
46137     v16i8 __builtin_msa_ld_b (const void *, imm_n512_511);
46138     v8i16 __builtin_msa_ld_h (const void *, imm_n1024_1022);
46139     v4i32 __builtin_msa_ld_w (const void *, imm_n2048_2044);
46140     v2i64 __builtin_msa_ld_d (const void *, imm_n4096_4088);
46141
46142     v16i8 __builtin_msa_ldi_b (imm_n512_511);
46143     v8i16 __builtin_msa_ldi_h (imm_n512_511);
46144     v4i32 __builtin_msa_ldi_w (imm_n512_511);
46145     v2i64 __builtin_msa_ldi_d (imm_n512_511);
46146
46147     v8i16 __builtin_msa_madd_q_h (v8i16, v8i16, v8i16);
46148     v4i32 __builtin_msa_madd_q_w (v4i32, v4i32, v4i32);
46149
46150     v8i16 __builtin_msa_maddr_q_h (v8i16, v8i16, v8i16);
46151     v4i32 __builtin_msa_maddr_q_w (v4i32, v4i32, v4i32);
46152
46153     v16i8 __builtin_msa_maddv_b (v16i8, v16i8, v16i8);
46154     v8i16 __builtin_msa_maddv_h (v8i16, v8i16, v8i16);
46155     v4i32 __builtin_msa_maddv_w (v4i32, v4i32, v4i32);
46156     v2i64 __builtin_msa_maddv_d (v2i64, v2i64, v2i64);
46157
46158     v16i8 __builtin_msa_max_a_b (v16i8, v16i8);
46159     v8i16 __builtin_msa_max_a_h (v8i16, v8i16);
46160     v4i32 __builtin_msa_max_a_w (v4i32, v4i32);
46161     v2i64 __builtin_msa_max_a_d (v2i64, v2i64);
46162
46163     v16i8 __builtin_msa_max_s_b (v16i8, v16i8);
46164     v8i16 __builtin_msa_max_s_h (v8i16, v8i16);
46165     v4i32 __builtin_msa_max_s_w (v4i32, v4i32);
46166     v2i64 __builtin_msa_max_s_d (v2i64, v2i64);
46167
46168     v16u8 __builtin_msa_max_u_b (v16u8, v16u8);
46169     v8u16 __builtin_msa_max_u_h (v8u16, v8u16);
46170     v4u32 __builtin_msa_max_u_w (v4u32, v4u32);
46171     v2u64 __builtin_msa_max_u_d (v2u64, v2u64);
46172
46173     v16i8 __builtin_msa_maxi_s_b (v16i8, imm_n16_15);
46174     v8i16 __builtin_msa_maxi_s_h (v8i16, imm_n16_15);
46175     v4i32 __builtin_msa_maxi_s_w (v4i32, imm_n16_15);
46176     v2i64 __builtin_msa_maxi_s_d (v2i64, imm_n16_15);
46177
46178     v16u8 __builtin_msa_maxi_u_b (v16u8, imm0_31);
46179     v8u16 __builtin_msa_maxi_u_h (v8u16, imm0_31);
46180     v4u32 __builtin_msa_maxi_u_w (v4u32, imm0_31);
46181     v2u64 __builtin_msa_maxi_u_d (v2u64, imm0_31);
46182
46183     v16i8 __builtin_msa_min_a_b (v16i8, v16i8);
46184     v8i16 __builtin_msa_min_a_h (v8i16, v8i16);
46185     v4i32 __builtin_msa_min_a_w (v4i32, v4i32);
46186     v2i64 __builtin_msa_min_a_d (v2i64, v2i64);
46187
46188     v16i8 __builtin_msa_min_s_b (v16i8, v16i8);
46189     v8i16 __builtin_msa_min_s_h (v8i16, v8i16);
46190     v4i32 __builtin_msa_min_s_w (v4i32, v4i32);
46191     v2i64 __builtin_msa_min_s_d (v2i64, v2i64);
46192
46193     v16u8 __builtin_msa_min_u_b (v16u8, v16u8);
46194     v8u16 __builtin_msa_min_u_h (v8u16, v8u16);
46195     v4u32 __builtin_msa_min_u_w (v4u32, v4u32);
46196     v2u64 __builtin_msa_min_u_d (v2u64, v2u64);
46197
46198     v16i8 __builtin_msa_mini_s_b (v16i8, imm_n16_15);
46199     v8i16 __builtin_msa_mini_s_h (v8i16, imm_n16_15);
46200     v4i32 __builtin_msa_mini_s_w (v4i32, imm_n16_15);
46201     v2i64 __builtin_msa_mini_s_d (v2i64, imm_n16_15);
46202
46203     v16u8 __builtin_msa_mini_u_b (v16u8, imm0_31);
46204     v8u16 __builtin_msa_mini_u_h (v8u16, imm0_31);
46205     v4u32 __builtin_msa_mini_u_w (v4u32, imm0_31);
46206     v2u64 __builtin_msa_mini_u_d (v2u64, imm0_31);
46207
46208     v16i8 __builtin_msa_mod_s_b (v16i8, v16i8);
46209     v8i16 __builtin_msa_mod_s_h (v8i16, v8i16);
46210     v4i32 __builtin_msa_mod_s_w (v4i32, v4i32);
46211     v2i64 __builtin_msa_mod_s_d (v2i64, v2i64);
46212
46213     v16u8 __builtin_msa_mod_u_b (v16u8, v16u8);
46214     v8u16 __builtin_msa_mod_u_h (v8u16, v8u16);
46215     v4u32 __builtin_msa_mod_u_w (v4u32, v4u32);
46216     v2u64 __builtin_msa_mod_u_d (v2u64, v2u64);
46217
46218     v16i8 __builtin_msa_move_v (v16i8);
46219
46220     v8i16 __builtin_msa_msub_q_h (v8i16, v8i16, v8i16);
46221     v4i32 __builtin_msa_msub_q_w (v4i32, v4i32, v4i32);
46222
46223     v8i16 __builtin_msa_msubr_q_h (v8i16, v8i16, v8i16);
46224     v4i32 __builtin_msa_msubr_q_w (v4i32, v4i32, v4i32);
46225
46226     v16i8 __builtin_msa_msubv_b (v16i8, v16i8, v16i8);
46227     v8i16 __builtin_msa_msubv_h (v8i16, v8i16, v8i16);
46228     v4i32 __builtin_msa_msubv_w (v4i32, v4i32, v4i32);
46229     v2i64 __builtin_msa_msubv_d (v2i64, v2i64, v2i64);
46230
46231     v8i16 __builtin_msa_mul_q_h (v8i16, v8i16);
46232     v4i32 __builtin_msa_mul_q_w (v4i32, v4i32);
46233
46234     v8i16 __builtin_msa_mulr_q_h (v8i16, v8i16);
46235     v4i32 __builtin_msa_mulr_q_w (v4i32, v4i32);
46236
46237     v16i8 __builtin_msa_mulv_b (v16i8, v16i8);
46238     v8i16 __builtin_msa_mulv_h (v8i16, v8i16);
46239     v4i32 __builtin_msa_mulv_w (v4i32, v4i32);
46240     v2i64 __builtin_msa_mulv_d (v2i64, v2i64);
46241
46242     v16i8 __builtin_msa_nloc_b (v16i8);
46243     v8i16 __builtin_msa_nloc_h (v8i16);
46244     v4i32 __builtin_msa_nloc_w (v4i32);
46245     v2i64 __builtin_msa_nloc_d (v2i64);
46246
46247     v16i8 __builtin_msa_nlzc_b (v16i8);
46248     v8i16 __builtin_msa_nlzc_h (v8i16);
46249     v4i32 __builtin_msa_nlzc_w (v4i32);
46250     v2i64 __builtin_msa_nlzc_d (v2i64);
46251
46252     v16u8 __builtin_msa_nor_v (v16u8, v16u8);
46253
46254     v16u8 __builtin_msa_nori_b (v16u8, imm0_255);
46255
46256     v16u8 __builtin_msa_or_v (v16u8, v16u8);
46257
46258     v16u8 __builtin_msa_ori_b (v16u8, imm0_255);
46259
46260     v16i8 __builtin_msa_pckev_b (v16i8, v16i8);
46261     v8i16 __builtin_msa_pckev_h (v8i16, v8i16);
46262     v4i32 __builtin_msa_pckev_w (v4i32, v4i32);
46263     v2i64 __builtin_msa_pckev_d (v2i64, v2i64);
46264
46265     v16i8 __builtin_msa_pckod_b (v16i8, v16i8);
46266     v8i16 __builtin_msa_pckod_h (v8i16, v8i16);
46267     v4i32 __builtin_msa_pckod_w (v4i32, v4i32);
46268     v2i64 __builtin_msa_pckod_d (v2i64, v2i64);
46269
46270     v16i8 __builtin_msa_pcnt_b (v16i8);
46271     v8i16 __builtin_msa_pcnt_h (v8i16);
46272     v4i32 __builtin_msa_pcnt_w (v4i32);
46273     v2i64 __builtin_msa_pcnt_d (v2i64);
46274
46275     v16i8 __builtin_msa_sat_s_b (v16i8, imm0_7);
46276     v8i16 __builtin_msa_sat_s_h (v8i16, imm0_15);
46277     v4i32 __builtin_msa_sat_s_w (v4i32, imm0_31);
46278     v2i64 __builtin_msa_sat_s_d (v2i64, imm0_63);
46279
46280     v16u8 __builtin_msa_sat_u_b (v16u8, imm0_7);
46281     v8u16 __builtin_msa_sat_u_h (v8u16, imm0_15);
46282     v4u32 __builtin_msa_sat_u_w (v4u32, imm0_31);
46283     v2u64 __builtin_msa_sat_u_d (v2u64, imm0_63);
46284
46285     v16i8 __builtin_msa_shf_b (v16i8, imm0_255);
46286     v8i16 __builtin_msa_shf_h (v8i16, imm0_255);
46287     v4i32 __builtin_msa_shf_w (v4i32, imm0_255);
46288
46289     v16i8 __builtin_msa_sld_b (v16i8, v16i8, i32);
46290     v8i16 __builtin_msa_sld_h (v8i16, v8i16, i32);
46291     v4i32 __builtin_msa_sld_w (v4i32, v4i32, i32);
46292     v2i64 __builtin_msa_sld_d (v2i64, v2i64, i32);
46293
46294     v16i8 __builtin_msa_sldi_b (v16i8, v16i8, imm0_15);
46295     v8i16 __builtin_msa_sldi_h (v8i16, v8i16, imm0_7);
46296     v4i32 __builtin_msa_sldi_w (v4i32, v4i32, imm0_3);
46297     v2i64 __builtin_msa_sldi_d (v2i64, v2i64, imm0_1);
46298
46299     v16i8 __builtin_msa_sll_b (v16i8, v16i8);
46300     v8i16 __builtin_msa_sll_h (v8i16, v8i16);
46301     v4i32 __builtin_msa_sll_w (v4i32, v4i32);
46302     v2i64 __builtin_msa_sll_d (v2i64, v2i64);
46303
46304     v16i8 __builtin_msa_slli_b (v16i8, imm0_7);
46305     v8i16 __builtin_msa_slli_h (v8i16, imm0_15);
46306     v4i32 __builtin_msa_slli_w (v4i32, imm0_31);
46307     v2i64 __builtin_msa_slli_d (v2i64, imm0_63);
46308
46309     v16i8 __builtin_msa_splat_b (v16i8, i32);
46310     v8i16 __builtin_msa_splat_h (v8i16, i32);
46311     v4i32 __builtin_msa_splat_w (v4i32, i32);
46312     v2i64 __builtin_msa_splat_d (v2i64, i32);
46313
46314     v16i8 __builtin_msa_splati_b (v16i8, imm0_15);
46315     v8i16 __builtin_msa_splati_h (v8i16, imm0_7);
46316     v4i32 __builtin_msa_splati_w (v4i32, imm0_3);
46317     v2i64 __builtin_msa_splati_d (v2i64, imm0_1);
46318
46319     v16i8 __builtin_msa_sra_b (v16i8, v16i8);
46320     v8i16 __builtin_msa_sra_h (v8i16, v8i16);
46321     v4i32 __builtin_msa_sra_w (v4i32, v4i32);
46322     v2i64 __builtin_msa_sra_d (v2i64, v2i64);
46323
46324     v16i8 __builtin_msa_srai_b (v16i8, imm0_7);
46325     v8i16 __builtin_msa_srai_h (v8i16, imm0_15);
46326     v4i32 __builtin_msa_srai_w (v4i32, imm0_31);
46327     v2i64 __builtin_msa_srai_d (v2i64, imm0_63);
46328
46329     v16i8 __builtin_msa_srar_b (v16i8, v16i8);
46330     v8i16 __builtin_msa_srar_h (v8i16, v8i16);
46331     v4i32 __builtin_msa_srar_w (v4i32, v4i32);
46332     v2i64 __builtin_msa_srar_d (v2i64, v2i64);
46333
46334     v16i8 __builtin_msa_srari_b (v16i8, imm0_7);
46335     v8i16 __builtin_msa_srari_h (v8i16, imm0_15);
46336     v4i32 __builtin_msa_srari_w (v4i32, imm0_31);
46337     v2i64 __builtin_msa_srari_d (v2i64, imm0_63);
46338
46339     v16i8 __builtin_msa_srl_b (v16i8, v16i8);
46340     v8i16 __builtin_msa_srl_h (v8i16, v8i16);
46341     v4i32 __builtin_msa_srl_w (v4i32, v4i32);
46342     v2i64 __builtin_msa_srl_d (v2i64, v2i64);
46343
46344     v16i8 __builtin_msa_srli_b (v16i8, imm0_7);
46345     v8i16 __builtin_msa_srli_h (v8i16, imm0_15);
46346     v4i32 __builtin_msa_srli_w (v4i32, imm0_31);
46347     v2i64 __builtin_msa_srli_d (v2i64, imm0_63);
46348
46349     v16i8 __builtin_msa_srlr_b (v16i8, v16i8);
46350     v8i16 __builtin_msa_srlr_h (v8i16, v8i16);
46351     v4i32 __builtin_msa_srlr_w (v4i32, v4i32);
46352     v2i64 __builtin_msa_srlr_d (v2i64, v2i64);
46353
46354     v16i8 __builtin_msa_srlri_b (v16i8, imm0_7);
46355     v8i16 __builtin_msa_srlri_h (v8i16, imm0_15);
46356     v4i32 __builtin_msa_srlri_w (v4i32, imm0_31);
46357     v2i64 __builtin_msa_srlri_d (v2i64, imm0_63);
46358
46359     void __builtin_msa_st_b (v16i8, void *, imm_n512_511);
46360     void __builtin_msa_st_h (v8i16, void *, imm_n1024_1022);
46361     void __builtin_msa_st_w (v4i32, void *, imm_n2048_2044);
46362     void __builtin_msa_st_d (v2i64, void *, imm_n4096_4088);
46363
46364     v16i8 __builtin_msa_subs_s_b (v16i8, v16i8);
46365     v8i16 __builtin_msa_subs_s_h (v8i16, v8i16);
46366     v4i32 __builtin_msa_subs_s_w (v4i32, v4i32);
46367     v2i64 __builtin_msa_subs_s_d (v2i64, v2i64);
46368
46369     v16u8 __builtin_msa_subs_u_b (v16u8, v16u8);
46370     v8u16 __builtin_msa_subs_u_h (v8u16, v8u16);
46371     v4u32 __builtin_msa_subs_u_w (v4u32, v4u32);
46372     v2u64 __builtin_msa_subs_u_d (v2u64, v2u64);
46373
46374     v16u8 __builtin_msa_subsus_u_b (v16u8, v16i8);
46375     v8u16 __builtin_msa_subsus_u_h (v8u16, v8i16);
46376     v4u32 __builtin_msa_subsus_u_w (v4u32, v4i32);
46377     v2u64 __builtin_msa_subsus_u_d (v2u64, v2i64);
46378
46379     v16i8 __builtin_msa_subsuu_s_b (v16u8, v16u8);
46380     v8i16 __builtin_msa_subsuu_s_h (v8u16, v8u16);
46381     v4i32 __builtin_msa_subsuu_s_w (v4u32, v4u32);
46382     v2i64 __builtin_msa_subsuu_s_d (v2u64, v2u64);
46383
46384     v16i8 __builtin_msa_subv_b (v16i8, v16i8);
46385     v8i16 __builtin_msa_subv_h (v8i16, v8i16);
46386     v4i32 __builtin_msa_subv_w (v4i32, v4i32);
46387     v2i64 __builtin_msa_subv_d (v2i64, v2i64);
46388
46389     v16i8 __builtin_msa_subvi_b (v16i8, imm0_31);
46390     v8i16 __builtin_msa_subvi_h (v8i16, imm0_31);
46391     v4i32 __builtin_msa_subvi_w (v4i32, imm0_31);
46392     v2i64 __builtin_msa_subvi_d (v2i64, imm0_31);
46393
46394     v16i8 __builtin_msa_vshf_b (v16i8, v16i8, v16i8);
46395     v8i16 __builtin_msa_vshf_h (v8i16, v8i16, v8i16);
46396     v4i32 __builtin_msa_vshf_w (v4i32, v4i32, v4i32);
46397     v2i64 __builtin_msa_vshf_d (v2i64, v2i64, v2i64);
46398
46399     v16u8 __builtin_msa_xor_v (v16u8, v16u8);
46400
46401     v16u8 __builtin_msa_xori_b (v16u8, imm0_255);
46402
46403
46404File: gcc.info,  Node: Other MIPS Built-in Functions,  Next: MSP430 Built-in Functions,  Prev: MIPS SIMD Architecture (MSA) Support,  Up: Target Builtins
46405
464066.60.19 Other MIPS Built-in Functions
46407-------------------------------------
46408
46409GCC provides other MIPS-specific built-in functions:
46410
46411'void __builtin_mips_cache (int OP, const volatile void *ADDR)'
46412     Insert a 'cache' instruction with operands OP and ADDR.  GCC
46413     defines the preprocessor macro '___GCC_HAVE_BUILTIN_MIPS_CACHE'
46414     when this function is available.
46415
46416'unsigned int __builtin_mips_get_fcsr (void)'
46417'void __builtin_mips_set_fcsr (unsigned int VALUE)'
46418     Get and set the contents of the floating-point control and status
46419     register (FPU control register 31).  These functions are only
46420     available in hard-float code but can be called in both MIPS16 and
46421     non-MIPS16 contexts.
46422
46423     '__builtin_mips_set_fcsr' can be used to change any bit of the
46424     register except the condition codes, which GCC assumes are
46425     preserved.
46426
46427
46428File: gcc.info,  Node: MSP430 Built-in Functions,  Next: NDS32 Built-in Functions,  Prev: Other MIPS Built-in Functions,  Up: Target Builtins
46429
464306.60.20 MSP430 Built-in Functions
46431---------------------------------
46432
46433GCC provides a couple of special builtin functions to aid in the writing
46434of interrupt handlers in C.
46435
46436'__bic_SR_register_on_exit (int MASK)'
46437     This clears the indicated bits in the saved copy of the status
46438     register currently residing on the stack.  This only works inside
46439     interrupt handlers and the changes to the status register will only
46440     take affect once the handler returns.
46441
46442'__bis_SR_register_on_exit (int MASK)'
46443     This sets the indicated bits in the saved copy of the status
46444     register currently residing on the stack.  This only works inside
46445     interrupt handlers and the changes to the status register will only
46446     take affect once the handler returns.
46447
46448'__delay_cycles (long long CYCLES)'
46449     This inserts an instruction sequence that takes exactly CYCLES
46450     cycles (between 0 and about 17E9) to complete.  The inserted
46451     sequence may use jumps, loops, or no-ops, and does not interfere
46452     with any other instructions.  Note that CYCLES must be a
46453     compile-time constant integer - that is, you must pass a number,
46454     not a variable that may be optimized to a constant later.  The
46455     number of cycles delayed by this builtin is exact.
46456
46457
46458File: gcc.info,  Node: NDS32 Built-in Functions,  Next: picoChip Built-in Functions,  Prev: MSP430 Built-in Functions,  Up: Target Builtins
46459
464606.60.21 NDS32 Built-in Functions
46461--------------------------------
46462
46463These built-in functions are available for the NDS32 target:
46464
46465 -- Built-in Function: void __builtin_nds32_isync (int *ADDR)
46466     Insert an ISYNC instruction into the instruction stream where ADDR
46467     is an instruction address for serialization.
46468
46469 -- Built-in Function: void __builtin_nds32_isb (void)
46470     Insert an ISB instruction into the instruction stream.
46471
46472 -- Built-in Function: int __builtin_nds32_mfsr (int SR)
46473     Return the content of a system register which is mapped by SR.
46474
46475 -- Built-in Function: int __builtin_nds32_mfusr (int USR)
46476     Return the content of a user space register which is mapped by USR.
46477
46478 -- Built-in Function: void __builtin_nds32_mtsr (int VALUE, int SR)
46479     Move the VALUE to a system register which is mapped by SR.
46480
46481 -- Built-in Function: void __builtin_nds32_mtusr (int VALUE, int USR)
46482     Move the VALUE to a user space register which is mapped by USR.
46483
46484 -- Built-in Function: void __builtin_nds32_setgie_en (void)
46485     Enable global interrupt.
46486
46487 -- Built-in Function: void __builtin_nds32_setgie_dis (void)
46488     Disable global interrupt.
46489
46490
46491File: gcc.info,  Node: picoChip Built-in Functions,  Next: Basic PowerPC Built-in Functions,  Prev: NDS32 Built-in Functions,  Up: Target Builtins
46492
464936.60.22 picoChip Built-in Functions
46494-----------------------------------
46495
46496GCC provides an interface to selected machine instructions from the
46497picoChip instruction set.
46498
46499'int __builtin_sbc (int VALUE)'
46500     Sign bit count.  Return the number of consecutive bits in VALUE
46501     that have the same value as the sign bit.  The result is the number
46502     of leading sign bits minus one, giving the number of redundant sign
46503     bits in VALUE.
46504
46505'int __builtin_byteswap (int VALUE)'
46506     Byte swap.  Return the result of swapping the upper and lower bytes
46507     of VALUE.
46508
46509'int __builtin_brev (int VALUE)'
46510     Bit reversal.  Return the result of reversing the bits in VALUE.
46511     Bit 15 is swapped with bit 0, bit 14 is swapped with bit 1, and so
46512     on.
46513
46514'int __builtin_adds (int X, int Y)'
46515     Saturating addition.  Return the result of adding X and Y, storing
46516     the value 32767 if the result overflows.
46517
46518'int __builtin_subs (int X, int Y)'
46519     Saturating subtraction.  Return the result of subtracting Y from X,
46520     storing the value -32768 if the result overflows.
46521
46522'void __builtin_halt (void)'
46523     Halt.  The processor stops execution.  This built-in is useful for
46524     implementing assertions.
46525
46526
46527File: gcc.info,  Node: Basic PowerPC Built-in Functions,  Next: PowerPC AltiVec/VSX Built-in Functions,  Prev: picoChip Built-in Functions,  Up: Target Builtins
46528
465296.60.23 Basic PowerPC Built-in Functions
46530----------------------------------------
46531
46532* Menu:
46533
46534* Basic PowerPC Built-in Functions Available on all Configurations::
46535* Basic PowerPC Built-in Functions Available on ISA 2.05::
46536* Basic PowerPC Built-in Functions Available on ISA 2.06::
46537* Basic PowerPC Built-in Functions Available on ISA 2.07::
46538* Basic PowerPC Built-in Functions Available on ISA 3.0::
46539
46540This section describes PowerPC built-in functions that do not require
46541the inclusion of any special header files to declare prototypes or
46542provide macro definitions.  The sections that follow describe additional
46543PowerPC built-in functions.
46544
46545
46546File: gcc.info,  Node: Basic PowerPC Built-in Functions Available on all Configurations,  Next: Basic PowerPC Built-in Functions Available on ISA 2.05,  Up: Basic PowerPC Built-in Functions
46547
465486.60.23.1 Basic PowerPC Built-in Functions Available on all Configurations
46549..........................................................................
46550
46551 -- Built-in Function: void __builtin_cpu_init (void)
46552     This function is a 'nop' on the PowerPC platform and is included
46553     solely to maintain API compatibility with the x86 builtins.
46554
46555 -- Built-in Function: int __builtin_cpu_is (const char *CPUNAME)
46556     This function returns a value of '1' if the run-time CPU is of type
46557     CPUNAME and returns '0' otherwise
46558
46559     The '__builtin_cpu_is' function requires GLIBC 2.23 or newer which
46560     exports the hardware capability bits.  GCC defines the macro
46561     '__BUILTIN_CPU_SUPPORTS__' if the '__builtin_cpu_supports' built-in
46562     function is fully supported.
46563
46564     If GCC was configured to use a GLIBC before 2.23, the built-in
46565     function '__builtin_cpu_is' always returns a 0 and the compiler
46566     issues a warning.
46567
46568     The following CPU names can be detected:
46569
46570     'power10'
46571          IBM POWER10 Server CPU.
46572     'power9'
46573          IBM POWER9 Server CPU.
46574     'power8'
46575          IBM POWER8 Server CPU.
46576     'power7'
46577          IBM POWER7 Server CPU.
46578     'power6x'
46579          IBM POWER6 Server CPU (RAW mode).
46580     'power6'
46581          IBM POWER6 Server CPU (Architected mode).
46582     'power5+'
46583          IBM POWER5+ Server CPU.
46584     'power5'
46585          IBM POWER5 Server CPU.
46586     'ppc970'
46587          IBM 970 Server CPU (ie, Apple G5).
46588     'power4'
46589          IBM POWER4 Server CPU.
46590     'ppca2'
46591          IBM A2 64-bit Embedded CPU
46592     'ppc476'
46593          IBM PowerPC 476FP 32-bit Embedded CPU.
46594     'ppc464'
46595          IBM PowerPC 464 32-bit Embedded CPU.
46596     'ppc440'
46597          PowerPC 440 32-bit Embedded CPU.
46598     'ppc405'
46599          PowerPC 405 32-bit Embedded CPU.
46600     'ppc-cell-be'
46601          IBM PowerPC Cell Broadband Engine Architecture CPU.
46602
46603     Here is an example:
46604          #ifdef __BUILTIN_CPU_SUPPORTS__
46605            if (__builtin_cpu_is ("power8"))
46606              {
46607                 do_power8 (); // POWER8 specific implementation.
46608              }
46609            else
46610          #endif
46611              {
46612                 do_generic (); // Generic implementation.
46613              }
46614
46615 -- Built-in Function: int __builtin_cpu_supports (const char *FEATURE)
46616     This function returns a value of '1' if the run-time CPU supports
46617     the HWCAP feature FEATURE and returns '0' otherwise.
46618
46619     The '__builtin_cpu_supports' function requires GLIBC 2.23 or newer
46620     which exports the hardware capability bits.  GCC defines the macro
46621     '__BUILTIN_CPU_SUPPORTS__' if the '__builtin_cpu_supports' built-in
46622     function is fully supported.
46623
46624     If GCC was configured to use a GLIBC before 2.23, the built-in
46625     function '__builtin_cpu_suports' always returns a 0 and the
46626     compiler issues a warning.
46627
46628     The following features can be detected:
46629
46630     '4xxmac'
46631          4xx CPU has a Multiply Accumulator.
46632     'altivec'
46633          CPU has a SIMD/Vector Unit.
46634     'arch_2_05'
46635          CPU supports ISA 2.05 (eg, POWER6)
46636     'arch_2_06'
46637          CPU supports ISA 2.06 (eg, POWER7)
46638     'arch_2_07'
46639          CPU supports ISA 2.07 (eg, POWER8)
46640     'arch_3_00'
46641          CPU supports ISA 3.0 (eg, POWER9)
46642     'arch_3_1'
46643          CPU supports ISA 3.1 (eg, POWER10)
46644     'archpmu'
46645          CPU supports the set of compatible performance monitoring
46646          events.
46647     'booke'
46648          CPU supports the Embedded ISA category.
46649     'cellbe'
46650          CPU has a CELL broadband engine.
46651     'darn'
46652          CPU supports the 'darn' (deliver a random number) instruction.
46653     'dfp'
46654          CPU has a decimal floating point unit.
46655     'dscr'
46656          CPU supports the data stream control register.
46657     'ebb'
46658          CPU supports event base branching.
46659     'efpdouble'
46660          CPU has a SPE double precision floating point unit.
46661     'efpsingle'
46662          CPU has a SPE single precision floating point unit.
46663     'fpu'
46664          CPU has a floating point unit.
46665     'htm'
46666          CPU has hardware transaction memory instructions.
46667     'htm-nosc'
46668          Kernel aborts hardware transactions when a syscall is made.
46669     'htm-no-suspend'
46670          CPU supports hardware transaction memory but does not support
46671          the 'tsuspend.' instruction.
46672     'ic_snoop'
46673          CPU supports icache snooping capabilities.
46674     'ieee128'
46675          CPU supports 128-bit IEEE binary floating point instructions.
46676     'isel'
46677          CPU supports the integer select instruction.
46678     'mma'
46679          CPU supports the matrix-multiply assist instructions.
46680     'mmu'
46681          CPU has a memory management unit.
46682     'notb'
46683          CPU does not have a timebase (eg, 601 and 403gx).
46684     'pa6t'
46685          CPU supports the PA Semi 6T CORE ISA.
46686     'power4'
46687          CPU supports ISA 2.00 (eg, POWER4)
46688     'power5'
46689          CPU supports ISA 2.02 (eg, POWER5)
46690     'power5+'
46691          CPU supports ISA 2.03 (eg, POWER5+)
46692     'power6x'
46693          CPU supports ISA 2.05 (eg, POWER6) extended opcodes mffgpr and
46694          mftgpr.
46695     'ppc32'
46696          CPU supports 32-bit mode execution.
46697     'ppc601'
46698          CPU supports the old POWER ISA (eg, 601)
46699     'ppc64'
46700          CPU supports 64-bit mode execution.
46701     'ppcle'
46702          CPU supports a little-endian mode that uses address swizzling.
46703     'scv'
46704          Kernel supports system call vectored.
46705     'smt'
46706          CPU support simultaneous multi-threading.
46707     'spe'
46708          CPU has a signal processing extension unit.
46709     'tar'
46710          CPU supports the target address register.
46711     'true_le'
46712          CPU supports true little-endian mode.
46713     'ucache'
46714          CPU has unified I/D cache.
46715     'vcrypto'
46716          CPU supports the vector cryptography instructions.
46717     'vsx'
46718          CPU supports the vector-scalar extension.
46719
46720     Here is an example:
46721          #ifdef __BUILTIN_CPU_SUPPORTS__
46722            if (__builtin_cpu_supports ("fpu"))
46723              {
46724                 asm("fadd %0,%1,%2" : "=d"(dst) : "d"(src1), "d"(src2));
46725              }
46726            else
46727          #endif
46728              {
46729                 dst = __fadd (src1, src2); // Software FP addition function.
46730              }
46731
46732 The following built-in functions are also available on all PowerPC
46733processors:
46734     uint64_t __builtin_ppc_get_timebase ();
46735     unsigned long __builtin_ppc_mftb ();
46736     double __builtin_unpack_ibm128 (__ibm128, int);
46737     __ibm128 __builtin_pack_ibm128 (double, double);
46738     double __builtin_mffs (void);
46739     void __builtin_mtfsf (const int, double);
46740     void __builtin_mtfsb0 (const int);
46741     void __builtin_mtfsb1 (const int);
46742     void __builtin_set_fpscr_rn (int);
46743
46744 The '__builtin_ppc_get_timebase' and '__builtin_ppc_mftb' functions
46745generate instructions to read the Time Base Register.  The
46746'__builtin_ppc_get_timebase' function may generate multiple instructions
46747and always returns the 64 bits of the Time Base Register.  The
46748'__builtin_ppc_mftb' function always generates one instruction and
46749returns the Time Base Register value as an unsigned long, throwing away
46750the most significant word on 32-bit environments.  The '__builtin_mffs'
46751return the value of the FPSCR register.  Note, ISA 3.0 supports the
46752'__builtin_mffsl()' which permits software to read the control and
46753non-sticky status bits in the FSPCR without the higher latency
46754associated with accessing the sticky status bits.  The '__builtin_mtfsf'
46755takes a constant 8-bit integer field mask and a double precision
46756floating point argument and generates the 'mtfsf' (extended mnemonic)
46757instruction to write new values to selected fields of the FPSCR. The
46758'__builtin_mtfsb0' and '__builtin_mtfsb1' take the bit to change as an
46759argument.  The valid bit range is between 0 and 31.  The builtins map to
46760the 'mtfsb0' and 'mtfsb1' instructions which take the argument and add
4676132.  Hence these instructions only modify the FPSCR[32:63] bits by
46762changing the specified bit to a zero or one respectively.  The
46763'__builtin_set_fpscr_rn' builtin allows changing both of the floating
46764point rounding mode bits.  The argument is a 2-bit value.  The argument
46765can either be a 'const int' or stored in a variable.  The builtin uses
46766the ISA 3.0 instruction 'mffscrn' if available, otherwise it reads the
46767FPSCR, masks the current rounding mode bits out and OR's in the new
46768value.
46769
46770
46771File: gcc.info,  Node: Basic PowerPC Built-in Functions Available on ISA 2.05,  Next: Basic PowerPC Built-in Functions Available on ISA 2.06,  Prev: Basic PowerPC Built-in Functions Available on all Configurations,  Up: Basic PowerPC Built-in Functions
46772
467736.60.23.2 Basic PowerPC Built-in Functions Available on ISA 2.05
46774................................................................
46775
46776The basic built-in functions described in this section are available on
46777the PowerPC family of processors starting with ISA 2.05 or later.
46778Unless specific options are explicitly disabled on the command line,
46779specifying option '-mcpu=power6' has the effect of enabling the
46780'-mpowerpc64', '-mpowerpc-gpopt', '-mpowerpc-gfxopt', '-mmfcrf',
46781'-mpopcntb', '-mfprnd', '-mcmpb', '-mhard-dfp', and '-mrecip-precision'
46782options.  Specify the '-maltivec' option explicitly in combination with
46783the above options if desired.
46784
46785 The following functions require option '-mcmpb'.
46786     unsigned long long __builtin_cmpb (unsigned long long int, unsigned long long int);
46787     unsigned int __builtin_cmpb (unsigned int, unsigned int);
46788
46789 The '__builtin_cmpb' function performs a byte-wise compare on the
46790contents of its two arguments, returning the result of the byte-wise
46791comparison as the returned value.  For each byte comparison, the
46792corresponding byte of the return value holds 0xff if the input bytes are
46793equal and 0 if the input bytes are not equal.  If either of the
46794arguments to this built-in function is wider than 32 bits, the function
46795call expands into the form that expects 'unsigned long long int'
46796arguments which is only available on 64-bit targets.
46797
46798 The following built-in functions are available when hardware decimal
46799floating point ('-mhard-dfp') is available:
46800     void __builtin_set_fpscr_drn(int);
46801     _Decimal64 __builtin_ddedpd (int, _Decimal64);
46802     _Decimal128 __builtin_ddedpdq (int, _Decimal128);
46803     _Decimal64 __builtin_denbcd (int, _Decimal64);
46804     _Decimal128 __builtin_denbcdq (int, _Decimal128);
46805     _Decimal64 __builtin_diex (long long, _Decimal64);
46806     _Decimal128 _builtin_diexq (long long, _Decimal128);
46807     _Decimal64 __builtin_dscli (_Decimal64, int);
46808     _Decimal128 __builtin_dscliq (_Decimal128, int);
46809     _Decimal64 __builtin_dscri (_Decimal64, int);
46810     _Decimal128 __builtin_dscriq (_Decimal128, int);
46811     long long __builtin_dxex (_Decimal64);
46812     long long __builtin_dxexq (_Decimal128);
46813     _Decimal128 __builtin_pack_dec128 (unsigned long long, unsigned long long);
46814     unsigned long long __builtin_unpack_dec128 (_Decimal128, int);
46815
46816     The __builtin_set_fpscr_drn builtin allows changing the three decimal
46817     floating point rounding mode bits.  The argument is a 3-bit value.  The
46818     argument can either be a const int or the value can be stored in
46819     a variable.
46820     The builtin uses the ISA 3.0 instruction mffscdrn if available.
46821     Otherwise the builtin reads the FPSCR, masks the current decimal rounding
46822     mode bits out and OR's in the new value.
46823
46824
46825 The following functions require '-mhard-float', '-mpowerpc-gfxopt', and
46826'-mpopcntb' options.
46827
46828     double __builtin_recipdiv (double, double);
46829     float __builtin_recipdivf (float, float);
46830     double __builtin_rsqrt (double);
46831     float __builtin_rsqrtf (float);
46832
46833 The 'vec_rsqrt', '__builtin_rsqrt', and '__builtin_rsqrtf' functions
46834generate multiple instructions to implement the reciprocal sqrt
46835functionality using reciprocal sqrt estimate instructions.
46836
46837 The '__builtin_recipdiv', and '__builtin_recipdivf' functions generate
46838multiple instructions to implement division using the reciprocal
46839estimate instructions.
46840
46841 The following functions require '-mhard-float' and '-mmultiple'
46842options.
46843
46844 The '__builtin_unpack_longdouble' function takes a 'long double'
46845argument and a compile time constant of 0 or 1.  If the constant is 0,
46846the first 'double' within the 'long double' is returned, otherwise the
46847second 'double' is returned.  The '__builtin_unpack_longdouble' function
46848is only available if 'long double' uses the IBM extended double
46849representation.
46850
46851 The '__builtin_pack_longdouble' function takes two 'double' arguments
46852and returns a 'long double' value that combines the two arguments.  The
46853'__builtin_pack_longdouble' function is only available if 'long double'
46854uses the IBM extended double representation.
46855
46856 The '__builtin_unpack_ibm128' function takes a '__ibm128' argument and
46857a compile time constant of 0 or 1.  If the constant is 0, the first
46858'double' within the '__ibm128' is returned, otherwise the second
46859'double' is returned.
46860
46861 The '__builtin_pack_ibm128' function takes two 'double' arguments and
46862returns a '__ibm128' value that combines the two arguments.
46863
46864 Additional built-in functions are available for the 64-bit PowerPC
46865family of processors, for efficient use of 128-bit floating point
46866('__float128') values.
46867
46868
46869File: gcc.info,  Node: Basic PowerPC Built-in Functions Available on ISA 2.06,  Next: Basic PowerPC Built-in Functions Available on ISA 2.07,  Prev: Basic PowerPC Built-in Functions Available on ISA 2.05,  Up: Basic PowerPC Built-in Functions
46870
468716.60.23.3 Basic PowerPC Built-in Functions Available on ISA 2.06
46872................................................................
46873
46874The basic built-in functions described in this section are available on
46875the PowerPC family of processors starting with ISA 2.05 or later.
46876Unless specific options are explicitly disabled on the command line,
46877specifying option '-mcpu=power7' has the effect of enabling all the same
46878options as for '-mcpu=power6' in addition to the '-maltivec',
46879'-mpopcntd', and '-mvsx' options.
46880
46881 The following basic built-in functions require '-mpopcntd':
46882     unsigned int __builtin_addg6s (unsigned int, unsigned int);
46883     long long __builtin_bpermd (long long, long long);
46884     unsigned int __builtin_cbcdtd (unsigned int);
46885     unsigned int __builtin_cdtbcd (unsigned int);
46886     long long __builtin_divde (long long, long long);
46887     unsigned long long __builtin_divdeu (unsigned long long, unsigned long long);
46888     int __builtin_divwe (int, int);
46889     unsigned int __builtin_divweu (unsigned int, unsigned int);
46890     vector __int128 __builtin_pack_vector_int128 (long long, long long);
46891     void __builtin_rs6000_speculation_barrier (void);
46892     long long __builtin_unpack_vector_int128 (vector __int128, signed char);
46893
46894 Of these, the '__builtin_divde' and '__builtin_divdeu' functions
46895require a 64-bit environment.
46896
46897 The following basic built-in functions, which are also supported on x86
46898targets, require '-mfloat128'.
46899     __float128 __builtin_fabsq (__float128);
46900     __float128 __builtin_copysignq (__float128, __float128);
46901     __float128 __builtin_infq (void);
46902     __float128 __builtin_huge_valq (void);
46903     __float128 __builtin_nanq (void);
46904     __float128 __builtin_nansq (void);
46905
46906     __float128 __builtin_sqrtf128 (__float128);
46907     __float128 __builtin_fmaf128 (__float128, __float128, __float128);
46908
46909
46910File: gcc.info,  Node: Basic PowerPC Built-in Functions Available on ISA 2.07,  Next: Basic PowerPC Built-in Functions Available on ISA 3.0,  Prev: Basic PowerPC Built-in Functions Available on ISA 2.06,  Up: Basic PowerPC Built-in Functions
46911
469126.60.23.4 Basic PowerPC Built-in Functions Available on ISA 2.07
46913................................................................
46914
46915The basic built-in functions described in this section are available on
46916the PowerPC family of processors starting with ISA 2.07 or later.
46917Unless specific options are explicitly disabled on the command line,
46918specifying option '-mcpu=power8' has the effect of enabling all the same
46919options as for '-mcpu=power7' in addition to the '-mpower8-fusion',
46920'-mpower8-vector', '-mcrypto', '-mhtm', '-mquad-memory', and
46921'-mquad-memory-atomic' options.
46922
46923 This section intentionally empty.
46924
46925
46926File: gcc.info,  Node: Basic PowerPC Built-in Functions Available on ISA 3.0,  Prev: Basic PowerPC Built-in Functions Available on ISA 2.07,  Up: Basic PowerPC Built-in Functions
46927
469286.60.23.5 Basic PowerPC Built-in Functions Available on ISA 3.0
46929...............................................................
46930
46931The basic built-in functions described in this section are available on
46932the PowerPC family of processors starting with ISA 3.0 or later.  Unless
46933specific options are explicitly disabled on the command line, specifying
46934option '-mcpu=power9' has the effect of enabling all the same options as
46935for '-mcpu=power8' in addition to the '-misel' option.
46936
46937 The following built-in functions are available on Linux 64-bit systems
46938that use the ISA 3.0 instruction set ('-mcpu=power9'):
46939
46940'__float128 __builtin_addf128_round_to_odd (__float128, __float128)'
46941     Perform a 128-bit IEEE floating point add using round to odd as the
46942     rounding mode.
46943
46944'__float128 __builtin_subf128_round_to_odd (__float128, __float128)'
46945     Perform a 128-bit IEEE floating point subtract using round to odd
46946     as the rounding mode.
46947
46948'__float128 __builtin_mulf128_round_to_odd (__float128, __float128)'
46949     Perform a 128-bit IEEE floating point multiply using round to odd
46950     as the rounding mode.
46951
46952'__float128 __builtin_divf128_round_to_odd (__float128, __float128)'
46953     Perform a 128-bit IEEE floating point divide using round to odd as
46954     the rounding mode.
46955
46956'__float128 __builtin_sqrtf128_round_to_odd (__float128)'
46957     Perform a 128-bit IEEE floating point square root using round to
46958     odd as the rounding mode.
46959
46960'__float128 __builtin_fmaf128_round_to_odd (__float128, __float128, __float128)'
46961     Perform a 128-bit IEEE floating point fused multiply and add
46962     operation using round to odd as the rounding mode.
46963
46964'double __builtin_truncf128_round_to_odd (__float128)'
46965     Convert a 128-bit IEEE floating point value to 'double' using round
46966     to odd as the rounding mode.
46967
46968 The following additional built-in functions are also available for the
46969PowerPC family of processors, starting with ISA 3.0 or later:
46970     long long __builtin_darn (void);
46971     long long __builtin_darn_raw (void);
46972     int __builtin_darn_32 (void);
46973
46974 The '__builtin_darn' and '__builtin_darn_raw' functions require a
4697564-bit environment supporting ISA 3.0 or later.  The '__builtin_darn'
46976function provides a 64-bit conditioned random number.  The
46977'__builtin_darn_raw' function provides a 64-bit raw random number.  The
46978'__builtin_darn_32' function provides a 32-bit conditioned random
46979number.
46980
46981 The following additional built-in functions are also available for the
46982PowerPC family of processors, starting with ISA 3.0 or later:
46983
46984     int __builtin_byte_in_set (unsigned char u, unsigned long long set);
46985     int __builtin_byte_in_range (unsigned char u, unsigned int range);
46986     int __builtin_byte_in_either_range (unsigned char u, unsigned int ranges);
46987
46988     int __builtin_dfp_dtstsfi_lt (unsigned int comparison, _Decimal64 value);
46989     int __builtin_dfp_dtstsfi_lt (unsigned int comparison, _Decimal128 value);
46990     int __builtin_dfp_dtstsfi_lt_dd (unsigned int comparison, _Decimal64 value);
46991     int __builtin_dfp_dtstsfi_lt_td (unsigned int comparison, _Decimal128 value);
46992
46993     int __builtin_dfp_dtstsfi_gt (unsigned int comparison, _Decimal64 value);
46994     int __builtin_dfp_dtstsfi_gt (unsigned int comparison, _Decimal128 value);
46995     int __builtin_dfp_dtstsfi_gt_dd (unsigned int comparison, _Decimal64 value);
46996     int __builtin_dfp_dtstsfi_gt_td (unsigned int comparison, _Decimal128 value);
46997
46998     int __builtin_dfp_dtstsfi_eq (unsigned int comparison, _Decimal64 value);
46999     int __builtin_dfp_dtstsfi_eq (unsigned int comparison, _Decimal128 value);
47000     int __builtin_dfp_dtstsfi_eq_dd (unsigned int comparison, _Decimal64 value);
47001     int __builtin_dfp_dtstsfi_eq_td (unsigned int comparison, _Decimal128 value);
47002
47003     int __builtin_dfp_dtstsfi_ov (unsigned int comparison, _Decimal64 value);
47004     int __builtin_dfp_dtstsfi_ov (unsigned int comparison, _Decimal128 value);
47005     int __builtin_dfp_dtstsfi_ov_dd (unsigned int comparison, _Decimal64 value);
47006     int __builtin_dfp_dtstsfi_ov_td (unsigned int comparison, _Decimal128 value);
47007
47008     double __builtin_mffsl(void);
47009
47010 The '__builtin_byte_in_set' function requires a 64-bit environment
47011supporting ISA 3.0 or later.  This function returns a non-zero value if
47012and only if its 'u' argument exactly equals one of the eight bytes
47013contained within its 64-bit 'set' argument.
47014
47015 The '__builtin_byte_in_range' and '__builtin_byte_in_either_range'
47016require an environment supporting ISA 3.0 or later.  For these two
47017functions, the 'range' argument is encoded as 4 bytes, organized as
47018'hi_1:lo_1:hi_2:lo_2'.  The '__builtin_byte_in_range' function returns a
47019non-zero value if and only if its 'u' argument is within the range
47020bounded between 'lo_2' and 'hi_2' inclusive.  The
47021'__builtin_byte_in_either_range' function returns non-zero if and only
47022if its 'u' argument is within either the range bounded between 'lo_1'
47023and 'hi_1' inclusive or the range bounded between 'lo_2' and 'hi_2'
47024inclusive.
47025
47026 The '__builtin_dfp_dtstsfi_lt' function returns a non-zero value if and
47027only if the number of signficant digits of its 'value' argument is less
47028than its 'comparison' argument.  The '__builtin_dfp_dtstsfi_lt_dd' and
47029'__builtin_dfp_dtstsfi_lt_td' functions behave similarly, but require
47030that the type of the 'value' argument be '__Decimal64' and
47031'__Decimal128' respectively.
47032
47033 The '__builtin_dfp_dtstsfi_gt' function returns a non-zero value if and
47034only if the number of signficant digits of its 'value' argument is
47035greater than its 'comparison' argument.  The
47036'__builtin_dfp_dtstsfi_gt_dd' and '__builtin_dfp_dtstsfi_gt_td'
47037functions behave similarly, but require that the type of the 'value'
47038argument be '__Decimal64' and '__Decimal128' respectively.
47039
47040 The '__builtin_dfp_dtstsfi_eq' function returns a non-zero value if and
47041only if the number of signficant digits of its 'value' argument equals
47042its 'comparison' argument.  The '__builtin_dfp_dtstsfi_eq_dd' and
47043'__builtin_dfp_dtstsfi_eq_td' functions behave similarly, but require
47044that the type of the 'value' argument be '__Decimal64' and
47045'__Decimal128' respectively.
47046
47047 The '__builtin_dfp_dtstsfi_ov' function returns a non-zero value if and
47048only if its 'value' argument has an undefined number of significant
47049digits, such as when 'value' is an encoding of 'NaN'.  The
47050'__builtin_dfp_dtstsfi_ov_dd' and '__builtin_dfp_dtstsfi_ov_td'
47051functions behave similarly, but require that the type of the 'value'
47052argument be '__Decimal64' and '__Decimal128' respectively.
47053
47054 The '__builtin_mffsl' uses the ISA 3.0 'mffsl' instruction to read the
47055FPSCR. The instruction is a lower latency version of the 'mffs'
47056instruction.  If the 'mffsl' instruction is not available, then the
47057builtin uses the older 'mffs' instruction to read the FPSCR.
47058
47059
47060File: gcc.info,  Node: PowerPC AltiVec/VSX Built-in Functions,  Next: PowerPC Hardware Transactional Memory Built-in Functions,  Prev: Basic PowerPC Built-in Functions,  Up: Target Builtins
47061
470626.60.24 PowerPC AltiVec/VSX Built-in Functions
47063----------------------------------------------
47064
47065GCC provides an interface for the PowerPC family of processors to access
47066the AltiVec operations described in Motorola's AltiVec Programming
47067Interface Manual.  The interface is made available by including
47068'<altivec.h>' and using '-maltivec' and '-mabi=altivec'.  The interface
47069supports the following vector types.
47070
47071     vector unsigned char
47072     vector signed char
47073     vector bool char
47074
47075     vector unsigned short
47076     vector signed short
47077     vector bool short
47078     vector pixel
47079
47080     vector unsigned int
47081     vector signed int
47082     vector bool int
47083     vector float
47084
47085 GCC's implementation of the high-level language interface available
47086from C and C++ code differs from Motorola's documentation in several
47087ways.
47088
47089   * A vector constant is a list of constant expressions within curly
47090     braces.
47091
47092   * A vector initializer requires no cast if the vector constant is of
47093     the same type as the variable it is initializing.
47094
47095   * If 'signed' or 'unsigned' is omitted, the signedness of the vector
47096     type is the default signedness of the base type.  The default
47097     varies depending on the operating system, so a portable program
47098     should always specify the signedness.
47099
47100   * Compiling with '-maltivec' adds keywords '__vector', 'vector',
47101     '__pixel', 'pixel', '__bool' and 'bool'.  When compiling ISO C, the
47102     context-sensitive substitution of the keywords 'vector', 'pixel'
47103     and 'bool' is disabled.  To use them, you must include
47104     '<altivec.h>' instead.
47105
47106   * GCC allows using a 'typedef' name as the type specifier for a
47107     vector type, but only under the following circumstances:
47108
47109        * When using '__vector' instead of 'vector'; for example,
47110
47111               typedef signed short int16;
47112               __vector int16 data;
47113
47114        * When using 'vector' in keyword-and-predefine mode; for
47115          example,
47116
47117               typedef signed short int16;
47118               vector int16 data;
47119
47120          Note that keyword-and-predefine mode is enabled by disabling
47121          GNU extensions (e.g., by using '-std=c11') and including
47122          '<altivec.h>'.
47123
47124   * For C, overloaded functions are implemented with macros so the
47125     following does not work:
47126
47127            vec_add ((vector signed int){1, 2, 3, 4}, foo);
47128
47129     Since 'vec_add' is a macro, the vector constant in the example is
47130     treated as four separate arguments.  Wrap the entire argument in
47131     parentheses for this to work.
47132
47133 _Note:_ Only the '<altivec.h>' interface is supported.  Internally, GCC
47134uses built-in functions to achieve the functionality in the
47135aforementioned header file, but they are not supported and are subject
47136to change without notice.
47137
47138 GCC complies with the OpenPOWER 64-Bit ELF V2 ABI Specification, which
47139may be found at
47140<https://openpowerfoundation.org/?resource_lib=64-bit-elf-v2-abi-specification-power-architecture>.
47141Appendix A of this document lists the vector API interfaces that must be
47142provided by compliant compilers.  Programmers should preferentially use
47143the interfaces described therein.  However, historically GCC has
47144provided additional interfaces for access to vector instructions.  These
47145are briefly described below.
47146
47147* Menu:
47148
47149* PowerPC AltiVec Built-in Functions on ISA 2.05::
47150* PowerPC AltiVec Built-in Functions Available on ISA 2.06::
47151* PowerPC AltiVec Built-in Functions Available on ISA 2.07::
47152* PowerPC AltiVec Built-in Functions Available on ISA 3.0::
47153
47154
47155File: gcc.info,  Node: PowerPC AltiVec Built-in Functions on ISA 2.05,  Next: PowerPC AltiVec Built-in Functions Available on ISA 2.06,  Up: PowerPC AltiVec/VSX Built-in Functions
47156
471576.60.24.1 PowerPC AltiVec Built-in Functions on ISA 2.05
47158........................................................
47159
47160The following interfaces are supported for the generic and specific
47161AltiVec operations and the AltiVec predicates.  In cases where there is
47162a direct mapping between generic and specific operations, only the
47163generic names are shown here, although the specific operations can also
47164be used.
47165
47166 Arguments that are documented as 'const int' require literal integral
47167values within the range required for that operation.
47168
47169     vector signed char vec_abs (vector signed char);
47170     vector signed short vec_abs (vector signed short);
47171     vector signed int vec_abs (vector signed int);
47172     vector float vec_abs (vector float);
47173
47174     vector signed char vec_abss (vector signed char);
47175     vector signed short vec_abss (vector signed short);
47176     vector signed int vec_abss (vector signed int);
47177
47178     vector signed char vec_add (vector bool char, vector signed char);
47179     vector signed char vec_add (vector signed char, vector bool char);
47180     vector signed char vec_add (vector signed char, vector signed char);
47181     vector unsigned char vec_add (vector bool char, vector unsigned char);
47182     vector unsigned char vec_add (vector unsigned char, vector bool char);
47183     vector unsigned char vec_add (vector unsigned char, vector unsigned char);
47184     vector signed short vec_add (vector bool short, vector signed short);
47185     vector signed short vec_add (vector signed short, vector bool short);
47186     vector signed short vec_add (vector signed short, vector signed short);
47187     vector unsigned short vec_add (vector bool short, vector unsigned short);
47188     vector unsigned short vec_add (vector unsigned short, vector bool short);
47189     vector unsigned short vec_add (vector unsigned short, vector unsigned short);
47190     vector signed int vec_add (vector bool int, vector signed int);
47191     vector signed int vec_add (vector signed int, vector bool int);
47192     vector signed int vec_add (vector signed int, vector signed int);
47193     vector unsigned int vec_add (vector bool int, vector unsigned int);
47194     vector unsigned int vec_add (vector unsigned int, vector bool int);
47195     vector unsigned int vec_add (vector unsigned int, vector unsigned int);
47196     vector float vec_add (vector float, vector float);
47197
47198     vector unsigned int vec_addc (vector unsigned int, vector unsigned int);
47199
47200     vector unsigned char vec_adds (vector bool char, vector unsigned char);
47201     vector unsigned char vec_adds (vector unsigned char, vector bool char);
47202     vector unsigned char vec_adds (vector unsigned char, vector unsigned char);
47203     vector signed char vec_adds (vector bool char, vector signed char);
47204     vector signed char vec_adds (vector signed char, vector bool char);
47205     vector signed char vec_adds (vector signed char, vector signed char);
47206     vector unsigned short vec_adds (vector bool short, vector unsigned short);
47207     vector unsigned short vec_adds (vector unsigned short, vector bool short);
47208     vector unsigned short vec_adds (vector unsigned short, vector unsigned short);
47209     vector signed short vec_adds (vector bool short, vector signed short);
47210     vector signed short vec_adds (vector signed short, vector bool short);
47211     vector signed short vec_adds (vector signed short, vector signed short);
47212     vector unsigned int vec_adds (vector bool int, vector unsigned int);
47213     vector unsigned int vec_adds (vector unsigned int, vector bool int);
47214     vector unsigned int vec_adds (vector unsigned int, vector unsigned int);
47215     vector signed int vec_adds (vector bool int, vector signed int);
47216     vector signed int vec_adds (vector signed int, vector bool int);
47217     vector signed int vec_adds (vector signed int, vector signed int);
47218
47219     int vec_all_eq (vector signed char, vector bool char);
47220     int vec_all_eq (vector signed char, vector signed char);
47221     int vec_all_eq (vector unsigned char, vector bool char);
47222     int vec_all_eq (vector unsigned char, vector unsigned char);
47223     int vec_all_eq (vector bool char, vector bool char);
47224     int vec_all_eq (vector bool char, vector unsigned char);
47225     int vec_all_eq (vector bool char, vector signed char);
47226     int vec_all_eq (vector signed short, vector bool short);
47227     int vec_all_eq (vector signed short, vector signed short);
47228     int vec_all_eq (vector unsigned short, vector bool short);
47229     int vec_all_eq (vector unsigned short, vector unsigned short);
47230     int vec_all_eq (vector bool short, vector bool short);
47231     int vec_all_eq (vector bool short, vector unsigned short);
47232     int vec_all_eq (vector bool short, vector signed short);
47233     int vec_all_eq (vector pixel, vector pixel);
47234     int vec_all_eq (vector signed int, vector bool int);
47235     int vec_all_eq (vector signed int, vector signed int);
47236     int vec_all_eq (vector unsigned int, vector bool int);
47237     int vec_all_eq (vector unsigned int, vector unsigned int);
47238     int vec_all_eq (vector bool int, vector bool int);
47239     int vec_all_eq (vector bool int, vector unsigned int);
47240     int vec_all_eq (vector bool int, vector signed int);
47241     int vec_all_eq (vector float, vector float);
47242
47243     int vec_all_ge (vector bool char, vector unsigned char);
47244     int vec_all_ge (vector unsigned char, vector bool char);
47245     int vec_all_ge (vector unsigned char, vector unsigned char);
47246     int vec_all_ge (vector bool char, vector signed char);
47247     int vec_all_ge (vector signed char, vector bool char);
47248     int vec_all_ge (vector signed char, vector signed char);
47249     int vec_all_ge (vector bool short, vector unsigned short);
47250     int vec_all_ge (vector unsigned short, vector bool short);
47251     int vec_all_ge (vector unsigned short, vector unsigned short);
47252     int vec_all_ge (vector signed short, vector signed short);
47253     int vec_all_ge (vector bool short, vector signed short);
47254     int vec_all_ge (vector signed short, vector bool short);
47255     int vec_all_ge (vector bool int, vector unsigned int);
47256     int vec_all_ge (vector unsigned int, vector bool int);
47257     int vec_all_ge (vector unsigned int, vector unsigned int);
47258     int vec_all_ge (vector bool int, vector signed int);
47259     int vec_all_ge (vector signed int, vector bool int);
47260     int vec_all_ge (vector signed int, vector signed int);
47261     int vec_all_ge (vector float, vector float);
47262
47263     int vec_all_gt (vector bool char, vector unsigned char);
47264     int vec_all_gt (vector unsigned char, vector bool char);
47265     int vec_all_gt (vector unsigned char, vector unsigned char);
47266     int vec_all_gt (vector bool char, vector signed char);
47267     int vec_all_gt (vector signed char, vector bool char);
47268     int vec_all_gt (vector signed char, vector signed char);
47269     int vec_all_gt (vector bool short, vector unsigned short);
47270     int vec_all_gt (vector unsigned short, vector bool short);
47271     int vec_all_gt (vector unsigned short, vector unsigned short);
47272     int vec_all_gt (vector bool short, vector signed short);
47273     int vec_all_gt (vector signed short, vector bool short);
47274     int vec_all_gt (vector signed short, vector signed short);
47275     int vec_all_gt (vector bool int, vector unsigned int);
47276     int vec_all_gt (vector unsigned int, vector bool int);
47277     int vec_all_gt (vector unsigned int, vector unsigned int);
47278     int vec_all_gt (vector bool int, vector signed int);
47279     int vec_all_gt (vector signed int, vector bool int);
47280     int vec_all_gt (vector signed int, vector signed int);
47281     int vec_all_gt (vector float, vector float);
47282
47283     int vec_all_in (vector float, vector float);
47284
47285     int vec_all_le (vector bool char, vector unsigned char);
47286     int vec_all_le (vector unsigned char, vector bool char);
47287     int vec_all_le (vector unsigned char, vector unsigned char);
47288     int vec_all_le (vector bool char, vector signed char);
47289     int vec_all_le (vector signed char, vector bool char);
47290     int vec_all_le (vector signed char, vector signed char);
47291     int vec_all_le (vector bool short, vector unsigned short);
47292     int vec_all_le (vector unsigned short, vector bool short);
47293     int vec_all_le (vector unsigned short, vector unsigned short);
47294     int vec_all_le (vector bool short, vector signed short);
47295     int vec_all_le (vector signed short, vector bool short);
47296     int vec_all_le (vector signed short, vector signed short);
47297     int vec_all_le (vector bool int, vector unsigned int);
47298     int vec_all_le (vector unsigned int, vector bool int);
47299     int vec_all_le (vector unsigned int, vector unsigned int);
47300     int vec_all_le (vector bool int, vector signed int);
47301     int vec_all_le (vector signed int, vector bool int);
47302     int vec_all_le (vector signed int, vector signed int);
47303     int vec_all_le (vector float, vector float);
47304
47305     int vec_all_lt (vector bool char, vector unsigned char);
47306     int vec_all_lt (vector unsigned char, vector bool char);
47307     int vec_all_lt (vector unsigned char, vector unsigned char);
47308     int vec_all_lt (vector bool char, vector signed char);
47309     int vec_all_lt (vector signed char, vector bool char);
47310     int vec_all_lt (vector signed char, vector signed char);
47311     int vec_all_lt (vector bool short, vector unsigned short);
47312     int vec_all_lt (vector unsigned short, vector bool short);
47313     int vec_all_lt (vector unsigned short, vector unsigned short);
47314     int vec_all_lt (vector bool short, vector signed short);
47315     int vec_all_lt (vector signed short, vector bool short);
47316     int vec_all_lt (vector signed short, vector signed short);
47317     int vec_all_lt (vector bool int, vector unsigned int);
47318     int vec_all_lt (vector unsigned int, vector bool int);
47319     int vec_all_lt (vector unsigned int, vector unsigned int);
47320     int vec_all_lt (vector bool int, vector signed int);
47321     int vec_all_lt (vector signed int, vector bool int);
47322     int vec_all_lt (vector signed int, vector signed int);
47323     int vec_all_lt (vector float, vector float);
47324
47325     int vec_all_nan (vector float);
47326
47327     int vec_all_ne (vector signed char, vector bool char);
47328     int vec_all_ne (vector signed char, vector signed char);
47329     int vec_all_ne (vector unsigned char, vector bool char);
47330     int vec_all_ne (vector unsigned char, vector unsigned char);
47331     int vec_all_ne (vector bool char, vector bool char);
47332     int vec_all_ne (vector bool char, vector unsigned char);
47333     int vec_all_ne (vector bool char, vector signed char);
47334     int vec_all_ne (vector signed short, vector bool short);
47335     int vec_all_ne (vector signed short, vector signed short);
47336     int vec_all_ne (vector unsigned short, vector bool short);
47337     int vec_all_ne (vector unsigned short, vector unsigned short);
47338     int vec_all_ne (vector bool short, vector bool short);
47339     int vec_all_ne (vector bool short, vector unsigned short);
47340     int vec_all_ne (vector bool short, vector signed short);
47341     int vec_all_ne (vector pixel, vector pixel);
47342     int vec_all_ne (vector signed int, vector bool int);
47343     int vec_all_ne (vector signed int, vector signed int);
47344     int vec_all_ne (vector unsigned int, vector bool int);
47345     int vec_all_ne (vector unsigned int, vector unsigned int);
47346     int vec_all_ne (vector bool int, vector bool int);
47347     int vec_all_ne (vector bool int, vector unsigned int);
47348     int vec_all_ne (vector bool int, vector signed int);
47349     int vec_all_ne (vector float, vector float);
47350
47351     int vec_all_nge (vector float, vector float);
47352
47353     int vec_all_ngt (vector float, vector float);
47354
47355     int vec_all_nle (vector float, vector float);
47356
47357     int vec_all_nlt (vector float, vector float);
47358
47359     int vec_all_numeric (vector float);
47360
47361     vector float vec_and (vector float, vector float);
47362     vector float vec_and (vector float, vector bool int);
47363     vector float vec_and (vector bool int, vector float);
47364     vector bool int vec_and (vector bool int, vector bool int);
47365     vector signed int vec_and (vector bool int, vector signed int);
47366     vector signed int vec_and (vector signed int, vector bool int);
47367     vector signed int vec_and (vector signed int, vector signed int);
47368     vector unsigned int vec_and (vector bool int, vector unsigned int);
47369     vector unsigned int vec_and (vector unsigned int, vector bool int);
47370     vector unsigned int vec_and (vector unsigned int, vector unsigned int);
47371     vector bool short vec_and (vector bool short, vector bool short);
47372     vector signed short vec_and (vector bool short, vector signed short);
47373     vector signed short vec_and (vector signed short, vector bool short);
47374     vector signed short vec_and (vector signed short, vector signed short);
47375     vector unsigned short vec_and (vector bool short, vector unsigned short);
47376     vector unsigned short vec_and (vector unsigned short, vector bool short);
47377     vector unsigned short vec_and (vector unsigned short, vector unsigned short);
47378     vector signed char vec_and (vector bool char, vector signed char);
47379     vector bool char vec_and (vector bool char, vector bool char);
47380     vector signed char vec_and (vector signed char, vector bool char);
47381     vector signed char vec_and (vector signed char, vector signed char);
47382     vector unsigned char vec_and (vector bool char, vector unsigned char);
47383     vector unsigned char vec_and (vector unsigned char, vector bool char);
47384     vector unsigned char vec_and (vector unsigned char, vector unsigned char);
47385
47386     vector float vec_andc (vector float, vector float);
47387     vector float vec_andc (vector float, vector bool int);
47388     vector float vec_andc (vector bool int, vector float);
47389     vector bool int vec_andc (vector bool int, vector bool int);
47390     vector signed int vec_andc (vector bool int, vector signed int);
47391     vector signed int vec_andc (vector signed int, vector bool int);
47392     vector signed int vec_andc (vector signed int, vector signed int);
47393     vector unsigned int vec_andc (vector bool int, vector unsigned int);
47394     vector unsigned int vec_andc (vector unsigned int, vector bool int);
47395     vector unsigned int vec_andc (vector unsigned int, vector unsigned int);
47396     vector bool short vec_andc (vector bool short, vector bool short);
47397     vector signed short vec_andc (vector bool short, vector signed short);
47398     vector signed short vec_andc (vector signed short, vector bool short);
47399     vector signed short vec_andc (vector signed short, vector signed short);
47400     vector unsigned short vec_andc (vector bool short, vector unsigned short);
47401     vector unsigned short vec_andc (vector unsigned short, vector bool short);
47402     vector unsigned short vec_andc (vector unsigned short, vector unsigned short);
47403     vector signed char vec_andc (vector bool char, vector signed char);
47404     vector bool char vec_andc (vector bool char, vector bool char);
47405     vector signed char vec_andc (vector signed char, vector bool char);
47406     vector signed char vec_andc (vector signed char, vector signed char);
47407     vector unsigned char vec_andc (vector bool char, vector unsigned char);
47408     vector unsigned char vec_andc (vector unsigned char, vector bool char);
47409     vector unsigned char vec_andc (vector unsigned char, vector unsigned char);
47410
47411     int vec_any_eq (vector signed char, vector bool char);
47412     int vec_any_eq (vector signed char, vector signed char);
47413     int vec_any_eq (vector unsigned char, vector bool char);
47414     int vec_any_eq (vector unsigned char, vector unsigned char);
47415     int vec_any_eq (vector bool char, vector bool char);
47416     int vec_any_eq (vector bool char, vector unsigned char);
47417     int vec_any_eq (vector bool char, vector signed char);
47418     int vec_any_eq (vector signed short, vector bool short);
47419     int vec_any_eq (vector signed short, vector signed short);
47420     int vec_any_eq (vector unsigned short, vector bool short);
47421     int vec_any_eq (vector unsigned short, vector unsigned short);
47422     int vec_any_eq (vector bool short, vector bool short);
47423     int vec_any_eq (vector bool short, vector unsigned short);
47424     int vec_any_eq (vector bool short, vector signed short);
47425     int vec_any_eq (vector pixel, vector pixel);
47426     int vec_any_eq (vector signed int, vector bool int);
47427     int vec_any_eq (vector signed int, vector signed int);
47428     int vec_any_eq (vector unsigned int, vector bool int);
47429     int vec_any_eq (vector unsigned int, vector unsigned int);
47430     int vec_any_eq (vector bool int, vector bool int);
47431     int vec_any_eq (vector bool int, vector unsigned int);
47432     int vec_any_eq (vector bool int, vector signed int);
47433     int vec_any_eq (vector float, vector float);
47434
47435     int vec_any_ge (vector signed char, vector bool char);
47436     int vec_any_ge (vector unsigned char, vector bool char);
47437     int vec_any_ge (vector unsigned char, vector unsigned char);
47438     int vec_any_ge (vector signed char, vector signed char);
47439     int vec_any_ge (vector bool char, vector unsigned char);
47440     int vec_any_ge (vector bool char, vector signed char);
47441     int vec_any_ge (vector unsigned short, vector bool short);
47442     int vec_any_ge (vector unsigned short, vector unsigned short);
47443     int vec_any_ge (vector signed short, vector signed short);
47444     int vec_any_ge (vector signed short, vector bool short);
47445     int vec_any_ge (vector bool short, vector unsigned short);
47446     int vec_any_ge (vector bool short, vector signed short);
47447     int vec_any_ge (vector signed int, vector bool int);
47448     int vec_any_ge (vector unsigned int, vector bool int);
47449     int vec_any_ge (vector unsigned int, vector unsigned int);
47450     int vec_any_ge (vector signed int, vector signed int);
47451     int vec_any_ge (vector bool int, vector unsigned int);
47452     int vec_any_ge (vector bool int, vector signed int);
47453     int vec_any_ge (vector float, vector float);
47454
47455     int vec_any_gt (vector bool char, vector unsigned char);
47456     int vec_any_gt (vector unsigned char, vector bool char);
47457     int vec_any_gt (vector unsigned char, vector unsigned char);
47458     int vec_any_gt (vector bool char, vector signed char);
47459     int vec_any_gt (vector signed char, vector bool char);
47460     int vec_any_gt (vector signed char, vector signed char);
47461     int vec_any_gt (vector bool short, vector unsigned short);
47462     int vec_any_gt (vector unsigned short, vector bool short);
47463     int vec_any_gt (vector unsigned short, vector unsigned short);
47464     int vec_any_gt (vector bool short, vector signed short);
47465     int vec_any_gt (vector signed short, vector bool short);
47466     int vec_any_gt (vector signed short, vector signed short);
47467     int vec_any_gt (vector bool int, vector unsigned int);
47468     int vec_any_gt (vector unsigned int, vector bool int);
47469     int vec_any_gt (vector unsigned int, vector unsigned int);
47470     int vec_any_gt (vector bool int, vector signed int);
47471     int vec_any_gt (vector signed int, vector bool int);
47472     int vec_any_gt (vector signed int, vector signed int);
47473     int vec_any_gt (vector float, vector float);
47474
47475     int vec_any_le (vector bool char, vector unsigned char);
47476     int vec_any_le (vector unsigned char, vector bool char);
47477     int vec_any_le (vector unsigned char, vector unsigned char);
47478     int vec_any_le (vector bool char, vector signed char);
47479     int vec_any_le (vector signed char, vector bool char);
47480     int vec_any_le (vector signed char, vector signed char);
47481     int vec_any_le (vector bool short, vector unsigned short);
47482     int vec_any_le (vector unsigned short, vector bool short);
47483     int vec_any_le (vector unsigned short, vector unsigned short);
47484     int vec_any_le (vector bool short, vector signed short);
47485     int vec_any_le (vector signed short, vector bool short);
47486     int vec_any_le (vector signed short, vector signed short);
47487     int vec_any_le (vector bool int, vector unsigned int);
47488     int vec_any_le (vector unsigned int, vector bool int);
47489     int vec_any_le (vector unsigned int, vector unsigned int);
47490     int vec_any_le (vector bool int, vector signed int);
47491     int vec_any_le (vector signed int, vector bool int);
47492     int vec_any_le (vector signed int, vector signed int);
47493     int vec_any_le (vector float, vector float);
47494
47495     int vec_any_lt (vector bool char, vector unsigned char);
47496     int vec_any_lt (vector unsigned char, vector bool char);
47497     int vec_any_lt (vector unsigned char, vector unsigned char);
47498     int vec_any_lt (vector bool char, vector signed char);
47499     int vec_any_lt (vector signed char, vector bool char);
47500     int vec_any_lt (vector signed char, vector signed char);
47501     int vec_any_lt (vector bool short, vector unsigned short);
47502     int vec_any_lt (vector unsigned short, vector bool short);
47503     int vec_any_lt (vector unsigned short, vector unsigned short);
47504     int vec_any_lt (vector bool short, vector signed short);
47505     int vec_any_lt (vector signed short, vector bool short);
47506     int vec_any_lt (vector signed short, vector signed short);
47507     int vec_any_lt (vector bool int, vector unsigned int);
47508     int vec_any_lt (vector unsigned int, vector bool int);
47509     int vec_any_lt (vector unsigned int, vector unsigned int);
47510     int vec_any_lt (vector bool int, vector signed int);
47511     int vec_any_lt (vector signed int, vector bool int);
47512     int vec_any_lt (vector signed int, vector signed int);
47513     int vec_any_lt (vector float, vector float);
47514
47515     int vec_any_nan (vector float);
47516
47517     int vec_any_ne (vector signed char, vector bool char);
47518     int vec_any_ne (vector signed char, vector signed char);
47519     int vec_any_ne (vector unsigned char, vector bool char);
47520     int vec_any_ne (vector unsigned char, vector unsigned char);
47521     int vec_any_ne (vector bool char, vector bool char);
47522     int vec_any_ne (vector bool char, vector unsigned char);
47523     int vec_any_ne (vector bool char, vector signed char);
47524     int vec_any_ne (vector signed short, vector bool short);
47525     int vec_any_ne (vector signed short, vector signed short);
47526     int vec_any_ne (vector unsigned short, vector bool short);
47527     int vec_any_ne (vector unsigned short, vector unsigned short);
47528     int vec_any_ne (vector bool short, vector bool short);
47529     int vec_any_ne (vector bool short, vector unsigned short);
47530     int vec_any_ne (vector bool short, vector signed short);
47531     int vec_any_ne (vector pixel, vector pixel);
47532     int vec_any_ne (vector signed int, vector bool int);
47533     int vec_any_ne (vector signed int, vector signed int);
47534     int vec_any_ne (vector unsigned int, vector bool int);
47535     int vec_any_ne (vector unsigned int, vector unsigned int);
47536     int vec_any_ne (vector bool int, vector bool int);
47537     int vec_any_ne (vector bool int, vector unsigned int);
47538     int vec_any_ne (vector bool int, vector signed int);
47539     int vec_any_ne (vector float, vector float);
47540
47541     int vec_any_nge (vector float, vector float);
47542
47543     int vec_any_ngt (vector float, vector float);
47544
47545     int vec_any_nle (vector float, vector float);
47546
47547     int vec_any_nlt (vector float, vector float);
47548
47549     int vec_any_numeric (vector float);
47550
47551     int vec_any_out (vector float, vector float);
47552
47553     vector unsigned char vec_avg (vector unsigned char, vector unsigned char);
47554     vector signed char vec_avg (vector signed char, vector signed char);
47555     vector unsigned short vec_avg (vector unsigned short, vector unsigned short);
47556     vector signed short vec_avg (vector signed short, vector signed short);
47557     vector unsigned int vec_avg (vector unsigned int, vector unsigned int);
47558     vector signed int vec_avg (vector signed int, vector signed int);
47559
47560     vector float vec_ceil (vector float);
47561
47562     vector signed int vec_cmpb (vector float, vector float);
47563
47564     vector bool char vec_cmpeq (vector bool char, vector bool char);
47565     vector bool short vec_cmpeq (vector bool short, vector bool short);
47566     vector bool int vec_cmpeq (vector bool int, vector bool int);
47567     vector bool char vec_cmpeq (vector signed char, vector signed char);
47568     vector bool char vec_cmpeq (vector unsigned char, vector unsigned char);
47569     vector bool short vec_cmpeq (vector signed short, vector signed short);
47570     vector bool short vec_cmpeq (vector unsigned short, vector unsigned short);
47571     vector bool int vec_cmpeq (vector signed int, vector signed int);
47572     vector bool int vec_cmpeq (vector unsigned int, vector unsigned int);
47573     vector bool int vec_cmpeq (vector float, vector float);
47574
47575     vector bool int vec_cmpge (vector float, vector float);
47576
47577     vector bool char vec_cmpgt (vector unsigned char, vector unsigned char);
47578     vector bool char vec_cmpgt (vector signed char, vector signed char);
47579     vector bool short vec_cmpgt (vector unsigned short, vector unsigned short);
47580     vector bool short vec_cmpgt (vector signed short, vector signed short);
47581     vector bool int vec_cmpgt (vector unsigned int, vector unsigned int);
47582     vector bool int vec_cmpgt (vector signed int, vector signed int);
47583     vector bool int vec_cmpgt (vector float, vector float);
47584
47585     vector bool int vec_cmple (vector float, vector float);
47586
47587     vector bool char vec_cmplt (vector unsigned char, vector unsigned char);
47588     vector bool char vec_cmplt (vector signed char, vector signed char);
47589     vector bool short vec_cmplt (vector unsigned short, vector unsigned short);
47590     vector bool short vec_cmplt (vector signed short, vector signed short);
47591     vector bool int vec_cmplt (vector unsigned int, vector unsigned int);
47592     vector bool int vec_cmplt (vector signed int, vector signed int);
47593     vector bool int vec_cmplt (vector float, vector float);
47594
47595     vector float vec_cpsgn (vector float, vector float);
47596
47597     vector float vec_ctf (vector unsigned int, const int);
47598     vector float vec_ctf (vector signed int, const int);
47599
47600     vector signed int vec_cts (vector float, const int);
47601
47602     vector unsigned int vec_ctu (vector float, const int);
47603
47604     void vec_dss (const int);
47605
47606     void vec_dssall (void);
47607
47608     void vec_dst (const vector unsigned char *, int, const int);
47609     void vec_dst (const vector signed char *, int, const int);
47610     void vec_dst (const vector bool char *, int, const int);
47611     void vec_dst (const vector unsigned short *, int, const int);
47612     void vec_dst (const vector signed short *, int, const int);
47613     void vec_dst (const vector bool short *, int, const int);
47614     void vec_dst (const vector pixel *, int, const int);
47615     void vec_dst (const vector unsigned int *, int, const int);
47616     void vec_dst (const vector signed int *, int, const int);
47617     void vec_dst (const vector bool int *, int, const int);
47618     void vec_dst (const vector float *, int, const int);
47619     void vec_dst (const unsigned char *, int, const int);
47620     void vec_dst (const signed char *, int, const int);
47621     void vec_dst (const unsigned short *, int, const int);
47622     void vec_dst (const short *, int, const int);
47623     void vec_dst (const unsigned int *, int, const int);
47624     void vec_dst (const int *, int, const int);
47625     void vec_dst (const float *, int, const int);
47626
47627     void vec_dstst (const vector unsigned char *, int, const int);
47628     void vec_dstst (const vector signed char *, int, const int);
47629     void vec_dstst (const vector bool char *, int, const int);
47630     void vec_dstst (const vector unsigned short *, int, const int);
47631     void vec_dstst (const vector signed short *, int, const int);
47632     void vec_dstst (const vector bool short *, int, const int);
47633     void vec_dstst (const vector pixel *, int, const int);
47634     void vec_dstst (const vector unsigned int *, int, const int);
47635     void vec_dstst (const vector signed int *, int, const int);
47636     void vec_dstst (const vector bool int *, int, const int);
47637     void vec_dstst (const vector float *, int, const int);
47638     void vec_dstst (const unsigned char *, int, const int);
47639     void vec_dstst (const signed char *, int, const int);
47640     void vec_dstst (const unsigned short *, int, const int);
47641     void vec_dstst (const short *, int, const int);
47642     void vec_dstst (const unsigned int *, int, const int);
47643     void vec_dstst (const int *, int, const int);
47644     void vec_dstst (const unsigned long *, int, const int);
47645     void vec_dstst (const long *, int, const int);
47646     void vec_dstst (const float *, int, const int);
47647
47648     void vec_dststt (const vector unsigned char *, int, const int);
47649     void vec_dststt (const vector signed char *, int, const int);
47650     void vec_dststt (const vector bool char *, int, const int);
47651     void vec_dststt (const vector unsigned short *, int, const int);
47652     void vec_dststt (const vector signed short *, int, const int);
47653     void vec_dststt (const vector bool short *, int, const int);
47654     void vec_dststt (const vector pixel *, int, const int);
47655     void vec_dststt (const vector unsigned int *, int, const int);
47656     void vec_dststt (const vector signed int *, int, const int);
47657     void vec_dststt (const vector bool int *, int, const int);
47658     void vec_dststt (const vector float *, int, const int);
47659     void vec_dststt (const unsigned char *, int, const int);
47660     void vec_dststt (const signed char *, int, const int);
47661     void vec_dststt (const unsigned short *, int, const int);
47662     void vec_dststt (const short *, int, const int);
47663     void vec_dststt (const unsigned int *, int, const int);
47664     void vec_dststt (const int *, int, const int);
47665     void vec_dststt (const float *, int, const int);
47666
47667     void vec_dstt (const vector unsigned char *, int, const int);
47668     void vec_dstt (const vector signed char *, int, const int);
47669     void vec_dstt (const vector bool char *, int, const int);
47670     void vec_dstt (const vector unsigned short *, int, const int);
47671     void vec_dstt (const vector signed short *, int, const int);
47672     void vec_dstt (const vector bool short *, int, const int);
47673     void vec_dstt (const vector pixel *, int, const int);
47674     void vec_dstt (const vector unsigned int *, int, const int);
47675     void vec_dstt (const vector signed int *, int, const int);
47676     void vec_dstt (const vector bool int *, int, const int);
47677     void vec_dstt (const vector float *, int, const int);
47678     void vec_dstt (const unsigned char *, int, const int);
47679     void vec_dstt (const signed char *, int, const int);
47680     void vec_dstt (const unsigned short *, int, const int);
47681     void vec_dstt (const short *, int, const int);
47682     void vec_dstt (const unsigned int *, int, const int);
47683     void vec_dstt (const int *, int, const int);
47684     void vec_dstt (const float *, int, const int);
47685
47686     vector float vec_expte (vector float);
47687
47688     vector float vec_floor (vector float);
47689
47690     vector float vec_ld (int, const vector float *);
47691     vector float vec_ld (int, const float *);
47692     vector bool int vec_ld (int, const vector bool int *);
47693     vector signed int vec_ld (int, const vector signed int *);
47694     vector signed int vec_ld (int, const int *);
47695     vector unsigned int vec_ld (int, const vector unsigned int *);
47696     vector unsigned int vec_ld (int, const unsigned int *);
47697     vector bool short vec_ld (int, const vector bool short *);
47698     vector pixel vec_ld (int, const vector pixel *);
47699     vector signed short vec_ld (int, const vector signed short *);
47700     vector signed short vec_ld (int, const short *);
47701     vector unsigned short vec_ld (int, const vector unsigned short *);
47702     vector unsigned short vec_ld (int, const unsigned short *);
47703     vector bool char vec_ld (int, const vector bool char *);
47704     vector signed char vec_ld (int, const vector signed char *);
47705     vector signed char vec_ld (int, const signed char *);
47706     vector unsigned char vec_ld (int, const vector unsigned char *);
47707     vector unsigned char vec_ld (int, const unsigned char *);
47708
47709     vector signed char vec_lde (int, const signed char *);
47710     vector unsigned char vec_lde (int, const unsigned char *);
47711     vector signed short vec_lde (int, const short *);
47712     vector unsigned short vec_lde (int, const unsigned short *);
47713     vector float vec_lde (int, const float *);
47714     vector signed int vec_lde (int, const int *);
47715     vector unsigned int vec_lde (int, const unsigned int *);
47716
47717     vector float vec_ldl (int, const vector float *);
47718     vector float vec_ldl (int, const float *);
47719     vector bool int vec_ldl (int, const vector bool int *);
47720     vector signed int vec_ldl (int, const vector signed int *);
47721     vector signed int vec_ldl (int, const int *);
47722     vector unsigned int vec_ldl (int, const vector unsigned int *);
47723     vector unsigned int vec_ldl (int, const unsigned int *);
47724     vector bool short vec_ldl (int, const vector bool short *);
47725     vector pixel vec_ldl (int, const vector pixel *);
47726     vector signed short vec_ldl (int, const vector signed short *);
47727     vector signed short vec_ldl (int, const short *);
47728     vector unsigned short vec_ldl (int, const vector unsigned short *);
47729     vector unsigned short vec_ldl (int, const unsigned short *);
47730     vector bool char vec_ldl (int, const vector bool char *);
47731     vector signed char vec_ldl (int, const vector signed char *);
47732     vector signed char vec_ldl (int, const signed char *);
47733     vector unsigned char vec_ldl (int, const vector unsigned char *);
47734     vector unsigned char vec_ldl (int, const unsigned char *);
47735
47736     vector float vec_loge (vector float);
47737
47738     vector signed char vec_lvebx (int, char *);
47739     vector unsigned char vec_lvebx (int, unsigned char *);
47740
47741     vector signed short vec_lvehx (int, short *);
47742     vector unsigned short vec_lvehx (int, unsigned short *);
47743
47744     vector float vec_lvewx (int, float *);
47745     vector signed int vec_lvewx (int, int *);
47746     vector unsigned int vec_lvewx (int, unsigned int *);
47747
47748     vector unsigned char vec_lvsl (int, const unsigned char *);
47749     vector unsigned char vec_lvsl (int, const signed char *);
47750     vector unsigned char vec_lvsl (int, const unsigned short *);
47751     vector unsigned char vec_lvsl (int, const short *);
47752     vector unsigned char vec_lvsl (int, const unsigned int *);
47753     vector unsigned char vec_lvsl (int, const int *);
47754     vector unsigned char vec_lvsl (int, const float *);
47755
47756     vector unsigned char vec_lvsr (int, const unsigned char *);
47757     vector unsigned char vec_lvsr (int, const signed char *);
47758     vector unsigned char vec_lvsr (int, const unsigned short *);
47759     vector unsigned char vec_lvsr (int, const short *);
47760     vector unsigned char vec_lvsr (int, const unsigned int *);
47761     vector unsigned char vec_lvsr (int, const int *);
47762     vector unsigned char vec_lvsr (int, const float *);
47763
47764     vector float vec_madd (vector float, vector float, vector float);
47765
47766     vector signed short vec_madds (vector signed short, vector signed short,
47767                                    vector signed short);
47768
47769     vector unsigned char vec_max (vector bool char, vector unsigned char);
47770     vector unsigned char vec_max (vector unsigned char, vector bool char);
47771     vector unsigned char vec_max (vector unsigned char, vector unsigned char);
47772     vector signed char vec_max (vector bool char, vector signed char);
47773     vector signed char vec_max (vector signed char, vector bool char);
47774     vector signed char vec_max (vector signed char, vector signed char);
47775     vector unsigned short vec_max (vector bool short, vector unsigned short);
47776     vector unsigned short vec_max (vector unsigned short, vector bool short);
47777     vector unsigned short vec_max (vector unsigned short, vector unsigned short);
47778     vector signed short vec_max (vector bool short, vector signed short);
47779     vector signed short vec_max (vector signed short, vector bool short);
47780     vector signed short vec_max (vector signed short, vector signed short);
47781     vector unsigned int vec_max (vector bool int, vector unsigned int);
47782     vector unsigned int vec_max (vector unsigned int, vector bool int);
47783     vector unsigned int vec_max (vector unsigned int, vector unsigned int);
47784     vector signed int vec_max (vector bool int, vector signed int);
47785     vector signed int vec_max (vector signed int, vector bool int);
47786     vector signed int vec_max (vector signed int, vector signed int);
47787     vector float vec_max (vector float, vector float);
47788
47789     vector bool char vec_mergeh (vector bool char, vector bool char);
47790     vector signed char vec_mergeh (vector signed char, vector signed char);
47791     vector unsigned char vec_mergeh (vector unsigned char, vector unsigned char);
47792     vector bool short vec_mergeh (vector bool short, vector bool short);
47793     vector pixel vec_mergeh (vector pixel, vector pixel);
47794     vector signed short vec_mergeh (vector signed short, vector signed short);
47795     vector unsigned short vec_mergeh (vector unsigned short, vector unsigned short);
47796     vector float vec_mergeh (vector float, vector float);
47797     vector bool int vec_mergeh (vector bool int, vector bool int);
47798     vector signed int vec_mergeh (vector signed int, vector signed int);
47799     vector unsigned int vec_mergeh (vector unsigned int, vector unsigned int);
47800
47801     vector bool char vec_mergel (vector bool char, vector bool char);
47802     vector signed char vec_mergel (vector signed char, vector signed char);
47803     vector unsigned char vec_mergel (vector unsigned char, vector unsigned char);
47804     vector bool short vec_mergel (vector bool short, vector bool short);
47805     vector pixel vec_mergel (vector pixel, vector pixel);
47806     vector signed short vec_mergel (vector signed short, vector signed short);
47807     vector unsigned short vec_mergel (vector unsigned short, vector unsigned short);
47808     vector float vec_mergel (vector float, vector float);
47809     vector bool int vec_mergel (vector bool int, vector bool int);
47810     vector signed int vec_mergel (vector signed int, vector signed int);
47811     vector unsigned int vec_mergel (vector unsigned int, vector unsigned int);
47812
47813     vector unsigned short vec_mfvscr (void);
47814
47815     vector unsigned char vec_min (vector bool char, vector unsigned char);
47816     vector unsigned char vec_min (vector unsigned char, vector bool char);
47817     vector unsigned char vec_min (vector unsigned char, vector unsigned char);
47818     vector signed char vec_min (vector bool char, vector signed char);
47819     vector signed char vec_min (vector signed char, vector bool char);
47820     vector signed char vec_min (vector signed char, vector signed char);
47821     vector unsigned short vec_min (vector bool short, vector unsigned short);
47822     vector unsigned short vec_min (vector unsigned short, vector bool short);
47823     vector unsigned short vec_min (vector unsigned short, vector unsigned short);
47824     vector signed short vec_min (vector bool short, vector signed short);
47825     vector signed short vec_min (vector signed short, vector bool short);
47826     vector signed short vec_min (vector signed short, vector signed short);
47827     vector unsigned int vec_min (vector bool int, vector unsigned int);
47828     vector unsigned int vec_min (vector unsigned int, vector bool int);
47829     vector unsigned int vec_min (vector unsigned int, vector unsigned int);
47830     vector signed int vec_min (vector bool int, vector signed int);
47831     vector signed int vec_min (vector signed int, vector bool int);
47832     vector signed int vec_min (vector signed int, vector signed int);
47833     vector float vec_min (vector float, vector float);
47834
47835     vector signed short vec_mladd (vector signed short, vector signed short,
47836                                    vector signed short);
47837     vector signed short vec_mladd (vector signed short, vector unsigned short,
47838                                    vector unsigned short);
47839     vector signed short vec_mladd (vector unsigned short, vector signed short,
47840                                    vector signed short);
47841     vector unsigned short vec_mladd (vector unsigned short, vector unsigned short,
47842                                      vector unsigned short);
47843
47844     vector signed short vec_mradds (vector signed short, vector signed short,
47845                                     vector signed short);
47846
47847     vector unsigned int vec_msum (vector unsigned char, vector unsigned char,
47848                                   vector unsigned int);
47849     vector signed int vec_msum (vector signed char, vector unsigned char,
47850                                 vector signed int);
47851     vector unsigned int vec_msum (vector unsigned short, vector unsigned short,
47852                                   vector unsigned int);
47853     vector signed int vec_msum (vector signed short, vector signed short,
47854                                 vector signed int);
47855
47856     vector unsigned int vec_msums (vector unsigned short, vector unsigned short,
47857                                    vector unsigned int);
47858     vector signed int vec_msums (vector signed short, vector signed short,
47859                                  vector signed int);
47860
47861     void vec_mtvscr (vector signed int);
47862     void vec_mtvscr (vector unsigned int);
47863     void vec_mtvscr (vector bool int);
47864     void vec_mtvscr (vector signed short);
47865     void vec_mtvscr (vector unsigned short);
47866     void vec_mtvscr (vector bool short);
47867     void vec_mtvscr (vector pixel);
47868     void vec_mtvscr (vector signed char);
47869     void vec_mtvscr (vector unsigned char);
47870     void vec_mtvscr (vector bool char);
47871
47872     vector float vec_mul (vector float, vector float);
47873
47874     vector unsigned short vec_mule (vector unsigned char, vector unsigned char);
47875     vector signed short vec_mule (vector signed char, vector signed char);
47876     vector unsigned int vec_mule (vector unsigned short, vector unsigned short);
47877     vector signed int vec_mule (vector signed short, vector signed short);
47878
47879     vector unsigned short vec_mulo (vector unsigned char, vector unsigned char);
47880     vector signed short vec_mulo (vector signed char, vector signed char);
47881     vector unsigned int vec_mulo (vector unsigned short, vector unsigned short);
47882     vector signed int vec_mulo (vector signed short, vector signed short);
47883
47884     vector signed char vec_nabs (vector signed char);
47885     vector signed short vec_nabs (vector signed short);
47886     vector signed int vec_nabs (vector signed int);
47887     vector float vec_nabs (vector float);
47888
47889     vector float vec_nmsub (vector float, vector float, vector float);
47890
47891     vector float vec_nor (vector float, vector float);
47892     vector signed int vec_nor (vector signed int, vector signed int);
47893     vector unsigned int vec_nor (vector unsigned int, vector unsigned int);
47894     vector bool int vec_nor (vector bool int, vector bool int);
47895     vector signed short vec_nor (vector signed short, vector signed short);
47896     vector unsigned short vec_nor (vector unsigned short, vector unsigned short);
47897     vector bool short vec_nor (vector bool short, vector bool short);
47898     vector signed char vec_nor (vector signed char, vector signed char);
47899     vector unsigned char vec_nor (vector unsigned char, vector unsigned char);
47900     vector bool char vec_nor (vector bool char, vector bool char);
47901
47902     vector float vec_or (vector float, vector float);
47903     vector float vec_or (vector float, vector bool int);
47904     vector float vec_or (vector bool int, vector float);
47905     vector bool int vec_or (vector bool int, vector bool int);
47906     vector signed int vec_or (vector bool int, vector signed int);
47907     vector signed int vec_or (vector signed int, vector bool int);
47908     vector signed int vec_or (vector signed int, vector signed int);
47909     vector unsigned int vec_or (vector bool int, vector unsigned int);
47910     vector unsigned int vec_or (vector unsigned int, vector bool int);
47911     vector unsigned int vec_or (vector unsigned int, vector unsigned int);
47912     vector bool short vec_or (vector bool short, vector bool short);
47913     vector signed short vec_or (vector bool short, vector signed short);
47914     vector signed short vec_or (vector signed short, vector bool short);
47915     vector signed short vec_or (vector signed short, vector signed short);
47916     vector unsigned short vec_or (vector bool short, vector unsigned short);
47917     vector unsigned short vec_or (vector unsigned short, vector bool short);
47918     vector unsigned short vec_or (vector unsigned short, vector unsigned short);
47919     vector signed char vec_or (vector bool char, vector signed char);
47920     vector bool char vec_or (vector bool char, vector bool char);
47921     vector signed char vec_or (vector signed char, vector bool char);
47922     vector signed char vec_or (vector signed char, vector signed char);
47923     vector unsigned char vec_or (vector bool char, vector unsigned char);
47924     vector unsigned char vec_or (vector unsigned char, vector bool char);
47925     vector unsigned char vec_or (vector unsigned char, vector unsigned char);
47926
47927     vector signed char vec_pack (vector signed short, vector signed short);
47928     vector unsigned char vec_pack (vector unsigned short, vector unsigned short);
47929     vector bool char vec_pack (vector bool short, vector bool short);
47930     vector signed short vec_pack (vector signed int, vector signed int);
47931     vector unsigned short vec_pack (vector unsigned int, vector unsigned int);
47932     vector bool short vec_pack (vector bool int, vector bool int);
47933
47934     vector pixel vec_packpx (vector unsigned int, vector unsigned int);
47935
47936     vector unsigned char vec_packs (vector unsigned short, vector unsigned short);
47937     vector signed char vec_packs (vector signed short, vector signed short);
47938     vector unsigned short vec_packs (vector unsigned int, vector unsigned int);
47939     vector signed short vec_packs (vector signed int, vector signed int);
47940
47941     vector unsigned char vec_packsu (vector unsigned short, vector unsigned short);
47942     vector unsigned char vec_packsu (vector signed short, vector signed short);
47943     vector unsigned short vec_packsu (vector unsigned int, vector unsigned int);
47944     vector unsigned short vec_packsu (vector signed int, vector signed int);
47945
47946     vector float vec_perm (vector float, vector float, vector unsigned char);
47947     vector signed int vec_perm (vector signed int, vector signed int, vector unsigned char);
47948     vector unsigned int vec_perm (vector unsigned int, vector unsigned int,
47949                                   vector unsigned char);
47950     vector bool int vec_perm (vector bool int, vector bool int, vector unsigned char);
47951     vector signed short vec_perm (vector signed short, vector signed short,
47952                                   vector unsigned char);
47953     vector unsigned short vec_perm (vector unsigned short, vector unsigned short,
47954                                     vector unsigned char);
47955     vector bool short vec_perm (vector bool short, vector bool short, vector unsigned char);
47956     vector pixel vec_perm (vector pixel, vector pixel, vector unsigned char);
47957     vector signed char vec_perm (vector signed char, vector signed char,
47958                                  vector unsigned char);
47959     vector unsigned char vec_perm (vector unsigned char, vector unsigned char,
47960                                    vector unsigned char);
47961     vector bool char vec_perm (vector bool char, vector bool char, vector unsigned char);
47962
47963     vector float vec_re (vector float);
47964
47965     vector bool char vec_reve (vector bool char);
47966     vector signed char vec_reve (vector signed char);
47967     vector unsigned char vec_reve (vector unsigned char);
47968     vector bool int vec_reve (vector bool int);
47969     vector signed int vec_reve (vector signed int);
47970     vector unsigned int vec_reve (vector unsigned int);
47971     vector bool short vec_reve (vector bool short);
47972     vector signed short vec_reve (vector signed short);
47973     vector unsigned short vec_reve (vector unsigned short);
47974
47975     vector signed char vec_rl (vector signed char, vector unsigned char);
47976     vector unsigned char vec_rl (vector unsigned char, vector unsigned char);
47977     vector signed short vec_rl (vector signed short, vector unsigned short);
47978     vector unsigned short vec_rl (vector unsigned short, vector unsigned short);
47979     vector signed int vec_rl (vector signed int, vector unsigned int);
47980     vector unsigned int vec_rl (vector unsigned int, vector unsigned int);
47981
47982     vector float vec_round (vector float);
47983
47984     vector float vec_rsqrt (vector float);
47985
47986     vector float vec_rsqrte (vector float);
47987
47988     vector float vec_sel (vector float, vector float, vector bool int);
47989     vector float vec_sel (vector float, vector float, vector unsigned int);
47990     vector signed int vec_sel (vector signed int, vector signed int, vector bool int);
47991     vector signed int vec_sel (vector signed int, vector signed int, vector unsigned int);
47992     vector unsigned int vec_sel (vector unsigned int, vector unsigned int, vector bool int);
47993     vector unsigned int vec_sel (vector unsigned int, vector unsigned int,
47994                                  vector unsigned int);
47995     vector bool int vec_sel (vector bool int, vector bool int, vector bool int);
47996     vector bool int vec_sel (vector bool int, vector bool int, vector unsigned int);
47997     vector signed short vec_sel (vector signed short, vector signed short,
47998                                  vector bool short);
47999     vector signed short vec_sel (vector signed short, vector signed short,
48000                                  vector unsigned short);
48001     vector unsigned short vec_sel (vector unsigned short, vector unsigned short,
48002                                    vector bool short);
48003     vector unsigned short vec_sel (vector unsigned short, vector unsigned short,
48004                                    vector unsigned short);
48005     vector bool short vec_sel (vector bool short, vector bool short, vector bool short);
48006     vector bool short vec_sel (vector bool short, vector bool short, vector unsigned short);
48007     vector signed char vec_sel (vector signed char, vector signed char, vector bool char);
48008     vector signed char vec_sel (vector signed char, vector signed char,
48009                                 vector unsigned char);
48010     vector unsigned char vec_sel (vector unsigned char, vector unsigned char,
48011                                   vector bool char);
48012     vector unsigned char vec_sel (vector unsigned char, vector unsigned char,
48013                                   vector unsigned char);
48014     vector bool char vec_sel (vector bool char, vector bool char, vector bool char);
48015     vector bool char vec_sel (vector bool char, vector bool char, vector unsigned char);
48016
48017     vector signed char vec_sl (vector signed char, vector unsigned char);
48018     vector unsigned char vec_sl (vector unsigned char, vector unsigned char);
48019     vector signed short vec_sl (vector signed short, vector unsigned short);
48020     vector unsigned short vec_sl (vector unsigned short, vector unsigned short);
48021     vector signed int vec_sl (vector signed int, vector unsigned int);
48022     vector unsigned int vec_sl (vector unsigned int, vector unsigned int);
48023
48024     vector float vec_sld (vector float, vector float, const int);
48025     vector signed int vec_sld (vector signed int, vector signed int, const int);
48026     vector unsigned int vec_sld (vector unsigned int, vector unsigned int, const int);
48027     vector bool int vec_sld (vector bool int, vector bool int, const int);
48028     vector signed short vec_sld (vector signed short, vector signed short, const int);
48029     vector unsigned short vec_sld (vector unsigned short, vector unsigned short, const int);
48030     vector bool short vec_sld (vector bool short, vector bool short, const int);
48031     vector pixel vec_sld (vector pixel, vector pixel, const int);
48032     vector signed char vec_sld (vector signed char, vector signed char, const int);
48033     vector unsigned char vec_sld (vector unsigned char, vector unsigned char, const int);
48034     vector bool char vec_sld (vector bool char, vector bool char, const int);
48035
48036     vector signed int vec_sll (vector signed int, vector unsigned int);
48037     vector signed int vec_sll (vector signed int, vector unsigned short);
48038     vector signed int vec_sll (vector signed int, vector unsigned char);
48039     vector unsigned int vec_sll (vector unsigned int, vector unsigned int);
48040     vector unsigned int vec_sll (vector unsigned int, vector unsigned short);
48041     vector unsigned int vec_sll (vector unsigned int, vector unsigned char);
48042     vector bool int vec_sll (vector bool int, vector unsigned int);
48043     vector bool int vec_sll (vector bool int, vector unsigned short);
48044     vector bool int vec_sll (vector bool int, vector unsigned char);
48045     vector signed short vec_sll (vector signed short, vector unsigned int);
48046     vector signed short vec_sll (vector signed short, vector unsigned short);
48047     vector signed short vec_sll (vector signed short, vector unsigned char);
48048     vector unsigned short vec_sll (vector unsigned short, vector unsigned int);
48049     vector unsigned short vec_sll (vector unsigned short, vector unsigned short);
48050     vector unsigned short vec_sll (vector unsigned short, vector unsigned char);
48051     vector bool short vec_sll (vector bool short, vector unsigned int);
48052     vector bool short vec_sll (vector bool short, vector unsigned short);
48053     vector bool short vec_sll (vector bool short, vector unsigned char);
48054     vector pixel vec_sll (vector pixel, vector unsigned int);
48055     vector pixel vec_sll (vector pixel, vector unsigned short);
48056     vector pixel vec_sll (vector pixel, vector unsigned char);
48057     vector signed char vec_sll (vector signed char, vector unsigned int);
48058     vector signed char vec_sll (vector signed char, vector unsigned short);
48059     vector signed char vec_sll (vector signed char, vector unsigned char);
48060     vector unsigned char vec_sll (vector unsigned char, vector unsigned int);
48061     vector unsigned char vec_sll (vector unsigned char, vector unsigned short);
48062     vector unsigned char vec_sll (vector unsigned char, vector unsigned char);
48063     vector bool char vec_sll (vector bool char, vector unsigned int);
48064     vector bool char vec_sll (vector bool char, vector unsigned short);
48065     vector bool char vec_sll (vector bool char, vector unsigned char);
48066
48067     vector float vec_slo (vector float, vector signed char);
48068     vector float vec_slo (vector float, vector unsigned char);
48069     vector signed int vec_slo (vector signed int, vector signed char);
48070     vector signed int vec_slo (vector signed int, vector unsigned char);
48071     vector unsigned int vec_slo (vector unsigned int, vector signed char);
48072     vector unsigned int vec_slo (vector unsigned int, vector unsigned char);
48073     vector signed short vec_slo (vector signed short, vector signed char);
48074     vector signed short vec_slo (vector signed short, vector unsigned char);
48075     vector unsigned short vec_slo (vector unsigned short, vector signed char);
48076     vector unsigned short vec_slo (vector unsigned short, vector unsigned char);
48077     vector pixel vec_slo (vector pixel, vector signed char);
48078     vector pixel vec_slo (vector pixel, vector unsigned char);
48079     vector signed char vec_slo (vector signed char, vector signed char);
48080     vector signed char vec_slo (vector signed char, vector unsigned char);
48081     vector unsigned char vec_slo (vector unsigned char, vector signed char);
48082     vector unsigned char vec_slo (vector unsigned char, vector unsigned char);
48083
48084     vector signed char vec_splat (vector signed char, const int);
48085     vector unsigned char vec_splat (vector unsigned char, const int);
48086     vector bool char vec_splat (vector bool char, const int);
48087     vector signed short vec_splat (vector signed short, const int);
48088     vector unsigned short vec_splat (vector unsigned short, const int);
48089     vector bool short vec_splat (vector bool short, const int);
48090     vector pixel vec_splat (vector pixel, const int);
48091     vector float vec_splat (vector float, const int);
48092     vector signed int vec_splat (vector signed int, const int);
48093     vector unsigned int vec_splat (vector unsigned int, const int);
48094     vector bool int vec_splat (vector bool int, const int);
48095
48096     vector signed short vec_splat_s16 (const int);
48097
48098     vector signed int vec_splat_s32 (const int);
48099
48100     vector signed char vec_splat_s8 (const int);
48101
48102     vector unsigned short vec_splat_u16 (const int);
48103
48104     vector unsigned int vec_splat_u32 (const int);
48105
48106     vector unsigned char vec_splat_u8 (const int);
48107
48108     vector signed char vec_splats (signed char);
48109     vector unsigned char vec_splats (unsigned char);
48110     vector signed short vec_splats (signed short);
48111     vector unsigned short vec_splats (unsigned short);
48112     vector signed int vec_splats (signed int);
48113     vector unsigned int vec_splats (unsigned int);
48114     vector float vec_splats (float);
48115
48116     vector signed char vec_sr (vector signed char, vector unsigned char);
48117     vector unsigned char vec_sr (vector unsigned char, vector unsigned char);
48118     vector signed short vec_sr (vector signed short, vector unsigned short);
48119     vector unsigned short vec_sr (vector unsigned short, vector unsigned short);
48120     vector signed int vec_sr (vector signed int, vector unsigned int);
48121     vector unsigned int vec_sr (vector unsigned int, vector unsigned int);
48122
48123     vector signed char vec_sra (vector signed char, vector unsigned char);
48124     vector unsigned char vec_sra (vector unsigned char, vector unsigned char);
48125     vector signed short vec_sra (vector signed short, vector unsigned short);
48126     vector unsigned short vec_sra (vector unsigned short, vector unsigned short);
48127     vector signed int vec_sra (vector signed int, vector unsigned int);
48128     vector unsigned int vec_sra (vector unsigned int, vector unsigned int);
48129
48130     vector signed int vec_srl (vector signed int, vector unsigned int);
48131     vector signed int vec_srl (vector signed int, vector unsigned short);
48132     vector signed int vec_srl (vector signed int, vector unsigned char);
48133     vector unsigned int vec_srl (vector unsigned int, vector unsigned int);
48134     vector unsigned int vec_srl (vector unsigned int, vector unsigned short);
48135     vector unsigned int vec_srl (vector unsigned int, vector unsigned char);
48136     vector bool int vec_srl (vector bool int, vector unsigned int);
48137     vector bool int vec_srl (vector bool int, vector unsigned short);
48138     vector bool int vec_srl (vector bool int, vector unsigned char);
48139     vector signed short vec_srl (vector signed short, vector unsigned int);
48140     vector signed short vec_srl (vector signed short, vector unsigned short);
48141     vector signed short vec_srl (vector signed short, vector unsigned char);
48142     vector unsigned short vec_srl (vector unsigned short, vector unsigned int);
48143     vector unsigned short vec_srl (vector unsigned short, vector unsigned short);
48144     vector unsigned short vec_srl (vector unsigned short, vector unsigned char);
48145     vector bool short vec_srl (vector bool short, vector unsigned int);
48146     vector bool short vec_srl (vector bool short, vector unsigned short);
48147     vector bool short vec_srl (vector bool short, vector unsigned char);
48148     vector pixel vec_srl (vector pixel, vector unsigned int);
48149     vector pixel vec_srl (vector pixel, vector unsigned short);
48150     vector pixel vec_srl (vector pixel, vector unsigned char);
48151     vector signed char vec_srl (vector signed char, vector unsigned int);
48152     vector signed char vec_srl (vector signed char, vector unsigned short);
48153     vector signed char vec_srl (vector signed char, vector unsigned char);
48154     vector unsigned char vec_srl (vector unsigned char, vector unsigned int);
48155     vector unsigned char vec_srl (vector unsigned char, vector unsigned short);
48156     vector unsigned char vec_srl (vector unsigned char, vector unsigned char);
48157     vector bool char vec_srl (vector bool char, vector unsigned int);
48158     vector bool char vec_srl (vector bool char, vector unsigned short);
48159     vector bool char vec_srl (vector bool char, vector unsigned char);
48160
48161     vector float vec_sro (vector float, vector signed char);
48162     vector float vec_sro (vector float, vector unsigned char);
48163     vector signed int vec_sro (vector signed int, vector signed char);
48164     vector signed int vec_sro (vector signed int, vector unsigned char);
48165     vector unsigned int vec_sro (vector unsigned int, vector signed char);
48166     vector unsigned int vec_sro (vector unsigned int, vector unsigned char);
48167     vector signed short vec_sro (vector signed short, vector signed char);
48168     vector signed short vec_sro (vector signed short, vector unsigned char);
48169     vector unsigned short vec_sro (vector unsigned short, vector signed char);
48170     vector unsigned short vec_sro (vector unsigned short, vector unsigned char);
48171     vector pixel vec_sro (vector pixel, vector signed char);
48172     vector pixel vec_sro (vector pixel, vector unsigned char);
48173     vector signed char vec_sro (vector signed char, vector signed char);
48174     vector signed char vec_sro (vector signed char, vector unsigned char);
48175     vector unsigned char vec_sro (vector unsigned char, vector signed char);
48176     vector unsigned char vec_sro (vector unsigned char, vector unsigned char);
48177
48178     void vec_st (vector float, int, vector float *);
48179     void vec_st (vector float, int, float *);
48180     void vec_st (vector signed int, int, vector signed int *);
48181     void vec_st (vector signed int, int, int *);
48182     void vec_st (vector unsigned int, int, vector unsigned int *);
48183     void vec_st (vector unsigned int, int, unsigned int *);
48184     void vec_st (vector bool int, int, vector bool int *);
48185     void vec_st (vector bool int, int, unsigned int *);
48186     void vec_st (vector bool int, int, int *);
48187     void vec_st (vector signed short, int, vector signed short *);
48188     void vec_st (vector signed short, int, short *);
48189     void vec_st (vector unsigned short, int, vector unsigned short *);
48190     void vec_st (vector unsigned short, int, unsigned short *);
48191     void vec_st (vector bool short, int, vector bool short *);
48192     void vec_st (vector bool short, int, unsigned short *);
48193     void vec_st (vector pixel, int, vector pixel *);
48194     void vec_st (vector bool short, int, short *);
48195     void vec_st (vector signed char, int, vector signed char *);
48196     void vec_st (vector signed char, int, signed char *);
48197     void vec_st (vector unsigned char, int, vector unsigned char *);
48198     void vec_st (vector unsigned char, int, unsigned char *);
48199     void vec_st (vector bool char, int, vector bool char *);
48200     void vec_st (vector bool char, int, unsigned char *);
48201     void vec_st (vector bool char, int, signed char *);
48202
48203     void vec_ste (vector signed char, int, signed char *);
48204     void vec_ste (vector unsigned char, int, unsigned char *);
48205     void vec_ste (vector bool char, int, signed char *);
48206     void vec_ste (vector bool char, int, unsigned char *);
48207     void vec_ste (vector signed short, int, short *);
48208     void vec_ste (vector unsigned short, int, unsigned short *);
48209     void vec_ste (vector bool short, int, short *);
48210     void vec_ste (vector bool short, int, unsigned short *);
48211     void vec_ste (vector pixel, int, short *);
48212     void vec_ste (vector pixel, int, unsigned short *);
48213     void vec_ste (vector float, int, float *);
48214     void vec_ste (vector signed int, int, int *);
48215     void vec_ste (vector unsigned int, int, unsigned int *);
48216     void vec_ste (vector bool int, int, int *);
48217     void vec_ste (vector bool int, int, unsigned int *);
48218
48219     void vec_stl (vector float, int, vector float *);
48220     void vec_stl (vector float, int, float *);
48221     void vec_stl (vector signed int, int, vector signed int *);
48222     void vec_stl (vector signed int, int, int *);
48223     void vec_stl (vector unsigned int, int, vector unsigned int *);
48224     void vec_stl (vector unsigned int, int, unsigned int *);
48225     void vec_stl (vector bool int, int, vector bool int *);
48226     void vec_stl (vector bool int, int, unsigned int *);
48227     void vec_stl (vector bool int, int, int *);
48228     void vec_stl (vector signed short, int, vector signed short *);
48229     void vec_stl (vector signed short, int, short *);
48230     void vec_stl (vector unsigned short, int, vector unsigned short *);
48231     void vec_stl (vector unsigned short, int, unsigned short *);
48232     void vec_stl (vector bool short, int, vector bool short *);
48233     void vec_stl (vector bool short, int, unsigned short *);
48234     void vec_stl (vector bool short, int, short *);
48235     void vec_stl (vector pixel, int, vector pixel *);
48236     void vec_stl (vector signed char, int, vector signed char *);
48237     void vec_stl (vector signed char, int, signed char *);
48238     void vec_stl (vector unsigned char, int, vector unsigned char *);
48239     void vec_stl (vector unsigned char, int, unsigned char *);
48240     void vec_stl (vector bool char, int, vector bool char *);
48241     void vec_stl (vector bool char, int, unsigned char *);
48242     void vec_stl (vector bool char, int, signed char *);
48243
48244     void vec_stvebx (vector signed char, int, signed char *);
48245     void vec_stvebx (vector unsigned char, int, unsigned char *);
48246     void vec_stvebx (vector bool char, int, signed char *);
48247     void vec_stvebx (vector bool char, int, unsigned char *);
48248
48249     void vec_stvehx (vector signed short, int, short *);
48250     void vec_stvehx (vector unsigned short, int, unsigned short *);
48251     void vec_stvehx (vector bool short, int, short *);
48252     void vec_stvehx (vector bool short, int, unsigned short *);
48253
48254     void vec_stvewx (vector float, int, float *);
48255     void vec_stvewx (vector signed int, int, int *);
48256     void vec_stvewx (vector unsigned int, int, unsigned int *);
48257     void vec_stvewx (vector bool int, int, int *);
48258     void vec_stvewx (vector bool int, int, unsigned int *);
48259
48260     vector signed char vec_sub (vector bool char, vector signed char);
48261     vector signed char vec_sub (vector signed char, vector bool char);
48262     vector signed char vec_sub (vector signed char, vector signed char);
48263     vector unsigned char vec_sub (vector bool char, vector unsigned char);
48264     vector unsigned char vec_sub (vector unsigned char, vector bool char);
48265     vector unsigned char vec_sub (vector unsigned char, vector unsigned char);
48266     vector signed short vec_sub (vector bool short, vector signed short);
48267     vector signed short vec_sub (vector signed short, vector bool short);
48268     vector signed short vec_sub (vector signed short, vector signed short);
48269     vector unsigned short vec_sub (vector bool short, vector unsigned short);
48270     vector unsigned short vec_sub (vector unsigned short, vector bool short);
48271     vector unsigned short vec_sub (vector unsigned short, vector unsigned short);
48272     vector signed int vec_sub (vector bool int, vector signed int);
48273     vector signed int vec_sub (vector signed int, vector bool int);
48274     vector signed int vec_sub (vector signed int, vector signed int);
48275     vector unsigned int vec_sub (vector bool int, vector unsigned int);
48276     vector unsigned int vec_sub (vector unsigned int, vector bool int);
48277     vector unsigned int vec_sub (vector unsigned int, vector unsigned int);
48278     vector float vec_sub (vector float, vector float);
48279
48280     vector signed int vec_subc (vector signed int, vector signed int);
48281     vector unsigned int vec_subc (vector unsigned int, vector unsigned int);
48282
48283     vector signed int vec_sube (vector signed int, vector signed int,
48284                                 vector signed int);
48285     vector unsigned int vec_sube (vector unsigned int, vector unsigned int,
48286                                   vector unsigned int);
48287
48288     vector signed int vec_subec (vector signed int, vector signed int,
48289                                  vector signed int);
48290     vector unsigned int vec_subec (vector unsigned int, vector unsigned int,
48291                                    vector unsigned int);
48292
48293     vector unsigned char vec_subs (vector bool char, vector unsigned char);
48294     vector unsigned char vec_subs (vector unsigned char, vector bool char);
48295     vector unsigned char vec_subs (vector unsigned char, vector unsigned char);
48296     vector signed char vec_subs (vector bool char, vector signed char);
48297     vector signed char vec_subs (vector signed char, vector bool char);
48298     vector signed char vec_subs (vector signed char, vector signed char);
48299     vector unsigned short vec_subs (vector bool short, vector unsigned short);
48300     vector unsigned short vec_subs (vector unsigned short, vector bool short);
48301     vector unsigned short vec_subs (vector unsigned short, vector unsigned short);
48302     vector signed short vec_subs (vector bool short, vector signed short);
48303     vector signed short vec_subs (vector signed short, vector bool short);
48304     vector signed short vec_subs (vector signed short, vector signed short);
48305     vector unsigned int vec_subs (vector bool int, vector unsigned int);
48306     vector unsigned int vec_subs (vector unsigned int, vector bool int);
48307     vector unsigned int vec_subs (vector unsigned int, vector unsigned int);
48308     vector signed int vec_subs (vector bool int, vector signed int);
48309     vector signed int vec_subs (vector signed int, vector bool int);
48310     vector signed int vec_subs (vector signed int, vector signed int);
48311
48312     vector signed int vec_sum2s (vector signed int, vector signed int);
48313
48314     vector unsigned int vec_sum4s (vector unsigned char, vector unsigned int);
48315     vector signed int vec_sum4s (vector signed char, vector signed int);
48316     vector signed int vec_sum4s (vector signed short, vector signed int);
48317
48318     vector signed int vec_sums (vector signed int, vector signed int);
48319
48320     vector float vec_trunc (vector float);
48321
48322     vector signed short vec_unpackh (vector signed char);
48323     vector bool short vec_unpackh (vector bool char);
48324     vector signed int vec_unpackh (vector signed short);
48325     vector bool int vec_unpackh (vector bool short);
48326     vector unsigned int vec_unpackh (vector pixel);
48327
48328     vector signed short vec_unpackl (vector signed char);
48329     vector bool short vec_unpackl (vector bool char);
48330     vector unsigned int vec_unpackl (vector pixel);
48331     vector signed int vec_unpackl (vector signed short);
48332     vector bool int vec_unpackl (vector bool short);
48333
48334     vector float vec_vaddfp (vector float, vector float);
48335
48336     vector signed char vec_vaddsbs (vector bool char, vector signed char);
48337     vector signed char vec_vaddsbs (vector signed char, vector bool char);
48338     vector signed char vec_vaddsbs (vector signed char, vector signed char);
48339
48340     vector signed short vec_vaddshs (vector bool short, vector signed short);
48341     vector signed short vec_vaddshs (vector signed short, vector bool short);
48342     vector signed short vec_vaddshs (vector signed short, vector signed short);
48343
48344     vector signed int vec_vaddsws (vector bool int, vector signed int);
48345     vector signed int vec_vaddsws (vector signed int, vector bool int);
48346     vector signed int vec_vaddsws (vector signed int, vector signed int);
48347
48348     vector signed char vec_vaddubm (vector bool char, vector signed char);
48349     vector signed char vec_vaddubm (vector signed char, vector bool char);
48350     vector signed char vec_vaddubm (vector signed char, vector signed char);
48351     vector unsigned char vec_vaddubm (vector bool char, vector unsigned char);
48352     vector unsigned char vec_vaddubm (vector unsigned char, vector bool char);
48353     vector unsigned char vec_vaddubm (vector unsigned char, vector unsigned char);
48354
48355     vector unsigned char vec_vaddubs (vector bool char, vector unsigned char);
48356     vector unsigned char vec_vaddubs (vector unsigned char, vector bool char);
48357     vector unsigned char vec_vaddubs (vector unsigned char, vector unsigned char);
48358
48359     vector signed short vec_vadduhm (vector bool short, vector signed short);
48360     vector signed short vec_vadduhm (vector signed short, vector bool short);
48361     vector signed short vec_vadduhm (vector signed short, vector signed short);
48362     vector unsigned short vec_vadduhm (vector bool short, vector unsigned short);
48363     vector unsigned short vec_vadduhm (vector unsigned short, vector bool short);
48364     vector unsigned short vec_vadduhm (vector unsigned short, vector unsigned short);
48365
48366     vector unsigned short vec_vadduhs (vector bool short, vector unsigned short);
48367     vector unsigned short vec_vadduhs (vector unsigned short, vector bool short);
48368     vector unsigned short vec_vadduhs (vector unsigned short, vector unsigned short);
48369
48370     vector signed int vec_vadduwm (vector bool int, vector signed int);
48371     vector signed int vec_vadduwm (vector signed int, vector bool int);
48372     vector signed int vec_vadduwm (vector signed int, vector signed int);
48373     vector unsigned int vec_vadduwm (vector bool int, vector unsigned int);
48374     vector unsigned int vec_vadduwm (vector unsigned int, vector bool int);
48375     vector unsigned int vec_vadduwm (vector unsigned int, vector unsigned int);
48376
48377     vector unsigned int vec_vadduws (vector bool int, vector unsigned int);
48378     vector unsigned int vec_vadduws (vector unsigned int, vector bool int);
48379     vector unsigned int vec_vadduws (vector unsigned int, vector unsigned int);
48380
48381     vector signed char vec_vavgsb (vector signed char, vector signed char);
48382
48383     vector signed short vec_vavgsh (vector signed short, vector signed short);
48384
48385     vector signed int vec_vavgsw (vector signed int, vector signed int);
48386
48387     vector unsigned char vec_vavgub (vector unsigned char, vector unsigned char);
48388
48389     vector unsigned short vec_vavguh (vector unsigned short, vector unsigned short);
48390
48391     vector unsigned int vec_vavguw (vector unsigned int, vector unsigned int);
48392
48393     vector float vec_vcfsx (vector signed int, const int);
48394
48395     vector float vec_vcfux (vector unsigned int, const int);
48396
48397     vector bool int vec_vcmpeqfp (vector float, vector float);
48398
48399     vector bool char vec_vcmpequb (vector signed char, vector signed char);
48400     vector bool char vec_vcmpequb (vector unsigned char, vector unsigned char);
48401
48402     vector bool short vec_vcmpequh (vector signed short, vector signed short);
48403     vector bool short vec_vcmpequh (vector unsigned short, vector unsigned short);
48404
48405     vector bool int vec_vcmpequw (vector signed int, vector signed int);
48406     vector bool int vec_vcmpequw (vector unsigned int, vector unsigned int);
48407
48408     vector bool int vec_vcmpgtfp (vector float, vector float);
48409
48410     vector bool char vec_vcmpgtsb (vector signed char, vector signed char);
48411
48412     vector bool short vec_vcmpgtsh (vector signed short, vector signed short);
48413
48414     vector bool int vec_vcmpgtsw (vector signed int, vector signed int);
48415
48416     vector bool char vec_vcmpgtub (vector unsigned char, vector unsigned char);
48417
48418     vector bool short vec_vcmpgtuh (vector unsigned short, vector unsigned short);
48419
48420     vector bool int vec_vcmpgtuw (vector unsigned int, vector unsigned int);
48421
48422     vector float vec_vmaxfp (vector float, vector float);
48423
48424     vector signed char vec_vmaxsb (vector bool char, vector signed char);
48425     vector signed char vec_vmaxsb (vector signed char, vector bool char);
48426     vector signed char vec_vmaxsb (vector signed char, vector signed char);
48427
48428     vector signed short vec_vmaxsh (vector bool short, vector signed short);
48429     vector signed short vec_vmaxsh (vector signed short, vector bool short);
48430     vector signed short vec_vmaxsh (vector signed short, vector signed short);
48431
48432     vector signed int vec_vmaxsw (vector bool int, vector signed int);
48433     vector signed int vec_vmaxsw (vector signed int, vector bool int);
48434     vector signed int vec_vmaxsw (vector signed int, vector signed int);
48435
48436     vector unsigned char vec_vmaxub (vector bool char, vector unsigned char);
48437     vector unsigned char vec_vmaxub (vector unsigned char, vector bool char);
48438     vector unsigned char vec_vmaxub (vector unsigned char, vector unsigned char);
48439
48440     vector unsigned short vec_vmaxuh (vector bool short, vector unsigned short);
48441     vector unsigned short vec_vmaxuh (vector unsigned short, vector bool short);
48442     vector unsigned short vec_vmaxuh (vector unsigned short, vector unsigned short);
48443
48444     vector unsigned int vec_vmaxuw (vector bool int, vector unsigned int);
48445     vector unsigned int vec_vmaxuw (vector unsigned int, vector bool int);
48446     vector unsigned int vec_vmaxuw (vector unsigned int, vector unsigned int);
48447
48448     vector float vec_vminfp (vector float, vector float);
48449
48450     vector signed char vec_vminsb (vector bool char, vector signed char);
48451     vector signed char vec_vminsb (vector signed char, vector bool char);
48452     vector signed char vec_vminsb (vector signed char, vector signed char);
48453
48454     vector signed short vec_vminsh (vector bool short, vector signed short);
48455     vector signed short vec_vminsh (vector signed short, vector bool short);
48456     vector signed short vec_vminsh (vector signed short, vector signed short);
48457
48458     vector signed int vec_vminsw (vector bool int, vector signed int);
48459     vector signed int vec_vminsw (vector signed int, vector bool int);
48460     vector signed int vec_vminsw (vector signed int, vector signed int);
48461
48462     vector unsigned char vec_vminub (vector bool char, vector unsigned char);
48463     vector unsigned char vec_vminub (vector unsigned char, vector bool char);
48464     vector unsigned char vec_vminub (vector unsigned char, vector unsigned char);
48465
48466     vector unsigned short vec_vminuh (vector bool short, vector unsigned short);
48467     vector unsigned short vec_vminuh (vector unsigned short, vector bool short);
48468     vector unsigned short vec_vminuh (vector unsigned short, vector unsigned short);
48469
48470     vector unsigned int vec_vminuw (vector bool int, vector unsigned int);
48471     vector unsigned int vec_vminuw (vector unsigned int, vector bool int);
48472     vector unsigned int vec_vminuw (vector unsigned int, vector unsigned int);
48473
48474     vector bool char vec_vmrghb (vector bool char, vector bool char);
48475     vector signed char vec_vmrghb (vector signed char, vector signed char);
48476     vector unsigned char vec_vmrghb (vector unsigned char, vector unsigned char);
48477
48478     vector bool short vec_vmrghh (vector bool short, vector bool short);
48479     vector signed short vec_vmrghh (vector signed short, vector signed short);
48480     vector unsigned short vec_vmrghh (vector unsigned short, vector unsigned short);
48481     vector pixel vec_vmrghh (vector pixel, vector pixel);
48482
48483     vector float vec_vmrghw (vector float, vector float);
48484     vector bool int vec_vmrghw (vector bool int, vector bool int);
48485     vector signed int vec_vmrghw (vector signed int, vector signed int);
48486     vector unsigned int vec_vmrghw (vector unsigned int, vector unsigned int);
48487
48488     vector bool char vec_vmrglb (vector bool char, vector bool char);
48489     vector signed char vec_vmrglb (vector signed char, vector signed char);
48490     vector unsigned char vec_vmrglb (vector unsigned char, vector unsigned char);
48491
48492     vector bool short vec_vmrglh (vector bool short, vector bool short);
48493     vector signed short vec_vmrglh (vector signed short, vector signed short);
48494     vector unsigned short vec_vmrglh (vector unsigned short, vector unsigned short);
48495     vector pixel vec_vmrglh (vector pixel, vector pixel);
48496
48497     vector float vec_vmrglw (vector float, vector float);
48498     vector signed int vec_vmrglw (vector signed int, vector signed int);
48499     vector unsigned int vec_vmrglw (vector unsigned int, vector unsigned int);
48500     vector bool int vec_vmrglw (vector bool int, vector bool int);
48501
48502     vector signed int vec_vmsummbm (vector signed char, vector unsigned char,
48503                                     vector signed int);
48504
48505     vector signed int vec_vmsumshm (vector signed short, vector signed short,
48506                                     vector signed int);
48507
48508     vector signed int vec_vmsumshs (vector signed short, vector signed short,
48509                                     vector signed int);
48510
48511     vector unsigned int vec_vmsumubm (vector unsigned char, vector unsigned char,
48512                                       vector unsigned int);
48513
48514     vector unsigned int vec_vmsumuhm (vector unsigned short, vector unsigned short,
48515                                       vector unsigned int);
48516
48517     vector unsigned int vec_vmsumuhs (vector unsigned short, vector unsigned short,
48518                                       vector unsigned int);
48519
48520     vector signed short vec_vmulesb (vector signed char, vector signed char);
48521
48522     vector signed int vec_vmulesh (vector signed short, vector signed short);
48523
48524     vector unsigned short vec_vmuleub (vector unsigned char, vector unsigned char);
48525
48526     vector unsigned int vec_vmuleuh (vector unsigned short, vector unsigned short);
48527
48528     vector signed short vec_vmulosb (vector signed char, vector signed char);
48529
48530     vector signed int vec_vmulosh (vector signed short, vector signed short);
48531
48532     vector unsigned short vec_vmuloub (vector unsigned char, vector unsigned char);
48533
48534     vector unsigned int vec_vmulouh (vector unsigned short, vector unsigned short);
48535
48536     vector signed char vec_vpkshss (vector signed short, vector signed short);
48537
48538     vector unsigned char vec_vpkshus (vector signed short, vector signed short);
48539
48540     vector signed short vec_vpkswss (vector signed int, vector signed int);
48541
48542     vector unsigned short vec_vpkswus (vector signed int, vector signed int);
48543
48544     vector bool char vec_vpkuhum (vector bool short, vector bool short);
48545     vector signed char vec_vpkuhum (vector signed short, vector signed short);
48546     vector unsigned char vec_vpkuhum (vector unsigned short, vector unsigned short);
48547
48548     vector unsigned char vec_vpkuhus (vector unsigned short, vector unsigned short);
48549
48550     vector bool short vec_vpkuwum (vector bool int, vector bool int);
48551     vector signed short vec_vpkuwum (vector signed int, vector signed int);
48552     vector unsigned short vec_vpkuwum (vector unsigned int, vector unsigned int);
48553
48554     vector unsigned short vec_vpkuwus (vector unsigned int, vector unsigned int);
48555
48556     vector signed char vec_vrlb (vector signed char, vector unsigned char);
48557     vector unsigned char vec_vrlb (vector unsigned char, vector unsigned char);
48558
48559     vector signed short vec_vrlh (vector signed short, vector unsigned short);
48560     vector unsigned short vec_vrlh (vector unsigned short, vector unsigned short);
48561
48562     vector signed int vec_vrlw (vector signed int, vector unsigned int);
48563     vector unsigned int vec_vrlw (vector unsigned int, vector unsigned int);
48564
48565     vector signed char vec_vslb (vector signed char, vector unsigned char);
48566     vector unsigned char vec_vslb (vector unsigned char, vector unsigned char);
48567
48568     vector signed short vec_vslh (vector signed short, vector unsigned short);
48569     vector unsigned short vec_vslh (vector unsigned short, vector unsigned short);
48570
48571     vector signed int vec_vslw (vector signed int, vector unsigned int);
48572     vector unsigned int vec_vslw (vector unsigned int, vector unsigned int);
48573
48574     vector signed char vec_vspltb (vector signed char, const int);
48575     vector unsigned char vec_vspltb (vector unsigned char, const int);
48576     vector bool char vec_vspltb (vector bool char, const int);
48577
48578     vector bool short vec_vsplth (vector bool short, const int);
48579     vector signed short vec_vsplth (vector signed short, const int);
48580     vector unsigned short vec_vsplth (vector unsigned short, const int);
48581     vector pixel vec_vsplth (vector pixel, const int);
48582
48583     vector float vec_vspltw (vector float, const int);
48584     vector signed int vec_vspltw (vector signed int, const int);
48585     vector unsigned int vec_vspltw (vector unsigned int, const int);
48586     vector bool int vec_vspltw (vector bool int, const int);
48587
48588     vector signed char vec_vsrab (vector signed char, vector unsigned char);
48589     vector unsigned char vec_vsrab (vector unsigned char, vector unsigned char);
48590
48591     vector signed short vec_vsrah (vector signed short, vector unsigned short);
48592     vector unsigned short vec_vsrah (vector unsigned short, vector unsigned short);
48593
48594     vector signed int vec_vsraw (vector signed int, vector unsigned int);
48595     vector unsigned int vec_vsraw (vector unsigned int, vector unsigned int);
48596
48597     vector signed char vec_vsrb (vector signed char, vector unsigned char);
48598     vector unsigned char vec_vsrb (vector unsigned char, vector unsigned char);
48599
48600     vector signed short vec_vsrh (vector signed short, vector unsigned short);
48601     vector unsigned short vec_vsrh (vector unsigned short, vector unsigned short);
48602
48603     vector signed int vec_vsrw (vector signed int, vector unsigned int);
48604     vector unsigned int vec_vsrw (vector unsigned int, vector unsigned int);
48605
48606     vector float vec_vsubfp (vector float, vector float);
48607
48608     vector signed char vec_vsubsbs (vector bool char, vector signed char);
48609     vector signed char vec_vsubsbs (vector signed char, vector bool char);
48610     vector signed char vec_vsubsbs (vector signed char, vector signed char);
48611
48612     vector signed short vec_vsubshs (vector bool short, vector signed short);
48613     vector signed short vec_vsubshs (vector signed short, vector bool short);
48614     vector signed short vec_vsubshs (vector signed short, vector signed short);
48615
48616     vector signed int vec_vsubsws (vector bool int, vector signed int);
48617     vector signed int vec_vsubsws (vector signed int, vector bool int);
48618     vector signed int vec_vsubsws (vector signed int, vector signed int);
48619
48620     vector signed char vec_vsububm (vector bool char, vector signed char);
48621     vector signed char vec_vsububm (vector signed char, vector bool char);
48622     vector signed char vec_vsububm (vector signed char, vector signed char);
48623     vector unsigned char vec_vsububm (vector bool char, vector unsigned char);
48624     vector unsigned char vec_vsububm (vector unsigned char, vector bool char);
48625     vector unsigned char vec_vsububm (vector unsigned char, vector unsigned char);
48626
48627     vector unsigned char vec_vsububs (vector bool char, vector unsigned char);
48628     vector unsigned char vec_vsububs (vector unsigned char, vector bool char);
48629     vector unsigned char vec_vsububs (vector unsigned char, vector unsigned char);
48630
48631     vector signed short vec_vsubuhm (vector bool short, vector signed short);
48632     vector signed short vec_vsubuhm (vector signed short, vector bool short);
48633     vector signed short vec_vsubuhm (vector signed short, vector signed short);
48634     vector unsigned short vec_vsubuhm (vector bool short, vector unsigned short);
48635     vector unsigned short vec_vsubuhm (vector unsigned short, vector bool short);
48636     vector unsigned short vec_vsubuhm (vector unsigned short, vector unsigned short);
48637
48638     vector unsigned short vec_vsubuhs (vector bool short, vector unsigned short);
48639     vector unsigned short vec_vsubuhs (vector unsigned short, vector bool short);
48640     vector unsigned short vec_vsubuhs (vector unsigned short, vector unsigned short);
48641
48642     vector signed int vec_vsubuwm (vector bool int, vector signed int);
48643     vector signed int vec_vsubuwm (vector signed int, vector bool int);
48644     vector signed int vec_vsubuwm (vector signed int, vector signed int);
48645     vector unsigned int vec_vsubuwm (vector bool int, vector unsigned int);
48646     vector unsigned int vec_vsubuwm (vector unsigned int, vector bool int);
48647     vector unsigned int vec_vsubuwm (vector unsigned int, vector unsigned int);
48648
48649     vector unsigned int vec_vsubuws (vector bool int, vector unsigned int);
48650     vector unsigned int vec_vsubuws (vector unsigned int, vector bool int);
48651     vector unsigned int vec_vsubuws (vector unsigned int, vector unsigned int);
48652
48653     vector signed int vec_vsum4sbs (vector signed char, vector signed int);
48654
48655     vector signed int vec_vsum4shs (vector signed short, vector signed int);
48656
48657     vector unsigned int vec_vsum4ubs (vector unsigned char, vector unsigned int);
48658
48659     vector unsigned int vec_vupkhpx (vector pixel);
48660
48661     vector bool short vec_vupkhsb (vector bool char);
48662     vector signed short vec_vupkhsb (vector signed char);
48663
48664     vector bool int vec_vupkhsh (vector bool short);
48665     vector signed int vec_vupkhsh (vector signed short);
48666
48667     vector unsigned int vec_vupklpx (vector pixel);
48668
48669     vector bool short vec_vupklsb (vector bool char);
48670     vector signed short vec_vupklsb (vector signed char);
48671
48672     vector bool int vec_vupklsh (vector bool short);
48673     vector signed int vec_vupklsh (vector signed short);
48674
48675     vector float vec_xor (vector float, vector float);
48676     vector float vec_xor (vector float, vector bool int);
48677     vector float vec_xor (vector bool int, vector float);
48678     vector bool int vec_xor (vector bool int, vector bool int);
48679     vector signed int vec_xor (vector bool int, vector signed int);
48680     vector signed int vec_xor (vector signed int, vector bool int);
48681     vector signed int vec_xor (vector signed int, vector signed int);
48682     vector unsigned int vec_xor (vector bool int, vector unsigned int);
48683     vector unsigned int vec_xor (vector unsigned int, vector bool int);
48684     vector unsigned int vec_xor (vector unsigned int, vector unsigned int);
48685     vector bool short vec_xor (vector bool short, vector bool short);
48686     vector signed short vec_xor (vector bool short, vector signed short);
48687     vector signed short vec_xor (vector signed short, vector bool short);
48688     vector signed short vec_xor (vector signed short, vector signed short);
48689     vector unsigned short vec_xor (vector bool short, vector unsigned short);
48690     vector unsigned short vec_xor (vector unsigned short, vector bool short);
48691     vector unsigned short vec_xor (vector unsigned short, vector unsigned short);
48692     vector signed char vec_xor (vector bool char, vector signed char);
48693     vector bool char vec_xor (vector bool char, vector bool char);
48694     vector signed char vec_xor (vector signed char, vector bool char);
48695     vector signed char vec_xor (vector signed char, vector signed char);
48696     vector unsigned char vec_xor (vector bool char, vector unsigned char);
48697     vector unsigned char vec_xor (vector unsigned char, vector bool char);
48698     vector unsigned char vec_xor (vector unsigned char, vector unsigned char);
48699
48700
48701File: gcc.info,  Node: PowerPC AltiVec Built-in Functions Available on ISA 2.06,  Next: PowerPC AltiVec Built-in Functions Available on ISA 2.07,  Prev: PowerPC AltiVec Built-in Functions on ISA 2.05,  Up: PowerPC AltiVec/VSX Built-in Functions
48702
487036.60.24.2 PowerPC AltiVec Built-in Functions Available on ISA 2.06
48704..................................................................
48705
48706The AltiVec built-in functions described in this section are available
48707on the PowerPC family of processors starting with ISA 2.06 or later.
48708These are normally enabled by adding '-mvsx' to the command line.
48709
48710 When '-mvsx' is used, the following additional vector types are
48711implemented.
48712
48713     vector unsigned __int128
48714     vector signed __int128
48715     vector unsigned long long int
48716     vector signed long long int
48717     vector double
48718
48719 The long long types are only implemented for 64-bit code generation.
48720
48721
48722     vector bool long long vec_and (vector bool long long int, vector bool long long);
48723
48724     vector double vec_ctf (vector unsigned long, const int);
48725     vector double vec_ctf (vector signed long, const int);
48726
48727     vector signed long vec_cts (vector double, const int);
48728
48729     vector unsigned long vec_ctu (vector double, const int);
48730
48731     void vec_dst (const unsigned long *, int, const int);
48732     void vec_dst (const long *, int, const int);
48733
48734     void vec_dststt (const unsigned long *, int, const int);
48735     void vec_dststt (const long *, int, const int);
48736
48737     void vec_dstt (const unsigned long *, int, const int);
48738     void vec_dstt (const long *, int, const int);
48739
48740     vector unsigned char vec_lvsl (int, const unsigned long *);
48741     vector unsigned char vec_lvsl (int, const long *);
48742
48743     vector unsigned char vec_lvsr (int, const unsigned long *);
48744     vector unsigned char vec_lvsr (int, const long *);
48745
48746     vector double vec_mul (vector double, vector double);
48747     vector long vec_mul (vector long, vector long);
48748     vector unsigned long vec_mul (vector unsigned long, vector unsigned long);
48749
48750     vector unsigned long long vec_mule (vector unsigned int, vector unsigned int);
48751     vector signed long long vec_mule (vector signed int, vector signed int);
48752
48753     vector unsigned long long vec_mulo (vector unsigned int, vector unsigned int);
48754     vector signed long long vec_mulo (vector signed int, vector signed int);
48755
48756     vector double vec_nabs (vector double);
48757
48758     vector bool long long vec_reve (vector bool long long);
48759     vector signed long long vec_reve (vector signed long long);
48760     vector unsigned long long vec_reve (vector unsigned long long);
48761     vector double vec_sld (vector double, vector double, const int);
48762
48763     vector bool long long int vec_sld (vector bool long long int,
48764                                        vector bool long long int, const int);
48765     vector long long int vec_sld (vector long long int, vector  long long int, const int);
48766     vector unsigned long long int vec_sld (vector unsigned long long int,
48767                                            vector unsigned long long int, const int);
48768
48769     vector long long int vec_sll (vector long long int, vector unsigned char);
48770     vector unsigned long long int vec_sll (vector unsigned long long int,
48771                                            vector unsigned char);
48772
48773     vector signed long long vec_slo (vector signed long long, vector signed char);
48774     vector signed long long vec_slo (vector signed long long, vector unsigned char);
48775     vector unsigned long long vec_slo (vector unsigned long long, vector signed char);
48776     vector unsigned long long vec_slo (vector unsigned long long, vector unsigned char);
48777
48778     vector signed long vec_splat (vector signed long, const int);
48779     vector unsigned long vec_splat (vector unsigned long, const int);
48780
48781     vector long long int vec_srl (vector long long int, vector unsigned char);
48782     vector unsigned long long int vec_srl (vector unsigned long long int,
48783                                            vector unsigned char);
48784
48785     vector long long int vec_sro (vector long long int, vector char);
48786     vector long long int vec_sro (vector long long int, vector unsigned char);
48787     vector unsigned long long int vec_sro (vector unsigned long long int, vector char);
48788     vector unsigned long long int vec_sro (vector unsigned long long int,
48789                                            vector unsigned char);
48790
48791     vector signed __int128 vec_subc (vector signed __int128, vector signed __int128);
48792     vector unsigned __int128 vec_subc (vector unsigned __int128, vector unsigned __int128);
48793
48794     vector signed __int128 vec_sube (vector signed __int128, vector signed __int128,
48795                                      vector signed __int128);
48796     vector unsigned __int128 vec_sube (vector unsigned __int128, vector unsigned __int128,
48797                                        vector unsigned __int128);
48798
48799     vector signed __int128 vec_subec (vector signed __int128, vector signed __int128,
48800                                       vector signed __int128);
48801     vector unsigned __int128 vec_subec (vector unsigned __int128, vector unsigned __int128,
48802                                         vector unsigned __int128);
48803
48804     vector double vec_unpackh (vector float);
48805
48806     vector double vec_unpackl (vector float);
48807
48808     vector double vec_doublee (vector float);
48809     vector double vec_doublee (vector signed int);
48810     vector double vec_doublee (vector unsigned int);
48811
48812     vector double vec_doubleo (vector float);
48813     vector double vec_doubleo (vector signed int);
48814     vector double vec_doubleo (vector unsigned int);
48815
48816     vector double vec_doubleh (vector float);
48817     vector double vec_doubleh (vector signed int);
48818     vector double vec_doubleh (vector unsigned int);
48819
48820     vector double vec_doublel (vector float);
48821     vector double vec_doublel (vector signed int);
48822     vector double vec_doublel (vector unsigned int);
48823
48824     vector float vec_float (vector signed int);
48825     vector float vec_float (vector unsigned int);
48826
48827     vector float vec_float2 (vector signed long long, vector signed long long);
48828     vector float vec_float2 (vector unsigned long long, vector signed long long);
48829
48830     vector float vec_floate (vector double);
48831     vector float vec_floate (vector signed long long);
48832     vector float vec_floate (vector unsigned long long);
48833
48834     vector float vec_floato (vector double);
48835     vector float vec_floato (vector signed long long);
48836     vector float vec_floato (vector unsigned long long);
48837
48838     vector signed long long vec_signed (vector double);
48839     vector signed int vec_signed (vector float);
48840
48841     vector signed int vec_signede (vector double);
48842
48843     vector signed int vec_signedo (vector double);
48844
48845     vector signed char vec_sldw (vector signed char, vector signed char, const int);
48846     vector unsigned char vec_sldw (vector unsigned char, vector unsigned char, const int);
48847     vector signed short vec_sldw (vector signed short, vector signed short, const int);
48848     vector unsigned short vec_sldw (vector unsigned short,
48849                                     vector unsigned short, const int);
48850     vector signed int vec_sldw (vector signed int, vector signed int, const int);
48851     vector unsigned int vec_sldw (vector unsigned int, vector unsigned int, const int);
48852     vector signed long long vec_sldw (vector signed long long,
48853                                       vector signed long long, const int);
48854     vector unsigned long long vec_sldw (vector unsigned long long,
48855                                         vector unsigned long long, const int);
48856
48857     vector signed long long vec_unsigned (vector double);
48858     vector signed int vec_unsigned (vector float);
48859
48860     vector signed int vec_unsignede (vector double);
48861
48862     vector signed int vec_unsignedo (vector double);
48863
48864     vector double vec_abs (vector double);
48865     vector double vec_add (vector double, vector double);
48866     vector double vec_and (vector double, vector double);
48867     vector double vec_and (vector double, vector bool long);
48868     vector double vec_and (vector bool long, vector double);
48869     vector long vec_and (vector long, vector long);
48870     vector long vec_and (vector long, vector bool long);
48871     vector long vec_and (vector bool long, vector long);
48872     vector unsigned long vec_and (vector unsigned long, vector unsigned long);
48873     vector unsigned long vec_and (vector unsigned long, vector bool long);
48874     vector unsigned long vec_and (vector bool long, vector unsigned long);
48875     vector double vec_andc (vector double, vector double);
48876     vector double vec_andc (vector double, vector bool long);
48877     vector double vec_andc (vector bool long, vector double);
48878     vector long vec_andc (vector long, vector long);
48879     vector long vec_andc (vector long, vector bool long);
48880     vector long vec_andc (vector bool long, vector long);
48881     vector unsigned long vec_andc (vector unsigned long, vector unsigned long);
48882     vector unsigned long vec_andc (vector unsigned long, vector bool long);
48883     vector unsigned long vec_andc (vector bool long, vector unsigned long);
48884     vector double vec_ceil (vector double);
48885     vector bool long vec_cmpeq (vector double, vector double);
48886     vector bool long vec_cmpge (vector double, vector double);
48887     vector bool long vec_cmpgt (vector double, vector double);
48888     vector bool long vec_cmple (vector double, vector double);
48889     vector bool long vec_cmplt (vector double, vector double);
48890     vector double vec_cpsgn (vector double, vector double);
48891     vector float vec_div (vector float, vector float);
48892     vector double vec_div (vector double, vector double);
48893     vector long vec_div (vector long, vector long);
48894     vector unsigned long vec_div (vector unsigned long, vector unsigned long);
48895     vector double vec_floor (vector double);
48896     vector signed long long vec_ld (int, const vector signed long long *);
48897     vector signed long long vec_ld (int, const signed long long *);
48898     vector unsigned long long vec_ld (int, const vector unsigned long long *);
48899     vector unsigned long long vec_ld (int, const unsigned long long *);
48900     vector __int128 vec_ld (int, const vector __int128 *);
48901     vector unsigned __int128 vec_ld (int, const vector unsigned __int128 *);
48902     vector __int128 vec_ld (int, const __int128 *);
48903     vector unsigned __int128 vec_ld (int, const unsigned __int128 *);
48904     vector double vec_ld (int, const vector double *);
48905     vector double vec_ld (int, const double *);
48906     vector double vec_ldl (int, const vector double *);
48907     vector double vec_ldl (int, const double *);
48908     vector unsigned char vec_lvsl (int, const double *);
48909     vector unsigned char vec_lvsr (int, const double *);
48910     vector double vec_madd (vector double, vector double, vector double);
48911     vector double vec_max (vector double, vector double);
48912     vector signed long vec_mergeh (vector signed long, vector signed long);
48913     vector signed long vec_mergeh (vector signed long, vector bool long);
48914     vector signed long vec_mergeh (vector bool long, vector signed long);
48915     vector unsigned long vec_mergeh (vector unsigned long, vector unsigned long);
48916     vector unsigned long vec_mergeh (vector unsigned long, vector bool long);
48917     vector unsigned long vec_mergeh (vector bool long, vector unsigned long);
48918     vector signed long vec_mergel (vector signed long, vector signed long);
48919     vector signed long vec_mergel (vector signed long, vector bool long);
48920     vector signed long vec_mergel (vector bool long, vector signed long);
48921     vector unsigned long vec_mergel (vector unsigned long, vector unsigned long);
48922     vector unsigned long vec_mergel (vector unsigned long, vector bool long);
48923     vector unsigned long vec_mergel (vector bool long, vector unsigned long);
48924     vector double vec_min (vector double, vector double);
48925     vector float vec_msub (vector float, vector float, vector float);
48926     vector double vec_msub (vector double, vector double, vector double);
48927     vector float vec_nearbyint (vector float);
48928     vector double vec_nearbyint (vector double);
48929     vector float vec_nmadd (vector float, vector float, vector float);
48930     vector double vec_nmadd (vector double, vector double, vector double);
48931     vector double vec_nmsub (vector double, vector double, vector double);
48932     vector double vec_nor (vector double, vector double);
48933     vector long vec_nor (vector long, vector long);
48934     vector long vec_nor (vector long, vector bool long);
48935     vector long vec_nor (vector bool long, vector long);
48936     vector unsigned long vec_nor (vector unsigned long, vector unsigned long);
48937     vector unsigned long vec_nor (vector unsigned long, vector bool long);
48938     vector unsigned long vec_nor (vector bool long, vector unsigned long);
48939     vector double vec_or (vector double, vector double);
48940     vector double vec_or (vector double, vector bool long);
48941     vector double vec_or (vector bool long, vector double);
48942     vector long vec_or (vector long, vector long);
48943     vector long vec_or (vector long, vector bool long);
48944     vector long vec_or (vector bool long, vector long);
48945     vector unsigned long vec_or (vector unsigned long, vector unsigned long);
48946     vector unsigned long vec_or (vector unsigned long, vector bool long);
48947     vector unsigned long vec_or (vector bool long, vector unsigned long);
48948     vector double vec_perm (vector double, vector double, vector unsigned char);
48949     vector long vec_perm (vector long, vector long, vector unsigned char);
48950     vector unsigned long vec_perm (vector unsigned long, vector unsigned long,
48951                                    vector unsigned char);
48952     vector bool char vec_permxor (vector bool char, vector bool char,
48953                                   vector bool char);
48954     vector unsigned char vec_permxor (vector signed char, vector signed char,
48955                                       vector signed char);
48956     vector unsigned char vec_permxor (vector unsigned char, vector unsigned char,
48957                                       vector unsigned char);
48958     vector double vec_rint (vector double);
48959     vector double vec_recip (vector double, vector double);
48960     vector double vec_rsqrt (vector double);
48961     vector double vec_rsqrte (vector double);
48962     vector double vec_sel (vector double, vector double, vector bool long);
48963     vector double vec_sel (vector double, vector double, vector unsigned long);
48964     vector long vec_sel (vector long, vector long, vector long);
48965     vector long vec_sel (vector long, vector long, vector unsigned long);
48966     vector long vec_sel (vector long, vector long, vector bool long);
48967     vector unsigned long vec_sel (vector unsigned long, vector unsigned long,
48968                                   vector long);
48969     vector unsigned long vec_sel (vector unsigned long, vector unsigned long,
48970                                   vector unsigned long);
48971     vector unsigned long vec_sel (vector unsigned long, vector unsigned long,
48972                                   vector bool long);
48973     vector double vec_splats (double);
48974     vector signed long vec_splats (signed long);
48975     vector unsigned long vec_splats (unsigned long);
48976     vector float vec_sqrt (vector float);
48977     vector double vec_sqrt (vector double);
48978     void vec_st (vector signed long long, int, vector signed long long *);
48979     void vec_st (vector signed long long, int, signed long long *);
48980     void vec_st (vector unsigned long long, int, vector unsigned long long *);
48981     void vec_st (vector unsigned long long, int, unsigned long long *);
48982     void vec_st (vector bool long long, int, vector bool long long *);
48983     void vec_st (vector bool long long, int, signed long long *);
48984     void vec_st (vector bool long long, int, unsigned long long *);
48985     void vec_st (vector double, int, vector double *);
48986     void vec_st (vector double, int, double *);
48987     vector double vec_sub (vector double, vector double);
48988     vector double vec_trunc (vector double);
48989     vector double vec_xl (int, vector double *);
48990     vector double vec_xl (int, double *);
48991     vector long long vec_xl (int, vector long long *);
48992     vector long long vec_xl (int, long long *);
48993     vector unsigned long long vec_xl (int, vector unsigned long long *);
48994     vector unsigned long long vec_xl (int, unsigned long long *);
48995     vector float vec_xl (int, vector float *);
48996     vector float vec_xl (int, float *);
48997     vector int vec_xl (int, vector int *);
48998     vector int vec_xl (int, int *);
48999     vector unsigned int vec_xl (int, vector unsigned int *);
49000     vector unsigned int vec_xl (int, unsigned int *);
49001     vector double vec_xor (vector double, vector double);
49002     vector double vec_xor (vector double, vector bool long);
49003     vector double vec_xor (vector bool long, vector double);
49004     vector long vec_xor (vector long, vector long);
49005     vector long vec_xor (vector long, vector bool long);
49006     vector long vec_xor (vector bool long, vector long);
49007     vector unsigned long vec_xor (vector unsigned long, vector unsigned long);
49008     vector unsigned long vec_xor (vector unsigned long, vector bool long);
49009     vector unsigned long vec_xor (vector bool long, vector unsigned long);
49010     void vec_xst (vector double, int, vector double *);
49011     void vec_xst (vector double, int, double *);
49012     void vec_xst (vector long long, int, vector long long *);
49013     void vec_xst (vector long long, int, long long *);
49014     void vec_xst (vector unsigned long long, int, vector unsigned long long *);
49015     void vec_xst (vector unsigned long long, int, unsigned long long *);
49016     void vec_xst (vector float, int, vector float *);
49017     void vec_xst (vector float, int, float *);
49018     void vec_xst (vector int, int, vector int *);
49019     void vec_xst (vector int, int, int *);
49020     void vec_xst (vector unsigned int, int, vector unsigned int *);
49021     void vec_xst (vector unsigned int, int, unsigned int *);
49022     int vec_all_eq (vector double, vector double);
49023     int vec_all_ge (vector double, vector double);
49024     int vec_all_gt (vector double, vector double);
49025     int vec_all_le (vector double, vector double);
49026     int vec_all_lt (vector double, vector double);
49027     int vec_all_nan (vector double);
49028     int vec_all_ne (vector double, vector double);
49029     int vec_all_nge (vector double, vector double);
49030     int vec_all_ngt (vector double, vector double);
49031     int vec_all_nle (vector double, vector double);
49032     int vec_all_nlt (vector double, vector double);
49033     int vec_all_numeric (vector double);
49034     int vec_any_eq (vector double, vector double);
49035     int vec_any_ge (vector double, vector double);
49036     int vec_any_gt (vector double, vector double);
49037     int vec_any_le (vector double, vector double);
49038     int vec_any_lt (vector double, vector double);
49039     int vec_any_nan (vector double);
49040     int vec_any_ne (vector double, vector double);
49041     int vec_any_nge (vector double, vector double);
49042     int vec_any_ngt (vector double, vector double);
49043     int vec_any_nle (vector double, vector double);
49044     int vec_any_nlt (vector double, vector double);
49045     int vec_any_numeric (vector double);
49046
49047     vector double vec_vsx_ld (int, const vector double *);
49048     vector double vec_vsx_ld (int, const double *);
49049     vector float vec_vsx_ld (int, const vector float *);
49050     vector float vec_vsx_ld (int, const float *);
49051     vector bool int vec_vsx_ld (int, const vector bool int *);
49052     vector signed int vec_vsx_ld (int, const vector signed int *);
49053     vector signed int vec_vsx_ld (int, const int *);
49054     vector signed int vec_vsx_ld (int, const long *);
49055     vector unsigned int vec_vsx_ld (int, const vector unsigned int *);
49056     vector unsigned int vec_vsx_ld (int, const unsigned int *);
49057     vector unsigned int vec_vsx_ld (int, const unsigned long *);
49058     vector bool short vec_vsx_ld (int, const vector bool short *);
49059     vector pixel vec_vsx_ld (int, const vector pixel *);
49060     vector signed short vec_vsx_ld (int, const vector signed short *);
49061     vector signed short vec_vsx_ld (int, const short *);
49062     vector unsigned short vec_vsx_ld (int, const vector unsigned short *);
49063     vector unsigned short vec_vsx_ld (int, const unsigned short *);
49064     vector bool char vec_vsx_ld (int, const vector bool char *);
49065     vector signed char vec_vsx_ld (int, const vector signed char *);
49066     vector signed char vec_vsx_ld (int, const signed char *);
49067     vector unsigned char vec_vsx_ld (int, const vector unsigned char *);
49068     vector unsigned char vec_vsx_ld (int, const unsigned char *);
49069
49070     void vec_vsx_st (vector double, int, vector double *);
49071     void vec_vsx_st (vector double, int, double *);
49072     void vec_vsx_st (vector float, int, vector float *);
49073     void vec_vsx_st (vector float, int, float *);
49074     void vec_vsx_st (vector signed int, int, vector signed int *);
49075     void vec_vsx_st (vector signed int, int, int *);
49076     void vec_vsx_st (vector unsigned int, int, vector unsigned int *);
49077     void vec_vsx_st (vector unsigned int, int, unsigned int *);
49078     void vec_vsx_st (vector bool int, int, vector bool int *);
49079     void vec_vsx_st (vector bool int, int, unsigned int *);
49080     void vec_vsx_st (vector bool int, int, int *);
49081     void vec_vsx_st (vector signed short, int, vector signed short *);
49082     void vec_vsx_st (vector signed short, int, short *);
49083     void vec_vsx_st (vector unsigned short, int, vector unsigned short *);
49084     void vec_vsx_st (vector unsigned short, int, unsigned short *);
49085     void vec_vsx_st (vector bool short, int, vector bool short *);
49086     void vec_vsx_st (vector bool short, int, unsigned short *);
49087     void vec_vsx_st (vector pixel, int, vector pixel *);
49088     void vec_vsx_st (vector pixel, int, unsigned short *);
49089     void vec_vsx_st (vector pixel, int, short *);
49090     void vec_vsx_st (vector bool short, int, short *);
49091     void vec_vsx_st (vector signed char, int, vector signed char *);
49092     void vec_vsx_st (vector signed char, int, signed char *);
49093     void vec_vsx_st (vector unsigned char, int, vector unsigned char *);
49094     void vec_vsx_st (vector unsigned char, int, unsigned char *);
49095     void vec_vsx_st (vector bool char, int, vector bool char *);
49096     void vec_vsx_st (vector bool char, int, unsigned char *);
49097     void vec_vsx_st (vector bool char, int, signed char *);
49098
49099     vector double vec_xxpermdi (vector double, vector double, const int);
49100     vector float vec_xxpermdi (vector float, vector float, const int);
49101     vector long long vec_xxpermdi (vector long long, vector long long, const int);
49102     vector unsigned long long vec_xxpermdi (vector unsigned long long,
49103                                             vector unsigned long long, const int);
49104     vector int vec_xxpermdi (vector int, vector int, const int);
49105     vector unsigned int vec_xxpermdi (vector unsigned int,
49106                                       vector unsigned int, const int);
49107     vector short vec_xxpermdi (vector short, vector short, const int);
49108     vector unsigned short vec_xxpermdi (vector unsigned short,
49109                                         vector unsigned short, const int);
49110     vector signed char vec_xxpermdi (vector signed char, vector signed char,
49111                                      const int);
49112     vector unsigned char vec_xxpermdi (vector unsigned char,
49113                                        vector unsigned char, const int);
49114
49115     vector double vec_xxsldi (vector double, vector double, int);
49116     vector float vec_xxsldi (vector float, vector float, int);
49117     vector long long vec_xxsldi (vector long long, vector long long, int);
49118     vector unsigned long long vec_xxsldi (vector unsigned long long,
49119                                           vector unsigned long long, int);
49120     vector int vec_xxsldi (vector int, vector int, int);
49121     vector unsigned int vec_xxsldi (vector unsigned int, vector unsigned int, int);
49122     vector short vec_xxsldi (vector short, vector short, int);
49123     vector unsigned short vec_xxsldi (vector unsigned short,
49124                                       vector unsigned short, int);
49125     vector signed char vec_xxsldi (vector signed char, vector signed char, int);
49126     vector unsigned char vec_xxsldi (vector unsigned char,
49127                                      vector unsigned char, int);
49128
49129 Note that the 'vec_ld' and 'vec_st' built-in functions always generate
49130the AltiVec 'LVX' and 'STVX' instructions even if the VSX instruction
49131set is available.  The 'vec_vsx_ld' and 'vec_vsx_st' built-in functions
49132always generate the VSX 'LXVD2X', 'LXVW4X', 'STXVD2X', and 'STXVW4X'
49133instructions.
49134
49135
49136File: gcc.info,  Node: PowerPC AltiVec Built-in Functions Available on ISA 2.07,  Next: PowerPC AltiVec Built-in Functions Available on ISA 3.0,  Prev: PowerPC AltiVec Built-in Functions Available on ISA 2.06,  Up: PowerPC AltiVec/VSX Built-in Functions
49137
491386.60.24.3 PowerPC AltiVec Built-in Functions Available on ISA 2.07
49139..................................................................
49140
49141If the ISA 2.07 additions to the vector/scalar (power8-vector)
49142instruction set are available, the following additional functions are
49143available for both 32-bit and 64-bit targets.  For 64-bit targets, you
49144can use VECTOR LONG instead of VECTOR LONG LONG, VECTOR BOOL LONG
49145instead of VECTOR BOOL LONG LONG, and VECTOR UNSIGNED LONG instead of
49146VECTOR UNSIGNED LONG LONG.
49147
49148     vector signed char vec_neg (vector signed char);
49149     vector signed short vec_neg (vector signed short);
49150     vector signed int vec_neg (vector signed int);
49151     vector signed long long vec_neg (vector signed long long);
49152     vector float  char vec_neg (vector float);
49153     vector double vec_neg (vector double);
49154
49155     vector signed int vec_signed2 (vector double, vector double);
49156
49157     vector signed int vec_unsigned2 (vector double, vector double);
49158
49159     vector long long vec_abs (vector long long);
49160
49161     vector long long vec_add (vector long long, vector long long);
49162     vector unsigned long long vec_add (vector unsigned long long,
49163                                        vector unsigned long long);
49164
49165     int vec_all_eq (vector long long, vector long long);
49166     int vec_all_eq (vector unsigned long long, vector unsigned long long);
49167     int vec_all_ge (vector long long, vector long long);
49168     int vec_all_ge (vector unsigned long long, vector unsigned long long);
49169     int vec_all_gt (vector long long, vector long long);
49170     int vec_all_gt (vector unsigned long long, vector unsigned long long);
49171     int vec_all_le (vector long long, vector long long);
49172     int vec_all_le (vector unsigned long long, vector unsigned long long);
49173     int vec_all_lt (vector long long, vector long long);
49174     int vec_all_lt (vector unsigned long long, vector unsigned long long);
49175     int vec_all_ne (vector long long, vector long long);
49176     int vec_all_ne (vector unsigned long long, vector unsigned long long);
49177
49178     int vec_any_eq (vector long long, vector long long);
49179     int vec_any_eq (vector unsigned long long, vector unsigned long long);
49180     int vec_any_ge (vector long long, vector long long);
49181     int vec_any_ge (vector unsigned long long, vector unsigned long long);
49182     int vec_any_gt (vector long long, vector long long);
49183     int vec_any_gt (vector unsigned long long, vector unsigned long long);
49184     int vec_any_le (vector long long, vector long long);
49185     int vec_any_le (vector unsigned long long, vector unsigned long long);
49186     int vec_any_lt (vector long long, vector long long);
49187     int vec_any_lt (vector unsigned long long, vector unsigned long long);
49188     int vec_any_ne (vector long long, vector long long);
49189     int vec_any_ne (vector unsigned long long, vector unsigned long long);
49190
49191     vector bool long long vec_cmpeq (vector bool long long, vector bool long long);
49192
49193     vector long long vec_eqv (vector long long, vector long long);
49194     vector long long vec_eqv (vector bool long long, vector long long);
49195     vector long long vec_eqv (vector long long, vector bool long long);
49196     vector unsigned long long vec_eqv (vector unsigned long long, vector unsigned long long);
49197     vector unsigned long long vec_eqv (vector bool long long, vector unsigned long long);
49198     vector unsigned long long vec_eqv (vector unsigned long long,
49199                                        vector bool long long);
49200     vector int vec_eqv (vector int, vector int);
49201     vector int vec_eqv (vector bool int, vector int);
49202     vector int vec_eqv (vector int, vector bool int);
49203     vector unsigned int vec_eqv (vector unsigned int, vector unsigned int);
49204     vector unsigned int vec_eqv (vector bool unsigned int, vector unsigned int);
49205     vector unsigned int vec_eqv (vector unsigned int, vector bool unsigned int);
49206     vector short vec_eqv (vector short, vector short);
49207     vector short vec_eqv (vector bool short, vector short);
49208     vector short vec_eqv (vector short, vector bool short);
49209     vector unsigned short vec_eqv (vector unsigned short, vector unsigned short);
49210     vector unsigned short vec_eqv (vector bool unsigned short, vector unsigned short);
49211     vector unsigned short vec_eqv (vector unsigned short, vector bool unsigned short);
49212     vector signed char vec_eqv (vector signed char, vector signed char);
49213     vector signed char vec_eqv (vector bool signed char, vector signed char);
49214     vector signed char vec_eqv (vector signed char, vector bool signed char);
49215     vector unsigned char vec_eqv (vector unsigned char, vector unsigned char);
49216     vector unsigned char vec_eqv (vector bool unsigned char, vector unsigned char);
49217     vector unsigned char vec_eqv (vector unsigned char, vector bool unsigned char);
49218
49219     vector long long vec_max (vector long long, vector long long);
49220     vector unsigned long long vec_max (vector unsigned long long,
49221                                        vector unsigned long long);
49222
49223     vector signed int vec_mergee (vector signed int, vector signed int);
49224     vector unsigned int vec_mergee (vector unsigned int, vector unsigned int);
49225     vector bool int vec_mergee (vector bool int, vector bool int);
49226
49227     vector signed int vec_mergeo (vector signed int, vector signed int);
49228     vector unsigned int vec_mergeo (vector unsigned int, vector unsigned int);
49229     vector bool int vec_mergeo (vector bool int, vector bool int);
49230
49231     vector long long vec_min (vector long long, vector long long);
49232     vector unsigned long long vec_min (vector unsigned long long,
49233                                        vector unsigned long long);
49234
49235     vector signed long long vec_nabs (vector signed long long);
49236
49237     vector long long vec_nand (vector long long, vector long long);
49238     vector long long vec_nand (vector bool long long, vector long long);
49239     vector long long vec_nand (vector long long, vector bool long long);
49240     vector unsigned long long vec_nand (vector unsigned long long,
49241                                         vector unsigned long long);
49242     vector unsigned long long vec_nand (vector bool long long, vector unsigned long long);
49243     vector unsigned long long vec_nand (vector unsigned long long, vector bool long long);
49244     vector int vec_nand (vector int, vector int);
49245     vector int vec_nand (vector bool int, vector int);
49246     vector int vec_nand (vector int, vector bool int);
49247     vector unsigned int vec_nand (vector unsigned int, vector unsigned int);
49248     vector unsigned int vec_nand (vector bool unsigned int, vector unsigned int);
49249     vector unsigned int vec_nand (vector unsigned int, vector bool unsigned int);
49250     vector short vec_nand (vector short, vector short);
49251     vector short vec_nand (vector bool short, vector short);
49252     vector short vec_nand (vector short, vector bool short);
49253     vector unsigned short vec_nand (vector unsigned short, vector unsigned short);
49254     vector unsigned short vec_nand (vector bool unsigned short, vector unsigned short);
49255     vector unsigned short vec_nand (vector unsigned short, vector bool unsigned short);
49256     vector signed char vec_nand (vector signed char, vector signed char);
49257     vector signed char vec_nand (vector bool signed char, vector signed char);
49258     vector signed char vec_nand (vector signed char, vector bool signed char);
49259     vector unsigned char vec_nand (vector unsigned char, vector unsigned char);
49260     vector unsigned char vec_nand (vector bool unsigned char, vector unsigned char);
49261     vector unsigned char vec_nand (vector unsigned char, vector bool unsigned char);
49262
49263     vector long long vec_orc (vector long long, vector long long);
49264     vector long long vec_orc (vector bool long long, vector long long);
49265     vector long long vec_orc (vector long long, vector bool long long);
49266     vector unsigned long long vec_orc (vector unsigned long long,
49267                                        vector unsigned long long);
49268     vector unsigned long long vec_orc (vector bool long long, vector unsigned long long);
49269     vector unsigned long long vec_orc (vector unsigned long long, vector bool long long);
49270     vector int vec_orc (vector int, vector int);
49271     vector int vec_orc (vector bool int, vector int);
49272     vector int vec_orc (vector int, vector bool int);
49273     vector unsigned int vec_orc (vector unsigned int, vector unsigned int);
49274     vector unsigned int vec_orc (vector bool unsigned int, vector unsigned int);
49275     vector unsigned int vec_orc (vector unsigned int, vector bool unsigned int);
49276     vector short vec_orc (vector short, vector short);
49277     vector short vec_orc (vector bool short, vector short);
49278     vector short vec_orc (vector short, vector bool short);
49279     vector unsigned short vec_orc (vector unsigned short, vector unsigned short);
49280     vector unsigned short vec_orc (vector bool unsigned short, vector unsigned short);
49281     vector unsigned short vec_orc (vector unsigned short, vector bool unsigned short);
49282     vector signed char vec_orc (vector signed char, vector signed char);
49283     vector signed char vec_orc (vector bool signed char, vector signed char);
49284     vector signed char vec_orc (vector signed char, vector bool signed char);
49285     vector unsigned char vec_orc (vector unsigned char, vector unsigned char);
49286     vector unsigned char vec_orc (vector bool unsigned char, vector unsigned char);
49287     vector unsigned char vec_orc (vector unsigned char, vector bool unsigned char);
49288
49289     vector int vec_pack (vector long long, vector long long);
49290     vector unsigned int vec_pack (vector unsigned long long, vector unsigned long long);
49291     vector bool int vec_pack (vector bool long long, vector bool long long);
49292     vector float vec_pack (vector double, vector double);
49293
49294     vector int vec_packs (vector long long, vector long long);
49295     vector unsigned int vec_packs (vector unsigned long long, vector unsigned long long);
49296
49297     vector unsigned char vec_packsu (vector signed short, vector signed short)
49298     vector unsigned char vec_packsu (vector unsigned short, vector unsigned short)
49299     vector unsigned short int vec_packsu (vector signed int, vector signed int);
49300     vector unsigned short int vec_packsu (vector unsigned int, vector unsigned int);
49301     vector unsigned int vec_packsu (vector long long, vector long long);
49302     vector unsigned int vec_packsu (vector unsigned long long, vector unsigned long long);
49303     vector unsigned int vec_packsu (vector signed long long, vector signed long long);
49304
49305     vector unsigned char vec_popcnt (vector signed char);
49306     vector unsigned char vec_popcnt (vector unsigned char);
49307     vector unsigned short vec_popcnt (vector signed short);
49308     vector unsigned short vec_popcnt (vector unsigned short);
49309     vector unsigned int vec_popcnt (vector signed int);
49310     vector unsigned int vec_popcnt (vector unsigned int);
49311     vector unsigned long long vec_popcnt (vector signed long long);
49312     vector unsigned long long vec_popcnt (vector unsigned long long);
49313
49314     vector long long vec_rl (vector long long, vector unsigned long long);
49315     vector long long vec_rl (vector unsigned long long, vector unsigned long long);
49316
49317     vector long long vec_sl (vector long long, vector unsigned long long);
49318     vector long long vec_sl (vector unsigned long long, vector unsigned long long);
49319
49320     vector long long vec_sr (vector long long, vector unsigned long long);
49321     vector unsigned long long char vec_sr (vector unsigned long long,
49322                                            vector unsigned long long);
49323
49324     vector long long vec_sra (vector long long, vector unsigned long long);
49325     vector unsigned long long vec_sra (vector unsigned long long,
49326                                        vector unsigned long long);
49327
49328     vector long long vec_sub (vector long long, vector long long);
49329     vector unsigned long long vec_sub (vector unsigned long long,
49330                                        vector unsigned long long);
49331
49332     vector long long vec_unpackh (vector int);
49333     vector unsigned long long vec_unpackh (vector unsigned int);
49334
49335     vector long long vec_unpackl (vector int);
49336     vector unsigned long long vec_unpackl (vector unsigned int);
49337
49338     vector long long vec_vaddudm (vector long long, vector long long);
49339     vector long long vec_vaddudm (vector bool long long, vector long long);
49340     vector long long vec_vaddudm (vector long long, vector bool long long);
49341     vector unsigned long long vec_vaddudm (vector unsigned long long,
49342                                            vector unsigned long long);
49343     vector unsigned long long vec_vaddudm (vector bool unsigned long long,
49344                                            vector unsigned long long);
49345     vector unsigned long long vec_vaddudm (vector unsigned long long,
49346                                            vector bool unsigned long long);
49347
49348     vector long long vec_vbpermq (vector signed char, vector signed char);
49349     vector long long vec_vbpermq (vector unsigned char, vector unsigned char);
49350
49351     vector unsigned char vec_bperm (vector unsigned char, vector unsigned char);
49352     vector unsigned char vec_bperm (vector unsigned long long, vector unsigned char);
49353     vector unsigned long long vec_bperm (vector unsigned __int128, vector unsigned char);
49354
49355     vector long long vec_cntlz (vector long long);
49356     vector unsigned long long vec_cntlz (vector unsigned long long);
49357     vector int vec_cntlz (vector int);
49358     vector unsigned int vec_cntlz (vector int);
49359     vector short vec_cntlz (vector short);
49360     vector unsigned short vec_cntlz (vector unsigned short);
49361     vector signed char vec_cntlz (vector signed char);
49362     vector unsigned char vec_cntlz (vector unsigned char);
49363
49364     vector long long vec_vclz (vector long long);
49365     vector unsigned long long vec_vclz (vector unsigned long long);
49366     vector int vec_vclz (vector int);
49367     vector unsigned int vec_vclz (vector int);
49368     vector short vec_vclz (vector short);
49369     vector unsigned short vec_vclz (vector unsigned short);
49370     vector signed char vec_vclz (vector signed char);
49371     vector unsigned char vec_vclz (vector unsigned char);
49372
49373     vector signed char vec_vclzb (vector signed char);
49374     vector unsigned char vec_vclzb (vector unsigned char);
49375
49376     vector long long vec_vclzd (vector long long);
49377     vector unsigned long long vec_vclzd (vector unsigned long long);
49378
49379     vector short vec_vclzh (vector short);
49380     vector unsigned short vec_vclzh (vector unsigned short);
49381
49382     vector int vec_vclzw (vector int);
49383     vector unsigned int vec_vclzw (vector int);
49384
49385     vector signed char vec_vgbbd (vector signed char);
49386     vector unsigned char vec_vgbbd (vector unsigned char);
49387
49388     vector long long vec_vmaxsd (vector long long, vector long long);
49389
49390     vector unsigned long long vec_vmaxud (vector unsigned long long,
49391                                           unsigned vector long long);
49392
49393     vector long long vec_vminsd (vector long long, vector long long);
49394
49395     vector unsigned long long vec_vminud (vector long long, vector long long);
49396
49397     vector int vec_vpksdss (vector long long, vector long long);
49398     vector unsigned int vec_vpksdss (vector long long, vector long long);
49399
49400     vector unsigned int vec_vpkudus (vector unsigned long long,
49401                                      vector unsigned long long);
49402
49403     vector int vec_vpkudum (vector long long, vector long long);
49404     vector unsigned int vec_vpkudum (vector unsigned long long,
49405                                      vector unsigned long long);
49406     vector bool int vec_vpkudum (vector bool long long, vector bool long long);
49407
49408     vector long long vec_vpopcnt (vector long long);
49409     vector unsigned long long vec_vpopcnt (vector unsigned long long);
49410     vector int vec_vpopcnt (vector int);
49411     vector unsigned int vec_vpopcnt (vector int);
49412     vector short vec_vpopcnt (vector short);
49413     vector unsigned short vec_vpopcnt (vector unsigned short);
49414     vector signed char vec_vpopcnt (vector signed char);
49415     vector unsigned char vec_vpopcnt (vector unsigned char);
49416
49417     vector signed char vec_vpopcntb (vector signed char);
49418     vector unsigned char vec_vpopcntb (vector unsigned char);
49419
49420     vector long long vec_vpopcntd (vector long long);
49421     vector unsigned long long vec_vpopcntd (vector unsigned long long);
49422
49423     vector short vec_vpopcnth (vector short);
49424     vector unsigned short vec_vpopcnth (vector unsigned short);
49425
49426     vector int vec_vpopcntw (vector int);
49427     vector unsigned int vec_vpopcntw (vector int);
49428
49429     vector long long vec_vrld (vector long long, vector unsigned long long);
49430     vector unsigned long long vec_vrld (vector unsigned long long,
49431                                         vector unsigned long long);
49432
49433     vector long long vec_vsld (vector long long, vector unsigned long long);
49434     vector long long vec_vsld (vector unsigned long long,
49435                                vector unsigned long long);
49436
49437     vector long long vec_vsrad (vector long long, vector unsigned long long);
49438     vector unsigned long long vec_vsrad (vector unsigned long long,
49439                                          vector unsigned long long);
49440
49441     vector long long vec_vsrd (vector long long, vector unsigned long long);
49442     vector unsigned long long char vec_vsrd (vector unsigned long long,
49443                                              vector unsigned long long);
49444
49445     vector long long vec_vsubudm (vector long long, vector long long);
49446     vector long long vec_vsubudm (vector bool long long, vector long long);
49447     vector long long vec_vsubudm (vector long long, vector bool long long);
49448     vector unsigned long long vec_vsubudm (vector unsigned long long,
49449                                            vector unsigned long long);
49450     vector unsigned long long vec_vsubudm (vector bool long long,
49451                                            vector unsigned long long);
49452     vector unsigned long long vec_vsubudm (vector unsigned long long,
49453                                            vector bool long long);
49454
49455     vector long long vec_vupkhsw (vector int);
49456     vector unsigned long long vec_vupkhsw (vector unsigned int);
49457
49458     vector long long vec_vupklsw (vector int);
49459     vector unsigned long long vec_vupklsw (vector int);
49460
49461 If the ISA 2.07 additions to the vector/scalar (power8-vector)
49462instruction set are available, the following additional functions are
49463available for 64-bit targets.  New vector types (VECTOR __INT128 and
49464VECTOR __UINT128) are available to hold the __INT128 and __UINT128 types
49465to use these builtins.
49466
49467 The normal vector extract, and set operations work on VECTOR __INT128
49468and VECTOR __UINT128 types, but the index value must be 0.
49469
49470     vector __int128 vec_vaddcuq (vector __int128, vector __int128);
49471     vector __uint128 vec_vaddcuq (vector __uint128, vector __uint128);
49472
49473     vector __int128 vec_vadduqm (vector __int128, vector __int128);
49474     vector __uint128 vec_vadduqm (vector __uint128, vector __uint128);
49475
49476     vector __int128 vec_vaddecuq (vector __int128, vector __int128,
49477                                     vector __int128);
49478     vector __uint128 vec_vaddecuq (vector __uint128, vector __uint128,
49479                                      vector __uint128);
49480
49481     vector __int128 vec_vaddeuqm (vector __int128, vector __int128,
49482                                     vector __int128);
49483     vector __uint128 vec_vaddeuqm (vector __uint128, vector __uint128,
49484                                      vector __uint128);
49485
49486     vector __int128 vec_vsubecuq (vector __int128, vector __int128,
49487                                     vector __int128);
49488     vector __uint128 vec_vsubecuq (vector __uint128, vector __uint128,
49489                                      vector __uint128);
49490
49491     vector __int128 vec_vsubeuqm (vector __int128, vector __int128,
49492                                     vector __int128);
49493     vector __uint128 vec_vsubeuqm (vector __uint128, vector __uint128,
49494                                      vector __uint128);
49495
49496     vector __int128 vec_vsubcuq (vector __int128, vector __int128);
49497     vector __uint128 vec_vsubcuq (vector __uint128, vector __uint128);
49498
49499     __int128 vec_vsubuqm (__int128, __int128);
49500     __uint128 vec_vsubuqm (__uint128, __uint128);
49501
49502     vector __int128 __builtin_bcdadd (vector __int128, vector __int128, const int);
49503     int __builtin_bcdadd_lt (vector __int128, vector __int128, const int);
49504     int __builtin_bcdadd_eq (vector __int128, vector __int128, const int);
49505     int __builtin_bcdadd_gt (vector __int128, vector __int128, const int);
49506     int __builtin_bcdadd_ov (vector __int128, vector __int128, const int);
49507     vector __int128 __builtin_bcdsub (vector __int128, vector __int128, const int);
49508     int __builtin_bcdsub_lt (vector __int128, vector __int128, const int);
49509     int __builtin_bcdsub_eq (vector __int128, vector __int128, const int);
49510     int __builtin_bcdsub_gt (vector __int128, vector __int128, const int);
49511     int __builtin_bcdsub_ov (vector __int128, vector __int128, const int);
49512
49513
49514File: gcc.info,  Node: PowerPC AltiVec Built-in Functions Available on ISA 3.0,  Prev: PowerPC AltiVec Built-in Functions Available on ISA 2.07,  Up: PowerPC AltiVec/VSX Built-in Functions
49515
495166.60.24.4 PowerPC AltiVec Built-in Functions Available on ISA 3.0
49517.................................................................
49518
49519The following additional built-in functions are also available for the
49520PowerPC family of processors, starting with ISA 3.0 ('-mcpu=power9') or
49521later:
49522     unsigned int scalar_extract_exp (double source);
49523     unsigned long long int scalar_extract_exp (__ieee128 source);
49524
49525     unsigned long long int scalar_extract_sig (double source);
49526     unsigned __int128 scalar_extract_sig (__ieee128 source);
49527
49528     double scalar_insert_exp (unsigned long long int significand,
49529                               unsigned long long int exponent);
49530     double scalar_insert_exp (double significand, unsigned long long int exponent);
49531
49532     ieee_128 scalar_insert_exp (unsigned __int128 significand,
49533                                 unsigned long long int exponent);
49534     ieee_128 scalar_insert_exp (ieee_128 significand, unsigned long long int exponent);
49535
49536     int scalar_cmp_exp_gt (double arg1, double arg2);
49537     int scalar_cmp_exp_lt (double arg1, double arg2);
49538     int scalar_cmp_exp_eq (double arg1, double arg2);
49539     int scalar_cmp_exp_unordered (double arg1, double arg2);
49540
49541     bool scalar_test_data_class (float source, const int condition);
49542     bool scalar_test_data_class (double source, const int condition);
49543     bool scalar_test_data_class (__ieee128 source, const int condition);
49544
49545     bool scalar_test_neg (float source);
49546     bool scalar_test_neg (double source);
49547     bool scalar_test_neg (__ieee128 source);
49548
49549     vector _uint128_t vec_msum (vector unsigned long long,
49550     			    vector unsigned long long,
49551     			    vector _uint128_t);
49552     vector _int128_t vec_msum (vector signed long long,
49553     			   vector signed long long,
49554     			   vector _int128_t);
49555
49556 The 'scalar_extract_exp' and 'scalar_extract_sig' functions require a
4955764-bit environment supporting ISA 3.0 or later.  The
49558'scalar_extract_exp' and 'scalar_extract_sig' built-in functions return
49559the significand and the biased exponent value respectively of their
49560'source' arguments.  When supplied with a 64-bit 'source' argument, the
49561result returned by 'scalar_extract_sig' has the '0x0010000000000000' bit
49562set if the function's 'source' argument is in normalized form.
49563Otherwise, this bit is set to 0.  When supplied with a 128-bit 'source'
49564argument, the '0x00010000000000000000000000000000' bit of the result is
49565treated similarly.  Note that the sign of the significand is not
49566represented in the result returned from the 'scalar_extract_sig'
49567function.  Use the 'scalar_test_neg' function to test the sign of its
49568'double' argument.  The 'vec_msum' functions perform a vector
49569multiply-sum, returning the result of arg1*arg2+arg3.  ISA 3.0 adds
49570support for vec_msum returning a vector int128 result.
49571
49572 The 'scalar_insert_exp' functions require a 64-bit environment
49573supporting ISA 3.0 or later.  When supplied with a 64-bit first
49574argument, the 'scalar_insert_exp' built-in function returns a
49575double-precision floating point value that is constructed by assembling
49576the values of its 'significand' and 'exponent' arguments.  The sign of
49577the result is copied from the most significant bit of the 'significand'
49578argument.  The significand and exponent components of the result are
49579composed of the least significant 11 bits of the 'exponent' argument and
49580the least significant 52 bits of the 'significand' argument
49581respectively.
49582
49583 When supplied with a 128-bit first argument, the 'scalar_insert_exp'
49584built-in function returns a quad-precision ieee floating point value.
49585The sign bit of the result is copied from the most significant bit of
49586the 'significand' argument.  The significand and exponent components of
49587the result are composed of the least significant 15 bits of the
49588'exponent' argument and the least significant 112 bits of the
49589'significand' argument respectively.
49590
49591 The 'scalar_cmp_exp_gt', 'scalar_cmp_exp_lt', 'scalar_cmp_exp_eq', and
49592'scalar_cmp_exp_unordered' built-in functions return a non-zero value if
49593'arg1' is greater than, less than, equal to, or not comparable to 'arg2'
49594respectively.  The arguments are not comparable if one or the other
49595equals NaN (not a number).
49596
49597 The 'scalar_test_data_class' built-in function returns 1 if any of the
49598condition tests enabled by the value of the 'condition' variable are
49599true, and 0 otherwise.  The 'condition' argument must be a compile-time
49600constant integer with value not exceeding 127.  The 'condition' argument
49601is encoded as a bitmask with each bit enabling the testing of a
49602different condition, as characterized by the following:
49603     0x40    Test for NaN
49604     0x20    Test for +Infinity
49605     0x10    Test for -Infinity
49606     0x08    Test for +Zero
49607     0x04    Test for -Zero
49608     0x02    Test for +Denormal
49609     0x01    Test for -Denormal
49610
49611 The 'scalar_test_neg' built-in function returns 1 if its 'source'
49612argument holds a negative value, 0 otherwise.
49613
49614 The following built-in functions are also available for the PowerPC
49615family of processors, starting with ISA 3.0 or later ('-mcpu=power9').
49616These string functions are described separately in order to group the
49617descriptions closer to the function prototypes:
49618     int vec_all_nez (vector signed char, vector signed char);
49619     int vec_all_nez (vector unsigned char, vector unsigned char);
49620     int vec_all_nez (vector signed short, vector signed short);
49621     int vec_all_nez (vector unsigned short, vector unsigned short);
49622     int vec_all_nez (vector signed int, vector signed int);
49623     int vec_all_nez (vector unsigned int, vector unsigned int);
49624
49625     int vec_any_eqz (vector signed char, vector signed char);
49626     int vec_any_eqz (vector unsigned char, vector unsigned char);
49627     int vec_any_eqz (vector signed short, vector signed short);
49628     int vec_any_eqz (vector unsigned short, vector unsigned short);
49629     int vec_any_eqz (vector signed int, vector signed int);
49630     int vec_any_eqz (vector unsigned int, vector unsigned int);
49631
49632     vector bool char vec_cmpnez (vector signed char arg1, vector signed char arg2);
49633     vector bool char vec_cmpnez (vector unsigned char arg1, vector unsigned char arg2);
49634     vector bool short vec_cmpnez (vector signed short arg1, vector signed short arg2);
49635     vector bool short vec_cmpnez (vector unsigned short arg1, vector unsigned short arg2);
49636     vector bool int vec_cmpnez (vector signed int arg1, vector signed int arg2);
49637     vector bool int vec_cmpnez (vector unsigned int, vector unsigned int);
49638
49639     vector signed char vec_cnttz (vector signed char);
49640     vector unsigned char vec_cnttz (vector unsigned char);
49641     vector signed short vec_cnttz (vector signed short);
49642     vector unsigned short vec_cnttz (vector unsigned short);
49643     vector signed int vec_cnttz (vector signed int);
49644     vector unsigned int vec_cnttz (vector unsigned int);
49645     vector signed long long vec_cnttz (vector signed long long);
49646     vector unsigned long long vec_cnttz (vector unsigned long long);
49647
49648     signed int vec_cntlz_lsbb (vector signed char);
49649     signed int vec_cntlz_lsbb (vector unsigned char);
49650
49651     signed int vec_cnttz_lsbb (vector signed char);
49652     signed int vec_cnttz_lsbb (vector unsigned char);
49653
49654     unsigned int vec_first_match_index (vector signed char, vector signed char);
49655     unsigned int vec_first_match_index (vector unsigned char, vector unsigned char);
49656     unsigned int vec_first_match_index (vector signed int, vector signed int);
49657     unsigned int vec_first_match_index (vector unsigned int, vector unsigned int);
49658     unsigned int vec_first_match_index (vector signed short, vector signed short);
49659     unsigned int vec_first_match_index (vector unsigned short, vector unsigned short);
49660     unsigned int vec_first_match_or_eos_index (vector signed char, vector signed char);
49661     unsigned int vec_first_match_or_eos_index (vector unsigned char, vector unsigned char);
49662     unsigned int vec_first_match_or_eos_index (vector signed int, vector signed int);
49663     unsigned int vec_first_match_or_eos_index (vector unsigned int, vector unsigned int);
49664     unsigned int vec_first_match_or_eos_index (vector signed short, vector signed short);
49665     unsigned int vec_first_match_or_eos_index (vector unsigned short,
49666                                                vector unsigned short);
49667     unsigned int vec_first_mismatch_index (vector signed char, vector signed char);
49668     unsigned int vec_first_mismatch_index (vector unsigned char, vector unsigned char);
49669     unsigned int vec_first_mismatch_index (vector signed int, vector signed int);
49670     unsigned int vec_first_mismatch_index (vector unsigned int, vector unsigned int);
49671     unsigned int vec_first_mismatch_index (vector signed short, vector signed short);
49672     unsigned int vec_first_mismatch_index (vector unsigned short, vector unsigned short);
49673     unsigned int vec_first_mismatch_or_eos_index (vector signed char, vector signed char);
49674     unsigned int vec_first_mismatch_or_eos_index (vector unsigned char,
49675                                                   vector unsigned char);
49676     unsigned int vec_first_mismatch_or_eos_index (vector signed int, vector signed int);
49677     unsigned int vec_first_mismatch_or_eos_index (vector unsigned int, vector unsigned int);
49678     unsigned int vec_first_mismatch_or_eos_index (vector signed short, vector signed short);
49679     unsigned int vec_first_mismatch_or_eos_index (vector unsigned short,
49680                                                   vector unsigned short);
49681
49682     vector unsigned short vec_pack_to_short_fp32 (vector float, vector float);
49683
49684     vector signed char vec_xl_be (signed long long, signed char *);
49685     vector unsigned char vec_xl_be (signed long long, unsigned char *);
49686     vector signed int vec_xl_be (signed long long, signed int *);
49687     vector unsigned int vec_xl_be (signed long long, unsigned int *);
49688     vector signed __int128 vec_xl_be (signed long long, signed __int128 *);
49689     vector unsigned __int128 vec_xl_be (signed long long, unsigned __int128 *);
49690     vector signed long long vec_xl_be (signed long long, signed long long *);
49691     vector unsigned long long vec_xl_be (signed long long, unsigned long long *);
49692     vector signed short vec_xl_be (signed long long, signed short *);
49693     vector unsigned short vec_xl_be (signed long long, unsigned short *);
49694     vector double vec_xl_be (signed long long, double *);
49695     vector float vec_xl_be (signed long long, float *);
49696
49697     vector signed char vec_xl_len (signed char *addr, size_t len);
49698     vector unsigned char vec_xl_len (unsigned char *addr, size_t len);
49699     vector signed int vec_xl_len (signed int *addr, size_t len);
49700     vector unsigned int vec_xl_len (unsigned int *addr, size_t len);
49701     vector signed __int128 vec_xl_len (signed __int128 *addr, size_t len);
49702     vector unsigned __int128 vec_xl_len (unsigned __int128 *addr, size_t len);
49703     vector signed long long vec_xl_len (signed long long *addr, size_t len);
49704     vector unsigned long long vec_xl_len (unsigned long long *addr, size_t len);
49705     vector signed short vec_xl_len (signed short *addr, size_t len);
49706     vector unsigned short vec_xl_len (unsigned short *addr, size_t len);
49707     vector double vec_xl_len (double *addr, size_t len);
49708     vector float vec_xl_len (float *addr, size_t len);
49709
49710     vector unsigned char vec_xl_len_r (unsigned char *addr, size_t len);
49711
49712     void vec_xst_len (vector signed char data, signed char *addr, size_t len);
49713     void vec_xst_len (vector unsigned char data, unsigned char *addr, size_t len);
49714     void vec_xst_len (vector signed int data, signed int *addr, size_t len);
49715     void vec_xst_len (vector unsigned int data, unsigned int *addr, size_t len);
49716     void vec_xst_len (vector unsigned __int128 data, unsigned __int128 *addr, size_t len);
49717     void vec_xst_len (vector signed long long data, signed long long *addr, size_t len);
49718     void vec_xst_len (vector unsigned long long data, unsigned long long *addr, size_t len);
49719     void vec_xst_len (vector signed short data, signed short *addr, size_t len);
49720     void vec_xst_len (vector unsigned short data, unsigned short *addr, size_t len);
49721     void vec_xst_len (vector signed __int128 data, signed __int128 *addr, size_t len);
49722     void vec_xst_len (vector double data, double *addr, size_t len);
49723     void vec_xst_len (vector float data, float *addr, size_t len);
49724
49725     void vec_xst_len_r (vector unsigned char data, unsigned char *addr, size_t len);
49726
49727     signed char vec_xlx (unsigned int index, vector signed char data);
49728     unsigned char vec_xlx (unsigned int index, vector unsigned char data);
49729     signed short vec_xlx (unsigned int index, vector signed short data);
49730     unsigned short vec_xlx (unsigned int index, vector unsigned short data);
49731     signed int vec_xlx (unsigned int index, vector signed int data);
49732     unsigned int vec_xlx (unsigned int index, vector unsigned int data);
49733     float vec_xlx (unsigned int index, vector float data);
49734
49735     signed char vec_xrx (unsigned int index, vector signed char data);
49736     unsigned char vec_xrx (unsigned int index, vector unsigned char data);
49737     signed short vec_xrx (unsigned int index, vector signed short data);
49738     unsigned short vec_xrx (unsigned int index, vector unsigned short data);
49739     signed int vec_xrx (unsigned int index, vector signed int data);
49740     unsigned int vec_xrx (unsigned int index, vector unsigned int data);
49741     float vec_xrx (unsigned int index, vector float data);
49742
49743 The 'vec_all_nez', 'vec_any_eqz', and 'vec_cmpnez' perform pairwise
49744comparisons between the elements at the same positions within their two
49745vector arguments.  The 'vec_all_nez' function returns a non-zero value
49746if and only if all pairwise comparisons are not equal and no element of
49747either vector argument contains a zero.  The 'vec_any_eqz' function
49748returns a non-zero value if and only if at least one pairwise comparison
49749is equal or if at least one element of either vector argument contains a
49750zero.  The 'vec_cmpnez' function returns a vector of the same type as
49751its two arguments, within which each element consists of all ones to
49752denote that either the corresponding elements of the incoming arguments
49753are not equal or that at least one of the corresponding elements
49754contains zero.  Otherwise, the element of the returned vector contains
49755all zeros.
49756
49757 The 'vec_cntlz_lsbb' function returns the count of the number of
49758consecutive leading byte elements (starting from position 0 within the
49759supplied vector argument) for which the least-significant bit equals
49760zero.  The 'vec_cnttz_lsbb' function returns the count of the number of
49761consecutive trailing byte elements (starting from position 15 and
49762counting backwards within the supplied vector argument) for which the
49763least-significant bit equals zero.
49764
49765 The 'vec_xl_len' and 'vec_xst_len' functions require a 64-bit
49766environment supporting ISA 3.0 or later.  The 'vec_xl_len' function
49767loads a variable length vector from memory.  The 'vec_xst_len' function
49768stores a variable length vector to memory.  With both the 'vec_xl_len'
49769and 'vec_xst_len' functions, the 'addr' argument represents the memory
49770address to or from which data will be transferred, and the 'len'
49771argument represents the number of bytes to be transferred, as computed
49772by the C expression 'min((len & 0xff), 16)'.  If this expression's value
49773is not a multiple of the vector element's size, the behavior of this
49774function is undefined.  In the case that the underlying computer is
49775configured to run in big-endian mode, the data transfer moves bytes 0 to
49776'(len - 1)' of the corresponding vector.  In little-endian mode, the
49777data transfer moves bytes '(16 - len)' to '15' of the corresponding
49778vector.  For the load function, any bytes of the result vector that are
49779not loaded from memory are set to zero.  The value of the 'addr'
49780argument need not be aligned on a multiple of the vector's element size.
49781
49782 The 'vec_xlx' and 'vec_xrx' functions extract the single element
49783selected by the 'index' argument from the vector represented by the
49784'data' argument.  The 'index' argument always specifies a byte offset,
49785regardless of the size of the vector element.  With 'vec_xlx', 'index'
49786is the offset of the first byte of the element to be extracted.  With
49787'vec_xrx', 'index' represents the last byte of the element to be
49788extracted, measured from the right end of the vector.  In other words,
49789the last byte of the element to be extracted is found at position '(15 -
49790index)'.  There is no requirement that 'index' be a multiple of the
49791vector element size.  However, if the size of the vector element added
49792to 'index' is greater than 15, the content of the returned value is
49793undefined.
49794
49795 If the ISA 3.0 instruction set additions ('-mcpu=power9') are
49796available:
49797
49798     vector unsigned long long vec_bperm (vector unsigned long long, vector unsigned char);
49799
49800     vector bool char vec_cmpne (vector bool char, vector bool char);
49801     vector bool char vec_cmpne (vector signed char, vector signed char);
49802     vector bool char vec_cmpne (vector unsigned char, vector unsigned char);
49803     vector bool int vec_cmpne (vector bool int, vector bool int);
49804     vector bool int vec_cmpne (vector signed int, vector signed int);
49805     vector bool int vec_cmpne (vector unsigned int, vector unsigned int);
49806     vector bool long long vec_cmpne (vector bool long long, vector bool long long);
49807     vector bool long long vec_cmpne (vector signed long long, vector signed long long);
49808     vector bool long long vec_cmpne (vector unsigned long long, vector unsigned long long);
49809     vector bool short vec_cmpne (vector bool short, vector bool short);
49810     vector bool short vec_cmpne (vector signed short, vector signed short);
49811     vector bool short vec_cmpne (vector unsigned short, vector unsigned short);
49812     vector bool long long vec_cmpne (vector double, vector double);
49813     vector bool int vec_cmpne (vector float, vector float);
49814
49815     vector float vec_extract_fp32_from_shorth (vector unsigned short);
49816     vector float vec_extract_fp32_from_shortl (vector unsigned short);
49817
49818     vector long long vec_vctz (vector long long);
49819     vector unsigned long long vec_vctz (vector unsigned long long);
49820     vector int vec_vctz (vector int);
49821     vector unsigned int vec_vctz (vector int);
49822     vector short vec_vctz (vector short);
49823     vector unsigned short vec_vctz (vector unsigned short);
49824     vector signed char vec_vctz (vector signed char);
49825     vector unsigned char vec_vctz (vector unsigned char);
49826
49827     vector signed char vec_vctzb (vector signed char);
49828     vector unsigned char vec_vctzb (vector unsigned char);
49829
49830     vector long long vec_vctzd (vector long long);
49831     vector unsigned long long vec_vctzd (vector unsigned long long);
49832
49833     vector short vec_vctzh (vector short);
49834     vector unsigned short vec_vctzh (vector unsigned short);
49835
49836     vector int vec_vctzw (vector int);
49837     vector unsigned int vec_vctzw (vector int);
49838
49839     vector unsigned long long vec_extract4b (vector unsigned char, const int);
49840
49841     vector unsigned char vec_insert4b (vector signed int, vector unsigned char,
49842                                        const int);
49843     vector unsigned char vec_insert4b (vector unsigned int, vector unsigned char,
49844                                        const int);
49845
49846     vector unsigned int vec_parity_lsbb (vector signed int);
49847     vector unsigned int vec_parity_lsbb (vector unsigned int);
49848     vector unsigned __int128 vec_parity_lsbb (vector signed __int128);
49849     vector unsigned __int128 vec_parity_lsbb (vector unsigned __int128);
49850     vector unsigned long long vec_parity_lsbb (vector signed long long);
49851     vector unsigned long long vec_parity_lsbb (vector unsigned long long);
49852
49853     vector int vec_vprtyb (vector int);
49854     vector unsigned int vec_vprtyb (vector unsigned int);
49855     vector long long vec_vprtyb (vector long long);
49856     vector unsigned long long vec_vprtyb (vector unsigned long long);
49857
49858     vector int vec_vprtybw (vector int);
49859     vector unsigned int vec_vprtybw (vector unsigned int);
49860
49861     vector long long vec_vprtybd (vector long long);
49862     vector unsigned long long vec_vprtybd (vector unsigned long long);
49863
49864 On 64-bit targets, if the ISA 3.0 additions ('-mcpu=power9') are
49865available:
49866
49867     vector long vec_vprtyb (vector long);
49868     vector unsigned long vec_vprtyb (vector unsigned long);
49869     vector __int128 vec_vprtyb (vector __int128);
49870     vector __uint128 vec_vprtyb (vector __uint128);
49871
49872     vector long vec_vprtybd (vector long);
49873     vector unsigned long vec_vprtybd (vector unsigned long);
49874
49875     vector __int128 vec_vprtybq (vector __int128);
49876     vector __uint128 vec_vprtybd (vector __uint128);
49877
49878 The following built-in vector functions are available for the PowerPC
49879family of processors, starting with ISA 3.0 or later ('-mcpu=power9'):
49880     __vector unsigned char
49881     vec_slv (__vector unsigned char src, __vector unsigned char shift_distance);
49882     __vector unsigned char
49883     vec_srv (__vector unsigned char src, __vector unsigned char shift_distance);
49884
49885 The 'vec_slv' and 'vec_srv' functions operate on all of the bytes of
49886their 'src' and 'shift_distance' arguments in parallel.  The behavior of
49887the 'vec_slv' is as if there existed a temporary array of 17 unsigned
49888characters 'slv_array' within which elements 0 through 15 are the same
49889as the entries in the 'src' array and element 16 equals 0.  The result
49890returned from the 'vec_slv' function is a '__vector' of 16 unsigned
49891characters within which element 'i' is computed using the C expression
49892'0xff & (*((unsigned short *)(slv_array + i)) << (0x07 &
49893shift_distance[i]))', with this resulting value coerced to the 'unsigned
49894char' type.  The behavior of the 'vec_srv' is as if there existed a
49895temporary array of 17 unsigned characters 'srv_array' within which
49896element 0 equals zero and elements 1 through 16 equal the elements 0
49897through 15 of the 'src' array.  The result returned from the 'vec_srv'
49898function is a '__vector' of 16 unsigned characters within which element
49899'i' is computed using the C expression '0xff & (*((unsigned short
49900*)(srv_array + i)) >> (0x07 & shift_distance[i]))', with this resulting
49901value coerced to the 'unsigned char' type.
49902
49903 The following built-in functions are available for the PowerPC family
49904of processors, starting with ISA 3.0 or later ('-mcpu=power9'):
49905     __vector unsigned char
49906     vec_absd (__vector unsigned char arg1, __vector unsigned char arg2);
49907     __vector unsigned short
49908     vec_absd (__vector unsigned short arg1, __vector unsigned short arg2);
49909     __vector unsigned int
49910     vec_absd (__vector unsigned int arg1, __vector unsigned int arg2);
49911
49912     __vector unsigned char
49913     vec_absdb (__vector unsigned char arg1, __vector unsigned char arg2);
49914     __vector unsigned short
49915     vec_absdh (__vector unsigned short arg1, __vector unsigned short arg2);
49916     __vector unsigned int
49917     vec_absdw (__vector unsigned int arg1, __vector unsigned int arg2);
49918
49919 The 'vec_absd', 'vec_absdb', 'vec_absdh', and 'vec_absdw' built-in
49920functions each computes the absolute differences of the pairs of vector
49921elements supplied in its two vector arguments, placing the absolute
49922differences into the corresponding elements of the vector result.
49923
49924 The following built-in functions are available for the PowerPC family
49925of processors, starting with ISA 3.0 or later ('-mcpu=power9'):
49926     __vector unsigned int vec_extract_exp (__vector float source);
49927     __vector unsigned long long int vec_extract_exp (__vector double source);
49928
49929     __vector unsigned int vec_extract_sig (__vector float source);
49930     __vector unsigned long long int vec_extract_sig (__vector double source);
49931
49932     __vector float vec_insert_exp (__vector unsigned int significands,
49933                                    __vector unsigned int exponents);
49934     __vector float vec_insert_exp (__vector unsigned float significands,
49935                                    __vector unsigned int exponents);
49936     __vector double vec_insert_exp (__vector unsigned long long int significands,
49937                                     __vector unsigned long long int exponents);
49938     __vector double vec_insert_exp (__vector unsigned double significands,
49939                                     __vector unsigned long long int exponents);
49940
49941     __vector bool int vec_test_data_class (__vector float source, const int condition);
49942     __vector bool long long int vec_test_data_class (__vector double source,
49943                                                      const int condition);
49944
49945 The 'vec_extract_sig' and 'vec_extract_exp' built-in functions return
49946vectors representing the significands and biased exponent values of
49947their 'source' arguments respectively.  Within the result vector
49948returned by 'vec_extract_sig', the '0x800000' bit of each vector element
49949returned when the function's 'source' argument is of type 'float' is set
49950to 1 if the corresponding floating point value is in normalized form.
49951Otherwise, this bit is set to 0.  When the 'source' argument is of type
49952'double', the '0x10000000000000' bit within each of the result vector's
49953elements is set according to the same rules.  Note that the sign of the
49954significand is not represented in the result returned from the
49955'vec_extract_sig' function.  To extract the sign bits, use the
49956'vec_cpsgn' function, which returns a new vector within which all of the
49957sign bits of its second argument vector are overwritten with the sign
49958bits copied from the coresponding elements of its first argument vector,
49959and all other (non-sign) bits of the second argument vector are copied
49960unchanged into the result vector.
49961
49962 The 'vec_insert_exp' built-in functions return a vector of single- or
49963double-precision floating point values constructed by assembling the
49964values of their 'significands' and 'exponents' arguments into the
49965corresponding elements of the returned vector.  The sign of each element
49966of the result is copied from the most significant bit of the
49967corresponding entry within the 'significands' argument.  Note that the
49968relevant bits of the 'significands' argument are the same, for both
49969integer and floating point types.  The significand and exponent
49970components of each element of the result are composed of the least
49971significant bits of the corresponding 'significands' element and the
49972least significant bits of the corresponding 'exponents' element.
49973
49974 The 'vec_test_data_class' built-in function returns a vector
49975representing the results of testing the 'source' vector for the
49976condition selected by the 'condition' argument.  The 'condition'
49977argument must be a compile-time constant integer with value not
49978exceeding 127.  The 'condition' argument is encoded as a bitmask with
49979each bit enabling the testing of a different condition, as characterized
49980by the following:
49981     0x40    Test for NaN
49982     0x20    Test for +Infinity
49983     0x10    Test for -Infinity
49984     0x08    Test for +Zero
49985     0x04    Test for -Zero
49986     0x02    Test for +Denormal
49987     0x01    Test for -Denormal
49988
49989 If any of the enabled test conditions is true, the corresponding entry
49990in the result vector is -1.  Otherwise (all of the enabled test
49991conditions are false), the corresponding entry of the result vector is
499920.
49993
49994 The following built-in functions are available for the PowerPC family
49995of processors, starting with ISA 3.0 or later ('-mcpu=power9'):
49996     vector unsigned int vec_rlmi (vector unsigned int, vector unsigned int,
49997                                   vector unsigned int);
49998     vector unsigned long long vec_rlmi (vector unsigned long long,
49999                                         vector unsigned long long,
50000                                         vector unsigned long long);
50001     vector unsigned int vec_rlnm (vector unsigned int, vector unsigned int,
50002                                   vector unsigned int);
50003     vector unsigned long long vec_rlnm (vector unsigned long long,
50004                                         vector unsigned long long,
50005                                         vector unsigned long long);
50006     vector unsigned int vec_vrlnm (vector unsigned int, vector unsigned int);
50007     vector unsigned long long vec_vrlnm (vector unsigned long long,
50008                                          vector unsigned long long);
50009
50010 The result of 'vec_rlmi' is obtained by rotating each element of the
50011first argument vector left and inserting it under mask into the second
50012argument vector.  The third argument vector contains the mask beginning
50013in bits 11:15, the mask end in bits 19:23, and the shift count in bits
5001427:31, of each element.
50015
50016 The result of 'vec_rlnm' is obtained by rotating each element of the
50017first argument vector left and ANDing it with a mask specified by the
50018second and third argument vectors.  The second argument vector contains
50019the shift count for each element in the low-order byte.  The third
50020argument vector contains the mask end for each element in the low-order
50021byte, with the mask begin in the next higher byte.
50022
50023 The result of 'vec_vrlnm' is obtained by rotating each element of the
50024first argument vector left and ANDing it with a mask.  The second
50025argument vector contains the mask beginning in bits 11:15, the mask end
50026in bits 19:23, and the shift count in bits 27:31, of each element.
50027
50028 If the ISA 3.0 instruction set additions ('-mcpu=power9') are
50029available:
50030     vector signed bool char vec_revb (vector signed char);
50031     vector signed char vec_revb (vector signed char);
50032     vector unsigned char vec_revb (vector unsigned char);
50033     vector bool short vec_revb (vector bool short);
50034     vector short vec_revb (vector short);
50035     vector unsigned short vec_revb (vector unsigned short);
50036     vector bool int vec_revb (vector bool int);
50037     vector int vec_revb (vector int);
50038     vector unsigned int vec_revb (vector unsigned int);
50039     vector float vec_revb (vector float);
50040     vector bool long long vec_revb (vector bool long long);
50041     vector long long vec_revb (vector long long);
50042     vector unsigned long long vec_revb (vector unsigned long long);
50043     vector double vec_revb (vector double);
50044
50045 On 64-bit targets, if the ISA 3.0 additions ('-mcpu=power9') are
50046available:
50047     vector long vec_revb (vector long);
50048     vector unsigned long vec_revb (vector unsigned long);
50049     vector __int128 vec_revb (vector __int128);
50050     vector __uint128 vec_revb (vector __uint128);
50051
50052 The 'vec_revb' built-in function reverses the bytes on an element by
50053element basis.  A vector of 'vector unsigned char' or 'vector signed
50054char' reverses the bytes in the whole word.
50055
50056 If the cryptographic instructions are enabled ('-mcrypto' or
50057'-mcpu=power8'), the following builtins are enabled.
50058
50059     vector unsigned long long __builtin_crypto_vsbox (vector unsigned long long);
50060
50061     vector unsigned char vec_sbox_be (vector unsigned char);
50062
50063     vector unsigned long long __builtin_crypto_vcipher (vector unsigned long long,
50064                                                         vector unsigned long long);
50065
50066     vector unsigned char vec_cipher_be (vector unsigned char, vector unsigned char);
50067
50068     vector unsigned long long __builtin_crypto_vcipherlast
50069                                          (vector unsigned long long,
50070                                           vector unsigned long long);
50071
50072     vector unsigned char vec_cipherlast_be (vector unsigned char,
50073                                             vector unsigned char);
50074
50075     vector unsigned long long __builtin_crypto_vncipher (vector unsigned long long,
50076                                                          vector unsigned long long);
50077
50078     vector unsigned char vec_ncipher_be (vector unsigned char,
50079                                          vector unsigned char);
50080
50081     vector unsigned long long __builtin_crypto_vncipherlast (vector unsigned long long,
50082                                                              vector unsigned long long);
50083
50084     vector unsigned char vec_ncipherlast_be (vector unsigned char,
50085                                              vector unsigned char);
50086
50087     vector unsigned char __builtin_crypto_vpermxor (vector unsigned char,
50088                                                     vector unsigned char,
50089                                                     vector unsigned char);
50090
50091     vector unsigned short __builtin_crypto_vpermxor (vector unsigned short,
50092                                                      vector unsigned short,
50093                                                      vector unsigned short);
50094
50095     vector unsigned int __builtin_crypto_vpermxor (vector unsigned int,
50096                                                    vector unsigned int,
50097                                                    vector unsigned int);
50098
50099     vector unsigned long long __builtin_crypto_vpermxor (vector unsigned long long,
50100                                                          vector unsigned long long,
50101                                                          vector unsigned long long);
50102
50103     vector unsigned char __builtin_crypto_vpmsumb (vector unsigned char,
50104                                                    vector unsigned char);
50105
50106     vector unsigned short __builtin_crypto_vpmsumh (vector unsigned short,
50107                                                     vector unsigned short);
50108
50109     vector unsigned int __builtin_crypto_vpmsumw (vector unsigned int,
50110                                                   vector unsigned int);
50111
50112     vector unsigned long long __builtin_crypto_vpmsumd (vector unsigned long long,
50113                                                         vector unsigned long long);
50114
50115     vector unsigned long long __builtin_crypto_vshasigmad (vector unsigned long long,
50116                                                            int, int);
50117
50118     vector unsigned int __builtin_crypto_vshasigmaw (vector unsigned int, int, int);
50119
50120 The second argument to __BUILTIN_CRYPTO_VSHASIGMAD and
50121__BUILTIN_CRYPTO_VSHASIGMAW must be a constant integer that is 0 or 1.
50122The third argument to these built-in functions must be a constant
50123integer in the range of 0 to 15.
50124
50125 If the ISA 3.0 instruction set additions are enabled ('-mcpu=power9'),
50126the following additional functions are available for both 32-bit and
5012764-bit targets.
50128     vector short vec_xl (int, vector short *);
50129     vector short vec_xl (int, short *);
50130     vector unsigned short vec_xl (int, vector unsigned short *);
50131     vector unsigned short vec_xl (int, unsigned short *);
50132     vector char vec_xl (int, vector char *);
50133     vector char vec_xl (int, char *);
50134     vector unsigned char vec_xl (int, vector unsigned char *);
50135     vector unsigned char vec_xl (int, unsigned char *);
50136
50137     void vec_xst (vector short, int, vector short *);
50138     void vec_xst (vector short, int, short *);
50139     void vec_xst (vector unsigned short, int, vector unsigned short *);
50140     void vec_xst (vector unsigned short, int, unsigned short *);
50141     void vec_xst (vector char, int, vector char *);
50142     void vec_xst (vector char, int, char *);
50143     void vec_xst (vector unsigned char, int, vector unsigned char *);
50144     void vec_xst (vector unsigned char, int, unsigned char *);
50145
50146
50147File: gcc.info,  Node: PowerPC Hardware Transactional Memory Built-in Functions,  Next: PowerPC Atomic Memory Operation Functions,  Prev: PowerPC AltiVec/VSX Built-in Functions,  Up: Target Builtins
50148
501496.60.25 PowerPC Hardware Transactional Memory Built-in Functions
50150----------------------------------------------------------------
50151
50152GCC provides two interfaces for accessing the Hardware Transactional
50153Memory (HTM) instructions available on some of the PowerPC family of
50154processors (eg, POWER8).  The two interfaces come in a low level
50155interface, consisting of built-in functions specific to PowerPC and a
50156higher level interface consisting of inline functions that are common
50157between PowerPC and S/390.
50158
501596.60.25.1 PowerPC HTM Low Level Built-in Functions
50160..................................................
50161
50162The following low level built-in functions are available with '-mhtm' or
50163'-mcpu=CPU' where CPU is 'power8' or later.  They all generate the
50164machine instruction that is part of the name.
50165
50166 The HTM builtins (with the exception of '__builtin_tbegin') return the
50167full 4-bit condition register value set by their associated hardware
50168instruction.  The header file 'htmintrin.h' defines some macros that can
50169be used to decipher the return value.  The '__builtin_tbegin' builtin
50170returns a simple 'true' or 'false' value depending on whether a
50171transaction was successfully started or not.  The arguments of the
50172builtins match exactly the type and order of the associated hardware
50173instruction's operands, except for the '__builtin_tcheck' builtin, which
50174does not take any input arguments.  Refer to the ISA manual for a
50175description of each instruction's operands.
50176
50177     unsigned int __builtin_tbegin (unsigned int)
50178     unsigned int __builtin_tend (unsigned int)
50179
50180     unsigned int __builtin_tabort (unsigned int)
50181     unsigned int __builtin_tabortdc (unsigned int, unsigned int, unsigned int)
50182     unsigned int __builtin_tabortdci (unsigned int, unsigned int, int)
50183     unsigned int __builtin_tabortwc (unsigned int, unsigned int, unsigned int)
50184     unsigned int __builtin_tabortwci (unsigned int, unsigned int, int)
50185
50186     unsigned int __builtin_tcheck (void)
50187     unsigned int __builtin_treclaim (unsigned int)
50188     unsigned int __builtin_trechkpt (void)
50189     unsigned int __builtin_tsr (unsigned int)
50190
50191 In addition to the above HTM built-ins, we have added built-ins for
50192some common extended mnemonics of the HTM instructions:
50193
50194     unsigned int __builtin_tendall (void)
50195     unsigned int __builtin_tresume (void)
50196     unsigned int __builtin_tsuspend (void)
50197
50198 Note that the semantics of the above HTM builtins are required to mimic
50199the locking semantics used for critical sections.  Builtins that are
50200used to create a new transaction or restart a suspended transaction must
50201have lock acquisition like semantics while those builtins that end or
50202suspend a transaction must have lock release like semantics.
50203Specifically, this must mimic lock semantics as specified by C++11, for
50204example: Lock acquisition is as-if an execution of
50205__atomic_exchange_n(&globallock,1,__ATOMIC_ACQUIRE) that returns 0, and
50206lock release is as-if an execution of
50207__atomic_store(&globallock,0,__ATOMIC_RELEASE), with globallock being an
50208implicit implementation-defined lock used for all transactions.  The HTM
50209instructions associated with with the builtins inherently provide the
50210correct acquisition and release hardware barriers required.  However,
50211the compiler must also be prohibited from moving loads and stores across
50212the builtins in a way that would violate their semantics.  This has been
50213accomplished by adding memory barriers to the associated HTM
50214instructions (which is a conservative approach to provide acquire and
50215release semantics).  Earlier versions of the compiler did not treat the
50216HTM instructions as memory barriers.  A '__TM_FENCE__' macro has been
50217added, which can be used to determine whether the current compiler
50218treats HTM instructions as memory barriers or not.  This allows the user
50219to explicitly add memory barriers to their code when using an older
50220version of the compiler.
50221
50222 The following set of built-in functions are available to gain access to
50223the HTM specific special purpose registers.
50224
50225     unsigned long __builtin_get_texasr (void)
50226     unsigned long __builtin_get_texasru (void)
50227     unsigned long __builtin_get_tfhar (void)
50228     unsigned long __builtin_get_tfiar (void)
50229
50230     void __builtin_set_texasr (unsigned long);
50231     void __builtin_set_texasru (unsigned long);
50232     void __builtin_set_tfhar (unsigned long);
50233     void __builtin_set_tfiar (unsigned long);
50234
50235 Example usage of these low level built-in functions may look like:
50236
50237     #include <htmintrin.h>
50238
50239     int num_retries = 10;
50240
50241     while (1)
50242       {
50243         if (__builtin_tbegin (0))
50244           {
50245             /* Transaction State Initiated.  */
50246             if (is_locked (lock))
50247               __builtin_tabort (0);
50248             ... transaction code...
50249             __builtin_tend (0);
50250             break;
50251           }
50252         else
50253           {
50254             /* Transaction State Failed.  Use locks if the transaction
50255                failure is "persistent" or we've tried too many times.  */
50256             if (num_retries-- <= 0
50257                 || _TEXASRU_FAILURE_PERSISTENT (__builtin_get_texasru ()))
50258               {
50259                 acquire_lock (lock);
50260                 ... non transactional fallback path...
50261                 release_lock (lock);
50262                 break;
50263               }
50264           }
50265       }
50266
50267 One final built-in function has been added that returns the value of
50268the 2-bit Transaction State field of the Machine Status Register (MSR)
50269as stored in 'CR0'.
50270
50271     unsigned long __builtin_ttest (void)
50272
50273 This built-in can be used to determine the current transaction state
50274using the following code example:
50275
50276     #include <htmintrin.h>
50277
50278     unsigned char tx_state = _HTM_STATE (__builtin_ttest ());
50279
50280     if (tx_state == _HTM_TRANSACTIONAL)
50281       {
50282         /* Code to use in transactional state.  */
50283       }
50284     else if (tx_state == _HTM_NONTRANSACTIONAL)
50285       {
50286         /* Code to use in non-transactional state.  */
50287       }
50288     else if (tx_state == _HTM_SUSPENDED)
50289       {
50290         /* Code to use in transaction suspended state.  */
50291       }
50292
502936.60.25.2 PowerPC HTM High Level Inline Functions
50294.................................................
50295
50296The following high level HTM interface is made available by including
50297'<htmxlintrin.h>' and using '-mhtm' or '-mcpu=CPU' where CPU is 'power8'
50298or later.  This interface is common between PowerPC and S/390, allowing
50299users to write one HTM source implementation that can be compiled and
50300executed on either system.
50301
50302     long __TM_simple_begin (void)
50303     long __TM_begin (void* const TM_buff)
50304     long __TM_end (void)
50305     void __TM_abort (void)
50306     void __TM_named_abort (unsigned char const code)
50307     void __TM_resume (void)
50308     void __TM_suspend (void)
50309
50310     long __TM_is_user_abort (void* const TM_buff)
50311     long __TM_is_named_user_abort (void* const TM_buff, unsigned char *code)
50312     long __TM_is_illegal (void* const TM_buff)
50313     long __TM_is_footprint_exceeded (void* const TM_buff)
50314     long __TM_nesting_depth (void* const TM_buff)
50315     long __TM_is_nested_too_deep(void* const TM_buff)
50316     long __TM_is_conflict(void* const TM_buff)
50317     long __TM_is_failure_persistent(void* const TM_buff)
50318     long __TM_failure_address(void* const TM_buff)
50319     long long __TM_failure_code(void* const TM_buff)
50320
50321 Using these common set of HTM inline functions, we can create a more
50322portable version of the HTM example in the previous section that will
50323work on either PowerPC or S/390:
50324
50325     #include <htmxlintrin.h>
50326
50327     int num_retries = 10;
50328     TM_buff_type TM_buff;
50329
50330     while (1)
50331       {
50332         if (__TM_begin (TM_buff) == _HTM_TBEGIN_STARTED)
50333           {
50334             /* Transaction State Initiated.  */
50335             if (is_locked (lock))
50336               __TM_abort ();
50337             ... transaction code...
50338             __TM_end ();
50339             break;
50340           }
50341         else
50342           {
50343             /* Transaction State Failed.  Use locks if the transaction
50344                failure is "persistent" or we've tried too many times.  */
50345             if (num_retries-- <= 0
50346                 || __TM_is_failure_persistent (TM_buff))
50347               {
50348                 acquire_lock (lock);
50349                 ... non transactional fallback path...
50350                 release_lock (lock);
50351                 break;
50352               }
50353           }
50354       }
50355
50356
50357File: gcc.info,  Node: PowerPC Atomic Memory Operation Functions,  Next: PowerPC Matrix-Multiply Assist Built-in Functions,  Prev: PowerPC Hardware Transactional Memory Built-in Functions,  Up: Target Builtins
50358
503596.60.26 PowerPC Atomic Memory Operation Functions
50360-------------------------------------------------
50361
50362ISA 3.0 of the PowerPC added new atomic memory operation (amo)
50363instructions.  GCC provides support for these instructions in 64-bit
50364environments.  All of the functions are declared in the include file
50365'amo.h'.
50366
50367 The functions supported are:
50368
50369     #include <amo.h>
50370
50371     uint32_t amo_lwat_add (uint32_t *, uint32_t);
50372     uint32_t amo_lwat_xor (uint32_t *, uint32_t);
50373     uint32_t amo_lwat_ior (uint32_t *, uint32_t);
50374     uint32_t amo_lwat_and (uint32_t *, uint32_t);
50375     uint32_t amo_lwat_umax (uint32_t *, uint32_t);
50376     uint32_t amo_lwat_umin (uint32_t *, uint32_t);
50377     uint32_t amo_lwat_swap (uint32_t *, uint32_t);
50378
50379     int32_t amo_lwat_sadd (int32_t *, int32_t);
50380     int32_t amo_lwat_smax (int32_t *, int32_t);
50381     int32_t amo_lwat_smin (int32_t *, int32_t);
50382     int32_t amo_lwat_sswap (int32_t *, int32_t);
50383
50384     uint64_t amo_ldat_add (uint64_t *, uint64_t);
50385     uint64_t amo_ldat_xor (uint64_t *, uint64_t);
50386     uint64_t amo_ldat_ior (uint64_t *, uint64_t);
50387     uint64_t amo_ldat_and (uint64_t *, uint64_t);
50388     uint64_t amo_ldat_umax (uint64_t *, uint64_t);
50389     uint64_t amo_ldat_umin (uint64_t *, uint64_t);
50390     uint64_t amo_ldat_swap (uint64_t *, uint64_t);
50391
50392     int64_t amo_ldat_sadd (int64_t *, int64_t);
50393     int64_t amo_ldat_smax (int64_t *, int64_t);
50394     int64_t amo_ldat_smin (int64_t *, int64_t);
50395     int64_t amo_ldat_sswap (int64_t *, int64_t);
50396
50397     void amo_stwat_add (uint32_t *, uint32_t);
50398     void amo_stwat_xor (uint32_t *, uint32_t);
50399     void amo_stwat_ior (uint32_t *, uint32_t);
50400     void amo_stwat_and (uint32_t *, uint32_t);
50401     void amo_stwat_umax (uint32_t *, uint32_t);
50402     void amo_stwat_umin (uint32_t *, uint32_t);
50403
50404     void amo_stwat_sadd (int32_t *, int32_t);
50405     void amo_stwat_smax (int32_t *, int32_t);
50406     void amo_stwat_smin (int32_t *, int32_t);
50407
50408     void amo_stdat_add (uint64_t *, uint64_t);
50409     void amo_stdat_xor (uint64_t *, uint64_t);
50410     void amo_stdat_ior (uint64_t *, uint64_t);
50411     void amo_stdat_and (uint64_t *, uint64_t);
50412     void amo_stdat_umax (uint64_t *, uint64_t);
50413     void amo_stdat_umin (uint64_t *, uint64_t);
50414
50415     void amo_stdat_sadd (int64_t *, int64_t);
50416     void amo_stdat_smax (int64_t *, int64_t);
50417     void amo_stdat_smin (int64_t *, int64_t);
50418
50419
50420File: gcc.info,  Node: PowerPC Matrix-Multiply Assist Built-in Functions,  Next: RX Built-in Functions,  Prev: PowerPC Atomic Memory Operation Functions,  Up: Target Builtins
50421
504226.60.27 PowerPC Matrix-Multiply Assist Built-in Functions
50423---------------------------------------------------------
50424
50425ISA 3.1 of the PowerPC added new Matrix-Multiply Assist (MMA)
50426instructions.  GCC provides support for these instructions through the
50427following built-in functions which are enabled with the '-mmma' option.
50428The vec_t type below is defined to be a normal vector unsigned char
50429type.  The uint2, uint4 and uint8 parameters are 2-bit, 4-bit and 8-bit
50430unsigned integer constants respectively.  The compiler will verify that
50431they are constants and that their values are within range. 
50432
50433 The built-in functions supported are:
50434
50435     void __builtin_mma_xvi4ger8 (__vector_quad *, vec_t, vec_t);
50436     void __builtin_mma_xvi8ger4 (__vector_quad *, vec_t, vec_t);
50437     void __builtin_mma_xvi16ger2 (__vector_quad *, vec_t, vec_t);
50438     void __builtin_mma_xvi16ger2s (__vector_quad *, vec_t, vec_t);
50439     void __builtin_mma_xvf16ger2 (__vector_quad *, vec_t, vec_t);
50440     void __builtin_mma_xvbf16ger2 (__vector_quad *, vec_t, vec_t);
50441     void __builtin_mma_xvf32ger (__vector_quad *, vec_t, vec_t);
50442
50443     void __builtin_mma_xvi4ger8pp (__vector_quad *, vec_t, vec_t);
50444     void __builtin_mma_xvi8ger4pp (__vector_quad *, vec_t, vec_t);
50445     void __builtin_mma_xvi8ger4spp(__vector_quad *, vec_t, vec_t);
50446     void __builtin_mma_xvi16ger2pp (__vector_quad *, vec_t, vec_t);
50447     void __builtin_mma_xvi16ger2spp (__vector_quad *, vec_t, vec_t);
50448     void __builtin_mma_xvf16ger2pp (__vector_quad *, vec_t, vec_t);
50449     void __builtin_mma_xvf16ger2pn (__vector_quad *, vec_t, vec_t);
50450     void __builtin_mma_xvf16ger2np (__vector_quad *, vec_t, vec_t);
50451     void __builtin_mma_xvf16ger2nn (__vector_quad *, vec_t, vec_t);
50452     void __builtin_mma_xvbf16ger2pp (__vector_quad *, vec_t, vec_t);
50453     void __builtin_mma_xvbf16ger2pn (__vector_quad *, vec_t, vec_t);
50454     void __builtin_mma_xvbf16ger2np (__vector_quad *, vec_t, vec_t);
50455     void __builtin_mma_xvbf16ger2nn (__vector_quad *, vec_t, vec_t);
50456     void __builtin_mma_xvf32gerpp (__vector_quad *, vec_t, vec_t);
50457     void __builtin_mma_xvf32gerpn (__vector_quad *, vec_t, vec_t);
50458     void __builtin_mma_xvf32gernp (__vector_quad *, vec_t, vec_t);
50459     void __builtin_mma_xvf32gernn (__vector_quad *, vec_t, vec_t);
50460
50461     void __builtin_mma_pmxvi4ger8 (__vector_quad *, vec_t, vec_t, uint4, uint4, uint8);
50462     void __builtin_mma_pmxvi4ger8pp (__vector_quad *, vec_t, vec_t, uint4, uint4, uint8);
50463
50464     void __builtin_mma_pmxvi8ger4 (__vector_quad *, vec_t, vec_t, uint4, uint4, uint4);
50465     void __builtin_mma_pmxvi8ger4pp (__vector_quad *, vec_t, vec_t, uint4, uint4, uint4);
50466     void __builtin_mma_pmxvi8ger4spp(__vector_quad *, vec_t, vec_t, uint4, uint4, uint4);
50467
50468     void __builtin_mma_pmxvi16ger2 (__vector_quad *, vec_t, vec_t, uint4, uint4, uint2);
50469     void __builtin_mma_pmxvi16ger2s (__vector_quad *, vec_t, vec_t, uint4, uint4, uint2);
50470     void __builtin_mma_pmxvf16ger2 (__vector_quad *, vec_t, vec_t, uint4, uint4, uint2);
50471     void __builtin_mma_pmxvbf16ger2 (__vector_quad *, vec_t, vec_t, uint4, uint4, uint2);
50472
50473     void __builtin_mma_pmxvi16ger2pp (__vector_quad *, vec_t, vec_t, uint4, uint4, uint2);
50474     void __builtin_mma_pmxvi16ger2spp (__vector_quad *, vec_t, vec_t, uint4, uint4, uint2);
50475     void __builtin_mma_pmxvf16ger2pp (__vector_quad *, vec_t, vec_t, uint4, uint4, uint2);
50476     void __builtin_mma_pmxvf16ger2pn (__vector_quad *, vec_t, vec_t, uint4, uint4, uint2);
50477     void __builtin_mma_pmxvf16ger2np (__vector_quad *, vec_t, vec_t, uint4, uint4, uint2);
50478     void __builtin_mma_pmxvf16ger2nn (__vector_quad *, vec_t, vec_t, uint4, uint4, uint2);
50479     void __builtin_mma_pmxvbf16ger2pp (__vector_quad *, vec_t, vec_t, uint4, uint4, uint2);
50480     void __builtin_mma_pmxvbf16ger2pn (__vector_quad *, vec_t, vec_t, uint4, uint4, uint2);
50481     void __builtin_mma_pmxvbf16ger2np (__vector_quad *, vec_t, vec_t, uint4, uint4, uint2);
50482     void __builtin_mma_pmxvbf16ger2nn (__vector_quad *, vec_t, vec_t, uint4, uint4, uint2);
50483
50484     void __builtin_mma_pmxvf32ger (__vector_quad *, vec_t, vec_t, uint4, uint4);
50485     void __builtin_mma_pmxvf32gerpp (__vector_quad *, vec_t, vec_t, uint4, uint4);
50486     void __builtin_mma_pmxvf32gerpn (__vector_quad *, vec_t, vec_t, uint4, uint4);
50487     void __builtin_mma_pmxvf32gernp (__vector_quad *, vec_t, vec_t, uint4, uint4);
50488     void __builtin_mma_pmxvf32gernn (__vector_quad *, vec_t, vec_t, uint4, uint4);
50489
50490     void __builtin_mma_xvf64ger (__vector_quad *, __vector_pair, vec_t);
50491     void __builtin_mma_xvf64gerpp (__vector_quad *, __vector_pair, vec_t);
50492     void __builtin_mma_xvf64gerpn (__vector_quad *, __vector_pair, vec_t);
50493     void __builtin_mma_xvf64gernp (__vector_quad *, __vector_pair, vec_t);
50494     void __builtin_mma_xvf64gernn (__vector_quad *, __vector_pair, vec_t);
50495
50496     void __builtin_mma_pmxvf64ger (__vector_quad *, __vector_pair, vec_t, uint4, uint2);
50497     void __builtin_mma_pmxvf64gerpp (__vector_quad *, __vector_pair, vec_t, uint4, uint2);
50498     void __builtin_mma_pmxvf64gerpn (__vector_quad *, __vector_pair, vec_t, uint4, uint2);
50499     void __builtin_mma_pmxvf64gernp (__vector_quad *, __vector_pair, vec_t, uint4, uint2);
50500     void __builtin_mma_pmxvf64gernn (__vector_quad *, __vector_pair, vec_t, uint4, uint2);
50501
50502     void __builtin_mma_xxmtacc (__vector_quad *);
50503     void __builtin_mma_xxmfacc (__vector_quad *);
50504     void __builtin_mma_xxsetaccz (__vector_quad *);
50505
50506     void __builtin_mma_assemble_acc (__vector_quad *, vec_t, vec_t, vec_t, vec_t);
50507     void __builtin_mma_disassemble_acc (void *, __vector_quad *);
50508
50509     void __builtin_mma_assemble_pair (__vector_pair *, vec_t, vec_t);
50510     void __builtin_mma_disassemble_pair (void *, __vector_pair *);
50511
50512     vec_t __builtin_vsx_xvcvspbf16 (vec_t);
50513     vec_t __builtin_vsx_xvcvbf16sp (vec_t);
50514
50515
50516File: gcc.info,  Node: RX Built-in Functions,  Next: S/390 System z Built-in Functions,  Prev: PowerPC Matrix-Multiply Assist Built-in Functions,  Up: Target Builtins
50517
505186.60.28 RX Built-in Functions
50519-----------------------------
50520
50521GCC supports some of the RX instructions which cannot be expressed in
50522the C programming language via the use of built-in functions.  The
50523following functions are supported:
50524
50525 -- Built-in Function: void __builtin_rx_brk (void)
50526     Generates the 'brk' machine instruction.
50527
50528 -- Built-in Function: void __builtin_rx_clrpsw (int)
50529     Generates the 'clrpsw' machine instruction to clear the specified
50530     bit in the processor status word.
50531
50532 -- Built-in Function: void __builtin_rx_int (int)
50533     Generates the 'int' machine instruction to generate an interrupt
50534     with the specified value.
50535
50536 -- Built-in Function: void __builtin_rx_machi (int, int)
50537     Generates the 'machi' machine instruction to add the result of
50538     multiplying the top 16 bits of the two arguments into the
50539     accumulator.
50540
50541 -- Built-in Function: void __builtin_rx_maclo (int, int)
50542     Generates the 'maclo' machine instruction to add the result of
50543     multiplying the bottom 16 bits of the two arguments into the
50544     accumulator.
50545
50546 -- Built-in Function: void __builtin_rx_mulhi (int, int)
50547     Generates the 'mulhi' machine instruction to place the result of
50548     multiplying the top 16 bits of the two arguments into the
50549     accumulator.
50550
50551 -- Built-in Function: void __builtin_rx_mullo (int, int)
50552     Generates the 'mullo' machine instruction to place the result of
50553     multiplying the bottom 16 bits of the two arguments into the
50554     accumulator.
50555
50556 -- Built-in Function: int __builtin_rx_mvfachi (void)
50557     Generates the 'mvfachi' machine instruction to read the top 32 bits
50558     of the accumulator.
50559
50560 -- Built-in Function: int __builtin_rx_mvfacmi (void)
50561     Generates the 'mvfacmi' machine instruction to read the middle 32
50562     bits of the accumulator.
50563
50564 -- Built-in Function: int __builtin_rx_mvfc (int)
50565     Generates the 'mvfc' machine instruction which reads the control
50566     register specified in its argument and returns its value.
50567
50568 -- Built-in Function: void __builtin_rx_mvtachi (int)
50569     Generates the 'mvtachi' machine instruction to set the top 32 bits
50570     of the accumulator.
50571
50572 -- Built-in Function: void __builtin_rx_mvtaclo (int)
50573     Generates the 'mvtaclo' machine instruction to set the bottom 32
50574     bits of the accumulator.
50575
50576 -- Built-in Function: void __builtin_rx_mvtc (int reg, int val)
50577     Generates the 'mvtc' machine instruction which sets control
50578     register number 'reg' to 'val'.
50579
50580 -- Built-in Function: void __builtin_rx_mvtipl (int)
50581     Generates the 'mvtipl' machine instruction set the interrupt
50582     priority level.
50583
50584 -- Built-in Function: void __builtin_rx_racw (int)
50585     Generates the 'racw' machine instruction to round the accumulator
50586     according to the specified mode.
50587
50588 -- Built-in Function: int __builtin_rx_revw (int)
50589     Generates the 'revw' machine instruction which swaps the bytes in
50590     the argument so that bits 0-7 now occupy bits 8-15 and vice versa,
50591     and also bits 16-23 occupy bits 24-31 and vice versa.
50592
50593 -- Built-in Function: void __builtin_rx_rmpa (void)
50594     Generates the 'rmpa' machine instruction which initiates a repeated
50595     multiply and accumulate sequence.
50596
50597 -- Built-in Function: void __builtin_rx_round (float)
50598     Generates the 'round' machine instruction which returns the
50599     floating-point argument rounded according to the current rounding
50600     mode set in the floating-point status word register.
50601
50602 -- Built-in Function: int __builtin_rx_sat (int)
50603     Generates the 'sat' machine instruction which returns the saturated
50604     value of the argument.
50605
50606 -- Built-in Function: void __builtin_rx_setpsw (int)
50607     Generates the 'setpsw' machine instruction to set the specified bit
50608     in the processor status word.
50609
50610 -- Built-in Function: void __builtin_rx_wait (void)
50611     Generates the 'wait' machine instruction.
50612
50613
50614File: gcc.info,  Node: S/390 System z Built-in Functions,  Next: SH Built-in Functions,  Prev: RX Built-in Functions,  Up: Target Builtins
50615
506166.60.29 S/390 System z Built-in Functions
50617-----------------------------------------
50618
50619 -- Built-in Function: int __builtin_tbegin (void*)
50620     Generates the 'tbegin' machine instruction starting a
50621     non-constrained hardware transaction.  If the parameter is non-NULL
50622     the memory area is used to store the transaction diagnostic buffer
50623     and will be passed as first operand to 'tbegin'.  This buffer can
50624     be defined using the 'struct __htm_tdb' C struct defined in
50625     'htmintrin.h' and must reside on a double-word boundary.  The
50626     second tbegin operand is set to '0xff0c'.  This enables
50627     save/restore of all GPRs and disables aborts for FPR and AR
50628     manipulations inside the transaction body.  The condition code set
50629     by the tbegin instruction is returned as integer value.  The tbegin
50630     instruction by definition overwrites the content of all FPRs.  The
50631     compiler will generate code which saves and restores the FPRs.  For
50632     soft-float code it is recommended to used the '*_nofloat' variant.
50633     In order to prevent a TDB from being written it is required to pass
50634     a constant zero value as parameter.  Passing a zero value through a
50635     variable is not sufficient.  Although modifications of access
50636     registers inside the transaction will not trigger an transaction
50637     abort it is not supported to actually modify them.  Access
50638     registers do not get saved when entering a transaction.  They will
50639     have undefined state when reaching the abort code.
50640
50641 Macros for the possible return codes of tbegin are defined in the
50642'htmintrin.h' header file:
50643
50644'_HTM_TBEGIN_STARTED'
50645     'tbegin' has been executed as part of normal processing.  The
50646     transaction body is supposed to be executed.
50647'_HTM_TBEGIN_INDETERMINATE'
50648     The transaction was aborted due to an indeterminate condition which
50649     might be persistent.
50650'_HTM_TBEGIN_TRANSIENT'
50651     The transaction aborted due to a transient failure.  The
50652     transaction should be re-executed in that case.
50653'_HTM_TBEGIN_PERSISTENT'
50654     The transaction aborted due to a persistent failure.  Re-execution
50655     under same circumstances will not be productive.
50656
50657 -- Macro: _HTM_FIRST_USER_ABORT_CODE
50658     The '_HTM_FIRST_USER_ABORT_CODE' defined in 'htmintrin.h' specifies
50659     the first abort code which can be used for '__builtin_tabort'.
50660     Values below this threshold are reserved for machine use.
50661
50662 -- Data type: struct __htm_tdb
50663     The 'struct __htm_tdb' defined in 'htmintrin.h' describes the
50664     structure of the transaction diagnostic block as specified in the
50665     Principles of Operation manual chapter 5-91.
50666
50667 -- Built-in Function: int __builtin_tbegin_nofloat (void*)
50668     Same as '__builtin_tbegin' but without FPR saves and restores.
50669     Using this variant in code making use of FPRs will leave the FPRs
50670     in undefined state when entering the transaction abort handler
50671     code.
50672
50673 -- Built-in Function: int __builtin_tbegin_retry (void*, int)
50674     In addition to '__builtin_tbegin' a loop for transient failures is
50675     generated.  If tbegin returns a condition code of 2 the transaction
50676     will be retried as often as specified in the second argument.  The
50677     perform processor assist instruction is used to tell the CPU about
50678     the number of fails so far.
50679
50680 -- Built-in Function: int __builtin_tbegin_retry_nofloat (void*, int)
50681     Same as '__builtin_tbegin_retry' but without FPR saves and
50682     restores.  Using this variant in code making use of FPRs will leave
50683     the FPRs in undefined state when entering the transaction abort
50684     handler code.
50685
50686 -- Built-in Function: void __builtin_tbeginc (void)
50687     Generates the 'tbeginc' machine instruction starting a constrained
50688     hardware transaction.  The second operand is set to '0xff08'.
50689
50690 -- Built-in Function: int __builtin_tend (void)
50691     Generates the 'tend' machine instruction finishing a transaction
50692     and making the changes visible to other threads.  The condition
50693     code generated by tend is returned as integer value.
50694
50695 -- Built-in Function: void __builtin_tabort (int)
50696     Generates the 'tabort' machine instruction with the specified abort
50697     code.  Abort codes from 0 through 255 are reserved and will result
50698     in an error message.
50699
50700 -- Built-in Function: void __builtin_tx_assist (int)
50701     Generates the 'ppa rX,rY,1' machine instruction.  Where the integer
50702     parameter is loaded into rX and a value of zero is loaded into rY.
50703     The integer parameter specifies the number of times the transaction
50704     repeatedly aborted.
50705
50706 -- Built-in Function: int __builtin_tx_nesting_depth (void)
50707     Generates the 'etnd' machine instruction.  The current nesting
50708     depth is returned as integer value.  For a nesting depth of 0 the
50709     code is not executed as part of an transaction.
50710
50711 -- Built-in Function: void __builtin_non_tx_store (uint64_t *,
50712          uint64_t)
50713
50714     Generates the 'ntstg' machine instruction.  The second argument is
50715     written to the first arguments location.  The store operation will
50716     not be rolled-back in case of an transaction abort.
50717
50718
50719File: gcc.info,  Node: SH Built-in Functions,  Next: SPARC VIS Built-in Functions,  Prev: S/390 System z Built-in Functions,  Up: Target Builtins
50720
507216.60.30 SH Built-in Functions
50722-----------------------------
50723
50724The following built-in functions are supported on the SH1, SH2, SH3 and
50725SH4 families of processors:
50726
50727 -- Built-in Function: void __builtin_set_thread_pointer (void *PTR)
50728     Sets the 'GBR' register to the specified value PTR.  This is
50729     usually used by system code that manages threads and execution
50730     contexts.  The compiler normally does not generate code that
50731     modifies the contents of 'GBR' and thus the value is preserved
50732     across function calls.  Changing the 'GBR' value in user code must
50733     be done with caution, since the compiler might use 'GBR' in order
50734     to access thread local variables.
50735
50736 -- Built-in Function: void * __builtin_thread_pointer (void)
50737     Returns the value that is currently set in the 'GBR' register.
50738     Memory loads and stores that use the thread pointer as a base
50739     address are turned into 'GBR' based displacement loads and stores,
50740     if possible.  For example:
50741          struct my_tcb
50742          {
50743             int a, b, c, d, e;
50744          };
50745
50746          int get_tcb_value (void)
50747          {
50748            // Generate 'mov.l @(8,gbr),r0' instruction
50749            return ((my_tcb*)__builtin_thread_pointer ())->c;
50750          }
50751
50752
50753 -- Built-in Function: unsigned int __builtin_sh_get_fpscr (void)
50754     Returns the value that is currently set in the 'FPSCR' register.
50755
50756 -- Built-in Function: void __builtin_sh_set_fpscr (unsigned int VAL)
50757     Sets the 'FPSCR' register to the specified value VAL, while
50758     preserving the current values of the FR, SZ and PR bits.
50759
50760
50761File: gcc.info,  Node: SPARC VIS Built-in Functions,  Next: TI C6X Built-in Functions,  Prev: SH Built-in Functions,  Up: Target Builtins
50762
507636.60.31 SPARC VIS Built-in Functions
50764------------------------------------
50765
50766GCC supports SIMD operations on the SPARC using both the generic vector
50767extensions (*note Vector Extensions::) as well as built-in functions for
50768the SPARC Visual Instruction Set (VIS). When you use the '-mvis' switch,
50769the VIS extension is exposed as the following built-in functions:
50770
50771     typedef int v1si __attribute__ ((vector_size (4)));
50772     typedef int v2si __attribute__ ((vector_size (8)));
50773     typedef short v4hi __attribute__ ((vector_size (8)));
50774     typedef short v2hi __attribute__ ((vector_size (4)));
50775     typedef unsigned char v8qi __attribute__ ((vector_size (8)));
50776     typedef unsigned char v4qi __attribute__ ((vector_size (4)));
50777
50778     void __builtin_vis_write_gsr (int64_t);
50779     int64_t __builtin_vis_read_gsr (void);
50780
50781     void * __builtin_vis_alignaddr (void *, long);
50782     void * __builtin_vis_alignaddrl (void *, long);
50783     int64_t __builtin_vis_faligndatadi (int64_t, int64_t);
50784     v2si __builtin_vis_faligndatav2si (v2si, v2si);
50785     v4hi __builtin_vis_faligndatav4hi (v4si, v4si);
50786     v8qi __builtin_vis_faligndatav8qi (v8qi, v8qi);
50787
50788     v4hi __builtin_vis_fexpand (v4qi);
50789
50790     v4hi __builtin_vis_fmul8x16 (v4qi, v4hi);
50791     v4hi __builtin_vis_fmul8x16au (v4qi, v2hi);
50792     v4hi __builtin_vis_fmul8x16al (v4qi, v2hi);
50793     v4hi __builtin_vis_fmul8sux16 (v8qi, v4hi);
50794     v4hi __builtin_vis_fmul8ulx16 (v8qi, v4hi);
50795     v2si __builtin_vis_fmuld8sux16 (v4qi, v2hi);
50796     v2si __builtin_vis_fmuld8ulx16 (v4qi, v2hi);
50797
50798     v4qi __builtin_vis_fpack16 (v4hi);
50799     v8qi __builtin_vis_fpack32 (v2si, v8qi);
50800     v2hi __builtin_vis_fpackfix (v2si);
50801     v8qi __builtin_vis_fpmerge (v4qi, v4qi);
50802
50803     int64_t __builtin_vis_pdist (v8qi, v8qi, int64_t);
50804
50805     long __builtin_vis_edge8 (void *, void *);
50806     long __builtin_vis_edge8l (void *, void *);
50807     long __builtin_vis_edge16 (void *, void *);
50808     long __builtin_vis_edge16l (void *, void *);
50809     long __builtin_vis_edge32 (void *, void *);
50810     long __builtin_vis_edge32l (void *, void *);
50811
50812     long __builtin_vis_fcmple16 (v4hi, v4hi);
50813     long __builtin_vis_fcmple32 (v2si, v2si);
50814     long __builtin_vis_fcmpne16 (v4hi, v4hi);
50815     long __builtin_vis_fcmpne32 (v2si, v2si);
50816     long __builtin_vis_fcmpgt16 (v4hi, v4hi);
50817     long __builtin_vis_fcmpgt32 (v2si, v2si);
50818     long __builtin_vis_fcmpeq16 (v4hi, v4hi);
50819     long __builtin_vis_fcmpeq32 (v2si, v2si);
50820
50821     v4hi __builtin_vis_fpadd16 (v4hi, v4hi);
50822     v2hi __builtin_vis_fpadd16s (v2hi, v2hi);
50823     v2si __builtin_vis_fpadd32 (v2si, v2si);
50824     v1si __builtin_vis_fpadd32s (v1si, v1si);
50825     v4hi __builtin_vis_fpsub16 (v4hi, v4hi);
50826     v2hi __builtin_vis_fpsub16s (v2hi, v2hi);
50827     v2si __builtin_vis_fpsub32 (v2si, v2si);
50828     v1si __builtin_vis_fpsub32s (v1si, v1si);
50829
50830     long __builtin_vis_array8 (long, long);
50831     long __builtin_vis_array16 (long, long);
50832     long __builtin_vis_array32 (long, long);
50833
50834 When you use the '-mvis2' switch, the VIS version 2.0 built-in
50835functions also become available:
50836
50837     long __builtin_vis_bmask (long, long);
50838     int64_t __builtin_vis_bshuffledi (int64_t, int64_t);
50839     v2si __builtin_vis_bshufflev2si (v2si, v2si);
50840     v4hi __builtin_vis_bshufflev2si (v4hi, v4hi);
50841     v8qi __builtin_vis_bshufflev2si (v8qi, v8qi);
50842
50843     long __builtin_vis_edge8n (void *, void *);
50844     long __builtin_vis_edge8ln (void *, void *);
50845     long __builtin_vis_edge16n (void *, void *);
50846     long __builtin_vis_edge16ln (void *, void *);
50847     long __builtin_vis_edge32n (void *, void *);
50848     long __builtin_vis_edge32ln (void *, void *);
50849
50850 When you use the '-mvis3' switch, the VIS version 3.0 built-in
50851functions also become available:
50852
50853     void __builtin_vis_cmask8 (long);
50854     void __builtin_vis_cmask16 (long);
50855     void __builtin_vis_cmask32 (long);
50856
50857     v4hi __builtin_vis_fchksm16 (v4hi, v4hi);
50858
50859     v4hi __builtin_vis_fsll16 (v4hi, v4hi);
50860     v4hi __builtin_vis_fslas16 (v4hi, v4hi);
50861     v4hi __builtin_vis_fsrl16 (v4hi, v4hi);
50862     v4hi __builtin_vis_fsra16 (v4hi, v4hi);
50863     v2si __builtin_vis_fsll16 (v2si, v2si);
50864     v2si __builtin_vis_fslas16 (v2si, v2si);
50865     v2si __builtin_vis_fsrl16 (v2si, v2si);
50866     v2si __builtin_vis_fsra16 (v2si, v2si);
50867
50868     long __builtin_vis_pdistn (v8qi, v8qi);
50869
50870     v4hi __builtin_vis_fmean16 (v4hi, v4hi);
50871
50872     int64_t __builtin_vis_fpadd64 (int64_t, int64_t);
50873     int64_t __builtin_vis_fpsub64 (int64_t, int64_t);
50874
50875     v4hi __builtin_vis_fpadds16 (v4hi, v4hi);
50876     v2hi __builtin_vis_fpadds16s (v2hi, v2hi);
50877     v4hi __builtin_vis_fpsubs16 (v4hi, v4hi);
50878     v2hi __builtin_vis_fpsubs16s (v2hi, v2hi);
50879     v2si __builtin_vis_fpadds32 (v2si, v2si);
50880     v1si __builtin_vis_fpadds32s (v1si, v1si);
50881     v2si __builtin_vis_fpsubs32 (v2si, v2si);
50882     v1si __builtin_vis_fpsubs32s (v1si, v1si);
50883
50884     long __builtin_vis_fucmple8 (v8qi, v8qi);
50885     long __builtin_vis_fucmpne8 (v8qi, v8qi);
50886     long __builtin_vis_fucmpgt8 (v8qi, v8qi);
50887     long __builtin_vis_fucmpeq8 (v8qi, v8qi);
50888
50889     float __builtin_vis_fhadds (float, float);
50890     double __builtin_vis_fhaddd (double, double);
50891     float __builtin_vis_fhsubs (float, float);
50892     double __builtin_vis_fhsubd (double, double);
50893     float __builtin_vis_fnhadds (float, float);
50894     double __builtin_vis_fnhaddd (double, double);
50895
50896     int64_t __builtin_vis_umulxhi (int64_t, int64_t);
50897     int64_t __builtin_vis_xmulx (int64_t, int64_t);
50898     int64_t __builtin_vis_xmulxhi (int64_t, int64_t);
50899
50900 When you use the '-mvis4' switch, the VIS version 4.0 built-in
50901functions also become available:
50902
50903     v8qi __builtin_vis_fpadd8 (v8qi, v8qi);
50904     v8qi __builtin_vis_fpadds8 (v8qi, v8qi);
50905     v8qi __builtin_vis_fpaddus8 (v8qi, v8qi);
50906     v4hi __builtin_vis_fpaddus16 (v4hi, v4hi);
50907
50908     v8qi __builtin_vis_fpsub8 (v8qi, v8qi);
50909     v8qi __builtin_vis_fpsubs8 (v8qi, v8qi);
50910     v8qi __builtin_vis_fpsubus8 (v8qi, v8qi);
50911     v4hi __builtin_vis_fpsubus16 (v4hi, v4hi);
50912
50913     long __builtin_vis_fpcmple8 (v8qi, v8qi);
50914     long __builtin_vis_fpcmpgt8 (v8qi, v8qi);
50915     long __builtin_vis_fpcmpule16 (v4hi, v4hi);
50916     long __builtin_vis_fpcmpugt16 (v4hi, v4hi);
50917     long __builtin_vis_fpcmpule32 (v2si, v2si);
50918     long __builtin_vis_fpcmpugt32 (v2si, v2si);
50919
50920     v8qi __builtin_vis_fpmax8 (v8qi, v8qi);
50921     v4hi __builtin_vis_fpmax16 (v4hi, v4hi);
50922     v2si __builtin_vis_fpmax32 (v2si, v2si);
50923
50924     v8qi __builtin_vis_fpmaxu8 (v8qi, v8qi);
50925     v4hi __builtin_vis_fpmaxu16 (v4hi, v4hi);
50926     v2si __builtin_vis_fpmaxu32 (v2si, v2si);
50927
50928
50929     v8qi __builtin_vis_fpmin8 (v8qi, v8qi);
50930     v4hi __builtin_vis_fpmin16 (v4hi, v4hi);
50931     v2si __builtin_vis_fpmin32 (v2si, v2si);
50932
50933     v8qi __builtin_vis_fpminu8 (v8qi, v8qi);
50934     v4hi __builtin_vis_fpminu16 (v4hi, v4hi);
50935     v2si __builtin_vis_fpminu32 (v2si, v2si);
50936
50937 When you use the '-mvis4b' switch, the VIS version 4.0B built-in
50938functions also become available:
50939
50940     v8qi __builtin_vis_dictunpack8 (double, int);
50941     v4hi __builtin_vis_dictunpack16 (double, int);
50942     v2si __builtin_vis_dictunpack32 (double, int);
50943
50944     long __builtin_vis_fpcmple8shl (v8qi, v8qi, int);
50945     long __builtin_vis_fpcmpgt8shl (v8qi, v8qi, int);
50946     long __builtin_vis_fpcmpeq8shl (v8qi, v8qi, int);
50947     long __builtin_vis_fpcmpne8shl (v8qi, v8qi, int);
50948
50949     long __builtin_vis_fpcmple16shl (v4hi, v4hi, int);
50950     long __builtin_vis_fpcmpgt16shl (v4hi, v4hi, int);
50951     long __builtin_vis_fpcmpeq16shl (v4hi, v4hi, int);
50952     long __builtin_vis_fpcmpne16shl (v4hi, v4hi, int);
50953
50954     long __builtin_vis_fpcmple32shl (v2si, v2si, int);
50955     long __builtin_vis_fpcmpgt32shl (v2si, v2si, int);
50956     long __builtin_vis_fpcmpeq32shl (v2si, v2si, int);
50957     long __builtin_vis_fpcmpne32shl (v2si, v2si, int);
50958
50959     long __builtin_vis_fpcmpule8shl (v8qi, v8qi, int);
50960     long __builtin_vis_fpcmpugt8shl (v8qi, v8qi, int);
50961     long __builtin_vis_fpcmpule16shl (v4hi, v4hi, int);
50962     long __builtin_vis_fpcmpugt16shl (v4hi, v4hi, int);
50963     long __builtin_vis_fpcmpule32shl (v2si, v2si, int);
50964     long __builtin_vis_fpcmpugt32shl (v2si, v2si, int);
50965
50966     long __builtin_vis_fpcmpde8shl (v8qi, v8qi, int);
50967     long __builtin_vis_fpcmpde16shl (v4hi, v4hi, int);
50968     long __builtin_vis_fpcmpde32shl (v2si, v2si, int);
50969
50970     long __builtin_vis_fpcmpur8shl (v8qi, v8qi, int);
50971     long __builtin_vis_fpcmpur16shl (v4hi, v4hi, int);
50972     long __builtin_vis_fpcmpur32shl (v2si, v2si, int);
50973
50974
50975File: gcc.info,  Node: TI C6X Built-in Functions,  Next: TILE-Gx Built-in Functions,  Prev: SPARC VIS Built-in Functions,  Up: Target Builtins
50976
509776.60.32 TI C6X Built-in Functions
50978---------------------------------
50979
50980GCC provides intrinsics to access certain instructions of the TI C6X
50981processors.  These intrinsics, listed below, are available after
50982inclusion of the 'c6x_intrinsics.h' header file.  They map directly to
50983C6X instructions.
50984
50985
50986     int _sadd (int, int)
50987     int _ssub (int, int)
50988     int _sadd2 (int, int)
50989     int _ssub2 (int, int)
50990     long long _mpy2 (int, int)
50991     long long _smpy2 (int, int)
50992     int _add4 (int, int)
50993     int _sub4 (int, int)
50994     int _saddu4 (int, int)
50995
50996     int _smpy (int, int)
50997     int _smpyh (int, int)
50998     int _smpyhl (int, int)
50999     int _smpylh (int, int)
51000
51001     int _sshl (int, int)
51002     int _subc (int, int)
51003
51004     int _avg2 (int, int)
51005     int _avgu4 (int, int)
51006
51007     int _clrr (int, int)
51008     int _extr (int, int)
51009     int _extru (int, int)
51010     int _abs (int)
51011     int _abs2 (int)
51012
51013
51014
51015File: gcc.info,  Node: TILE-Gx Built-in Functions,  Next: TILEPro Built-in Functions,  Prev: TI C6X Built-in Functions,  Up: Target Builtins
51016
510176.60.33 TILE-Gx Built-in Functions
51018----------------------------------
51019
51020GCC provides intrinsics to access every instruction of the TILE-Gx
51021processor.  The intrinsics are of the form:
51022
51023
51024     unsigned long long __insn_OP (...)
51025
51026
51027 Where OP is the name of the instruction.  Refer to the ISA manual for
51028the complete list of instructions.
51029
51030 GCC also provides intrinsics to directly access the network registers.
51031The intrinsics are:
51032
51033
51034     unsigned long long __tile_idn0_receive (void)
51035     unsigned long long __tile_idn1_receive (void)
51036     unsigned long long __tile_udn0_receive (void)
51037     unsigned long long __tile_udn1_receive (void)
51038     unsigned long long __tile_udn2_receive (void)
51039     unsigned long long __tile_udn3_receive (void)
51040     void __tile_idn_send (unsigned long long)
51041     void __tile_udn_send (unsigned long long)
51042
51043
51044 The intrinsic 'void __tile_network_barrier (void)' is used to guarantee
51045that no network operations before it are reordered with those after it.
51046
51047
51048File: gcc.info,  Node: TILEPro Built-in Functions,  Next: x86 Built-in Functions,  Prev: TILE-Gx Built-in Functions,  Up: Target Builtins
51049
510506.60.34 TILEPro Built-in Functions
51051----------------------------------
51052
51053GCC provides intrinsics to access every instruction of the TILEPro
51054processor.  The intrinsics are of the form:
51055
51056
51057     unsigned __insn_OP (...)
51058
51059
51060where OP is the name of the instruction.  Refer to the ISA manual for
51061the complete list of instructions.
51062
51063 GCC also provides intrinsics to directly access the network registers.
51064The intrinsics are:
51065
51066
51067     unsigned __tile_idn0_receive (void)
51068     unsigned __tile_idn1_receive (void)
51069     unsigned __tile_sn_receive (void)
51070     unsigned __tile_udn0_receive (void)
51071     unsigned __tile_udn1_receive (void)
51072     unsigned __tile_udn2_receive (void)
51073     unsigned __tile_udn3_receive (void)
51074     void __tile_idn_send (unsigned)
51075     void __tile_sn_send (unsigned)
51076     void __tile_udn_send (unsigned)
51077
51078
51079 The intrinsic 'void __tile_network_barrier (void)' is used to guarantee
51080that no network operations before it are reordered with those after it.
51081
51082
51083File: gcc.info,  Node: x86 Built-in Functions,  Next: x86 transactional memory intrinsics,  Prev: TILEPro Built-in Functions,  Up: Target Builtins
51084
510856.60.35 x86 Built-in Functions
51086------------------------------
51087
51088These built-in functions are available for the x86-32 and x86-64 family
51089of computers, depending on the command-line switches used.
51090
51091 If you specify command-line switches such as '-msse', the compiler
51092could use the extended instruction sets even if the built-ins are not
51093used explicitly in the program.  For this reason, applications that
51094perform run-time CPU detection must compile separate files for each
51095supported architecture, using the appropriate flags.  In particular, the
51096file containing the CPU detection code should be compiled without these
51097options.
51098
51099 The following machine modes are available for use with MMX built-in
51100functions (*note Vector Extensions::): 'V2SI' for a vector of two 32-bit
51101integers, 'V4HI' for a vector of four 16-bit integers, and 'V8QI' for a
51102vector of eight 8-bit integers.  Some of the built-in functions operate
51103on MMX registers as a whole 64-bit entity, these use 'V1DI' as their
51104mode.
51105
51106 If 3DNow! extensions are enabled, 'V2SF' is used as a mode for a vector
51107of two 32-bit floating-point values.
51108
51109 If SSE extensions are enabled, 'V4SF' is used for a vector of four
5111032-bit floating-point values.  Some instructions use a vector of four
5111132-bit integers, these use 'V4SI'.  Finally, some instructions operate
51112on an entire vector register, interpreting it as a 128-bit integer,
51113these use mode 'TI'.
51114
51115 The x86-32 and x86-64 family of processors use additional built-in
51116functions for efficient use of 'TF' ('__float128') 128-bit floating
51117point and 'TC' 128-bit complex floating-point values.
51118
51119 The following floating-point built-in functions are always available.
51120All of them implement the function that is part of the name.
51121
51122     __float128 __builtin_fabsq (__float128)
51123     __float128 __builtin_copysignq (__float128, __float128)
51124
51125 The following built-in functions are always available.
51126
51127'__float128 __builtin_infq (void)'
51128     Similar to '__builtin_inf', except the return type is '__float128'.
51129
51130'__float128 __builtin_huge_valq (void)'
51131     Similar to '__builtin_huge_val', except the return type is
51132     '__float128'.
51133
51134'__float128 __builtin_nanq (void)'
51135     Similar to '__builtin_nan', except the return type is '__float128'.
51136
51137'__float128 __builtin_nansq (void)'
51138     Similar to '__builtin_nans', except the return type is
51139     '__float128'.
51140
51141 The following built-in function is always available.
51142
51143'void __builtin_ia32_pause (void)'
51144     Generates the 'pause' machine instruction with a compiler memory
51145     barrier.
51146
51147 The following built-in functions are always available and can be used
51148to check the target platform type.
51149
51150 -- Built-in Function: void __builtin_cpu_init (void)
51151     This function runs the CPU detection code to check the type of CPU
51152     and the features supported.  This built-in function needs to be
51153     invoked along with the built-in functions to check CPU type and
51154     features, '__builtin_cpu_is' and '__builtin_cpu_supports', only
51155     when used in a function that is executed before any constructors
51156     are called.  The CPU detection code is automatically executed in a
51157     very high priority constructor.
51158
51159     For example, this function has to be used in 'ifunc' resolvers that
51160     check for CPU type using the built-in functions '__builtin_cpu_is'
51161     and '__builtin_cpu_supports', or in constructors on targets that
51162     don't support constructor priority.
51163
51164          static void (*resolve_memcpy (void)) (void)
51165          {
51166            // ifunc resolvers fire before constructors, explicitly call the init
51167            // function.
51168            __builtin_cpu_init ();
51169            if (__builtin_cpu_supports ("ssse3"))
51170              return ssse3_memcpy; // super fast memcpy with ssse3 instructions.
51171            else
51172              return default_memcpy;
51173          }
51174
51175          void *memcpy (void *, const void *, size_t)
51176               __attribute__ ((ifunc ("resolve_memcpy")));
51177
51178 -- Built-in Function: int __builtin_cpu_is (const char *CPUNAME)
51179     This function returns a positive integer if the run-time CPU is of
51180     type CPUNAME and returns '0' otherwise.  The following CPU names
51181     can be detected:
51182
51183     'amd'
51184          AMD CPU.
51185
51186     'intel'
51187          Intel CPU.
51188
51189     'atom'
51190          Intel Atom CPU.
51191
51192     'slm'
51193          Intel Silvermont CPU.
51194
51195     'core2'
51196          Intel Core 2 CPU.
51197
51198     'corei7'
51199          Intel Core i7 CPU.
51200
51201     'nehalem'
51202          Intel Core i7 Nehalem CPU.
51203
51204     'westmere'
51205          Intel Core i7 Westmere CPU.
51206
51207     'sandybridge'
51208          Intel Core i7 Sandy Bridge CPU.
51209
51210     'ivybridge'
51211          Intel Core i7 Ivy Bridge CPU.
51212
51213     'haswell'
51214          Intel Core i7 Haswell CPU.
51215
51216     'broadwell'
51217          Intel Core i7 Broadwell CPU.
51218
51219     'skylake'
51220          Intel Core i7 Skylake CPU.
51221
51222     'skylake-avx512'
51223          Intel Core i7 Skylake AVX512 CPU.
51224
51225     'cannonlake'
51226          Intel Core i7 Cannon Lake CPU.
51227
51228     'icelake-client'
51229          Intel Core i7 Ice Lake Client CPU.
51230
51231     'icelake-server'
51232          Intel Core i7 Ice Lake Server CPU.
51233
51234     'cascadelake'
51235          Intel Core i7 Cascadelake CPU.
51236
51237     'tigerlake'
51238          Intel Core i7 Tigerlake CPU.
51239
51240     'cooperlake'
51241          Intel Core i7 Cooperlake CPU.
51242
51243     'bonnell'
51244          Intel Atom Bonnell CPU.
51245
51246     'silvermont'
51247          Intel Atom Silvermont CPU.
51248
51249     'goldmont'
51250          Intel Atom Goldmont CPU.
51251
51252     'goldmont-plus'
51253          Intel Atom Goldmont Plus CPU.
51254
51255     'tremont'
51256          Intel Atom Tremont CPU.
51257
51258     'knl'
51259          Intel Knights Landing CPU.
51260
51261     'knm'
51262          Intel Knights Mill CPU.
51263
51264     'amdfam10h'
51265          AMD Family 10h CPU.
51266
51267     'barcelona'
51268          AMD Family 10h Barcelona CPU.
51269
51270     'shanghai'
51271          AMD Family 10h Shanghai CPU.
51272
51273     'istanbul'
51274          AMD Family 10h Istanbul CPU.
51275
51276     'btver1'
51277          AMD Family 14h CPU.
51278
51279     'amdfam15h'
51280          AMD Family 15h CPU.
51281
51282     'bdver1'
51283          AMD Family 15h Bulldozer version 1.
51284
51285     'bdver2'
51286          AMD Family 15h Bulldozer version 2.
51287
51288     'bdver3'
51289          AMD Family 15h Bulldozer version 3.
51290
51291     'bdver4'
51292          AMD Family 15h Bulldozer version 4.
51293
51294     'btver2'
51295          AMD Family 16h CPU.
51296
51297     'amdfam17h'
51298          AMD Family 17h CPU.
51299
51300     'znver1'
51301          AMD Family 17h Zen version 1.
51302
51303     'znver2'
51304          AMD Family 17h Zen version 2.
51305
51306     Here is an example:
51307          if (__builtin_cpu_is ("corei7"))
51308            {
51309               do_corei7 (); // Core i7 specific implementation.
51310            }
51311          else
51312            {
51313               do_generic (); // Generic implementation.
51314            }
51315
51316 -- Built-in Function: int __builtin_cpu_supports (const char *FEATURE)
51317     This function returns a positive integer if the run-time CPU
51318     supports FEATURE and returns '0' otherwise.  The following features
51319     can be detected:
51320
51321     'cmov'
51322          CMOV instruction.
51323     'mmx'
51324          MMX instructions.
51325     'popcnt'
51326          POPCNT instruction.
51327     'sse'
51328          SSE instructions.
51329     'sse2'
51330          SSE2 instructions.
51331     'sse3'
51332          SSE3 instructions.
51333     'ssse3'
51334          SSSE3 instructions.
51335     'sse4.1'
51336          SSE4.1 instructions.
51337     'sse4.2'
51338          SSE4.2 instructions.
51339     'avx'
51340          AVX instructions.
51341     'avx2'
51342          AVX2 instructions.
51343     'sse4a'
51344          SSE4A instructions.
51345     'fma4'
51346          FMA4 instructions.
51347     'xop'
51348          XOP instructions.
51349     'fma'
51350          FMA instructions.
51351     'avx512f'
51352          AVX512F instructions.
51353     'bmi'
51354          BMI instructions.
51355     'bmi2'
51356          BMI2 instructions.
51357     'aes'
51358          AES instructions.
51359     'pclmul'
51360          PCLMUL instructions.
51361     'avx512vl'
51362          AVX512VL instructions.
51363     'avx512bw'
51364          AVX512BW instructions.
51365     'avx512dq'
51366          AVX512DQ instructions.
51367     'avx512cd'
51368          AVX512CD instructions.
51369     'avx512er'
51370          AVX512ER instructions.
51371     'avx512pf'
51372          AVX512PF instructions.
51373     'avx512vbmi'
51374          AVX512VBMI instructions.
51375     'avx512ifma'
51376          AVX512IFMA instructions.
51377     'avx5124vnniw'
51378          AVX5124VNNIW instructions.
51379     'avx5124fmaps'
51380          AVX5124FMAPS instructions.
51381     'avx512vpopcntdq'
51382          AVX512VPOPCNTDQ instructions.
51383     'avx512vbmi2'
51384          AVX512VBMI2 instructions.
51385     'gfni'
51386          GFNI instructions.
51387     'vpclmulqdq'
51388          VPCLMULQDQ instructions.
51389     'avx512vnni'
51390          AVX512VNNI instructions.
51391     'avx512bitalg'
51392          AVX512BITALG instructions.
51393
51394     Here is an example:
51395          if (__builtin_cpu_supports ("popcnt"))
51396            {
51397               asm("popcnt %1,%0" : "=r"(count) : "rm"(n) : "cc");
51398            }
51399          else
51400            {
51401               count = generic_countbits (n); //generic implementation.
51402            }
51403
51404 The following built-in functions are made available by '-mmmx'.  All of
51405them generate the machine instruction that is part of the name.
51406
51407     v8qi __builtin_ia32_paddb (v8qi, v8qi)
51408     v4hi __builtin_ia32_paddw (v4hi, v4hi)
51409     v2si __builtin_ia32_paddd (v2si, v2si)
51410     v8qi __builtin_ia32_psubb (v8qi, v8qi)
51411     v4hi __builtin_ia32_psubw (v4hi, v4hi)
51412     v2si __builtin_ia32_psubd (v2si, v2si)
51413     v8qi __builtin_ia32_paddsb (v8qi, v8qi)
51414     v4hi __builtin_ia32_paddsw (v4hi, v4hi)
51415     v8qi __builtin_ia32_psubsb (v8qi, v8qi)
51416     v4hi __builtin_ia32_psubsw (v4hi, v4hi)
51417     v8qi __builtin_ia32_paddusb (v8qi, v8qi)
51418     v4hi __builtin_ia32_paddusw (v4hi, v4hi)
51419     v8qi __builtin_ia32_psubusb (v8qi, v8qi)
51420     v4hi __builtin_ia32_psubusw (v4hi, v4hi)
51421     v4hi __builtin_ia32_pmullw (v4hi, v4hi)
51422     v4hi __builtin_ia32_pmulhw (v4hi, v4hi)
51423     di __builtin_ia32_pand (di, di)
51424     di __builtin_ia32_pandn (di,di)
51425     di __builtin_ia32_por (di, di)
51426     di __builtin_ia32_pxor (di, di)
51427     v8qi __builtin_ia32_pcmpeqb (v8qi, v8qi)
51428     v4hi __builtin_ia32_pcmpeqw (v4hi, v4hi)
51429     v2si __builtin_ia32_pcmpeqd (v2si, v2si)
51430     v8qi __builtin_ia32_pcmpgtb (v8qi, v8qi)
51431     v4hi __builtin_ia32_pcmpgtw (v4hi, v4hi)
51432     v2si __builtin_ia32_pcmpgtd (v2si, v2si)
51433     v8qi __builtin_ia32_punpckhbw (v8qi, v8qi)
51434     v4hi __builtin_ia32_punpckhwd (v4hi, v4hi)
51435     v2si __builtin_ia32_punpckhdq (v2si, v2si)
51436     v8qi __builtin_ia32_punpcklbw (v8qi, v8qi)
51437     v4hi __builtin_ia32_punpcklwd (v4hi, v4hi)
51438     v2si __builtin_ia32_punpckldq (v2si, v2si)
51439     v8qi __builtin_ia32_packsswb (v4hi, v4hi)
51440     v4hi __builtin_ia32_packssdw (v2si, v2si)
51441     v8qi __builtin_ia32_packuswb (v4hi, v4hi)
51442
51443     v4hi __builtin_ia32_psllw (v4hi, v4hi)
51444     v2si __builtin_ia32_pslld (v2si, v2si)
51445     v1di __builtin_ia32_psllq (v1di, v1di)
51446     v4hi __builtin_ia32_psrlw (v4hi, v4hi)
51447     v2si __builtin_ia32_psrld (v2si, v2si)
51448     v1di __builtin_ia32_psrlq (v1di, v1di)
51449     v4hi __builtin_ia32_psraw (v4hi, v4hi)
51450     v2si __builtin_ia32_psrad (v2si, v2si)
51451     v4hi __builtin_ia32_psllwi (v4hi, int)
51452     v2si __builtin_ia32_pslldi (v2si, int)
51453     v1di __builtin_ia32_psllqi (v1di, int)
51454     v4hi __builtin_ia32_psrlwi (v4hi, int)
51455     v2si __builtin_ia32_psrldi (v2si, int)
51456     v1di __builtin_ia32_psrlqi (v1di, int)
51457     v4hi __builtin_ia32_psrawi (v4hi, int)
51458     v2si __builtin_ia32_psradi (v2si, int)
51459
51460
51461 The following built-in functions are made available either with
51462'-msse', or with '-m3dnowa'.  All of them generate the machine
51463instruction that is part of the name.
51464
51465     v4hi __builtin_ia32_pmulhuw (v4hi, v4hi)
51466     v8qi __builtin_ia32_pavgb (v8qi, v8qi)
51467     v4hi __builtin_ia32_pavgw (v4hi, v4hi)
51468     v1di __builtin_ia32_psadbw (v8qi, v8qi)
51469     v8qi __builtin_ia32_pmaxub (v8qi, v8qi)
51470     v4hi __builtin_ia32_pmaxsw (v4hi, v4hi)
51471     v8qi __builtin_ia32_pminub (v8qi, v8qi)
51472     v4hi __builtin_ia32_pminsw (v4hi, v4hi)
51473     int __builtin_ia32_pmovmskb (v8qi)
51474     void __builtin_ia32_maskmovq (v8qi, v8qi, char *)
51475     void __builtin_ia32_movntq (di *, di)
51476     void __builtin_ia32_sfence (void)
51477
51478 The following built-in functions are available when '-msse' is used.
51479All of them generate the machine instruction that is part of the name.
51480
51481     int __builtin_ia32_comieq (v4sf, v4sf)
51482     int __builtin_ia32_comineq (v4sf, v4sf)
51483     int __builtin_ia32_comilt (v4sf, v4sf)
51484     int __builtin_ia32_comile (v4sf, v4sf)
51485     int __builtin_ia32_comigt (v4sf, v4sf)
51486     int __builtin_ia32_comige (v4sf, v4sf)
51487     int __builtin_ia32_ucomieq (v4sf, v4sf)
51488     int __builtin_ia32_ucomineq (v4sf, v4sf)
51489     int __builtin_ia32_ucomilt (v4sf, v4sf)
51490     int __builtin_ia32_ucomile (v4sf, v4sf)
51491     int __builtin_ia32_ucomigt (v4sf, v4sf)
51492     int __builtin_ia32_ucomige (v4sf, v4sf)
51493     v4sf __builtin_ia32_addps (v4sf, v4sf)
51494     v4sf __builtin_ia32_subps (v4sf, v4sf)
51495     v4sf __builtin_ia32_mulps (v4sf, v4sf)
51496     v4sf __builtin_ia32_divps (v4sf, v4sf)
51497     v4sf __builtin_ia32_addss (v4sf, v4sf)
51498     v4sf __builtin_ia32_subss (v4sf, v4sf)
51499     v4sf __builtin_ia32_mulss (v4sf, v4sf)
51500     v4sf __builtin_ia32_divss (v4sf, v4sf)
51501     v4sf __builtin_ia32_cmpeqps (v4sf, v4sf)
51502     v4sf __builtin_ia32_cmpltps (v4sf, v4sf)
51503     v4sf __builtin_ia32_cmpleps (v4sf, v4sf)
51504     v4sf __builtin_ia32_cmpgtps (v4sf, v4sf)
51505     v4sf __builtin_ia32_cmpgeps (v4sf, v4sf)
51506     v4sf __builtin_ia32_cmpunordps (v4sf, v4sf)
51507     v4sf __builtin_ia32_cmpneqps (v4sf, v4sf)
51508     v4sf __builtin_ia32_cmpnltps (v4sf, v4sf)
51509     v4sf __builtin_ia32_cmpnleps (v4sf, v4sf)
51510     v4sf __builtin_ia32_cmpngtps (v4sf, v4sf)
51511     v4sf __builtin_ia32_cmpngeps (v4sf, v4sf)
51512     v4sf __builtin_ia32_cmpordps (v4sf, v4sf)
51513     v4sf __builtin_ia32_cmpeqss (v4sf, v4sf)
51514     v4sf __builtin_ia32_cmpltss (v4sf, v4sf)
51515     v4sf __builtin_ia32_cmpless (v4sf, v4sf)
51516     v4sf __builtin_ia32_cmpunordss (v4sf, v4sf)
51517     v4sf __builtin_ia32_cmpneqss (v4sf, v4sf)
51518     v4sf __builtin_ia32_cmpnltss (v4sf, v4sf)
51519     v4sf __builtin_ia32_cmpnless (v4sf, v4sf)
51520     v4sf __builtin_ia32_cmpordss (v4sf, v4sf)
51521     v4sf __builtin_ia32_maxps (v4sf, v4sf)
51522     v4sf __builtin_ia32_maxss (v4sf, v4sf)
51523     v4sf __builtin_ia32_minps (v4sf, v4sf)
51524     v4sf __builtin_ia32_minss (v4sf, v4sf)
51525     v4sf __builtin_ia32_andps (v4sf, v4sf)
51526     v4sf __builtin_ia32_andnps (v4sf, v4sf)
51527     v4sf __builtin_ia32_orps (v4sf, v4sf)
51528     v4sf __builtin_ia32_xorps (v4sf, v4sf)
51529     v4sf __builtin_ia32_movss (v4sf, v4sf)
51530     v4sf __builtin_ia32_movhlps (v4sf, v4sf)
51531     v4sf __builtin_ia32_movlhps (v4sf, v4sf)
51532     v4sf __builtin_ia32_unpckhps (v4sf, v4sf)
51533     v4sf __builtin_ia32_unpcklps (v4sf, v4sf)
51534     v4sf __builtin_ia32_cvtpi2ps (v4sf, v2si)
51535     v4sf __builtin_ia32_cvtsi2ss (v4sf, int)
51536     v2si __builtin_ia32_cvtps2pi (v4sf)
51537     int __builtin_ia32_cvtss2si (v4sf)
51538     v2si __builtin_ia32_cvttps2pi (v4sf)
51539     int __builtin_ia32_cvttss2si (v4sf)
51540     v4sf __builtin_ia32_rcpps (v4sf)
51541     v4sf __builtin_ia32_rsqrtps (v4sf)
51542     v4sf __builtin_ia32_sqrtps (v4sf)
51543     v4sf __builtin_ia32_rcpss (v4sf)
51544     v4sf __builtin_ia32_rsqrtss (v4sf)
51545     v4sf __builtin_ia32_sqrtss (v4sf)
51546     v4sf __builtin_ia32_shufps (v4sf, v4sf, int)
51547     void __builtin_ia32_movntps (float *, v4sf)
51548     int __builtin_ia32_movmskps (v4sf)
51549
51550 The following built-in functions are available when '-msse' is used.
51551
51552'v4sf __builtin_ia32_loadups (float *)'
51553     Generates the 'movups' machine instruction as a load from memory.
51554'void __builtin_ia32_storeups (float *, v4sf)'
51555     Generates the 'movups' machine instruction as a store to memory.
51556'v4sf __builtin_ia32_loadss (float *)'
51557     Generates the 'movss' machine instruction as a load from memory.
51558'v4sf __builtin_ia32_loadhps (v4sf, const v2sf *)'
51559     Generates the 'movhps' machine instruction as a load from memory.
51560'v4sf __builtin_ia32_loadlps (v4sf, const v2sf *)'
51561     Generates the 'movlps' machine instruction as a load from memory
51562'void __builtin_ia32_storehps (v2sf *, v4sf)'
51563     Generates the 'movhps' machine instruction as a store to memory.
51564'void __builtin_ia32_storelps (v2sf *, v4sf)'
51565     Generates the 'movlps' machine instruction as a store to memory.
51566
51567 The following built-in functions are available when '-msse2' is used.
51568All of them generate the machine instruction that is part of the name.
51569
51570     int __builtin_ia32_comisdeq (v2df, v2df)
51571     int __builtin_ia32_comisdlt (v2df, v2df)
51572     int __builtin_ia32_comisdle (v2df, v2df)
51573     int __builtin_ia32_comisdgt (v2df, v2df)
51574     int __builtin_ia32_comisdge (v2df, v2df)
51575     int __builtin_ia32_comisdneq (v2df, v2df)
51576     int __builtin_ia32_ucomisdeq (v2df, v2df)
51577     int __builtin_ia32_ucomisdlt (v2df, v2df)
51578     int __builtin_ia32_ucomisdle (v2df, v2df)
51579     int __builtin_ia32_ucomisdgt (v2df, v2df)
51580     int __builtin_ia32_ucomisdge (v2df, v2df)
51581     int __builtin_ia32_ucomisdneq (v2df, v2df)
51582     v2df __builtin_ia32_cmpeqpd (v2df, v2df)
51583     v2df __builtin_ia32_cmpltpd (v2df, v2df)
51584     v2df __builtin_ia32_cmplepd (v2df, v2df)
51585     v2df __builtin_ia32_cmpgtpd (v2df, v2df)
51586     v2df __builtin_ia32_cmpgepd (v2df, v2df)
51587     v2df __builtin_ia32_cmpunordpd (v2df, v2df)
51588     v2df __builtin_ia32_cmpneqpd (v2df, v2df)
51589     v2df __builtin_ia32_cmpnltpd (v2df, v2df)
51590     v2df __builtin_ia32_cmpnlepd (v2df, v2df)
51591     v2df __builtin_ia32_cmpngtpd (v2df, v2df)
51592     v2df __builtin_ia32_cmpngepd (v2df, v2df)
51593     v2df __builtin_ia32_cmpordpd (v2df, v2df)
51594     v2df __builtin_ia32_cmpeqsd (v2df, v2df)
51595     v2df __builtin_ia32_cmpltsd (v2df, v2df)
51596     v2df __builtin_ia32_cmplesd (v2df, v2df)
51597     v2df __builtin_ia32_cmpunordsd (v2df, v2df)
51598     v2df __builtin_ia32_cmpneqsd (v2df, v2df)
51599     v2df __builtin_ia32_cmpnltsd (v2df, v2df)
51600     v2df __builtin_ia32_cmpnlesd (v2df, v2df)
51601     v2df __builtin_ia32_cmpordsd (v2df, v2df)
51602     v2di __builtin_ia32_paddq (v2di, v2di)
51603     v2di __builtin_ia32_psubq (v2di, v2di)
51604     v2df __builtin_ia32_addpd (v2df, v2df)
51605     v2df __builtin_ia32_subpd (v2df, v2df)
51606     v2df __builtin_ia32_mulpd (v2df, v2df)
51607     v2df __builtin_ia32_divpd (v2df, v2df)
51608     v2df __builtin_ia32_addsd (v2df, v2df)
51609     v2df __builtin_ia32_subsd (v2df, v2df)
51610     v2df __builtin_ia32_mulsd (v2df, v2df)
51611     v2df __builtin_ia32_divsd (v2df, v2df)
51612     v2df __builtin_ia32_minpd (v2df, v2df)
51613     v2df __builtin_ia32_maxpd (v2df, v2df)
51614     v2df __builtin_ia32_minsd (v2df, v2df)
51615     v2df __builtin_ia32_maxsd (v2df, v2df)
51616     v2df __builtin_ia32_andpd (v2df, v2df)
51617     v2df __builtin_ia32_andnpd (v2df, v2df)
51618     v2df __builtin_ia32_orpd (v2df, v2df)
51619     v2df __builtin_ia32_xorpd (v2df, v2df)
51620     v2df __builtin_ia32_movsd (v2df, v2df)
51621     v2df __builtin_ia32_unpckhpd (v2df, v2df)
51622     v2df __builtin_ia32_unpcklpd (v2df, v2df)
51623     v16qi __builtin_ia32_paddb128 (v16qi, v16qi)
51624     v8hi __builtin_ia32_paddw128 (v8hi, v8hi)
51625     v4si __builtin_ia32_paddd128 (v4si, v4si)
51626     v2di __builtin_ia32_paddq128 (v2di, v2di)
51627     v16qi __builtin_ia32_psubb128 (v16qi, v16qi)
51628     v8hi __builtin_ia32_psubw128 (v8hi, v8hi)
51629     v4si __builtin_ia32_psubd128 (v4si, v4si)
51630     v2di __builtin_ia32_psubq128 (v2di, v2di)
51631     v8hi __builtin_ia32_pmullw128 (v8hi, v8hi)
51632     v8hi __builtin_ia32_pmulhw128 (v8hi, v8hi)
51633     v2di __builtin_ia32_pand128 (v2di, v2di)
51634     v2di __builtin_ia32_pandn128 (v2di, v2di)
51635     v2di __builtin_ia32_por128 (v2di, v2di)
51636     v2di __builtin_ia32_pxor128 (v2di, v2di)
51637     v16qi __builtin_ia32_pavgb128 (v16qi, v16qi)
51638     v8hi __builtin_ia32_pavgw128 (v8hi, v8hi)
51639     v16qi __builtin_ia32_pcmpeqb128 (v16qi, v16qi)
51640     v8hi __builtin_ia32_pcmpeqw128 (v8hi, v8hi)
51641     v4si __builtin_ia32_pcmpeqd128 (v4si, v4si)
51642     v16qi __builtin_ia32_pcmpgtb128 (v16qi, v16qi)
51643     v8hi __builtin_ia32_pcmpgtw128 (v8hi, v8hi)
51644     v4si __builtin_ia32_pcmpgtd128 (v4si, v4si)
51645     v16qi __builtin_ia32_pmaxub128 (v16qi, v16qi)
51646     v8hi __builtin_ia32_pmaxsw128 (v8hi, v8hi)
51647     v16qi __builtin_ia32_pminub128 (v16qi, v16qi)
51648     v8hi __builtin_ia32_pminsw128 (v8hi, v8hi)
51649     v16qi __builtin_ia32_punpckhbw128 (v16qi, v16qi)
51650     v8hi __builtin_ia32_punpckhwd128 (v8hi, v8hi)
51651     v4si __builtin_ia32_punpckhdq128 (v4si, v4si)
51652     v2di __builtin_ia32_punpckhqdq128 (v2di, v2di)
51653     v16qi __builtin_ia32_punpcklbw128 (v16qi, v16qi)
51654     v8hi __builtin_ia32_punpcklwd128 (v8hi, v8hi)
51655     v4si __builtin_ia32_punpckldq128 (v4si, v4si)
51656     v2di __builtin_ia32_punpcklqdq128 (v2di, v2di)
51657     v16qi __builtin_ia32_packsswb128 (v8hi, v8hi)
51658     v8hi __builtin_ia32_packssdw128 (v4si, v4si)
51659     v16qi __builtin_ia32_packuswb128 (v8hi, v8hi)
51660     v8hi __builtin_ia32_pmulhuw128 (v8hi, v8hi)
51661     void __builtin_ia32_maskmovdqu (v16qi, v16qi)
51662     v2df __builtin_ia32_loadupd (double *)
51663     void __builtin_ia32_storeupd (double *, v2df)
51664     v2df __builtin_ia32_loadhpd (v2df, double const *)
51665     v2df __builtin_ia32_loadlpd (v2df, double const *)
51666     int __builtin_ia32_movmskpd (v2df)
51667     int __builtin_ia32_pmovmskb128 (v16qi)
51668     void __builtin_ia32_movnti (int *, int)
51669     void __builtin_ia32_movnti64 (long long int *, long long int)
51670     void __builtin_ia32_movntpd (double *, v2df)
51671     void __builtin_ia32_movntdq (v2df *, v2df)
51672     v4si __builtin_ia32_pshufd (v4si, int)
51673     v8hi __builtin_ia32_pshuflw (v8hi, int)
51674     v8hi __builtin_ia32_pshufhw (v8hi, int)
51675     v2di __builtin_ia32_psadbw128 (v16qi, v16qi)
51676     v2df __builtin_ia32_sqrtpd (v2df)
51677     v2df __builtin_ia32_sqrtsd (v2df)
51678     v2df __builtin_ia32_shufpd (v2df, v2df, int)
51679     v2df __builtin_ia32_cvtdq2pd (v4si)
51680     v4sf __builtin_ia32_cvtdq2ps (v4si)
51681     v4si __builtin_ia32_cvtpd2dq (v2df)
51682     v2si __builtin_ia32_cvtpd2pi (v2df)
51683     v4sf __builtin_ia32_cvtpd2ps (v2df)
51684     v4si __builtin_ia32_cvttpd2dq (v2df)
51685     v2si __builtin_ia32_cvttpd2pi (v2df)
51686     v2df __builtin_ia32_cvtpi2pd (v2si)
51687     int __builtin_ia32_cvtsd2si (v2df)
51688     int __builtin_ia32_cvttsd2si (v2df)
51689     long long __builtin_ia32_cvtsd2si64 (v2df)
51690     long long __builtin_ia32_cvttsd2si64 (v2df)
51691     v4si __builtin_ia32_cvtps2dq (v4sf)
51692     v2df __builtin_ia32_cvtps2pd (v4sf)
51693     v4si __builtin_ia32_cvttps2dq (v4sf)
51694     v2df __builtin_ia32_cvtsi2sd (v2df, int)
51695     v2df __builtin_ia32_cvtsi642sd (v2df, long long)
51696     v4sf __builtin_ia32_cvtsd2ss (v4sf, v2df)
51697     v2df __builtin_ia32_cvtss2sd (v2df, v4sf)
51698     void __builtin_ia32_clflush (const void *)
51699     void __builtin_ia32_lfence (void)
51700     void __builtin_ia32_mfence (void)
51701     v16qi __builtin_ia32_loaddqu (const char *)
51702     void __builtin_ia32_storedqu (char *, v16qi)
51703     v1di __builtin_ia32_pmuludq (v2si, v2si)
51704     v2di __builtin_ia32_pmuludq128 (v4si, v4si)
51705     v8hi __builtin_ia32_psllw128 (v8hi, v8hi)
51706     v4si __builtin_ia32_pslld128 (v4si, v4si)
51707     v2di __builtin_ia32_psllq128 (v2di, v2di)
51708     v8hi __builtin_ia32_psrlw128 (v8hi, v8hi)
51709     v4si __builtin_ia32_psrld128 (v4si, v4si)
51710     v2di __builtin_ia32_psrlq128 (v2di, v2di)
51711     v8hi __builtin_ia32_psraw128 (v8hi, v8hi)
51712     v4si __builtin_ia32_psrad128 (v4si, v4si)
51713     v2di __builtin_ia32_pslldqi128 (v2di, int)
51714     v8hi __builtin_ia32_psllwi128 (v8hi, int)
51715     v4si __builtin_ia32_pslldi128 (v4si, int)
51716     v2di __builtin_ia32_psllqi128 (v2di, int)
51717     v2di __builtin_ia32_psrldqi128 (v2di, int)
51718     v8hi __builtin_ia32_psrlwi128 (v8hi, int)
51719     v4si __builtin_ia32_psrldi128 (v4si, int)
51720     v2di __builtin_ia32_psrlqi128 (v2di, int)
51721     v8hi __builtin_ia32_psrawi128 (v8hi, int)
51722     v4si __builtin_ia32_psradi128 (v4si, int)
51723     v4si __builtin_ia32_pmaddwd128 (v8hi, v8hi)
51724     v2di __builtin_ia32_movq128 (v2di)
51725
51726 The following built-in functions are available when '-msse3' is used.
51727All of them generate the machine instruction that is part of the name.
51728
51729     v2df __builtin_ia32_addsubpd (v2df, v2df)
51730     v4sf __builtin_ia32_addsubps (v4sf, v4sf)
51731     v2df __builtin_ia32_haddpd (v2df, v2df)
51732     v4sf __builtin_ia32_haddps (v4sf, v4sf)
51733     v2df __builtin_ia32_hsubpd (v2df, v2df)
51734     v4sf __builtin_ia32_hsubps (v4sf, v4sf)
51735     v16qi __builtin_ia32_lddqu (char const *)
51736     void __builtin_ia32_monitor (void *, unsigned int, unsigned int)
51737     v4sf __builtin_ia32_movshdup (v4sf)
51738     v4sf __builtin_ia32_movsldup (v4sf)
51739     void __builtin_ia32_mwait (unsigned int, unsigned int)
51740
51741 The following built-in functions are available when '-mssse3' is used.
51742All of them generate the machine instruction that is part of the name.
51743
51744     v2si __builtin_ia32_phaddd (v2si, v2si)
51745     v4hi __builtin_ia32_phaddw (v4hi, v4hi)
51746     v4hi __builtin_ia32_phaddsw (v4hi, v4hi)
51747     v2si __builtin_ia32_phsubd (v2si, v2si)
51748     v4hi __builtin_ia32_phsubw (v4hi, v4hi)
51749     v4hi __builtin_ia32_phsubsw (v4hi, v4hi)
51750     v4hi __builtin_ia32_pmaddubsw (v8qi, v8qi)
51751     v4hi __builtin_ia32_pmulhrsw (v4hi, v4hi)
51752     v8qi __builtin_ia32_pshufb (v8qi, v8qi)
51753     v8qi __builtin_ia32_psignb (v8qi, v8qi)
51754     v2si __builtin_ia32_psignd (v2si, v2si)
51755     v4hi __builtin_ia32_psignw (v4hi, v4hi)
51756     v1di __builtin_ia32_palignr (v1di, v1di, int)
51757     v8qi __builtin_ia32_pabsb (v8qi)
51758     v2si __builtin_ia32_pabsd (v2si)
51759     v4hi __builtin_ia32_pabsw (v4hi)
51760
51761 The following built-in functions are available when '-mssse3' is used.
51762All of them generate the machine instruction that is part of the name.
51763
51764     v4si __builtin_ia32_phaddd128 (v4si, v4si)
51765     v8hi __builtin_ia32_phaddw128 (v8hi, v8hi)
51766     v8hi __builtin_ia32_phaddsw128 (v8hi, v8hi)
51767     v4si __builtin_ia32_phsubd128 (v4si, v4si)
51768     v8hi __builtin_ia32_phsubw128 (v8hi, v8hi)
51769     v8hi __builtin_ia32_phsubsw128 (v8hi, v8hi)
51770     v8hi __builtin_ia32_pmaddubsw128 (v16qi, v16qi)
51771     v8hi __builtin_ia32_pmulhrsw128 (v8hi, v8hi)
51772     v16qi __builtin_ia32_pshufb128 (v16qi, v16qi)
51773     v16qi __builtin_ia32_psignb128 (v16qi, v16qi)
51774     v4si __builtin_ia32_psignd128 (v4si, v4si)
51775     v8hi __builtin_ia32_psignw128 (v8hi, v8hi)
51776     v2di __builtin_ia32_palignr128 (v2di, v2di, int)
51777     v16qi __builtin_ia32_pabsb128 (v16qi)
51778     v4si __builtin_ia32_pabsd128 (v4si)
51779     v8hi __builtin_ia32_pabsw128 (v8hi)
51780
51781 The following built-in functions are available when '-msse4.1' is used.
51782All of them generate the machine instruction that is part of the name.
51783
51784     v2df __builtin_ia32_blendpd (v2df, v2df, const int)
51785     v4sf __builtin_ia32_blendps (v4sf, v4sf, const int)
51786     v2df __builtin_ia32_blendvpd (v2df, v2df, v2df)
51787     v4sf __builtin_ia32_blendvps (v4sf, v4sf, v4sf)
51788     v2df __builtin_ia32_dppd (v2df, v2df, const int)
51789     v4sf __builtin_ia32_dpps (v4sf, v4sf, const int)
51790     v4sf __builtin_ia32_insertps128 (v4sf, v4sf, const int)
51791     v2di __builtin_ia32_movntdqa (v2di *);
51792     v16qi __builtin_ia32_mpsadbw128 (v16qi, v16qi, const int)
51793     v8hi __builtin_ia32_packusdw128 (v4si, v4si)
51794     v16qi __builtin_ia32_pblendvb128 (v16qi, v16qi, v16qi)
51795     v8hi __builtin_ia32_pblendw128 (v8hi, v8hi, const int)
51796     v2di __builtin_ia32_pcmpeqq (v2di, v2di)
51797     v8hi __builtin_ia32_phminposuw128 (v8hi)
51798     v16qi __builtin_ia32_pmaxsb128 (v16qi, v16qi)
51799     v4si __builtin_ia32_pmaxsd128 (v4si, v4si)
51800     v4si __builtin_ia32_pmaxud128 (v4si, v4si)
51801     v8hi __builtin_ia32_pmaxuw128 (v8hi, v8hi)
51802     v16qi __builtin_ia32_pminsb128 (v16qi, v16qi)
51803     v4si __builtin_ia32_pminsd128 (v4si, v4si)
51804     v4si __builtin_ia32_pminud128 (v4si, v4si)
51805     v8hi __builtin_ia32_pminuw128 (v8hi, v8hi)
51806     v4si __builtin_ia32_pmovsxbd128 (v16qi)
51807     v2di __builtin_ia32_pmovsxbq128 (v16qi)
51808     v8hi __builtin_ia32_pmovsxbw128 (v16qi)
51809     v2di __builtin_ia32_pmovsxdq128 (v4si)
51810     v4si __builtin_ia32_pmovsxwd128 (v8hi)
51811     v2di __builtin_ia32_pmovsxwq128 (v8hi)
51812     v4si __builtin_ia32_pmovzxbd128 (v16qi)
51813     v2di __builtin_ia32_pmovzxbq128 (v16qi)
51814     v8hi __builtin_ia32_pmovzxbw128 (v16qi)
51815     v2di __builtin_ia32_pmovzxdq128 (v4si)
51816     v4si __builtin_ia32_pmovzxwd128 (v8hi)
51817     v2di __builtin_ia32_pmovzxwq128 (v8hi)
51818     v2di __builtin_ia32_pmuldq128 (v4si, v4si)
51819     v4si __builtin_ia32_pmulld128 (v4si, v4si)
51820     int __builtin_ia32_ptestc128 (v2di, v2di)
51821     int __builtin_ia32_ptestnzc128 (v2di, v2di)
51822     int __builtin_ia32_ptestz128 (v2di, v2di)
51823     v2df __builtin_ia32_roundpd (v2df, const int)
51824     v4sf __builtin_ia32_roundps (v4sf, const int)
51825     v2df __builtin_ia32_roundsd (v2df, v2df, const int)
51826     v4sf __builtin_ia32_roundss (v4sf, v4sf, const int)
51827
51828 The following built-in functions are available when '-msse4.1' is used.
51829
51830'v4sf __builtin_ia32_vec_set_v4sf (v4sf, float, const int)'
51831     Generates the 'insertps' machine instruction.
51832'int __builtin_ia32_vec_ext_v16qi (v16qi, const int)'
51833     Generates the 'pextrb' machine instruction.
51834'v16qi __builtin_ia32_vec_set_v16qi (v16qi, int, const int)'
51835     Generates the 'pinsrb' machine instruction.
51836'v4si __builtin_ia32_vec_set_v4si (v4si, int, const int)'
51837     Generates the 'pinsrd' machine instruction.
51838'v2di __builtin_ia32_vec_set_v2di (v2di, long long, const int)'
51839     Generates the 'pinsrq' machine instruction in 64bit mode.
51840
51841 The following built-in functions are changed to generate new SSE4.1
51842instructions when '-msse4.1' is used.
51843
51844'float __builtin_ia32_vec_ext_v4sf (v4sf, const int)'
51845     Generates the 'extractps' machine instruction.
51846'int __builtin_ia32_vec_ext_v4si (v4si, const int)'
51847     Generates the 'pextrd' machine instruction.
51848'long long __builtin_ia32_vec_ext_v2di (v2di, const int)'
51849     Generates the 'pextrq' machine instruction in 64bit mode.
51850
51851 The following built-in functions are available when '-msse4.2' is used.
51852All of them generate the machine instruction that is part of the name.
51853
51854     v16qi __builtin_ia32_pcmpestrm128 (v16qi, int, v16qi, int, const int)
51855     int __builtin_ia32_pcmpestri128 (v16qi, int, v16qi, int, const int)
51856     int __builtin_ia32_pcmpestria128 (v16qi, int, v16qi, int, const int)
51857     int __builtin_ia32_pcmpestric128 (v16qi, int, v16qi, int, const int)
51858     int __builtin_ia32_pcmpestrio128 (v16qi, int, v16qi, int, const int)
51859     int __builtin_ia32_pcmpestris128 (v16qi, int, v16qi, int, const int)
51860     int __builtin_ia32_pcmpestriz128 (v16qi, int, v16qi, int, const int)
51861     v16qi __builtin_ia32_pcmpistrm128 (v16qi, v16qi, const int)
51862     int __builtin_ia32_pcmpistri128 (v16qi, v16qi, const int)
51863     int __builtin_ia32_pcmpistria128 (v16qi, v16qi, const int)
51864     int __builtin_ia32_pcmpistric128 (v16qi, v16qi, const int)
51865     int __builtin_ia32_pcmpistrio128 (v16qi, v16qi, const int)
51866     int __builtin_ia32_pcmpistris128 (v16qi, v16qi, const int)
51867     int __builtin_ia32_pcmpistriz128 (v16qi, v16qi, const int)
51868     v2di __builtin_ia32_pcmpgtq (v2di, v2di)
51869
51870 The following built-in functions are available when '-msse4.2' is used.
51871
51872'unsigned int __builtin_ia32_crc32qi (unsigned int, unsigned char)'
51873     Generates the 'crc32b' machine instruction.
51874'unsigned int __builtin_ia32_crc32hi (unsigned int, unsigned short)'
51875     Generates the 'crc32w' machine instruction.
51876'unsigned int __builtin_ia32_crc32si (unsigned int, unsigned int)'
51877     Generates the 'crc32l' machine instruction.
51878'unsigned long long __builtin_ia32_crc32di (unsigned long long, unsigned long long)'
51879     Generates the 'crc32q' machine instruction.
51880
51881 The following built-in functions are changed to generate new SSE4.2
51882instructions when '-msse4.2' is used.
51883
51884'int __builtin_popcount (unsigned int)'
51885     Generates the 'popcntl' machine instruction.
51886'int __builtin_popcountl (unsigned long)'
51887     Generates the 'popcntl' or 'popcntq' machine instruction, depending
51888     on the size of 'unsigned long'.
51889'int __builtin_popcountll (unsigned long long)'
51890     Generates the 'popcntq' machine instruction.
51891
51892 The following built-in functions are available when '-mavx' is used.
51893All of them generate the machine instruction that is part of the name.
51894
51895     v4df __builtin_ia32_addpd256 (v4df,v4df)
51896     v8sf __builtin_ia32_addps256 (v8sf,v8sf)
51897     v4df __builtin_ia32_addsubpd256 (v4df,v4df)
51898     v8sf __builtin_ia32_addsubps256 (v8sf,v8sf)
51899     v4df __builtin_ia32_andnpd256 (v4df,v4df)
51900     v8sf __builtin_ia32_andnps256 (v8sf,v8sf)
51901     v4df __builtin_ia32_andpd256 (v4df,v4df)
51902     v8sf __builtin_ia32_andps256 (v8sf,v8sf)
51903     v4df __builtin_ia32_blendpd256 (v4df,v4df,int)
51904     v8sf __builtin_ia32_blendps256 (v8sf,v8sf,int)
51905     v4df __builtin_ia32_blendvpd256 (v4df,v4df,v4df)
51906     v8sf __builtin_ia32_blendvps256 (v8sf,v8sf,v8sf)
51907     v2df __builtin_ia32_cmppd (v2df,v2df,int)
51908     v4df __builtin_ia32_cmppd256 (v4df,v4df,int)
51909     v4sf __builtin_ia32_cmpps (v4sf,v4sf,int)
51910     v8sf __builtin_ia32_cmpps256 (v8sf,v8sf,int)
51911     v2df __builtin_ia32_cmpsd (v2df,v2df,int)
51912     v4sf __builtin_ia32_cmpss (v4sf,v4sf,int)
51913     v4df __builtin_ia32_cvtdq2pd256 (v4si)
51914     v8sf __builtin_ia32_cvtdq2ps256 (v8si)
51915     v4si __builtin_ia32_cvtpd2dq256 (v4df)
51916     v4sf __builtin_ia32_cvtpd2ps256 (v4df)
51917     v8si __builtin_ia32_cvtps2dq256 (v8sf)
51918     v4df __builtin_ia32_cvtps2pd256 (v4sf)
51919     v4si __builtin_ia32_cvttpd2dq256 (v4df)
51920     v8si __builtin_ia32_cvttps2dq256 (v8sf)
51921     v4df __builtin_ia32_divpd256 (v4df,v4df)
51922     v8sf __builtin_ia32_divps256 (v8sf,v8sf)
51923     v8sf __builtin_ia32_dpps256 (v8sf,v8sf,int)
51924     v4df __builtin_ia32_haddpd256 (v4df,v4df)
51925     v8sf __builtin_ia32_haddps256 (v8sf,v8sf)
51926     v4df __builtin_ia32_hsubpd256 (v4df,v4df)
51927     v8sf __builtin_ia32_hsubps256 (v8sf,v8sf)
51928     v32qi __builtin_ia32_lddqu256 (pcchar)
51929     v32qi __builtin_ia32_loaddqu256 (pcchar)
51930     v4df __builtin_ia32_loadupd256 (pcdouble)
51931     v8sf __builtin_ia32_loadups256 (pcfloat)
51932     v2df __builtin_ia32_maskloadpd (pcv2df,v2df)
51933     v4df __builtin_ia32_maskloadpd256 (pcv4df,v4df)
51934     v4sf __builtin_ia32_maskloadps (pcv4sf,v4sf)
51935     v8sf __builtin_ia32_maskloadps256 (pcv8sf,v8sf)
51936     void __builtin_ia32_maskstorepd (pv2df,v2df,v2df)
51937     void __builtin_ia32_maskstorepd256 (pv4df,v4df,v4df)
51938     void __builtin_ia32_maskstoreps (pv4sf,v4sf,v4sf)
51939     void __builtin_ia32_maskstoreps256 (pv8sf,v8sf,v8sf)
51940     v4df __builtin_ia32_maxpd256 (v4df,v4df)
51941     v8sf __builtin_ia32_maxps256 (v8sf,v8sf)
51942     v4df __builtin_ia32_minpd256 (v4df,v4df)
51943     v8sf __builtin_ia32_minps256 (v8sf,v8sf)
51944     v4df __builtin_ia32_movddup256 (v4df)
51945     int __builtin_ia32_movmskpd256 (v4df)
51946     int __builtin_ia32_movmskps256 (v8sf)
51947     v8sf __builtin_ia32_movshdup256 (v8sf)
51948     v8sf __builtin_ia32_movsldup256 (v8sf)
51949     v4df __builtin_ia32_mulpd256 (v4df,v4df)
51950     v8sf __builtin_ia32_mulps256 (v8sf,v8sf)
51951     v4df __builtin_ia32_orpd256 (v4df,v4df)
51952     v8sf __builtin_ia32_orps256 (v8sf,v8sf)
51953     v2df __builtin_ia32_pd_pd256 (v4df)
51954     v4df __builtin_ia32_pd256_pd (v2df)
51955     v4sf __builtin_ia32_ps_ps256 (v8sf)
51956     v8sf __builtin_ia32_ps256_ps (v4sf)
51957     int __builtin_ia32_ptestc256 (v4di,v4di,ptest)
51958     int __builtin_ia32_ptestnzc256 (v4di,v4di,ptest)
51959     int __builtin_ia32_ptestz256 (v4di,v4di,ptest)
51960     v8sf __builtin_ia32_rcpps256 (v8sf)
51961     v4df __builtin_ia32_roundpd256 (v4df,int)
51962     v8sf __builtin_ia32_roundps256 (v8sf,int)
51963     v8sf __builtin_ia32_rsqrtps_nr256 (v8sf)
51964     v8sf __builtin_ia32_rsqrtps256 (v8sf)
51965     v4df __builtin_ia32_shufpd256 (v4df,v4df,int)
51966     v8sf __builtin_ia32_shufps256 (v8sf,v8sf,int)
51967     v4si __builtin_ia32_si_si256 (v8si)
51968     v8si __builtin_ia32_si256_si (v4si)
51969     v4df __builtin_ia32_sqrtpd256 (v4df)
51970     v8sf __builtin_ia32_sqrtps_nr256 (v8sf)
51971     v8sf __builtin_ia32_sqrtps256 (v8sf)
51972     void __builtin_ia32_storedqu256 (pchar,v32qi)
51973     void __builtin_ia32_storeupd256 (pdouble,v4df)
51974     void __builtin_ia32_storeups256 (pfloat,v8sf)
51975     v4df __builtin_ia32_subpd256 (v4df,v4df)
51976     v8sf __builtin_ia32_subps256 (v8sf,v8sf)
51977     v4df __builtin_ia32_unpckhpd256 (v4df,v4df)
51978     v8sf __builtin_ia32_unpckhps256 (v8sf,v8sf)
51979     v4df __builtin_ia32_unpcklpd256 (v4df,v4df)
51980     v8sf __builtin_ia32_unpcklps256 (v8sf,v8sf)
51981     v4df __builtin_ia32_vbroadcastf128_pd256 (pcv2df)
51982     v8sf __builtin_ia32_vbroadcastf128_ps256 (pcv4sf)
51983     v4df __builtin_ia32_vbroadcastsd256 (pcdouble)
51984     v4sf __builtin_ia32_vbroadcastss (pcfloat)
51985     v8sf __builtin_ia32_vbroadcastss256 (pcfloat)
51986     v2df __builtin_ia32_vextractf128_pd256 (v4df,int)
51987     v4sf __builtin_ia32_vextractf128_ps256 (v8sf,int)
51988     v4si __builtin_ia32_vextractf128_si256 (v8si,int)
51989     v4df __builtin_ia32_vinsertf128_pd256 (v4df,v2df,int)
51990     v8sf __builtin_ia32_vinsertf128_ps256 (v8sf,v4sf,int)
51991     v8si __builtin_ia32_vinsertf128_si256 (v8si,v4si,int)
51992     v4df __builtin_ia32_vperm2f128_pd256 (v4df,v4df,int)
51993     v8sf __builtin_ia32_vperm2f128_ps256 (v8sf,v8sf,int)
51994     v8si __builtin_ia32_vperm2f128_si256 (v8si,v8si,int)
51995     v2df __builtin_ia32_vpermil2pd (v2df,v2df,v2di,int)
51996     v4df __builtin_ia32_vpermil2pd256 (v4df,v4df,v4di,int)
51997     v4sf __builtin_ia32_vpermil2ps (v4sf,v4sf,v4si,int)
51998     v8sf __builtin_ia32_vpermil2ps256 (v8sf,v8sf,v8si,int)
51999     v2df __builtin_ia32_vpermilpd (v2df,int)
52000     v4df __builtin_ia32_vpermilpd256 (v4df,int)
52001     v4sf __builtin_ia32_vpermilps (v4sf,int)
52002     v8sf __builtin_ia32_vpermilps256 (v8sf,int)
52003     v2df __builtin_ia32_vpermilvarpd (v2df,v2di)
52004     v4df __builtin_ia32_vpermilvarpd256 (v4df,v4di)
52005     v4sf __builtin_ia32_vpermilvarps (v4sf,v4si)
52006     v8sf __builtin_ia32_vpermilvarps256 (v8sf,v8si)
52007     int __builtin_ia32_vtestcpd (v2df,v2df,ptest)
52008     int __builtin_ia32_vtestcpd256 (v4df,v4df,ptest)
52009     int __builtin_ia32_vtestcps (v4sf,v4sf,ptest)
52010     int __builtin_ia32_vtestcps256 (v8sf,v8sf,ptest)
52011     int __builtin_ia32_vtestnzcpd (v2df,v2df,ptest)
52012     int __builtin_ia32_vtestnzcpd256 (v4df,v4df,ptest)
52013     int __builtin_ia32_vtestnzcps (v4sf,v4sf,ptest)
52014     int __builtin_ia32_vtestnzcps256 (v8sf,v8sf,ptest)
52015     int __builtin_ia32_vtestzpd (v2df,v2df,ptest)
52016     int __builtin_ia32_vtestzpd256 (v4df,v4df,ptest)
52017     int __builtin_ia32_vtestzps (v4sf,v4sf,ptest)
52018     int __builtin_ia32_vtestzps256 (v8sf,v8sf,ptest)
52019     void __builtin_ia32_vzeroall (void)
52020     void __builtin_ia32_vzeroupper (void)
52021     v4df __builtin_ia32_xorpd256 (v4df,v4df)
52022     v8sf __builtin_ia32_xorps256 (v8sf,v8sf)
52023
52024 The following built-in functions are available when '-mavx2' is used.
52025All of them generate the machine instruction that is part of the name.
52026
52027     v32qi __builtin_ia32_mpsadbw256 (v32qi,v32qi,int)
52028     v32qi __builtin_ia32_pabsb256 (v32qi)
52029     v16hi __builtin_ia32_pabsw256 (v16hi)
52030     v8si __builtin_ia32_pabsd256 (v8si)
52031     v16hi __builtin_ia32_packssdw256 (v8si,v8si)
52032     v32qi __builtin_ia32_packsswb256 (v16hi,v16hi)
52033     v16hi __builtin_ia32_packusdw256 (v8si,v8si)
52034     v32qi __builtin_ia32_packuswb256 (v16hi,v16hi)
52035     v32qi __builtin_ia32_paddb256 (v32qi,v32qi)
52036     v16hi __builtin_ia32_paddw256 (v16hi,v16hi)
52037     v8si __builtin_ia32_paddd256 (v8si,v8si)
52038     v4di __builtin_ia32_paddq256 (v4di,v4di)
52039     v32qi __builtin_ia32_paddsb256 (v32qi,v32qi)
52040     v16hi __builtin_ia32_paddsw256 (v16hi,v16hi)
52041     v32qi __builtin_ia32_paddusb256 (v32qi,v32qi)
52042     v16hi __builtin_ia32_paddusw256 (v16hi,v16hi)
52043     v4di __builtin_ia32_palignr256 (v4di,v4di,int)
52044     v4di __builtin_ia32_andsi256 (v4di,v4di)
52045     v4di __builtin_ia32_andnotsi256 (v4di,v4di)
52046     v32qi __builtin_ia32_pavgb256 (v32qi,v32qi)
52047     v16hi __builtin_ia32_pavgw256 (v16hi,v16hi)
52048     v32qi __builtin_ia32_pblendvb256 (v32qi,v32qi,v32qi)
52049     v16hi __builtin_ia32_pblendw256 (v16hi,v16hi,int)
52050     v32qi __builtin_ia32_pcmpeqb256 (v32qi,v32qi)
52051     v16hi __builtin_ia32_pcmpeqw256 (v16hi,v16hi)
52052     v8si __builtin_ia32_pcmpeqd256 (c8si,v8si)
52053     v4di __builtin_ia32_pcmpeqq256 (v4di,v4di)
52054     v32qi __builtin_ia32_pcmpgtb256 (v32qi,v32qi)
52055     v16hi __builtin_ia32_pcmpgtw256 (16hi,v16hi)
52056     v8si __builtin_ia32_pcmpgtd256 (v8si,v8si)
52057     v4di __builtin_ia32_pcmpgtq256 (v4di,v4di)
52058     v16hi __builtin_ia32_phaddw256 (v16hi,v16hi)
52059     v8si __builtin_ia32_phaddd256 (v8si,v8si)
52060     v16hi __builtin_ia32_phaddsw256 (v16hi,v16hi)
52061     v16hi __builtin_ia32_phsubw256 (v16hi,v16hi)
52062     v8si __builtin_ia32_phsubd256 (v8si,v8si)
52063     v16hi __builtin_ia32_phsubsw256 (v16hi,v16hi)
52064     v32qi __builtin_ia32_pmaddubsw256 (v32qi,v32qi)
52065     v16hi __builtin_ia32_pmaddwd256 (v16hi,v16hi)
52066     v32qi __builtin_ia32_pmaxsb256 (v32qi,v32qi)
52067     v16hi __builtin_ia32_pmaxsw256 (v16hi,v16hi)
52068     v8si __builtin_ia32_pmaxsd256 (v8si,v8si)
52069     v32qi __builtin_ia32_pmaxub256 (v32qi,v32qi)
52070     v16hi __builtin_ia32_pmaxuw256 (v16hi,v16hi)
52071     v8si __builtin_ia32_pmaxud256 (v8si,v8si)
52072     v32qi __builtin_ia32_pminsb256 (v32qi,v32qi)
52073     v16hi __builtin_ia32_pminsw256 (v16hi,v16hi)
52074     v8si __builtin_ia32_pminsd256 (v8si,v8si)
52075     v32qi __builtin_ia32_pminub256 (v32qi,v32qi)
52076     v16hi __builtin_ia32_pminuw256 (v16hi,v16hi)
52077     v8si __builtin_ia32_pminud256 (v8si,v8si)
52078     int __builtin_ia32_pmovmskb256 (v32qi)
52079     v16hi __builtin_ia32_pmovsxbw256 (v16qi)
52080     v8si __builtin_ia32_pmovsxbd256 (v16qi)
52081     v4di __builtin_ia32_pmovsxbq256 (v16qi)
52082     v8si __builtin_ia32_pmovsxwd256 (v8hi)
52083     v4di __builtin_ia32_pmovsxwq256 (v8hi)
52084     v4di __builtin_ia32_pmovsxdq256 (v4si)
52085     v16hi __builtin_ia32_pmovzxbw256 (v16qi)
52086     v8si __builtin_ia32_pmovzxbd256 (v16qi)
52087     v4di __builtin_ia32_pmovzxbq256 (v16qi)
52088     v8si __builtin_ia32_pmovzxwd256 (v8hi)
52089     v4di __builtin_ia32_pmovzxwq256 (v8hi)
52090     v4di __builtin_ia32_pmovzxdq256 (v4si)
52091     v4di __builtin_ia32_pmuldq256 (v8si,v8si)
52092     v16hi __builtin_ia32_pmulhrsw256 (v16hi, v16hi)
52093     v16hi __builtin_ia32_pmulhuw256 (v16hi,v16hi)
52094     v16hi __builtin_ia32_pmulhw256 (v16hi,v16hi)
52095     v16hi __builtin_ia32_pmullw256 (v16hi,v16hi)
52096     v8si __builtin_ia32_pmulld256 (v8si,v8si)
52097     v4di __builtin_ia32_pmuludq256 (v8si,v8si)
52098     v4di __builtin_ia32_por256 (v4di,v4di)
52099     v16hi __builtin_ia32_psadbw256 (v32qi,v32qi)
52100     v32qi __builtin_ia32_pshufb256 (v32qi,v32qi)
52101     v8si __builtin_ia32_pshufd256 (v8si,int)
52102     v16hi __builtin_ia32_pshufhw256 (v16hi,int)
52103     v16hi __builtin_ia32_pshuflw256 (v16hi,int)
52104     v32qi __builtin_ia32_psignb256 (v32qi,v32qi)
52105     v16hi __builtin_ia32_psignw256 (v16hi,v16hi)
52106     v8si __builtin_ia32_psignd256 (v8si,v8si)
52107     v4di __builtin_ia32_pslldqi256 (v4di,int)
52108     v16hi __builtin_ia32_psllwi256 (16hi,int)
52109     v16hi __builtin_ia32_psllw256(v16hi,v8hi)
52110     v8si __builtin_ia32_pslldi256 (v8si,int)
52111     v8si __builtin_ia32_pslld256(v8si,v4si)
52112     v4di __builtin_ia32_psllqi256 (v4di,int)
52113     v4di __builtin_ia32_psllq256(v4di,v2di)
52114     v16hi __builtin_ia32_psrawi256 (v16hi,int)
52115     v16hi __builtin_ia32_psraw256 (v16hi,v8hi)
52116     v8si __builtin_ia32_psradi256 (v8si,int)
52117     v8si __builtin_ia32_psrad256 (v8si,v4si)
52118     v4di __builtin_ia32_psrldqi256 (v4di, int)
52119     v16hi __builtin_ia32_psrlwi256 (v16hi,int)
52120     v16hi __builtin_ia32_psrlw256 (v16hi,v8hi)
52121     v8si __builtin_ia32_psrldi256 (v8si,int)
52122     v8si __builtin_ia32_psrld256 (v8si,v4si)
52123     v4di __builtin_ia32_psrlqi256 (v4di,int)
52124     v4di __builtin_ia32_psrlq256(v4di,v2di)
52125     v32qi __builtin_ia32_psubb256 (v32qi,v32qi)
52126     v32hi __builtin_ia32_psubw256 (v16hi,v16hi)
52127     v8si __builtin_ia32_psubd256 (v8si,v8si)
52128     v4di __builtin_ia32_psubq256 (v4di,v4di)
52129     v32qi __builtin_ia32_psubsb256 (v32qi,v32qi)
52130     v16hi __builtin_ia32_psubsw256 (v16hi,v16hi)
52131     v32qi __builtin_ia32_psubusb256 (v32qi,v32qi)
52132     v16hi __builtin_ia32_psubusw256 (v16hi,v16hi)
52133     v32qi __builtin_ia32_punpckhbw256 (v32qi,v32qi)
52134     v16hi __builtin_ia32_punpckhwd256 (v16hi,v16hi)
52135     v8si __builtin_ia32_punpckhdq256 (v8si,v8si)
52136     v4di __builtin_ia32_punpckhqdq256 (v4di,v4di)
52137     v32qi __builtin_ia32_punpcklbw256 (v32qi,v32qi)
52138     v16hi __builtin_ia32_punpcklwd256 (v16hi,v16hi)
52139     v8si __builtin_ia32_punpckldq256 (v8si,v8si)
52140     v4di __builtin_ia32_punpcklqdq256 (v4di,v4di)
52141     v4di __builtin_ia32_pxor256 (v4di,v4di)
52142     v4di __builtin_ia32_movntdqa256 (pv4di)
52143     v4sf __builtin_ia32_vbroadcastss_ps (v4sf)
52144     v8sf __builtin_ia32_vbroadcastss_ps256 (v4sf)
52145     v4df __builtin_ia32_vbroadcastsd_pd256 (v2df)
52146     v4di __builtin_ia32_vbroadcastsi256 (v2di)
52147     v4si __builtin_ia32_pblendd128 (v4si,v4si)
52148     v8si __builtin_ia32_pblendd256 (v8si,v8si)
52149     v32qi __builtin_ia32_pbroadcastb256 (v16qi)
52150     v16hi __builtin_ia32_pbroadcastw256 (v8hi)
52151     v8si __builtin_ia32_pbroadcastd256 (v4si)
52152     v4di __builtin_ia32_pbroadcastq256 (v2di)
52153     v16qi __builtin_ia32_pbroadcastb128 (v16qi)
52154     v8hi __builtin_ia32_pbroadcastw128 (v8hi)
52155     v4si __builtin_ia32_pbroadcastd128 (v4si)
52156     v2di __builtin_ia32_pbroadcastq128 (v2di)
52157     v8si __builtin_ia32_permvarsi256 (v8si,v8si)
52158     v4df __builtin_ia32_permdf256 (v4df,int)
52159     v8sf __builtin_ia32_permvarsf256 (v8sf,v8sf)
52160     v4di __builtin_ia32_permdi256 (v4di,int)
52161     v4di __builtin_ia32_permti256 (v4di,v4di,int)
52162     v4di __builtin_ia32_extract128i256 (v4di,int)
52163     v4di __builtin_ia32_insert128i256 (v4di,v2di,int)
52164     v8si __builtin_ia32_maskloadd256 (pcv8si,v8si)
52165     v4di __builtin_ia32_maskloadq256 (pcv4di,v4di)
52166     v4si __builtin_ia32_maskloadd (pcv4si,v4si)
52167     v2di __builtin_ia32_maskloadq (pcv2di,v2di)
52168     void __builtin_ia32_maskstored256 (pv8si,v8si,v8si)
52169     void __builtin_ia32_maskstoreq256 (pv4di,v4di,v4di)
52170     void __builtin_ia32_maskstored (pv4si,v4si,v4si)
52171     void __builtin_ia32_maskstoreq (pv2di,v2di,v2di)
52172     v8si __builtin_ia32_psllv8si (v8si,v8si)
52173     v4si __builtin_ia32_psllv4si (v4si,v4si)
52174     v4di __builtin_ia32_psllv4di (v4di,v4di)
52175     v2di __builtin_ia32_psllv2di (v2di,v2di)
52176     v8si __builtin_ia32_psrav8si (v8si,v8si)
52177     v4si __builtin_ia32_psrav4si (v4si,v4si)
52178     v8si __builtin_ia32_psrlv8si (v8si,v8si)
52179     v4si __builtin_ia32_psrlv4si (v4si,v4si)
52180     v4di __builtin_ia32_psrlv4di (v4di,v4di)
52181     v2di __builtin_ia32_psrlv2di (v2di,v2di)
52182     v2df __builtin_ia32_gathersiv2df (v2df, pcdouble,v4si,v2df,int)
52183     v4df __builtin_ia32_gathersiv4df (v4df, pcdouble,v4si,v4df,int)
52184     v2df __builtin_ia32_gatherdiv2df (v2df, pcdouble,v2di,v2df,int)
52185     v4df __builtin_ia32_gatherdiv4df (v4df, pcdouble,v4di,v4df,int)
52186     v4sf __builtin_ia32_gathersiv4sf (v4sf, pcfloat,v4si,v4sf,int)
52187     v8sf __builtin_ia32_gathersiv8sf (v8sf, pcfloat,v8si,v8sf,int)
52188     v4sf __builtin_ia32_gatherdiv4sf (v4sf, pcfloat,v2di,v4sf,int)
52189     v4sf __builtin_ia32_gatherdiv4sf256 (v4sf, pcfloat,v4di,v4sf,int)
52190     v2di __builtin_ia32_gathersiv2di (v2di, pcint64,v4si,v2di,int)
52191     v4di __builtin_ia32_gathersiv4di (v4di, pcint64,v4si,v4di,int)
52192     v2di __builtin_ia32_gatherdiv2di (v2di, pcint64,v2di,v2di,int)
52193     v4di __builtin_ia32_gatherdiv4di (v4di, pcint64,v4di,v4di,int)
52194     v4si __builtin_ia32_gathersiv4si (v4si, pcint,v4si,v4si,int)
52195     v8si __builtin_ia32_gathersiv8si (v8si, pcint,v8si,v8si,int)
52196     v4si __builtin_ia32_gatherdiv4si (v4si, pcint,v2di,v4si,int)
52197     v4si __builtin_ia32_gatherdiv4si256 (v4si, pcint,v4di,v4si,int)
52198
52199 The following built-in functions are available when '-maes' is used.
52200All of them generate the machine instruction that is part of the name.
52201
52202     v2di __builtin_ia32_aesenc128 (v2di, v2di)
52203     v2di __builtin_ia32_aesenclast128 (v2di, v2di)
52204     v2di __builtin_ia32_aesdec128 (v2di, v2di)
52205     v2di __builtin_ia32_aesdeclast128 (v2di, v2di)
52206     v2di __builtin_ia32_aeskeygenassist128 (v2di, const int)
52207     v2di __builtin_ia32_aesimc128 (v2di)
52208
52209 The following built-in function is available when '-mpclmul' is used.
52210
52211'v2di __builtin_ia32_pclmulqdq128 (v2di, v2di, const int)'
52212     Generates the 'pclmulqdq' machine instruction.
52213
52214 The following built-in function is available when '-mfsgsbase' is used.
52215All of them generate the machine instruction that is part of the name.
52216
52217     unsigned int __builtin_ia32_rdfsbase32 (void)
52218     unsigned long long __builtin_ia32_rdfsbase64 (void)
52219     unsigned int __builtin_ia32_rdgsbase32 (void)
52220     unsigned long long __builtin_ia32_rdgsbase64 (void)
52221     void _writefsbase_u32 (unsigned int)
52222     void _writefsbase_u64 (unsigned long long)
52223     void _writegsbase_u32 (unsigned int)
52224     void _writegsbase_u64 (unsigned long long)
52225
52226 The following built-in function is available when '-mrdrnd' is used.
52227All of them generate the machine instruction that is part of the name.
52228
52229     unsigned int __builtin_ia32_rdrand16_step (unsigned short *)
52230     unsigned int __builtin_ia32_rdrand32_step (unsigned int *)
52231     unsigned int __builtin_ia32_rdrand64_step (unsigned long long *)
52232
52233 The following built-in function is available when '-mptwrite' is used.
52234All of them generate the machine instruction that is part of the name.
52235
52236     void __builtin_ia32_ptwrite32 (unsigned)
52237     void __builtin_ia32_ptwrite64 (unsigned long long)
52238
52239 The following built-in functions are available when '-msse4a' is used.
52240All of them generate the machine instruction that is part of the name.
52241
52242     void __builtin_ia32_movntsd (double *, v2df)
52243     void __builtin_ia32_movntss (float *, v4sf)
52244     v2di __builtin_ia32_extrq  (v2di, v16qi)
52245     v2di __builtin_ia32_extrqi (v2di, const unsigned int, const unsigned int)
52246     v2di __builtin_ia32_insertq (v2di, v2di)
52247     v2di __builtin_ia32_insertqi (v2di, v2di, const unsigned int, const unsigned int)
52248
52249 The following built-in functions are available when '-mxop' is used.
52250     v2df __builtin_ia32_vfrczpd (v2df)
52251     v4sf __builtin_ia32_vfrczps (v4sf)
52252     v2df __builtin_ia32_vfrczsd (v2df)
52253     v4sf __builtin_ia32_vfrczss (v4sf)
52254     v4df __builtin_ia32_vfrczpd256 (v4df)
52255     v8sf __builtin_ia32_vfrczps256 (v8sf)
52256     v2di __builtin_ia32_vpcmov (v2di, v2di, v2di)
52257     v2di __builtin_ia32_vpcmov_v2di (v2di, v2di, v2di)
52258     v4si __builtin_ia32_vpcmov_v4si (v4si, v4si, v4si)
52259     v8hi __builtin_ia32_vpcmov_v8hi (v8hi, v8hi, v8hi)
52260     v16qi __builtin_ia32_vpcmov_v16qi (v16qi, v16qi, v16qi)
52261     v2df __builtin_ia32_vpcmov_v2df (v2df, v2df, v2df)
52262     v4sf __builtin_ia32_vpcmov_v4sf (v4sf, v4sf, v4sf)
52263     v4di __builtin_ia32_vpcmov_v4di256 (v4di, v4di, v4di)
52264     v8si __builtin_ia32_vpcmov_v8si256 (v8si, v8si, v8si)
52265     v16hi __builtin_ia32_vpcmov_v16hi256 (v16hi, v16hi, v16hi)
52266     v32qi __builtin_ia32_vpcmov_v32qi256 (v32qi, v32qi, v32qi)
52267     v4df __builtin_ia32_vpcmov_v4df256 (v4df, v4df, v4df)
52268     v8sf __builtin_ia32_vpcmov_v8sf256 (v8sf, v8sf, v8sf)
52269     v16qi __builtin_ia32_vpcomeqb (v16qi, v16qi)
52270     v8hi __builtin_ia32_vpcomeqw (v8hi, v8hi)
52271     v4si __builtin_ia32_vpcomeqd (v4si, v4si)
52272     v2di __builtin_ia32_vpcomeqq (v2di, v2di)
52273     v16qi __builtin_ia32_vpcomequb (v16qi, v16qi)
52274     v4si __builtin_ia32_vpcomequd (v4si, v4si)
52275     v2di __builtin_ia32_vpcomequq (v2di, v2di)
52276     v8hi __builtin_ia32_vpcomequw (v8hi, v8hi)
52277     v8hi __builtin_ia32_vpcomeqw (v8hi, v8hi)
52278     v16qi __builtin_ia32_vpcomfalseb (v16qi, v16qi)
52279     v4si __builtin_ia32_vpcomfalsed (v4si, v4si)
52280     v2di __builtin_ia32_vpcomfalseq (v2di, v2di)
52281     v16qi __builtin_ia32_vpcomfalseub (v16qi, v16qi)
52282     v4si __builtin_ia32_vpcomfalseud (v4si, v4si)
52283     v2di __builtin_ia32_vpcomfalseuq (v2di, v2di)
52284     v8hi __builtin_ia32_vpcomfalseuw (v8hi, v8hi)
52285     v8hi __builtin_ia32_vpcomfalsew (v8hi, v8hi)
52286     v16qi __builtin_ia32_vpcomgeb (v16qi, v16qi)
52287     v4si __builtin_ia32_vpcomged (v4si, v4si)
52288     v2di __builtin_ia32_vpcomgeq (v2di, v2di)
52289     v16qi __builtin_ia32_vpcomgeub (v16qi, v16qi)
52290     v4si __builtin_ia32_vpcomgeud (v4si, v4si)
52291     v2di __builtin_ia32_vpcomgeuq (v2di, v2di)
52292     v8hi __builtin_ia32_vpcomgeuw (v8hi, v8hi)
52293     v8hi __builtin_ia32_vpcomgew (v8hi, v8hi)
52294     v16qi __builtin_ia32_vpcomgtb (v16qi, v16qi)
52295     v4si __builtin_ia32_vpcomgtd (v4si, v4si)
52296     v2di __builtin_ia32_vpcomgtq (v2di, v2di)
52297     v16qi __builtin_ia32_vpcomgtub (v16qi, v16qi)
52298     v4si __builtin_ia32_vpcomgtud (v4si, v4si)
52299     v2di __builtin_ia32_vpcomgtuq (v2di, v2di)
52300     v8hi __builtin_ia32_vpcomgtuw (v8hi, v8hi)
52301     v8hi __builtin_ia32_vpcomgtw (v8hi, v8hi)
52302     v16qi __builtin_ia32_vpcomleb (v16qi, v16qi)
52303     v4si __builtin_ia32_vpcomled (v4si, v4si)
52304     v2di __builtin_ia32_vpcomleq (v2di, v2di)
52305     v16qi __builtin_ia32_vpcomleub (v16qi, v16qi)
52306     v4si __builtin_ia32_vpcomleud (v4si, v4si)
52307     v2di __builtin_ia32_vpcomleuq (v2di, v2di)
52308     v8hi __builtin_ia32_vpcomleuw (v8hi, v8hi)
52309     v8hi __builtin_ia32_vpcomlew (v8hi, v8hi)
52310     v16qi __builtin_ia32_vpcomltb (v16qi, v16qi)
52311     v4si __builtin_ia32_vpcomltd (v4si, v4si)
52312     v2di __builtin_ia32_vpcomltq (v2di, v2di)
52313     v16qi __builtin_ia32_vpcomltub (v16qi, v16qi)
52314     v4si __builtin_ia32_vpcomltud (v4si, v4si)
52315     v2di __builtin_ia32_vpcomltuq (v2di, v2di)
52316     v8hi __builtin_ia32_vpcomltuw (v8hi, v8hi)
52317     v8hi __builtin_ia32_vpcomltw (v8hi, v8hi)
52318     v16qi __builtin_ia32_vpcomneb (v16qi, v16qi)
52319     v4si __builtin_ia32_vpcomned (v4si, v4si)
52320     v2di __builtin_ia32_vpcomneq (v2di, v2di)
52321     v16qi __builtin_ia32_vpcomneub (v16qi, v16qi)
52322     v4si __builtin_ia32_vpcomneud (v4si, v4si)
52323     v2di __builtin_ia32_vpcomneuq (v2di, v2di)
52324     v8hi __builtin_ia32_vpcomneuw (v8hi, v8hi)
52325     v8hi __builtin_ia32_vpcomnew (v8hi, v8hi)
52326     v16qi __builtin_ia32_vpcomtrueb (v16qi, v16qi)
52327     v4si __builtin_ia32_vpcomtrued (v4si, v4si)
52328     v2di __builtin_ia32_vpcomtrueq (v2di, v2di)
52329     v16qi __builtin_ia32_vpcomtrueub (v16qi, v16qi)
52330     v4si __builtin_ia32_vpcomtrueud (v4si, v4si)
52331     v2di __builtin_ia32_vpcomtrueuq (v2di, v2di)
52332     v8hi __builtin_ia32_vpcomtrueuw (v8hi, v8hi)
52333     v8hi __builtin_ia32_vpcomtruew (v8hi, v8hi)
52334     v4si __builtin_ia32_vphaddbd (v16qi)
52335     v2di __builtin_ia32_vphaddbq (v16qi)
52336     v8hi __builtin_ia32_vphaddbw (v16qi)
52337     v2di __builtin_ia32_vphadddq (v4si)
52338     v4si __builtin_ia32_vphaddubd (v16qi)
52339     v2di __builtin_ia32_vphaddubq (v16qi)
52340     v8hi __builtin_ia32_vphaddubw (v16qi)
52341     v2di __builtin_ia32_vphaddudq (v4si)
52342     v4si __builtin_ia32_vphadduwd (v8hi)
52343     v2di __builtin_ia32_vphadduwq (v8hi)
52344     v4si __builtin_ia32_vphaddwd (v8hi)
52345     v2di __builtin_ia32_vphaddwq (v8hi)
52346     v8hi __builtin_ia32_vphsubbw (v16qi)
52347     v2di __builtin_ia32_vphsubdq (v4si)
52348     v4si __builtin_ia32_vphsubwd (v8hi)
52349     v4si __builtin_ia32_vpmacsdd (v4si, v4si, v4si)
52350     v2di __builtin_ia32_vpmacsdqh (v4si, v4si, v2di)
52351     v2di __builtin_ia32_vpmacsdql (v4si, v4si, v2di)
52352     v4si __builtin_ia32_vpmacssdd (v4si, v4si, v4si)
52353     v2di __builtin_ia32_vpmacssdqh (v4si, v4si, v2di)
52354     v2di __builtin_ia32_vpmacssdql (v4si, v4si, v2di)
52355     v4si __builtin_ia32_vpmacsswd (v8hi, v8hi, v4si)
52356     v8hi __builtin_ia32_vpmacssww (v8hi, v8hi, v8hi)
52357     v4si __builtin_ia32_vpmacswd (v8hi, v8hi, v4si)
52358     v8hi __builtin_ia32_vpmacsww (v8hi, v8hi, v8hi)
52359     v4si __builtin_ia32_vpmadcsswd (v8hi, v8hi, v4si)
52360     v4si __builtin_ia32_vpmadcswd (v8hi, v8hi, v4si)
52361     v16qi __builtin_ia32_vpperm (v16qi, v16qi, v16qi)
52362     v16qi __builtin_ia32_vprotb (v16qi, v16qi)
52363     v4si __builtin_ia32_vprotd (v4si, v4si)
52364     v2di __builtin_ia32_vprotq (v2di, v2di)
52365     v8hi __builtin_ia32_vprotw (v8hi, v8hi)
52366     v16qi __builtin_ia32_vpshab (v16qi, v16qi)
52367     v4si __builtin_ia32_vpshad (v4si, v4si)
52368     v2di __builtin_ia32_vpshaq (v2di, v2di)
52369     v8hi __builtin_ia32_vpshaw (v8hi, v8hi)
52370     v16qi __builtin_ia32_vpshlb (v16qi, v16qi)
52371     v4si __builtin_ia32_vpshld (v4si, v4si)
52372     v2di __builtin_ia32_vpshlq (v2di, v2di)
52373     v8hi __builtin_ia32_vpshlw (v8hi, v8hi)
52374
52375 The following built-in functions are available when '-mfma4' is used.
52376All of them generate the machine instruction that is part of the name.
52377
52378     v2df __builtin_ia32_vfmaddpd (v2df, v2df, v2df)
52379     v4sf __builtin_ia32_vfmaddps (v4sf, v4sf, v4sf)
52380     v2df __builtin_ia32_vfmaddsd (v2df, v2df, v2df)
52381     v4sf __builtin_ia32_vfmaddss (v4sf, v4sf, v4sf)
52382     v2df __builtin_ia32_vfmsubpd (v2df, v2df, v2df)
52383     v4sf __builtin_ia32_vfmsubps (v4sf, v4sf, v4sf)
52384     v2df __builtin_ia32_vfmsubsd (v2df, v2df, v2df)
52385     v4sf __builtin_ia32_vfmsubss (v4sf, v4sf, v4sf)
52386     v2df __builtin_ia32_vfnmaddpd (v2df, v2df, v2df)
52387     v4sf __builtin_ia32_vfnmaddps (v4sf, v4sf, v4sf)
52388     v2df __builtin_ia32_vfnmaddsd (v2df, v2df, v2df)
52389     v4sf __builtin_ia32_vfnmaddss (v4sf, v4sf, v4sf)
52390     v2df __builtin_ia32_vfnmsubpd (v2df, v2df, v2df)
52391     v4sf __builtin_ia32_vfnmsubps (v4sf, v4sf, v4sf)
52392     v2df __builtin_ia32_vfnmsubsd (v2df, v2df, v2df)
52393     v4sf __builtin_ia32_vfnmsubss (v4sf, v4sf, v4sf)
52394     v2df __builtin_ia32_vfmaddsubpd  (v2df, v2df, v2df)
52395     v4sf __builtin_ia32_vfmaddsubps  (v4sf, v4sf, v4sf)
52396     v2df __builtin_ia32_vfmsubaddpd  (v2df, v2df, v2df)
52397     v4sf __builtin_ia32_vfmsubaddps  (v4sf, v4sf, v4sf)
52398     v4df __builtin_ia32_vfmaddpd256 (v4df, v4df, v4df)
52399     v8sf __builtin_ia32_vfmaddps256 (v8sf, v8sf, v8sf)
52400     v4df __builtin_ia32_vfmsubpd256 (v4df, v4df, v4df)
52401     v8sf __builtin_ia32_vfmsubps256 (v8sf, v8sf, v8sf)
52402     v4df __builtin_ia32_vfnmaddpd256 (v4df, v4df, v4df)
52403     v8sf __builtin_ia32_vfnmaddps256 (v8sf, v8sf, v8sf)
52404     v4df __builtin_ia32_vfnmsubpd256 (v4df, v4df, v4df)
52405     v8sf __builtin_ia32_vfnmsubps256 (v8sf, v8sf, v8sf)
52406     v4df __builtin_ia32_vfmaddsubpd256 (v4df, v4df, v4df)
52407     v8sf __builtin_ia32_vfmaddsubps256 (v8sf, v8sf, v8sf)
52408     v4df __builtin_ia32_vfmsubaddpd256 (v4df, v4df, v4df)
52409     v8sf __builtin_ia32_vfmsubaddps256 (v8sf, v8sf, v8sf)
52410
52411
52412 The following built-in functions are available when '-mlwp' is used.
52413
52414     void __builtin_ia32_llwpcb16 (void *);
52415     void __builtin_ia32_llwpcb32 (void *);
52416     void __builtin_ia32_llwpcb64 (void *);
52417     void * __builtin_ia32_llwpcb16 (void);
52418     void * __builtin_ia32_llwpcb32 (void);
52419     void * __builtin_ia32_llwpcb64 (void);
52420     void __builtin_ia32_lwpval16 (unsigned short, unsigned int, unsigned short)
52421     void __builtin_ia32_lwpval32 (unsigned int, unsigned int, unsigned int)
52422     void __builtin_ia32_lwpval64 (unsigned __int64, unsigned int, unsigned int)
52423     unsigned char __builtin_ia32_lwpins16 (unsigned short, unsigned int, unsigned short)
52424     unsigned char __builtin_ia32_lwpins32 (unsigned int, unsigned int, unsigned int)
52425     unsigned char __builtin_ia32_lwpins64 (unsigned __int64, unsigned int, unsigned int)
52426
52427 The following built-in functions are available when '-mbmi' is used.
52428All of them generate the machine instruction that is part of the name.
52429     unsigned int __builtin_ia32_bextr_u32(unsigned int, unsigned int);
52430     unsigned long long __builtin_ia32_bextr_u64 (unsigned long long, unsigned long long);
52431
52432 The following built-in functions are available when '-mbmi2' is used.
52433All of them generate the machine instruction that is part of the name.
52434     unsigned int _bzhi_u32 (unsigned int, unsigned int)
52435     unsigned int _pdep_u32 (unsigned int, unsigned int)
52436     unsigned int _pext_u32 (unsigned int, unsigned int)
52437     unsigned long long _bzhi_u64 (unsigned long long, unsigned long long)
52438     unsigned long long _pdep_u64 (unsigned long long, unsigned long long)
52439     unsigned long long _pext_u64 (unsigned long long, unsigned long long)
52440
52441 The following built-in functions are available when '-mlzcnt' is used.
52442All of them generate the machine instruction that is part of the name.
52443     unsigned short __builtin_ia32_lzcnt_u16(unsigned short);
52444     unsigned int __builtin_ia32_lzcnt_u32(unsigned int);
52445     unsigned long long __builtin_ia32_lzcnt_u64 (unsigned long long);
52446
52447 The following built-in functions are available when '-mfxsr' is used.
52448All of them generate the machine instruction that is part of the name.
52449     void __builtin_ia32_fxsave (void *)
52450     void __builtin_ia32_fxrstor (void *)
52451     void __builtin_ia32_fxsave64 (void *)
52452     void __builtin_ia32_fxrstor64 (void *)
52453
52454 The following built-in functions are available when '-mxsave' is used.
52455All of them generate the machine instruction that is part of the name.
52456     void __builtin_ia32_xsave (void *, long long)
52457     void __builtin_ia32_xrstor (void *, long long)
52458     void __builtin_ia32_xsave64 (void *, long long)
52459     void __builtin_ia32_xrstor64 (void *, long long)
52460
52461 The following built-in functions are available when '-mxsaveopt' is
52462used.  All of them generate the machine instruction that is part of the
52463name.
52464     void __builtin_ia32_xsaveopt (void *, long long)
52465     void __builtin_ia32_xsaveopt64 (void *, long long)
52466
52467 The following built-in functions are available when '-mtbm' is used.
52468Both of them generate the immediate form of the bextr machine
52469instruction.
52470     unsigned int __builtin_ia32_bextri_u32 (unsigned int,
52471                                             const unsigned int);
52472     unsigned long long __builtin_ia32_bextri_u64 (unsigned long long,
52473                                                   const unsigned long long);
52474
52475 The following built-in functions are available when '-m3dnow' is used.
52476All of them generate the machine instruction that is part of the name.
52477
52478     void __builtin_ia32_femms (void)
52479     v8qi __builtin_ia32_pavgusb (v8qi, v8qi)
52480     v2si __builtin_ia32_pf2id (v2sf)
52481     v2sf __builtin_ia32_pfacc (v2sf, v2sf)
52482     v2sf __builtin_ia32_pfadd (v2sf, v2sf)
52483     v2si __builtin_ia32_pfcmpeq (v2sf, v2sf)
52484     v2si __builtin_ia32_pfcmpge (v2sf, v2sf)
52485     v2si __builtin_ia32_pfcmpgt (v2sf, v2sf)
52486     v2sf __builtin_ia32_pfmax (v2sf, v2sf)
52487     v2sf __builtin_ia32_pfmin (v2sf, v2sf)
52488     v2sf __builtin_ia32_pfmul (v2sf, v2sf)
52489     v2sf __builtin_ia32_pfrcp (v2sf)
52490     v2sf __builtin_ia32_pfrcpit1 (v2sf, v2sf)
52491     v2sf __builtin_ia32_pfrcpit2 (v2sf, v2sf)
52492     v2sf __builtin_ia32_pfrsqrt (v2sf)
52493     v2sf __builtin_ia32_pfsub (v2sf, v2sf)
52494     v2sf __builtin_ia32_pfsubr (v2sf, v2sf)
52495     v2sf __builtin_ia32_pi2fd (v2si)
52496     v4hi __builtin_ia32_pmulhrw (v4hi, v4hi)
52497
52498 The following built-in functions are available when '-m3dnowa' is used.
52499All of them generate the machine instruction that is part of the name.
52500
52501     v2si __builtin_ia32_pf2iw (v2sf)
52502     v2sf __builtin_ia32_pfnacc (v2sf, v2sf)
52503     v2sf __builtin_ia32_pfpnacc (v2sf, v2sf)
52504     v2sf __builtin_ia32_pi2fw (v2si)
52505     v2sf __builtin_ia32_pswapdsf (v2sf)
52506     v2si __builtin_ia32_pswapdsi (v2si)
52507
52508 The following built-in functions are available when '-mrtm' is used
52509They are used for restricted transactional memory.  These are the
52510internal low level functions.  Normally the functions in *note x86
52511transactional memory intrinsics:: should be used instead.
52512
52513     int __builtin_ia32_xbegin ()
52514     void __builtin_ia32_xend ()
52515     void __builtin_ia32_xabort (status)
52516     int __builtin_ia32_xtest ()
52517
52518 The following built-in functions are available when '-mmwaitx' is used.
52519All of them generate the machine instruction that is part of the name.
52520     void __builtin_ia32_monitorx (void *, unsigned int, unsigned int)
52521     void __builtin_ia32_mwaitx (unsigned int, unsigned int, unsigned int)
52522
52523 The following built-in functions are available when '-mclzero' is used.
52524All of them generate the machine instruction that is part of the name.
52525     void __builtin_i32_clzero (void *)
52526
52527 The following built-in functions are available when '-mpku' is used.
52528They generate reads and writes to PKRU.
52529     void __builtin_ia32_wrpkru (unsigned int)
52530     unsigned int __builtin_ia32_rdpkru ()
52531
52532 The following built-in functions are available when '-mcet' or
52533'-mshstk' option is used.  They support shadow stack machine
52534instructions from Intel Control-flow Enforcement Technology (CET). Each
52535built-in function generates the machine instruction that is part of the
52536function's name.  These are the internal low-level functions.  Normally
52537the functions in *note x86 control-flow protection intrinsics:: should
52538be used instead.
52539
52540     unsigned int __builtin_ia32_rdsspd (void)
52541     unsigned long long __builtin_ia32_rdsspq (void)
52542     void __builtin_ia32_incsspd (unsigned int)
52543     void __builtin_ia32_incsspq (unsigned long long)
52544     void __builtin_ia32_saveprevssp(void);
52545     void __builtin_ia32_rstorssp(void *);
52546     void __builtin_ia32_wrssd(unsigned int, void *);
52547     void __builtin_ia32_wrssq(unsigned long long, void *);
52548     void __builtin_ia32_wrussd(unsigned int, void *);
52549     void __builtin_ia32_wrussq(unsigned long long, void *);
52550     void __builtin_ia32_setssbsy(void);
52551     void __builtin_ia32_clrssbsy(void *);
52552
52553
52554File: gcc.info,  Node: x86 transactional memory intrinsics,  Next: x86 control-flow protection intrinsics,  Prev: x86 Built-in Functions,  Up: Target Builtins
52555
525566.60.36 x86 Transactional Memory Intrinsics
52557-------------------------------------------
52558
52559These hardware transactional memory intrinsics for x86 allow you to use
52560memory transactions with RTM (Restricted Transactional Memory).  This
52561support is enabled with the '-mrtm' option.  For using HLE (Hardware
52562Lock Elision) see *note x86 specific memory model extensions for
52563transactional memory:: instead.
52564
52565 A memory transaction commits all changes to memory in an atomic way, as
52566visible to other threads.  If the transaction fails it is rolled back
52567and all side effects discarded.
52568
52569 Generally there is no guarantee that a memory transaction ever succeeds
52570and suitable fallback code always needs to be supplied.
52571
52572 -- RTM Function: unsigned _xbegin ()
52573     Start a RTM (Restricted Transactional Memory) transaction.  Returns
52574     '_XBEGIN_STARTED' when the transaction started successfully (note
52575     this is not 0, so the constant has to be explicitly tested).
52576
52577     If the transaction aborts, all side effects are undone and an abort
52578     code encoded as a bit mask is returned.  The following macros are
52579     defined:
52580
52581     '_XABORT_EXPLICIT'
52582          Transaction was explicitly aborted with '_xabort'.  The
52583          parameter passed to '_xabort' is available with
52584          '_XABORT_CODE(status)'.
52585     '_XABORT_RETRY'
52586          Transaction retry is possible.
52587     '_XABORT_CONFLICT'
52588          Transaction abort due to a memory conflict with another
52589          thread.
52590     '_XABORT_CAPACITY'
52591          Transaction abort due to the transaction using too much
52592          memory.
52593     '_XABORT_DEBUG'
52594          Transaction abort due to a debug trap.
52595     '_XABORT_NESTED'
52596          Transaction abort in an inner nested transaction.
52597
52598     There is no guarantee any transaction ever succeeds, so there
52599     always needs to be a valid fallback path.
52600
52601 -- RTM Function: void _xend ()
52602     Commit the current transaction.  When no transaction is active this
52603     faults.  All memory side effects of the transaction become visible
52604     to other threads in an atomic manner.
52605
52606 -- RTM Function: int _xtest ()
52607     Return a nonzero value if a transaction is currently active,
52608     otherwise 0.
52609
52610 -- RTM Function: void _xabort (status)
52611     Abort the current transaction.  When no transaction is active this
52612     is a no-op.  The STATUS is an 8-bit constant; its value is encoded
52613     in the return value from '_xbegin'.
52614
52615 Here is an example showing handling for '_XABORT_RETRY' and a fallback
52616path for other failures:
52617
52618     #include <immintrin.h>
52619
52620     int n_tries, max_tries;
52621     unsigned status = _XABORT_EXPLICIT;
52622     ...
52623
52624     for (n_tries = 0; n_tries < max_tries; n_tries++)
52625       {
52626         status = _xbegin ();
52627         if (status == _XBEGIN_STARTED || !(status & _XABORT_RETRY))
52628           break;
52629       }
52630     if (status == _XBEGIN_STARTED)
52631       {
52632         ... transaction code...
52633         _xend ();
52634       }
52635     else
52636       {
52637         ... non-transactional fallback path...
52638       }
52639
52640Note that, in most cases, the transactional and non-transactional code
52641must synchronize together to ensure consistency.
52642
52643
52644File: gcc.info,  Node: x86 control-flow protection intrinsics,  Prev: x86 transactional memory intrinsics,  Up: Target Builtins
52645
526466.60.37 x86 Control-Flow Protection Intrinsics
52647----------------------------------------------
52648
52649 -- CET Function: ret_type _get_ssp (void)
52650     Get the current value of shadow stack pointer if shadow stack
52651     support from Intel CET is enabled in the hardware or '0' otherwise.
52652     The 'ret_type' is 'unsigned long long' for 64-bit targets and
52653     'unsigned int' for 32-bit targets.
52654
52655 -- CET Function: void _inc_ssp (unsigned int)
52656     Increment the current shadow stack pointer by the size specified by
52657     the function argument.  The argument is masked to a byte value for
52658     security reasons, so to increment by more than 255 bytes you must
52659     call the function multiple times.
52660
52661 The shadow stack unwind code looks like:
52662
52663     #include <immintrin.h>
52664
52665     /* Unwind the shadow stack for EH.  */
52666     #define _Unwind_Frames_Extra(x)       \
52667       do                                  \
52668         {                                \
52669           _Unwind_Word ssp = _get_ssp (); \
52670           if (ssp != 0)                   \
52671             {                            \
52672               _Unwind_Word tmp = (x);     \
52673               while (tmp > 255)           \
52674                 {                        \
52675                   _inc_ssp (tmp);         \
52676                   tmp -= 255;             \
52677                 }                        \
52678               _inc_ssp (tmp);             \
52679             }                            \
52680         }                                \
52681         while (0)
52682
52683This code runs unconditionally on all 64-bit processors.  For 32-bit
52684processors the code runs on those that support multi-byte NOP
52685instructions.
52686
52687
52688File: gcc.info,  Node: Target Format Checks,  Next: Pragmas,  Prev: Target Builtins,  Up: C Extensions
52689
526906.61 Format Checks Specific to Particular Target Machines
52691=========================================================
52692
52693For some target machines, GCC supports additional options to the format
52694attribute (*note Declaring Attributes of Functions: Function
52695Attributes.).
52696
52697* Menu:
52698
52699* Solaris Format Checks::
52700* Darwin Format Checks::
52701
52702
52703File: gcc.info,  Node: Solaris Format Checks,  Next: Darwin Format Checks,  Up: Target Format Checks
52704
527056.61.1 Solaris Format Checks
52706----------------------------
52707
52708Solaris targets support the 'cmn_err' (or '__cmn_err__') format check.
52709'cmn_err' accepts a subset of the standard 'printf' conversions, and the
52710two-argument '%b' conversion for displaying bit-fields.  See the Solaris
52711man page for 'cmn_err' for more information.
52712
52713
52714File: gcc.info,  Node: Darwin Format Checks,  Prev: Solaris Format Checks,  Up: Target Format Checks
52715
527166.61.2 Darwin Format Checks
52717---------------------------
52718
52719In addition to the full set of format archetypes (attribute format style
52720arguments such as 'printf', 'scanf', 'strftime', and 'strfmon'), Darwin
52721targets also support the 'CFString' (or '__CFString__') archetype in the
52722'format' attribute.  Declarations with this archetype are parsed for
52723correct syntax and argument types.  However, parsing of the format
52724string itself and validating arguments against it in calls to such
52725functions is currently not performed.
52726
52727 Additionally, 'CFStringRefs' (defined by the 'CoreFoundation' headers)
52728may also be used as format arguments.  Note that the relevant headers
52729are only likely to be available on Darwin (OSX) installations.  On such
52730installations, the XCode and system documentation provide descriptions
52731of 'CFString', 'CFStringRefs' and associated functions.
52732
52733
52734File: gcc.info,  Node: Pragmas,  Next: Unnamed Fields,  Prev: Target Format Checks,  Up: C Extensions
52735
527366.62 Pragmas Accepted by GCC
52737============================
52738
52739GCC supports several types of pragmas, primarily in order to compile
52740code originally written for other compilers.  Note that in general we do
52741not recommend the use of pragmas; *Note Function Attributes::, for
52742further explanation.
52743
52744 The GNU C preprocessor recognizes several pragmas in addition to the
52745compiler pragmas documented here.  Refer to the CPP manual for more
52746information.
52747
52748* Menu:
52749
52750* AArch64 Pragmas::
52751* ARM Pragmas::
52752* M32C Pragmas::
52753* MeP Pragmas::
52754* PRU Pragmas::
52755* RS/6000 and PowerPC Pragmas::
52756* S/390 Pragmas::
52757* Darwin Pragmas::
52758* Solaris Pragmas::
52759* Symbol-Renaming Pragmas::
52760* Structure-Layout Pragmas::
52761* Weak Pragmas::
52762* Diagnostic Pragmas::
52763* Visibility Pragmas::
52764* Push/Pop Macro Pragmas::
52765* Function Specific Option Pragmas::
52766* Loop-Specific Pragmas::
52767
52768
52769File: gcc.info,  Node: AArch64 Pragmas,  Next: ARM Pragmas,  Up: Pragmas
52770
527716.62.1 AArch64 Pragmas
52772----------------------
52773
52774The pragmas defined by the AArch64 target correspond to the AArch64
52775target function attributes.  They can be specified as below:
52776     #pragma GCC target("string")
52777
52778 where 'STRING' can be any string accepted as an AArch64 target
52779attribute.  *Note AArch64 Function Attributes::, for more details on the
52780permissible values of 'string'.
52781
52782
52783File: gcc.info,  Node: ARM Pragmas,  Next: M32C Pragmas,  Prev: AArch64 Pragmas,  Up: Pragmas
52784
527856.62.2 ARM Pragmas
52786------------------
52787
52788The ARM target defines pragmas for controlling the default addition of
52789'long_call' and 'short_call' attributes to functions.  *Note Function
52790Attributes::, for information about the effects of these attributes.
52791
52792'long_calls'
52793     Set all subsequent functions to have the 'long_call' attribute.
52794
52795'no_long_calls'
52796     Set all subsequent functions to have the 'short_call' attribute.
52797
52798'long_calls_off'
52799     Do not affect the 'long_call' or 'short_call' attributes of
52800     subsequent functions.
52801
52802
52803File: gcc.info,  Node: M32C Pragmas,  Next: MeP Pragmas,  Prev: ARM Pragmas,  Up: Pragmas
52804
528056.62.3 M32C Pragmas
52806-------------------
52807
52808'GCC memregs NUMBER'
52809     Overrides the command-line option '-memregs=' for the current file.
52810     Use with care!  This pragma must be before any function in the
52811     file, and mixing different memregs values in different objects may
52812     make them incompatible.  This pragma is useful when a
52813     performance-critical function uses a memreg for temporary values,
52814     as it may allow you to reduce the number of memregs used.
52815
52816'ADDRESS NAME ADDRESS'
52817     For any declared symbols matching NAME, this does three things to
52818     that symbol: it forces the symbol to be located at the given
52819     address (a number), it forces the symbol to be volatile, and it
52820     changes the symbol's scope to be static.  This pragma exists for
52821     compatibility with other compilers, but note that the common
52822     '1234H' numeric syntax is not supported (use '0x1234' instead).
52823     Example:
52824
52825          #pragma ADDRESS port3 0x103
52826          char port3;
52827
52828
52829File: gcc.info,  Node: MeP Pragmas,  Next: PRU Pragmas,  Prev: M32C Pragmas,  Up: Pragmas
52830
528316.62.4 MeP Pragmas
52832------------------
52833
52834'custom io_volatile (on|off)'
52835     Overrides the command-line option '-mio-volatile' for the current
52836     file.  Note that for compatibility with future GCC releases, this
52837     option should only be used once before any 'io' variables in each
52838     file.
52839
52840'GCC coprocessor available REGISTERS'
52841     Specifies which coprocessor registers are available to the register
52842     allocator.  REGISTERS may be a single register, register range
52843     separated by ellipses, or comma-separated list of those.  Example:
52844
52845          #pragma GCC coprocessor available $c0...$c10, $c28
52846
52847'GCC coprocessor call_saved REGISTERS'
52848     Specifies which coprocessor registers are to be saved and restored
52849     by any function using them.  REGISTERS may be a single register,
52850     register range separated by ellipses, or comma-separated list of
52851     those.  Example:
52852
52853          #pragma GCC coprocessor call_saved $c4...$c6, $c31
52854
52855'GCC coprocessor subclass '(A|B|C|D)' = REGISTERS'
52856     Creates and defines a register class.  These register classes can
52857     be used by inline 'asm' constructs.  REGISTERS may be a single
52858     register, register range separated by ellipses, or comma-separated
52859     list of those.  Example:
52860
52861          #pragma GCC coprocessor subclass 'B' = $c2, $c4, $c6
52862
52863          asm ("cpfoo %0" : "=B" (x));
52864
52865'GCC disinterrupt NAME , NAME ...'
52866     For the named functions, the compiler adds code to disable
52867     interrupts for the duration of those functions.  If any functions
52868     so named are not encountered in the source, a warning is emitted
52869     that the pragma is not used.  Examples:
52870
52871          #pragma disinterrupt foo
52872          #pragma disinterrupt bar, grill
52873          int foo () { ... }
52874
52875'GCC call NAME , NAME ...'
52876     For the named functions, the compiler always uses a
52877     register-indirect call model when calling the named functions.
52878     Examples:
52879
52880          extern int foo ();
52881          #pragma call foo
52882
52883
52884File: gcc.info,  Node: PRU Pragmas,  Next: RS/6000 and PowerPC Pragmas,  Prev: MeP Pragmas,  Up: Pragmas
52885
528866.62.5 PRU Pragmas
52887------------------
52888
52889'ctable_entry INDEX CONSTANT_ADDRESS'
52890     Specifies that the PRU CTABLE entry given by INDEX has the value
52891     CONSTANT_ADDRESS.  This enables GCC to emit LBCO/SBCO instructions
52892     when the load/store address is known and can be addressed with some
52893     CTABLE entry.  For example:
52894
52895          /* will compile to "sbco Rx, 2, 0x10, 4" */
52896          #pragma ctable_entry 2 0x4802a000
52897          *(unsigned int *)0x4802a010 = val;
52898
52899
52900File: gcc.info,  Node: RS/6000 and PowerPC Pragmas,  Next: S/390 Pragmas,  Prev: PRU Pragmas,  Up: Pragmas
52901
529026.62.6 RS/6000 and PowerPC Pragmas
52903----------------------------------
52904
52905The RS/6000 and PowerPC targets define one pragma for controlling
52906whether or not the 'longcall' attribute is added to function
52907declarations by default.  This pragma overrides the '-mlongcall' option,
52908but not the 'longcall' and 'shortcall' attributes.  *Note RS/6000 and
52909PowerPC Options::, for more information about when long calls are and
52910are not necessary.
52911
52912'longcall (1)'
52913     Apply the 'longcall' attribute to all subsequent function
52914     declarations.
52915
52916'longcall (0)'
52917     Do not apply the 'longcall' attribute to subsequent function
52918     declarations.
52919
52920
52921File: gcc.info,  Node: S/390 Pragmas,  Next: Darwin Pragmas,  Prev: RS/6000 and PowerPC Pragmas,  Up: Pragmas
52922
529236.62.7 S/390 Pragmas
52924--------------------
52925
52926The pragmas defined by the S/390 target correspond to the S/390 target
52927function attributes and some the additional options:
52928
52929'zvector'
52930'no-zvector'
52931
52932 Note that options of the pragma, unlike options of the target
52933attribute, do change the value of preprocessor macros like '__VEC__'.
52934They can be specified as below:
52935
52936     #pragma GCC target("string[,string]...")
52937     #pragma GCC target("string"[,"string"]...)
52938
52939
52940File: gcc.info,  Node: Darwin Pragmas,  Next: Solaris Pragmas,  Prev: S/390 Pragmas,  Up: Pragmas
52941
529426.62.8 Darwin Pragmas
52943---------------------
52944
52945The following pragmas are available for all architectures running the
52946Darwin operating system.  These are useful for compatibility with other
52947Mac OS compilers.
52948
52949'mark TOKENS...'
52950     This pragma is accepted, but has no effect.
52951
52952'options align=ALIGNMENT'
52953     This pragma sets the alignment of fields in structures.  The values
52954     of ALIGNMENT may be 'mac68k', to emulate m68k alignment, or
52955     'power', to emulate PowerPC alignment.  Uses of this pragma nest
52956     properly; to restore the previous setting, use 'reset' for the
52957     ALIGNMENT.
52958
52959'segment TOKENS...'
52960     This pragma is accepted, but has no effect.
52961
52962'unused (VAR [, VAR]...)'
52963     This pragma declares variables to be possibly unused.  GCC does not
52964     produce warnings for the listed variables.  The effect is similar
52965     to that of the 'unused' attribute, except that this pragma may
52966     appear anywhere within the variables' scopes.
52967
52968
52969File: gcc.info,  Node: Solaris Pragmas,  Next: Symbol-Renaming Pragmas,  Prev: Darwin Pragmas,  Up: Pragmas
52970
529716.62.9 Solaris Pragmas
52972----------------------
52973
52974The Solaris target supports '#pragma redefine_extname' (*note
52975Symbol-Renaming Pragmas::).  It also supports additional '#pragma'
52976directives for compatibility with the system compiler.
52977
52978'align ALIGNMENT (VARIABLE [, VARIABLE]...)'
52979
52980     Increase the minimum alignment of each VARIABLE to ALIGNMENT.  This
52981     is the same as GCC's 'aligned' attribute *note Variable
52982     Attributes::).  Macro expansion occurs on the arguments to this
52983     pragma when compiling C and Objective-C.  It does not currently
52984     occur when compiling C++, but this is a bug which may be fixed in a
52985     future release.
52986
52987'fini (FUNCTION [, FUNCTION]...)'
52988
52989     This pragma causes each listed FUNCTION to be called after main, or
52990     during shared module unloading, by adding a call to the '.fini'
52991     section.
52992
52993'init (FUNCTION [, FUNCTION]...)'
52994
52995     This pragma causes each listed FUNCTION to be called during
52996     initialization (before 'main') or during shared module loading, by
52997     adding a call to the '.init' section.
52998
52999
53000File: gcc.info,  Node: Symbol-Renaming Pragmas,  Next: Structure-Layout Pragmas,  Prev: Solaris Pragmas,  Up: Pragmas
53001
530026.62.10 Symbol-Renaming Pragmas
53003-------------------------------
53004
53005GCC supports a '#pragma' directive that changes the name used in
53006assembly for a given declaration.  While this pragma is supported on all
53007platforms, it is intended primarily to provide compatibility with the
53008Solaris system headers.  This effect can also be achieved using the asm
53009labels extension (*note Asm Labels::).
53010
53011'redefine_extname OLDNAME NEWNAME'
53012
53013     This pragma gives the C function OLDNAME the assembly symbol
53014     NEWNAME.  The preprocessor macro '__PRAGMA_REDEFINE_EXTNAME' is
53015     defined if this pragma is available (currently on all platforms).
53016
53017 This pragma and the 'asm' labels extension interact in a complicated
53018manner.  Here are some corner cases you may want to be aware of:
53019
53020  1. This pragma silently applies only to declarations with external
53021     linkage.  The 'asm' label feature does not have this restriction.
53022
53023  2. In C++, this pragma silently applies only to declarations with "C"
53024     linkage.  Again, 'asm' labels do not have this restriction.
53025
53026  3. If either of the ways of changing the assembly name of a
53027     declaration are applied to a declaration whose assembly name has
53028     already been determined (either by a previous use of one of these
53029     features, or because the compiler needed the assembly name in order
53030     to generate code), and the new name is different, a warning issues
53031     and the name does not change.
53032
53033  4. The OLDNAME used by '#pragma redefine_extname' is always the
53034     C-language name.
53035
53036
53037File: gcc.info,  Node: Structure-Layout Pragmas,  Next: Weak Pragmas,  Prev: Symbol-Renaming Pragmas,  Up: Pragmas
53038
530396.62.11 Structure-Layout Pragmas
53040--------------------------------
53041
53042For compatibility with Microsoft Windows compilers, GCC supports a set
53043of '#pragma' directives that change the maximum alignment of members of
53044structures (other than zero-width bit-fields), unions, and classes
53045subsequently defined.  The N value below always is required to be a
53046small power of two and specifies the new alignment in bytes.
53047
53048  1. '#pragma pack(N)' simply sets the new alignment.
53049  2. '#pragma pack()' sets the alignment to the one that was in effect
53050     when compilation started (see also command-line option
53051     '-fpack-struct[=N]' *note Code Gen Options::).
53052  3. '#pragma pack(push[,N])' pushes the current alignment setting on an
53053     internal stack and then optionally sets the new alignment.
53054  4. '#pragma pack(pop)' restores the alignment setting to the one saved
53055     at the top of the internal stack (and removes that stack entry).
53056     Note that '#pragma pack([N])' does not influence this internal
53057     stack; thus it is possible to have '#pragma pack(push)' followed by
53058     multiple '#pragma pack(N)' instances and finalized by a single
53059     '#pragma pack(pop)'.
53060
53061 Some targets, e.g. x86 and PowerPC, support the '#pragma ms_struct'
53062directive which lays out structures and unions subsequently defined as
53063the documented '__attribute__ ((ms_struct))'.
53064
53065  1. '#pragma ms_struct on' turns on the Microsoft layout.
53066  2. '#pragma ms_struct off' turns off the Microsoft layout.
53067  3. '#pragma ms_struct reset' goes back to the default layout.
53068
53069 Most targets also support the '#pragma scalar_storage_order' directive
53070which lays out structures and unions subsequently defined as the
53071documented '__attribute__ ((scalar_storage_order))'.
53072
53073  1. '#pragma scalar_storage_order big-endian' sets the storage order of
53074     the scalar fields to big-endian.
53075  2. '#pragma scalar_storage_order little-endian' sets the storage order
53076     of the scalar fields to little-endian.
53077  3. '#pragma scalar_storage_order default' goes back to the endianness
53078     that was in effect when compilation started (see also command-line
53079     option '-fsso-struct=ENDIANNESS' *note C Dialect Options::).
53080
53081
53082File: gcc.info,  Node: Weak Pragmas,  Next: Diagnostic Pragmas,  Prev: Structure-Layout Pragmas,  Up: Pragmas
53083
530846.62.12 Weak Pragmas
53085--------------------
53086
53087For compatibility with SVR4, GCC supports a set of '#pragma' directives
53088for declaring symbols to be weak, and defining weak aliases.
53089
53090'#pragma weak SYMBOL'
53091     This pragma declares SYMBOL to be weak, as if the declaration had
53092     the attribute of the same name.  The pragma may appear before or
53093     after the declaration of SYMBOL.  It is not an error for SYMBOL to
53094     never be defined at all.
53095
53096'#pragma weak SYMBOL1 = SYMBOL2'
53097     This pragma declares SYMBOL1 to be a weak alias of SYMBOL2.  It is
53098     an error if SYMBOL2 is not defined in the current translation unit.
53099
53100
53101File: gcc.info,  Node: Diagnostic Pragmas,  Next: Visibility Pragmas,  Prev: Weak Pragmas,  Up: Pragmas
53102
531036.62.13 Diagnostic Pragmas
53104--------------------------
53105
53106GCC allows the user to selectively enable or disable certain types of
53107diagnostics, and change the kind of the diagnostic.  For example, a
53108project's policy might require that all sources compile with '-Werror'
53109but certain files might have exceptions allowing specific types of
53110warnings.  Or, a project might selectively enable diagnostics and treat
53111them as errors depending on which preprocessor macros are defined.
53112
53113'#pragma GCC diagnostic KIND OPTION'
53114
53115     Modifies the disposition of a diagnostic.  Note that not all
53116     diagnostics are modifiable; at the moment only warnings (normally
53117     controlled by '-W...') can be controlled, and not all of them.  Use
53118     '-fdiagnostics-show-option' to determine which diagnostics are
53119     controllable and which option controls them.
53120
53121     KIND is 'error' to treat this diagnostic as an error, 'warning' to
53122     treat it like a warning (even if '-Werror' is in effect), or
53123     'ignored' if the diagnostic is to be ignored.  OPTION is a double
53124     quoted string that matches the command-line option.
53125
53126          #pragma GCC diagnostic warning "-Wformat"
53127          #pragma GCC diagnostic error "-Wformat"
53128          #pragma GCC diagnostic ignored "-Wformat"
53129
53130     Note that these pragmas override any command-line options.  GCC
53131     keeps track of the location of each pragma, and issues diagnostics
53132     according to the state as of that point in the source file.  Thus,
53133     pragmas occurring after a line do not affect diagnostics caused by
53134     that line.
53135
53136'#pragma GCC diagnostic push'
53137'#pragma GCC diagnostic pop'
53138
53139     Causes GCC to remember the state of the diagnostics as of each
53140     'push', and restore to that point at each 'pop'.  If a 'pop' has no
53141     matching 'push', the command-line options are restored.
53142
53143          #pragma GCC diagnostic error "-Wuninitialized"
53144            foo(a);                       /* error is given for this one */
53145          #pragma GCC diagnostic push
53146          #pragma GCC diagnostic ignored "-Wuninitialized"
53147            foo(b);                       /* no diagnostic for this one */
53148          #pragma GCC diagnostic pop
53149            foo(c);                       /* error is given for this one */
53150          #pragma GCC diagnostic pop
53151            foo(d);                       /* depends on command-line options */
53152
53153 GCC also offers a simple mechanism for printing messages during
53154compilation.
53155
53156'#pragma message STRING'
53157
53158     Prints STRING as a compiler message on compilation.  The message is
53159     informational only, and is neither a compilation warning nor an
53160     error.  Newlines can be included in the string by using the '\n'
53161     escape sequence.
53162
53163          #pragma message "Compiling " __FILE__ "..."
53164
53165     STRING may be parenthesized, and is printed with location
53166     information.  For example,
53167
53168          #define DO_PRAGMA(x) _Pragma (#x)
53169          #define TODO(x) DO_PRAGMA(message ("TODO - " #x))
53170
53171          TODO(Remember to fix this)
53172
53173     prints '/tmp/file.c:4: note: #pragma message: TODO - Remember to
53174     fix this'.
53175
53176'#pragma GCC error MESSAGE'
53177     Generates an error message.  This pragma _is_ considered to
53178     indicate an error in the compilation, and it will be treated as
53179     such.
53180
53181     Newlines can be included in the string by using the '\n' escape
53182     sequence.  They will be displayed as newlines even if the
53183     '-fmessage-length' option is set to zero.
53184
53185     The error is only generated if the pragma is present in the code
53186     after pre-processing has been completed.  It does not matter
53187     however if the code containing the pragma is unreachable:
53188
53189          #if 0
53190          #pragma GCC error "this error is not seen"
53191          #endif
53192          void foo (void)
53193          {
53194            return;
53195          #pragma GCC error "this error is seen"
53196          }
53197
53198'#pragma GCC warning MESSAGE'
53199     This is just like 'pragma GCC error' except that a warning message
53200     is issued instead of an error message.  Unless '-Werror' is in
53201     effect, in which case this pragma will generate an error as well.
53202
53203
53204File: gcc.info,  Node: Visibility Pragmas,  Next: Push/Pop Macro Pragmas,  Prev: Diagnostic Pragmas,  Up: Pragmas
53205
532066.62.14 Visibility Pragmas
53207--------------------------
53208
53209'#pragma GCC visibility push(VISIBILITY)'
53210'#pragma GCC visibility pop'
53211
53212     This pragma allows the user to set the visibility for multiple
53213     declarations without having to give each a visibility attribute
53214     (*note Function Attributes::).
53215
53216     In C++, '#pragma GCC visibility' affects only namespace-scope
53217     declarations.  Class members and template specializations are not
53218     affected; if you want to override the visibility for a particular
53219     member or instantiation, you must use an attribute.
53220
53221
53222File: gcc.info,  Node: Push/Pop Macro Pragmas,  Next: Function Specific Option Pragmas,  Prev: Visibility Pragmas,  Up: Pragmas
53223
532246.62.15 Push/Pop Macro Pragmas
53225------------------------------
53226
53227For compatibility with Microsoft Windows compilers, GCC supports
53228'#pragma push_macro("MACRO_NAME")' and '#pragma
53229pop_macro("MACRO_NAME")'.
53230
53231'#pragma push_macro("MACRO_NAME")'
53232     This pragma saves the value of the macro named as MACRO_NAME to the
53233     top of the stack for this macro.
53234
53235'#pragma pop_macro("MACRO_NAME")'
53236     This pragma sets the value of the macro named as MACRO_NAME to the
53237     value on top of the stack for this macro.  If the stack for
53238     MACRO_NAME is empty, the value of the macro remains unchanged.
53239
53240 For example:
53241
53242     #define X  1
53243     #pragma push_macro("X")
53244     #undef X
53245     #define X -1
53246     #pragma pop_macro("X")
53247     int x [X];
53248
53249In this example, the definition of X as 1 is saved by '#pragma
53250push_macro' and restored by '#pragma pop_macro'.
53251
53252
53253File: gcc.info,  Node: Function Specific Option Pragmas,  Next: Loop-Specific Pragmas,  Prev: Push/Pop Macro Pragmas,  Up: Pragmas
53254
532556.62.16 Function Specific Option Pragmas
53256----------------------------------------
53257
53258'#pragma GCC target (STRING, ...)'
53259
53260     This pragma allows you to set target-specific options for functions
53261     defined later in the source file.  One or more strings can be
53262     specified.  Each function that is defined after this point is
53263     treated as if it had been declared with one 'target('STRING')'
53264     attribute for each STRING argument.  The parentheses around the
53265     strings in the pragma are optional.  *Note Function Attributes::,
53266     for more information about the 'target' attribute and the attribute
53267     syntax.
53268
53269     The '#pragma GCC target' pragma is presently implemented for x86,
53270     ARM, AArch64, PowerPC, S/390, and Nios II targets only.
53271
53272'#pragma GCC optimize (STRING, ...)'
53273
53274     This pragma allows you to set global optimization options for
53275     functions defined later in the source file.  One or more strings
53276     can be specified.  Each function that is defined after this point
53277     is treated as if it had been declared with one 'optimize('STRING')'
53278     attribute for each STRING argument.  The parentheses around the
53279     strings in the pragma are optional.  *Note Function Attributes::,
53280     for more information about the 'optimize' attribute and the
53281     attribute syntax.
53282
53283'#pragma GCC push_options'
53284'#pragma GCC pop_options'
53285
53286     These pragmas maintain a stack of the current target and
53287     optimization options.  It is intended for include files where you
53288     temporarily want to switch to using a different '#pragma GCC
53289     target' or '#pragma GCC optimize' and then to pop back to the
53290     previous options.
53291
53292'#pragma GCC reset_options'
53293
53294     This pragma clears the current '#pragma GCC target' and '#pragma
53295     GCC optimize' to use the default switches as specified on the
53296     command line.
53297
53298
53299File: gcc.info,  Node: Loop-Specific Pragmas,  Prev: Function Specific Option Pragmas,  Up: Pragmas
53300
533016.62.17 Loop-Specific Pragmas
53302-----------------------------
53303
53304'#pragma GCC ivdep'
53305
53306     With this pragma, the programmer asserts that there are no
53307     loop-carried dependencies which would prevent consecutive
53308     iterations of the following loop from executing concurrently with
53309     SIMD (single instruction multiple data) instructions.
53310
53311     For example, the compiler can only unconditionally vectorize the
53312     following loop with the pragma:
53313
53314          void foo (int n, int *a, int *b, int *c)
53315          {
53316            int i, j;
53317          #pragma GCC ivdep
53318            for (i = 0; i < n; ++i)
53319              a[i] = b[i] + c[i];
53320          }
53321
53322     In this example, using the 'restrict' qualifier had the same
53323     effect.  In the following example, that would not be possible.
53324     Assume k < -m or k >= m.  Only with the pragma, the compiler knows
53325     that it can unconditionally vectorize the following loop:
53326
53327          void ignore_vec_dep (int *a, int k, int c, int m)
53328          {
53329          #pragma GCC ivdep
53330            for (int i = 0; i < m; i++)
53331              a[i] = a[i + k] * c;
53332          }
53333
53334'#pragma GCC unroll N'
53335
53336     You can use this pragma to control how many times a loop should be
53337     unrolled.  It must be placed immediately before a 'for', 'while' or
53338     'do' loop or a '#pragma GCC ivdep', and applies only to the loop
53339     that follows.  N is an integer constant expression specifying the
53340     unrolling factor.  The values of 0 and 1 block any unrolling of the
53341     loop.
53342
53343
53344File: gcc.info,  Node: Unnamed Fields,  Next: Thread-Local,  Prev: Pragmas,  Up: C Extensions
53345
533466.63 Unnamed Structure and Union Fields
53347=======================================
53348
53349As permitted by ISO C11 and for compatibility with other compilers, GCC
53350allows you to define a structure or union that contains, as fields,
53351structures and unions without names.  For example:
53352
53353     struct {
53354       int a;
53355       union {
53356         int b;
53357         float c;
53358       };
53359       int d;
53360     } foo;
53361
53362In this example, you are able to access members of the unnamed union
53363with code like 'foo.b'.  Note that only unnamed structs and unions are
53364allowed, you may not have, for example, an unnamed 'int'.
53365
53366 You must never create such structures that cause ambiguous field
53367definitions.  For example, in this structure:
53368
53369     struct {
53370       int a;
53371       struct {
53372         int a;
53373       };
53374     } foo;
53375
53376it is ambiguous which 'a' is being referred to with 'foo.a'.  The
53377compiler gives errors for such constructs.
53378
53379 Unless '-fms-extensions' is used, the unnamed field must be a structure
53380or union definition without a tag (for example, 'struct { int a; };').
53381If '-fms-extensions' is used, the field may also be a definition with a
53382tag such as 'struct foo { int a; };', a reference to a previously
53383defined structure or union such as 'struct foo;', or a reference to a
53384'typedef' name for a previously defined structure or union type.
53385
53386 The option '-fplan9-extensions' enables '-fms-extensions' as well as
53387two other extensions.  First, a pointer to a structure is automatically
53388converted to a pointer to an anonymous field for assignments and
53389function calls.  For example:
53390
53391     struct s1 { int a; };
53392     struct s2 { struct s1; };
53393     extern void f1 (struct s1 *);
53394     void f2 (struct s2 *p) { f1 (p); }
53395
53396In the call to 'f1' inside 'f2', the pointer 'p' is converted into a
53397pointer to the anonymous field.
53398
53399 Second, when the type of an anonymous field is a 'typedef' for a
53400'struct' or 'union', code may refer to the field using the name of the
53401'typedef'.
53402
53403     typedef struct { int a; } s1;
53404     struct s2 { s1; };
53405     s1 f1 (struct s2 *p) { return p->s1; }
53406
53407 These usages are only permitted when they are not ambiguous.
53408
53409
53410File: gcc.info,  Node: Thread-Local,  Next: Binary constants,  Prev: Unnamed Fields,  Up: C Extensions
53411
534126.64 Thread-Local Storage
53413=========================
53414
53415Thread-local storage (TLS) is a mechanism by which variables are
53416allocated such that there is one instance of the variable per extant
53417thread.  The runtime model GCC uses to implement this originates in the
53418IA-64 processor-specific ABI, but has since been migrated to other
53419processors as well.  It requires significant support from the linker
53420('ld'), dynamic linker ('ld.so'), and system libraries ('libc.so' and
53421'libpthread.so'), so it is not available everywhere.
53422
53423 At the user level, the extension is visible with a new storage class
53424keyword: '__thread'.  For example:
53425
53426     __thread int i;
53427     extern __thread struct state s;
53428     static __thread char *p;
53429
53430 The '__thread' specifier may be used alone, with the 'extern' or
53431'static' specifiers, but with no other storage class specifier.  When
53432used with 'extern' or 'static', '__thread' must appear immediately after
53433the other storage class specifier.
53434
53435 The '__thread' specifier may be applied to any global, file-scoped
53436static, function-scoped static, or static data member of a class.  It
53437may not be applied to block-scoped automatic or non-static data member.
53438
53439 When the address-of operator is applied to a thread-local variable, it
53440is evaluated at run time and returns the address of the current thread's
53441instance of that variable.  An address so obtained may be used by any
53442thread.  When a thread terminates, any pointers to thread-local
53443variables in that thread become invalid.
53444
53445 No static initialization may refer to the address of a thread-local
53446variable.
53447
53448 In C++, if an initializer is present for a thread-local variable, it
53449must be a CONSTANT-EXPRESSION, as defined in 5.19.2 of the ANSI/ISO C++
53450standard.
53451
53452 See ELF Handling For Thread-Local Storage
53453(https://www.akkadia.org/drepper/tls.pdf) for a detailed explanation of
53454the four thread-local storage addressing models, and how the runtime is
53455expected to function.
53456
53457* Menu:
53458
53459* C99 Thread-Local Edits::
53460* C++98 Thread-Local Edits::
53461
53462
53463File: gcc.info,  Node: C99 Thread-Local Edits,  Next: C++98 Thread-Local Edits,  Up: Thread-Local
53464
534656.64.1 ISO/IEC 9899:1999 Edits for Thread-Local Storage
53466-------------------------------------------------------
53467
53468The following are a set of changes to ISO/IEC 9899:1999 (aka C99) that
53469document the exact semantics of the language extension.
53470
53471   * '5.1.2 Execution environments'
53472
53473     Add new text after paragraph 1
53474
53475          Within either execution environment, a "thread" is a flow of
53476          control within a program.  It is implementation defined
53477          whether or not there may be more than one thread associated
53478          with a program.  It is implementation defined how threads
53479          beyond the first are created, the name and type of the
53480          function called at thread startup, and how threads may be
53481          terminated.  However, objects with thread storage duration
53482          shall be initialized before thread startup.
53483
53484   * '6.2.4 Storage durations of objects'
53485
53486     Add new text before paragraph 3
53487
53488          An object whose identifier is declared with the storage-class
53489          specifier '__thread' has "thread storage duration".  Its
53490          lifetime is the entire execution of the thread, and its stored
53491          value is initialized only once, prior to thread startup.
53492
53493   * '6.4.1 Keywords'
53494
53495     Add '__thread'.
53496
53497   * '6.7.1 Storage-class specifiers'
53498
53499     Add '__thread' to the list of storage class specifiers in paragraph
53500     1.
53501
53502     Change paragraph 2 to
53503
53504          With the exception of '__thread', at most one storage-class
53505          specifier may be given [...].  The '__thread' specifier may be
53506          used alone, or immediately following 'extern' or 'static'.
53507
53508     Add new text after paragraph 6
53509
53510          The declaration of an identifier for a variable that has block
53511          scope that specifies '__thread' shall also specify either
53512          'extern' or 'static'.
53513
53514          The '__thread' specifier shall be used only with variables.
53515
53516
53517File: gcc.info,  Node: C++98 Thread-Local Edits,  Prev: C99 Thread-Local Edits,  Up: Thread-Local
53518
535196.64.2 ISO/IEC 14882:1998 Edits for Thread-Local Storage
53520--------------------------------------------------------
53521
53522The following are a set of changes to ISO/IEC 14882:1998 (aka C++98)
53523that document the exact semantics of the language extension.
53524
53525   * [intro.execution]
53526
53527     New text after paragraph 4
53528
53529          A "thread" is a flow of control within the abstract machine.
53530          It is implementation defined whether or not there may be more
53531          than one thread.
53532
53533     New text after paragraph 7
53534
53535          It is unspecified whether additional action must be taken to
53536          ensure when and whether side effects are visible to other
53537          threads.
53538
53539   * [lex.key]
53540
53541     Add '__thread'.
53542
53543   * [basic.start.main]
53544
53545     Add after paragraph 5
53546
53547          The thread that begins execution at the 'main' function is
53548          called the "main thread".  It is implementation defined how
53549          functions beginning threads other than the main thread are
53550          designated or typed.  A function so designated, as well as the
53551          'main' function, is called a "thread startup function".  It is
53552          implementation defined what happens if a thread startup
53553          function returns.  It is implementation defined what happens
53554          to other threads when any thread calls 'exit'.
53555
53556   * [basic.start.init]
53557
53558     Add after paragraph 4
53559
53560          The storage for an object of thread storage duration shall be
53561          statically initialized before the first statement of the
53562          thread startup function.  An object of thread storage duration
53563          shall not require dynamic initialization.
53564
53565   * [basic.start.term]
53566
53567     Add after paragraph 3
53568
53569          The type of an object with thread storage duration shall not
53570          have a non-trivial destructor, nor shall it be an array type
53571          whose elements (directly or indirectly) have non-trivial
53572          destructors.
53573
53574   * [basic.stc]
53575
53576     Add "thread storage duration" to the list in paragraph 1.
53577
53578     Change paragraph 2
53579
53580          Thread, static, and automatic storage durations are associated
53581          with objects introduced by declarations [...].
53582
53583     Add '__thread' to the list of specifiers in paragraph 3.
53584
53585   * [basic.stc.thread]
53586
53587     New section before [basic.stc.static]
53588
53589          The keyword '__thread' applied to a non-local object gives the
53590          object thread storage duration.
53591
53592          A local variable or class data member declared both 'static'
53593          and '__thread' gives the variable or member thread storage
53594          duration.
53595
53596   * [basic.stc.static]
53597
53598     Change paragraph 1
53599
53600          All objects that have neither thread storage duration, dynamic
53601          storage duration nor are local [...].
53602
53603   * [dcl.stc]
53604
53605     Add '__thread' to the list in paragraph 1.
53606
53607     Change paragraph 1
53608
53609          With the exception of '__thread', at most one
53610          STORAGE-CLASS-SPECIFIER shall appear in a given
53611          DECL-SPECIFIER-SEQ.  The '__thread' specifier may be used
53612          alone, or immediately following the 'extern' or 'static'
53613          specifiers.  [...]
53614
53615     Add after paragraph 5
53616
53617          The '__thread' specifier can be applied only to the names of
53618          objects and to anonymous unions.
53619
53620   * [class.mem]
53621
53622     Add after paragraph 6
53623
53624          Non-'static' members shall not be '__thread'.
53625
53626
53627File: gcc.info,  Node: Binary constants,  Prev: Thread-Local,  Up: C Extensions
53628
536296.65 Binary Constants using the '0b' Prefix
53630===========================================
53631
53632Integer constants can be written as binary constants, consisting of a
53633sequence of '0' and '1' digits, prefixed by '0b' or '0B'.  This is
53634particularly useful in environments that operate a lot on the bit level
53635(like microcontrollers).
53636
53637 The following statements are identical:
53638
53639     i =       42;
53640     i =     0x2a;
53641     i =      052;
53642     i = 0b101010;
53643
53644 The type of these constants follows the same rules as for octal or
53645hexadecimal integer constants, so suffixes like 'L' or 'UL' can be
53646applied.
53647
53648
53649File: gcc.info,  Node: C++ Extensions,  Next: Objective-C,  Prev: C Extensions,  Up: Top
53650
536517 Extensions to the C++ Language
53652********************************
53653
53654The GNU compiler provides these extensions to the C++ language (and you
53655can also use most of the C language extensions in your C++ programs).
53656If you want to write code that checks whether these features are
53657available, you can test for the GNU compiler the same way as for C
53658programs: check for a predefined macro '__GNUC__'.  You can also use
53659'__GNUG__' to test specifically for GNU C++ (*note Predefined Macros:
53660(cpp)Common Predefined Macros.).
53661
53662* Menu:
53663
53664* C++ Volatiles::       What constitutes an access to a volatile object.
53665* Restricted Pointers:: C99 restricted pointers and references.
53666* Vague Linkage::       Where G++ puts inlines, vtables and such.
53667* C++ Interface::       You can use a single C++ header file for both
53668                        declarations and definitions.
53669* Template Instantiation:: Methods for ensuring that exactly one copy of
53670                        each needed template instantiation is emitted.
53671* Bound member functions:: You can extract a function pointer to the
53672                        method denoted by a '->*' or '.*' expression.
53673* C++ Attributes::      Variable, function, and type attributes for C++ only.
53674* Function Multiversioning::   Declaring multiple function versions.
53675* Type Traits::         Compiler support for type traits.
53676* C++ Concepts::        Improved support for generic programming.
53677* Deprecated Features:: Things will disappear from G++.
53678* Backwards Compatibility:: Compatibilities with earlier definitions of C++.
53679
53680
53681File: gcc.info,  Node: C++ Volatiles,  Next: Restricted Pointers,  Up: C++ Extensions
53682
536837.1 When is a Volatile C++ Object Accessed?
53684===========================================
53685
53686The C++ standard differs from the C standard in its treatment of
53687volatile objects.  It fails to specify what constitutes a volatile
53688access, except to say that C++ should behave in a similar manner to C
53689with respect to volatiles, where possible.  However, the different
53690lvalueness of expressions between C and C++ complicate the behavior.
53691G++ behaves the same as GCC for volatile access, *Note Volatiles: C
53692Extensions, for a description of GCC's behavior.
53693
53694 The C and C++ language specifications differ when an object is accessed
53695in a void context:
53696
53697     volatile int *src = SOMEVALUE;
53698     *src;
53699
53700 The C++ standard specifies that such expressions do not undergo lvalue
53701to rvalue conversion, and that the type of the dereferenced object may
53702be incomplete.  The C++ standard does not specify explicitly that it is
53703lvalue to rvalue conversion that is responsible for causing an access.
53704There is reason to believe that it is, because otherwise certain simple
53705expressions become undefined.  However, because it would surprise most
53706programmers, G++ treats dereferencing a pointer to volatile object of
53707complete type as GCC would do for an equivalent type in C.  When the
53708object has incomplete type, G++ issues a warning; if you wish to force
53709an error, you must force a conversion to rvalue with, for instance, a
53710static cast.
53711
53712 When using a reference to volatile, G++ does not treat equivalent
53713expressions as accesses to volatiles, but instead issues a warning that
53714no volatile is accessed.  The rationale for this is that otherwise it
53715becomes difficult to determine where volatile access occur, and not
53716possible to ignore the return value from functions returning volatile
53717references.  Again, if you wish to force a read, cast the reference to
53718an rvalue.
53719
53720 G++ implements the same behavior as GCC does when assigning to a
53721volatile object--there is no reread of the assigned-to object, the
53722assigned rvalue is reused.  Note that in C++ assignment expressions are
53723lvalues, and if used as an lvalue, the volatile object is referred to.
53724For instance, VREF refers to VOBJ, as expected, in the following
53725example:
53726
53727     volatile int vobj;
53728     volatile int &vref = vobj = SOMETHING;
53729
53730
53731File: gcc.info,  Node: Restricted Pointers,  Next: Vague Linkage,  Prev: C++ Volatiles,  Up: C++ Extensions
53732
537337.2 Restricting Pointer Aliasing
53734================================
53735
53736As with the C front end, G++ understands the C99 feature of restricted
53737pointers, specified with the '__restrict__', or '__restrict' type
53738qualifier.  Because you cannot compile C++ by specifying the '-std=c99'
53739language flag, 'restrict' is not a keyword in C++.
53740
53741 In addition to allowing restricted pointers, you can specify restricted
53742references, which indicate that the reference is not aliased in the
53743local context.
53744
53745     void fn (int *__restrict__ rptr, int &__restrict__ rref)
53746     {
53747       /* ... */
53748     }
53749
53750In the body of 'fn', RPTR points to an unaliased integer and RREF refers
53751to a (different) unaliased integer.
53752
53753 You may also specify whether a member function's THIS pointer is
53754unaliased by using '__restrict__' as a member function qualifier.
53755
53756     void T::fn () __restrict__
53757     {
53758       /* ... */
53759     }
53760
53761Within the body of 'T::fn', THIS has the effective definition 'T
53762*__restrict__ const this'.  Notice that the interpretation of a
53763'__restrict__' member function qualifier is different to that of 'const'
53764or 'volatile' qualifier, in that it is applied to the pointer rather
53765than the object.  This is consistent with other compilers that implement
53766restricted pointers.
53767
53768 As with all outermost parameter qualifiers, '__restrict__' is ignored
53769in function definition matching.  This means you only need to specify
53770'__restrict__' in a function definition, rather than in a function
53771prototype as well.
53772
53773
53774File: gcc.info,  Node: Vague Linkage,  Next: C++ Interface,  Prev: Restricted Pointers,  Up: C++ Extensions
53775
537767.3 Vague Linkage
53777=================
53778
53779There are several constructs in C++ that require space in the object
53780file but are not clearly tied to a single translation unit.  We say that
53781these constructs have "vague linkage".  Typically such constructs are
53782emitted wherever they are needed, though sometimes we can be more
53783clever.
53784
53785Inline Functions
53786     Inline functions are typically defined in a header file which can
53787     be included in many different compilations.  Hopefully they can
53788     usually be inlined, but sometimes an out-of-line copy is necessary,
53789     if the address of the function is taken or if inlining fails.  In
53790     general, we emit an out-of-line copy in all translation units where
53791     one is needed.  As an exception, we only emit inline virtual
53792     functions with the vtable, since it always requires a copy.
53793
53794     Local static variables and string constants used in an inline
53795     function are also considered to have vague linkage, since they must
53796     be shared between all inlined and out-of-line instances of the
53797     function.
53798
53799VTables
53800     C++ virtual functions are implemented in most compilers using a
53801     lookup table, known as a vtable.  The vtable contains pointers to
53802     the virtual functions provided by a class, and each object of the
53803     class contains a pointer to its vtable (or vtables, in some
53804     multiple-inheritance situations).  If the class declares any
53805     non-inline, non-pure virtual functions, the first one is chosen as
53806     the "key method" for the class, and the vtable is only emitted in
53807     the translation unit where the key method is defined.
53808
53809     _Note:_ If the chosen key method is later defined as inline, the
53810     vtable is still emitted in every translation unit that defines it.
53811     Make sure that any inline virtuals are declared inline in the class
53812     body, even if they are not defined there.
53813
53814'type_info' objects
53815     C++ requires information about types to be written out in order to
53816     implement 'dynamic_cast', 'typeid' and exception handling.  For
53817     polymorphic classes (classes with virtual functions), the
53818     'type_info' object is written out along with the vtable so that
53819     'dynamic_cast' can determine the dynamic type of a class object at
53820     run time.  For all other types, we write out the 'type_info' object
53821     when it is used: when applying 'typeid' to an expression, throwing
53822     an object, or referring to a type in a catch clause or exception
53823     specification.
53824
53825Template Instantiations
53826     Most everything in this section also applies to template
53827     instantiations, but there are other options as well.  *Note Where's
53828     the Template?: Template Instantiation.
53829
53830 When used with GNU ld version 2.8 or later on an ELF system such as
53831GNU/Linux or Solaris 2, or on Microsoft Windows, duplicate copies of
53832these constructs will be discarded at link time.  This is known as
53833COMDAT support.
53834
53835 On targets that don't support COMDAT, but do support weak symbols, GCC
53836uses them.  This way one copy overrides all the others, but the unused
53837copies still take up space in the executable.
53838
53839 For targets that do not support either COMDAT or weak symbols, most
53840entities with vague linkage are emitted as local symbols to avoid
53841duplicate definition errors from the linker.  This does not happen for
53842local statics in inlines, however, as having multiple copies almost
53843certainly breaks things.
53844
53845 *Note Declarations and Definitions in One Header: C++ Interface, for
53846another way to control placement of these constructs.
53847
53848
53849File: gcc.info,  Node: C++ Interface,  Next: Template Instantiation,  Prev: Vague Linkage,  Up: C++ Extensions
53850
538517.4 C++ Interface and Implementation Pragmas
53852============================================
53853
53854'#pragma interface' and '#pragma implementation' provide the user with a
53855way of explicitly directing the compiler to emit entities with vague
53856linkage (and debugging information) in a particular translation unit.
53857
53858 _Note:_ These '#pragma's have been superceded as of GCC 2.7.2 by COMDAT
53859support and the "key method" heuristic mentioned in *note Vague
53860Linkage::.  Using them can actually cause your program to grow due to
53861unnecessary out-of-line copies of inline functions.
53862
53863'#pragma interface'
53864'#pragma interface "SUBDIR/OBJECTS.h"'
53865     Use this directive in _header files_ that define object classes, to
53866     save space in most of the object files that use those classes.
53867     Normally, local copies of certain information (backup copies of
53868     inline member functions, debugging information, and the internal
53869     tables that implement virtual functions) must be kept in each
53870     object file that includes class definitions.  You can use this
53871     pragma to avoid such duplication.  When a header file containing
53872     '#pragma interface' is included in a compilation, this auxiliary
53873     information is not generated (unless the main input source file
53874     itself uses '#pragma implementation').  Instead, the object files
53875     contain references to be resolved at link time.
53876
53877     The second form of this directive is useful for the case where you
53878     have multiple headers with the same name in different directories.
53879     If you use this form, you must specify the same string to '#pragma
53880     implementation'.
53881
53882'#pragma implementation'
53883'#pragma implementation "OBJECTS.h"'
53884     Use this pragma in a _main input file_, when you want full output
53885     from included header files to be generated (and made globally
53886     visible).  The included header file, in turn, should use '#pragma
53887     interface'.  Backup copies of inline member functions, debugging
53888     information, and the internal tables used to implement virtual
53889     functions are all generated in implementation files.
53890
53891     If you use '#pragma implementation' with no argument, it applies to
53892     an include file with the same basename(1) as your source file.  For
53893     example, in 'allclass.cc', giving just '#pragma implementation' by
53894     itself is equivalent to '#pragma implementation "allclass.h"'.
53895
53896     Use the string argument if you want a single implementation file to
53897     include code from multiple header files.  (You must also use
53898     '#include' to include the header file; '#pragma implementation'
53899     only specifies how to use the file--it doesn't actually include
53900     it.)
53901
53902     There is no way to split up the contents of a single header file
53903     into multiple implementation files.
53904
53905 '#pragma implementation' and '#pragma interface' also have an effect on
53906function inlining.
53907
53908 If you define a class in a header file marked with '#pragma interface',
53909the effect on an inline function defined in that class is similar to an
53910explicit 'extern' declaration--the compiler emits no code at all to
53911define an independent version of the function.  Its definition is used
53912only for inlining with its callers.
53913
53914 Conversely, when you include the same header file in a main source file
53915that declares it as '#pragma implementation', the compiler emits code
53916for the function itself; this defines a version of the function that can
53917be found via pointers (or by callers compiled without inlining).  If all
53918calls to the function can be inlined, you can avoid emitting the
53919function by compiling with '-fno-implement-inlines'.  If any calls are
53920not inlined, you will get linker errors.
53921
53922   ---------- Footnotes ----------
53923
53924   (1) A file's "basename" is the name stripped of all leading path
53925information and of trailing suffixes, such as '.h' or '.C' or '.cc'.
53926
53927
53928File: gcc.info,  Node: Template Instantiation,  Next: Bound member functions,  Prev: C++ Interface,  Up: C++ Extensions
53929
539307.5 Where's the Template?
53931=========================
53932
53933C++ templates were the first language feature to require more
53934intelligence from the environment than was traditionally found on a UNIX
53935system.  Somehow the compiler and linker have to make sure that each
53936template instance occurs exactly once in the executable if it is needed,
53937and not at all otherwise.  There are two basic approaches to this
53938problem, which are referred to as the Borland model and the Cfront
53939model.
53940
53941Borland model
53942     Borland C++ solved the template instantiation problem by adding the
53943     code equivalent of common blocks to their linker; the compiler
53944     emits template instances in each translation unit that uses them,
53945     and the linker collapses them together.  The advantage of this
53946     model is that the linker only has to consider the object files
53947     themselves; there is no external complexity to worry about.  The
53948     disadvantage is that compilation time is increased because the
53949     template code is being compiled repeatedly.  Code written for this
53950     model tends to include definitions of all templates in the header
53951     file, since they must be seen to be instantiated.
53952
53953Cfront model
53954     The AT&T C++ translator, Cfront, solved the template instantiation
53955     problem by creating the notion of a template repository, an
53956     automatically maintained place where template instances are stored.
53957     A more modern version of the repository works as follows: As
53958     individual object files are built, the compiler places any template
53959     definitions and instantiations encountered in the repository.  At
53960     link time, the link wrapper adds in the objects in the repository
53961     and compiles any needed instances that were not previously emitted.
53962     The advantages of this model are more optimal compilation speed and
53963     the ability to use the system linker; to implement the Borland
53964     model a compiler vendor also needs to replace the linker.  The
53965     disadvantages are vastly increased complexity, and thus potential
53966     for error; for some code this can be just as transparent, but in
53967     practice it can been very difficult to build multiple programs in
53968     one directory and one program in multiple directories.  Code
53969     written for this model tends to separate definitions of non-inline
53970     member templates into a separate file, which should be compiled
53971     separately.
53972
53973 G++ implements the Borland model on targets where the linker supports
53974it, including ELF targets (such as GNU/Linux), Mac OS X and Microsoft
53975Windows.  Otherwise G++ implements neither automatic model.
53976
53977 You have the following options for dealing with template
53978instantiations:
53979
53980  1. Do nothing.  Code written for the Borland model works fine, but
53981     each translation unit contains instances of each of the templates
53982     it uses.  The duplicate instances will be discarded by the linker,
53983     but in a large program, this can lead to an unacceptable amount of
53984     code duplication in object files or shared libraries.
53985
53986     Duplicate instances of a template can be avoided by defining an
53987     explicit instantiation in one object file, and preventing the
53988     compiler from doing implicit instantiations in any other object
53989     files by using an explicit instantiation declaration, using the
53990     'extern template' syntax:
53991
53992          extern template int max (int, int);
53993
53994     This syntax is defined in the C++ 2011 standard, but has been
53995     supported by G++ and other compilers since well before 2011.
53996
53997     Explicit instantiations can be used for the largest or most
53998     frequently duplicated instances, without having to know exactly
53999     which other instances are used in the rest of the program.  You can
54000     scatter the explicit instantiations throughout your program,
54001     perhaps putting them in the translation units where the instances
54002     are used or the translation units that define the templates
54003     themselves; you can put all of the explicit instantiations you need
54004     into one big file; or you can create small files like
54005
54006          #include "Foo.h"
54007          #include "Foo.cc"
54008
54009          template class Foo<int>;
54010          template ostream& operator <<
54011                          (ostream&, const Foo<int>&);
54012
54013     for each of the instances you need, and create a template
54014     instantiation library from those.
54015
54016     This is the simplest option, but also offers flexibility and
54017     fine-grained control when necessary.  It is also the most portable
54018     alternative and programs using this approach will work with most
54019     modern compilers.
54020
54021  2. Compile your code with '-fno-implicit-templates' to disable the
54022     implicit generation of template instances, and explicitly
54023     instantiate all the ones you use.  This approach requires more
54024     knowledge of exactly which instances you need than do the others,
54025     but it's less mysterious and allows greater control if you want to
54026     ensure that only the intended instances are used.
54027
54028     If you are using Cfront-model code, you can probably get away with
54029     not using '-fno-implicit-templates' when compiling files that don't
54030     '#include' the member template definitions.
54031
54032     If you use one big file to do the instantiations, you may want to
54033     compile it without '-fno-implicit-templates' so you get all of the
54034     instances required by your explicit instantiations (but not by any
54035     other files) without having to specify them as well.
54036
54037     In addition to forward declaration of explicit instantiations (with
54038     'extern'), G++ has extended the template instantiation syntax to
54039     support instantiation of the compiler support data for a template
54040     class (i.e. the vtable) without instantiating any of its members
54041     (with 'inline'), and instantiation of only the static data members
54042     of a template class, without the support data or member functions
54043     (with 'static'):
54044
54045          inline template class Foo<int>;
54046          static template class Foo<int>;
54047
54048
54049File: gcc.info,  Node: Bound member functions,  Next: C++ Attributes,  Prev: Template Instantiation,  Up: C++ Extensions
54050
540517.6 Extracting the Function Pointer from a Bound Pointer to Member Function
54052===========================================================================
54053
54054In C++, pointer to member functions (PMFs) are implemented using a wide
54055pointer of sorts to handle all the possible call mechanisms; the PMF
54056needs to store information about how to adjust the 'this' pointer, and
54057if the function pointed to is virtual, where to find the vtable, and
54058where in the vtable to look for the member function.  If you are using
54059PMFs in an inner loop, you should really reconsider that decision.  If
54060that is not an option, you can extract the pointer to the function that
54061would be called for a given object/PMF pair and call it directly inside
54062the inner loop, to save a bit of time.
54063
54064 Note that you still pay the penalty for the call through a function
54065pointer; on most modern architectures, such a call defeats the branch
54066prediction features of the CPU.  This is also true of normal virtual
54067function calls.
54068
54069 The syntax for this extension is
54070
54071     extern A a;
54072     extern int (A::*fp)();
54073     typedef int (*fptr)(A *);
54074
54075     fptr p = (fptr)(a.*fp);
54076
54077 For PMF constants (i.e. expressions of the form '&Klasse::Member'), no
54078object is needed to obtain the address of the function.  They can be
54079converted to function pointers directly:
54080
54081     fptr p1 = (fptr)(&A::foo);
54082
54083 You must specify '-Wno-pmf-conversions' to use this extension.
54084
54085
54086File: gcc.info,  Node: C++ Attributes,  Next: Function Multiversioning,  Prev: Bound member functions,  Up: C++ Extensions
54087
540887.7 C++-Specific Variable, Function, and Type Attributes
54089========================================================
54090
54091Some attributes only make sense for C++ programs.
54092
54093'abi_tag ("TAG", ...)'
54094     The 'abi_tag' attribute can be applied to a function, variable, or
54095     class declaration.  It modifies the mangled name of the entity to
54096     incorporate the tag name, in order to distinguish the function or
54097     class from an earlier version with a different ABI; perhaps the
54098     class has changed size, or the function has a different return type
54099     that is not encoded in the mangled name.
54100
54101     The attribute can also be applied to an inline namespace, but does
54102     not affect the mangled name of the namespace; in this case it is
54103     only used for '-Wabi-tag' warnings and automatic tagging of
54104     functions and variables.  Tagging inline namespaces is generally
54105     preferable to tagging individual declarations, but the latter is
54106     sometimes necessary, such as when only certain members of a class
54107     need to be tagged.
54108
54109     The argument can be a list of strings of arbitrary length.  The
54110     strings are sorted on output, so the order of the list is
54111     unimportant.
54112
54113     A redeclaration of an entity must not add new ABI tags, since doing
54114     so would change the mangled name.
54115
54116     The ABI tags apply to a name, so all instantiations and
54117     specializations of a template have the same tags.  The attribute
54118     will be ignored if applied to an explicit specialization or
54119     instantiation.
54120
54121     The '-Wabi-tag' flag enables a warning about a class which does not
54122     have all the ABI tags used by its subobjects and virtual functions;
54123     for users with code that needs to coexist with an earlier ABI,
54124     using this option can help to find all affected types that need to
54125     be tagged.
54126
54127     When a type involving an ABI tag is used as the type of a variable
54128     or return type of a function where that tag is not already present
54129     in the signature of the function, the tag is automatically applied
54130     to the variable or function.  '-Wabi-tag' also warns about this
54131     situation; this warning can be avoided by explicitly tagging the
54132     variable or function or moving it into a tagged inline namespace.
54133
54134'init_priority (PRIORITY)'
54135
54136     In Standard C++, objects defined at namespace scope are guaranteed
54137     to be initialized in an order in strict accordance with that of
54138     their definitions _in a given translation unit_.  No guarantee is
54139     made for initializations across translation units.  However, GNU
54140     C++ allows users to control the order of initialization of objects
54141     defined at namespace scope with the 'init_priority' attribute by
54142     specifying a relative PRIORITY, a constant integral expression
54143     currently bounded between 101 and 65535 inclusive.  Lower numbers
54144     indicate a higher priority.
54145
54146     In the following example, 'A' would normally be created before 'B',
54147     but the 'init_priority' attribute reverses that order:
54148
54149          Some_Class  A  __attribute__ ((init_priority (2000)));
54150          Some_Class  B  __attribute__ ((init_priority (543)));
54151
54152     Note that the particular values of PRIORITY do not matter; only
54153     their relative ordering.
54154
54155'warn_unused'
54156
54157     For C++ types with non-trivial constructors and/or destructors it
54158     is impossible for the compiler to determine whether a variable of
54159     this type is truly unused if it is not referenced.  This type
54160     attribute informs the compiler that variables of this type should
54161     be warned about if they appear to be unused, just like variables of
54162     fundamental types.
54163
54164     This attribute is appropriate for types which just represent a
54165     value, such as 'std::string'; it is not appropriate for types which
54166     control a resource, such as 'std::lock_guard'.
54167
54168     This attribute is also accepted in C, but it is unnecessary because
54169     C does not have constructors or destructors.
54170
54171
54172File: gcc.info,  Node: Function Multiversioning,  Next: Type Traits,  Prev: C++ Attributes,  Up: C++ Extensions
54173
541747.8 Function Multiversioning
54175============================
54176
54177With the GNU C++ front end, for x86 targets, you may specify multiple
54178versions of a function, where each function is specialized for a
54179specific target feature.  At runtime, the appropriate version of the
54180function is automatically executed depending on the characteristics of
54181the execution platform.  Here is an example.
54182
54183     __attribute__ ((target ("default")))
54184     int foo ()
54185     {
54186       // The default version of foo.
54187       return 0;
54188     }
54189
54190     __attribute__ ((target ("sse4.2")))
54191     int foo ()
54192     {
54193       // foo version for SSE4.2
54194       return 1;
54195     }
54196
54197     __attribute__ ((target ("arch=atom")))
54198     int foo ()
54199     {
54200       // foo version for the Intel ATOM processor
54201       return 2;
54202     }
54203
54204     __attribute__ ((target ("arch=amdfam10")))
54205     int foo ()
54206     {
54207       // foo version for the AMD Family 0x10 processors.
54208       return 3;
54209     }
54210
54211     int main ()
54212     {
54213       int (*p)() = &foo;
54214       assert ((*p) () == foo ());
54215       return 0;
54216     }
54217
54218 In the above example, four versions of function foo are created.  The
54219first version of foo with the target attribute "default" is the default
54220version.  This version gets executed when no other target specific
54221version qualifies for execution on a particular platform.  A new version
54222of foo is created by using the same function signature but with a
54223different target string.  Function foo is called or a pointer to it is
54224taken just like a regular function.  GCC takes care of doing the
54225dispatching to call the right version at runtime.  Refer to the GCC wiki
54226on Function Multiversioning
54227(http://gcc.gnu.org/wiki/FunctionMultiVersioning) for more details.
54228
54229
54230File: gcc.info,  Node: Type Traits,  Next: C++ Concepts,  Prev: Function Multiversioning,  Up: C++ Extensions
54231
542327.9 Type Traits
54233===============
54234
54235The C++ front end implements syntactic extensions that allow
54236compile-time determination of various characteristics of a type (or of a
54237pair of types).
54238
54239'__has_nothrow_assign (type)'
54240     If 'type' is 'const'-qualified or is a reference type then the
54241     trait is 'false'.  Otherwise if '__has_trivial_assign (type)' is
54242     'true' then the trait is 'true', else if 'type' is a cv-qualified
54243     class or union type with copy assignment operators that are known
54244     not to throw an exception then the trait is 'true', else it is
54245     'false'.  Requires: 'type' shall be a complete type, (possibly
54246     cv-qualified) 'void', or an array of unknown bound.
54247
54248'__has_nothrow_copy (type)'
54249     If '__has_trivial_copy (type)' is 'true' then the trait is 'true',
54250     else if 'type' is a cv-qualified class or union type with copy
54251     constructors that are known not to throw an exception then the
54252     trait is 'true', else it is 'false'.  Requires: 'type' shall be a
54253     complete type, (possibly cv-qualified) 'void', or an array of
54254     unknown bound.
54255
54256'__has_nothrow_constructor (type)'
54257     If '__has_trivial_constructor (type)' is 'true' then the trait is
54258     'true', else if 'type' is a cv class or union type (or array
54259     thereof) with a default constructor that is known not to throw an
54260     exception then the trait is 'true', else it is 'false'.  Requires:
54261     'type' shall be a complete type, (possibly cv-qualified) 'void', or
54262     an array of unknown bound.
54263
54264'__has_trivial_assign (type)'
54265     If 'type' is 'const'- qualified or is a reference type then the
54266     trait is 'false'.  Otherwise if '__is_pod (type)' is 'true' then
54267     the trait is 'true', else if 'type' is a cv-qualified class or
54268     union type with a trivial copy assignment ([class.copy]) then the
54269     trait is 'true', else it is 'false'.  Requires: 'type' shall be a
54270     complete type, (possibly cv-qualified) 'void', or an array of
54271     unknown bound.
54272
54273'__has_trivial_copy (type)'
54274     If '__is_pod (type)' is 'true' or 'type' is a reference type then
54275     the trait is 'true', else if 'type' is a cv class or union type
54276     with a trivial copy constructor ([class.copy]) then the trait is
54277     'true', else it is 'false'.  Requires: 'type' shall be a complete
54278     type, (possibly cv-qualified) 'void', or an array of unknown bound.
54279
54280'__has_trivial_constructor (type)'
54281     If '__is_pod (type)' is 'true' then the trait is 'true', else if
54282     'type' is a cv-qualified class or union type (or array thereof)
54283     with a trivial default constructor ([class.ctor]) then the trait is
54284     'true', else it is 'false'.  Requires: 'type' shall be a complete
54285     type, (possibly cv-qualified) 'void', or an array of unknown bound.
54286
54287'__has_trivial_destructor (type)'
54288     If '__is_pod (type)' is 'true' or 'type' is a reference type then
54289     the trait is 'true', else if 'type' is a cv class or union type (or
54290     array thereof) with a trivial destructor ([class.dtor]) then the
54291     trait is 'true', else it is 'false'.  Requires: 'type' shall be a
54292     complete type, (possibly cv-qualified) 'void', or an array of
54293     unknown bound.
54294
54295'__has_virtual_destructor (type)'
54296     If 'type' is a class type with a virtual destructor ([class.dtor])
54297     then the trait is 'true', else it is 'false'.  Requires: 'type'
54298     shall be a complete type, (possibly cv-qualified) 'void', or an
54299     array of unknown bound.
54300
54301'__is_abstract (type)'
54302     If 'type' is an abstract class ([class.abstract]) then the trait is
54303     'true', else it is 'false'.  Requires: 'type' shall be a complete
54304     type, (possibly cv-qualified) 'void', or an array of unknown bound.
54305
54306'__is_base_of (base_type, derived_type)'
54307     If 'base_type' is a base class of 'derived_type' ([class.derived])
54308     then the trait is 'true', otherwise it is 'false'.  Top-level
54309     cv-qualifications of 'base_type' and 'derived_type' are ignored.
54310     For the purposes of this trait, a class type is considered is own
54311     base.  Requires: if '__is_class (base_type)' and '__is_class
54312     (derived_type)' are 'true' and 'base_type' and 'derived_type' are
54313     not the same type (disregarding cv-qualifiers), 'derived_type'
54314     shall be a complete type.  A diagnostic is produced if this
54315     requirement is not met.
54316
54317'__is_class (type)'
54318     If 'type' is a cv-qualified class type, and not a union type
54319     ([basic.compound]) the trait is 'true', else it is 'false'.
54320
54321'__is_empty (type)'
54322     If '__is_class (type)' is 'false' then the trait is 'false'.
54323     Otherwise 'type' is considered empty if and only if: 'type' has no
54324     non-static data members, or all non-static data members, if any,
54325     are bit-fields of length 0, and 'type' has no virtual members, and
54326     'type' has no virtual base classes, and 'type' has no base classes
54327     'base_type' for which '__is_empty (base_type)' is 'false'.
54328     Requires: 'type' shall be a complete type, (possibly cv-qualified)
54329     'void', or an array of unknown bound.
54330
54331'__is_enum (type)'
54332     If 'type' is a cv enumeration type ([basic.compound]) the trait is
54333     'true', else it is 'false'.
54334
54335'__is_literal_type (type)'
54336     If 'type' is a literal type ([basic.types]) the trait is 'true',
54337     else it is 'false'.  Requires: 'type' shall be a complete type,
54338     (possibly cv-qualified) 'void', or an array of unknown bound.
54339
54340'__is_pod (type)'
54341     If 'type' is a cv POD type ([basic.types]) then the trait is
54342     'true', else it is 'false'.  Requires: 'type' shall be a complete
54343     type, (possibly cv-qualified) 'void', or an array of unknown bound.
54344
54345'__is_polymorphic (type)'
54346     If 'type' is a polymorphic class ([class.virtual]) then the trait
54347     is 'true', else it is 'false'.  Requires: 'type' shall be a
54348     complete type, (possibly cv-qualified) 'void', or an array of
54349     unknown bound.
54350
54351'__is_standard_layout (type)'
54352     If 'type' is a standard-layout type ([basic.types]) the trait is
54353     'true', else it is 'false'.  Requires: 'type' shall be a complete
54354     type, (possibly cv-qualified) 'void', or an array of unknown bound.
54355
54356'__is_trivial (type)'
54357     If 'type' is a trivial type ([basic.types]) the trait is 'true',
54358     else it is 'false'.  Requires: 'type' shall be a complete type,
54359     (possibly cv-qualified) 'void', or an array of unknown bound.
54360
54361'__is_union (type)'
54362     If 'type' is a cv union type ([basic.compound]) the trait is
54363     'true', else it is 'false'.
54364
54365'__underlying_type (type)'
54366     The underlying type of 'type'.  Requires: 'type' shall be an
54367     enumeration type ([dcl.enum]).
54368
54369'__integer_pack (length)'
54370     When used as the pattern of a pack expansion within a template
54371     definition, expands to a template argument pack containing integers
54372     from '0' to 'length-1'.  This is provided for efficient
54373     implementation of 'std::make_integer_sequence'.
54374
54375
54376File: gcc.info,  Node: C++ Concepts,  Next: Deprecated Features,  Prev: Type Traits,  Up: C++ Extensions
54377
543787.10 C++ Concepts
54379=================
54380
54381C++ concepts provide much-improved support for generic programming.  In
54382particular, they allow the specification of constraints on template
54383arguments.  The constraints are used to extend the usual overloading and
54384partial specialization capabilities of the language, allowing generic
54385data structures and algorithms to be "refined" based on their properties
54386rather than their type names.
54387
54388 The following keywords are reserved for concepts.
54389
54390'assumes'
54391     States an expression as an assumption, and if possible, verifies
54392     that the assumption is valid.  For example, 'assume(n > 0)'.
54393
54394'axiom'
54395     Introduces an axiom definition.  Axioms introduce requirements on
54396     values.
54397
54398'forall'
54399     Introduces a universally quantified object in an axiom.  For
54400     example, 'forall (int n) n + 0 == n').
54401
54402'concept'
54403     Introduces a concept definition.  Concepts are sets of syntactic
54404     and semantic requirements on types and their values.
54405
54406'requires'
54407     Introduces constraints on template arguments or requirements for a
54408     member function of a class template.
54409
54410 The front end also exposes a number of internal mechanism that can be
54411used to simplify the writing of type traits.  Note that some of these
54412traits are likely to be removed in the future.
54413
54414'__is_same (type1, type2)'
54415     A binary type trait: 'true' whenever the type arguments are the
54416     same.
54417
54418
54419File: gcc.info,  Node: Deprecated Features,  Next: Backwards Compatibility,  Prev: C++ Concepts,  Up: C++ Extensions
54420
544217.11 Deprecated Features
54422========================
54423
54424In the past, the GNU C++ compiler was extended to experiment with new
54425features, at a time when the C++ language was still evolving.  Now that
54426the C++ standard is complete, some of those features are superseded by
54427superior alternatives.  Using the old features might cause a warning in
54428some cases that the feature will be dropped in the future.  In other
54429cases, the feature might be gone already.
54430
54431 G++ allows a virtual function returning 'void *' to be overridden by
54432one returning a different pointer type.  This extension to the covariant
54433return type rules is now deprecated and will be removed from a future
54434version.
54435
54436 The use of default arguments in function pointers, function typedefs
54437and other places where they are not permitted by the standard is
54438deprecated and will be removed from a future version of G++.
54439
54440 G++ allows floating-point literals to appear in integral constant
54441expressions, e.g. ' enum E { e = int(2.2 * 3.7) } ' This extension is
54442deprecated and will be removed from a future version.
54443
54444 G++ allows static data members of const floating-point type to be
54445declared with an initializer in a class definition.  The standard only
54446allows initializers for static members of const integral types and const
54447enumeration types so this extension has been deprecated and will be
54448removed from a future version.
54449
54450 G++ allows attributes to follow a parenthesized direct initializer,
54451e.g. ' int f (0) __attribute__ ((something)); ' This extension has been
54452ignored since G++ 3.3 and is deprecated.
54453
54454 G++ allows anonymous structs and unions to have members that are not
54455public non-static data members (i.e. fields).  These extensions are
54456deprecated.
54457
54458
54459File: gcc.info,  Node: Backwards Compatibility,  Prev: Deprecated Features,  Up: C++ Extensions
54460
544617.12 Backwards Compatibility
54462============================
54463
54464Now that there is a definitive ISO standard C++, G++ has a specification
54465to adhere to.  The C++ language evolved over time, and features that
54466used to be acceptable in previous drafts of the standard, such as the
54467ARM [Annotated C++ Reference Manual], are no longer accepted.  In order
54468to allow compilation of C++ written to such drafts, G++ contains some
54469backwards compatibilities.  _All such backwards compatibility features
54470are liable to disappear in future versions of G++._  They should be
54471considered deprecated.  *Note Deprecated Features::.
54472
54473'Implicit C language'
54474     Old C system header files did not contain an 'extern "C" {...}'
54475     scope to set the language.  On such systems, all system header
54476     files are implicitly scoped inside a C language scope.  Such
54477     headers must correctly prototype function argument types, there is
54478     no leeway for '()' to indicate an unspecified set of arguments.
54479
54480
54481File: gcc.info,  Node: Objective-C,  Next: Compatibility,  Prev: C++ Extensions,  Up: Top
54482
544838 GNU Objective-C Features
54484**************************
54485
54486This document is meant to describe some of the GNU Objective-C features.
54487It is not intended to teach you Objective-C. There are several resources
54488on the Internet that present the language.
54489
54490* Menu:
54491
54492* GNU Objective-C runtime API::
54493* Executing code before main::
54494* Type encoding::
54495* Garbage Collection::
54496* Constant string objects::
54497* compatibility_alias::
54498* Exceptions::
54499* Synchronization::
54500* Fast enumeration::
54501* Messaging with the GNU Objective-C runtime::
54502
54503
54504File: gcc.info,  Node: GNU Objective-C runtime API,  Next: Executing code before main,  Up: Objective-C
54505
545068.1 GNU Objective-C Runtime API
54507===============================
54508
54509This section is specific for the GNU Objective-C runtime.  If you are
54510using a different runtime, you can skip it.
54511
54512 The GNU Objective-C runtime provides an API that allows you to interact
54513with the Objective-C runtime system, querying the live runtime
54514structures and even manipulating them.  This allows you for example to
54515inspect and navigate classes, methods and protocols; to define new
54516classes or new methods, and even to modify existing classes or
54517protocols.
54518
54519 If you are using a "Foundation" library such as GNUstep-Base, this
54520library will provide you with a rich set of functionality to do most of
54521the inspection tasks, and you probably will only need direct access to
54522the GNU Objective-C runtime API to define new classes or methods.
54523
54524* Menu:
54525
54526* Modern GNU Objective-C runtime API::
54527* Traditional GNU Objective-C runtime API::
54528
54529
54530File: gcc.info,  Node: Modern GNU Objective-C runtime API,  Next: Traditional GNU Objective-C runtime API,  Up: GNU Objective-C runtime API
54531
545328.1.1 Modern GNU Objective-C Runtime API
54533----------------------------------------
54534
54535The GNU Objective-C runtime provides an API which is similar to the one
54536provided by the "Objective-C 2.0" Apple/NeXT Objective-C runtime.  The
54537API is documented in the public header files of the GNU Objective-C
54538runtime:
54539
54540   * 'objc/objc.h': this is the basic Objective-C header file, defining
54541     the basic Objective-C types such as 'id', 'Class' and 'BOOL'.  You
54542     have to include this header to do almost anything with Objective-C.
54543
54544   * 'objc/runtime.h': this header declares most of the public runtime
54545     API functions allowing you to inspect and manipulate the
54546     Objective-C runtime data structures.  These functions are fairly
54547     standardized across Objective-C runtimes and are almost identical
54548     to the Apple/NeXT Objective-C runtime ones.  It does not declare
54549     functions in some specialized areas (constructing and forwarding
54550     message invocations, threading) which are in the other headers
54551     below.  You have to include 'objc/objc.h' and 'objc/runtime.h' to
54552     use any of the functions, such as 'class_getName()', declared in
54553     'objc/runtime.h'.
54554
54555   * 'objc/message.h': this header declares public functions used to
54556     construct, deconstruct and forward message invocations.  Because
54557     messaging is done in quite a different way on different runtimes,
54558     functions in this header are specific to the GNU Objective-C
54559     runtime implementation.
54560
54561   * 'objc/objc-exception.h': this header declares some public functions
54562     related to Objective-C exceptions.  For example functions in this
54563     header allow you to throw an Objective-C exception from plain C/C++
54564     code.
54565
54566   * 'objc/objc-sync.h': this header declares some public functions
54567     related to the Objective-C '@synchronized()' syntax, allowing you
54568     to emulate an Objective-C '@synchronized()' block in plain C/C++
54569     code.
54570
54571   * 'objc/thr.h': this header declares a public runtime API threading
54572     layer that is only provided by the GNU Objective-C runtime.  It
54573     declares functions such as 'objc_mutex_lock()', which provide a
54574     platform-independent set of threading functions.
54575
54576 The header files contain detailed documentation for each function in
54577the GNU Objective-C runtime API.
54578
54579
54580File: gcc.info,  Node: Traditional GNU Objective-C runtime API,  Prev: Modern GNU Objective-C runtime API,  Up: GNU Objective-C runtime API
54581
545828.1.2 Traditional GNU Objective-C Runtime API
54583---------------------------------------------
54584
54585The GNU Objective-C runtime used to provide a different API, which we
54586call the "traditional" GNU Objective-C runtime API. Functions belonging
54587to this API are easy to recognize because they use a different naming
54588convention, such as 'class_get_super_class()' (traditional API) instead
54589of 'class_getSuperclass()' (modern API). Software using this API
54590includes the file 'objc/objc-api.h' where it is declared.
54591
54592 Starting with GCC 4.7.0, the traditional GNU runtime API is no longer
54593available.
54594
54595
54596File: gcc.info,  Node: Executing code before main,  Next: Type encoding,  Prev: GNU Objective-C runtime API,  Up: Objective-C
54597
545988.2 '+load': Executing Code before 'main'
54599=========================================
54600
54601This section is specific for the GNU Objective-C runtime.  If you are
54602using a different runtime, you can skip it.
54603
54604 The GNU Objective-C runtime provides a way that allows you to execute
54605code before the execution of the program enters the 'main' function.
54606The code is executed on a per-class and a per-category basis, through a
54607special class method '+load'.
54608
54609 This facility is very useful if you want to initialize global variables
54610which can be accessed by the program directly, without sending a message
54611to the class first.  The usual way to initialize global variables, in
54612the '+initialize' method, might not be useful because '+initialize' is
54613only called when the first message is sent to a class object, which in
54614some cases could be too late.
54615
54616 Suppose for example you have a 'FileStream' class that declares
54617'Stdin', 'Stdout' and 'Stderr' as global variables, like below:
54618
54619
54620     FileStream *Stdin = nil;
54621     FileStream *Stdout = nil;
54622     FileStream *Stderr = nil;
54623
54624     @implementation FileStream
54625
54626     + (void)initialize
54627     {
54628         Stdin = [[FileStream new] initWithFd:0];
54629         Stdout = [[FileStream new] initWithFd:1];
54630         Stderr = [[FileStream new] initWithFd:2];
54631     }
54632
54633     /* Other methods here */
54634     @end
54635
54636
54637 In this example, the initialization of 'Stdin', 'Stdout' and 'Stderr'
54638in '+initialize' occurs too late.  The programmer can send a message to
54639one of these objects before the variables are actually initialized, thus
54640sending messages to the 'nil' object.  The '+initialize' method which
54641actually initializes the global variables is not invoked until the first
54642message is sent to the class object.  The solution would require these
54643variables to be initialized just before entering 'main'.
54644
54645 The correct solution of the above problem is to use the '+load' method
54646instead of '+initialize':
54647
54648
54649     @implementation FileStream
54650
54651     + (void)load
54652     {
54653         Stdin = [[FileStream new] initWithFd:0];
54654         Stdout = [[FileStream new] initWithFd:1];
54655         Stderr = [[FileStream new] initWithFd:2];
54656     }
54657
54658     /* Other methods here */
54659     @end
54660
54661
54662 The '+load' is a method that is not overridden by categories.  If a
54663class and a category of it both implement '+load', both methods are
54664invoked.  This allows some additional initializations to be performed in
54665a category.
54666
54667 This mechanism is not intended to be a replacement for '+initialize'.
54668You should be aware of its limitations when you decide to use it instead
54669of '+initialize'.
54670
54671* Menu:
54672
54673* What you can and what you cannot do in +load::
54674
54675
54676File: gcc.info,  Node: What you can and what you cannot do in +load,  Up: Executing code before main
54677
546788.2.1 What You Can and Cannot Do in '+load'
54679-------------------------------------------
54680
54681'+load' is to be used only as a last resort.  Because it is executed
54682very early, most of the Objective-C runtime machinery will not be ready
54683when '+load' is executed; hence '+load' works best for executing C code
54684that is independent on the Objective-C runtime.
54685
54686 The '+load' implementation in the GNU runtime guarantees you the
54687following things:
54688
54689   * you can write whatever C code you like;
54690
54691   * you can allocate and send messages to objects whose class is
54692     implemented in the same file;
54693
54694   * the '+load' implementation of all super classes of a class are
54695     executed before the '+load' of that class is executed;
54696
54697   * the '+load' implementation of a class is executed before the
54698     '+load' implementation of any category.
54699
54700 In particular, the following things, even if they can work in a
54701particular case, are not guaranteed:
54702
54703   * allocation of or sending messages to arbitrary objects;
54704
54705   * allocation of or sending messages to objects whose classes have a
54706     category implemented in the same file;
54707
54708   * sending messages to Objective-C constant strings ('@"this is a
54709     constant string"');
54710
54711 You should make no assumptions about receiving '+load' in sibling
54712classes when you write '+load' of a class.  The order in which sibling
54713classes receive '+load' is not guaranteed.
54714
54715 The order in which '+load' and '+initialize' are called could be
54716problematic if this matters.  If you don't allocate objects inside
54717'+load', it is guaranteed that '+load' is called before '+initialize'.
54718If you create an object inside '+load' the '+initialize' method of
54719object's class is invoked even if '+load' was not invoked.  Note if you
54720explicitly call '+load' on a class, '+initialize' will be called first.
54721To avoid possible problems try to implement only one of these methods.
54722
54723 The '+load' method is also invoked when a bundle is dynamically loaded
54724into your running program.  This happens automatically without any
54725intervening operation from you.  When you write bundles and you need to
54726write '+load' you can safely create and send messages to objects whose
54727classes already exist in the running program.  The same restrictions as
54728above apply to classes defined in bundle.
54729
54730
54731File: gcc.info,  Node: Type encoding,  Next: Garbage Collection,  Prev: Executing code before main,  Up: Objective-C
54732
547338.3 Type Encoding
54734=================
54735
54736This is an advanced section.  Type encodings are used extensively by the
54737compiler and by the runtime, but you generally do not need to know about
54738them to use Objective-C.
54739
54740 The Objective-C compiler generates type encodings for all the types.
54741These type encodings are used at runtime to find out information about
54742selectors and methods and about objects and classes.
54743
54744 The types are encoded in the following way:
54745
54746'_Bool'            'B'
54747'char'             'c'
54748'unsigned char'    'C'
54749'short'            's'
54750'unsigned short'   'S'
54751'int'              'i'
54752'unsigned int'     'I'
54753'long'             'l'
54754'unsigned long'    'L'
54755'long long'        'q'
54756'unsigned long     'Q'
54757long'
54758'float'            'f'
54759'double'           'd'
54760'long double'      'D'
54761'void'             'v'
54762'id'               '@'
54763'Class'            '#'
54764'SEL'              ':'
54765'char*'            '*'
54766'enum'             an 'enum' is encoded exactly as the integer type
54767                   that the compiler uses for it, which depends on the
54768                   enumeration values.  Often the compiler users
54769                   'unsigned int', which is then encoded as 'I'.
54770unknown type       '?'
54771Complex types      'j' followed by the inner type.  For example
54772                   '_Complex double' is encoded as "jd".
54773bit-fields         'b' followed by the starting position of the
54774                   bit-field, the type of the bit-field and the size of
54775                   the bit-field (the bit-fields encoding was changed
54776                   from the NeXT's compiler encoding, see below)
54777
54778 The encoding of bit-fields has changed to allow bit-fields to be
54779properly handled by the runtime functions that compute sizes and
54780alignments of types that contain bit-fields.  The previous encoding
54781contained only the size of the bit-field.  Using only this information
54782it is not possible to reliably compute the size occupied by the
54783bit-field.  This is very important in the presence of the Boehm's
54784garbage collector because the objects are allocated using the typed
54785memory facility available in this collector.  The typed memory
54786allocation requires information about where the pointers are located
54787inside the object.
54788
54789 The position in the bit-field is the position, counting in bits, of the
54790bit closest to the beginning of the structure.
54791
54792 The non-atomic types are encoded as follows:
54793
54794pointers       '^' followed by the pointed type.
54795arrays         '[' followed by the number of elements in the array
54796               followed by the type of the elements followed by ']'
54797structures     '{' followed by the name of the structure (or '?' if the
54798               structure is unnamed), the '=' sign, the type of the
54799               members and by '}'
54800unions         '(' followed by the name of the structure (or '?' if the
54801               union is unnamed), the '=' sign, the type of the members
54802               followed by ')'
54803vectors        '![' followed by the vector_size (the number of bytes
54804               composing the vector) followed by a comma, followed by
54805               the alignment (in bytes) of the vector, followed by the
54806               type of the elements followed by ']'
54807
54808 Here are some types and their encodings, as they are generated by the
54809compiler on an i386 machine:
54810
54811
54812Objective-C type                            Compiler encoding
54813     int a[10];                             '[10i]'
54814     struct {                               '{?=i[3f]b128i3b131i2c}'
54815       int i;
54816       float f[3];
54817       int a:3;
54818       int b:2;
54819       char c;
54820     }
54821     int a __attribute__ ((vector_size (16)));'![16,16i]' (alignment
54822                                            depends on the machine)
54823
54824
54825 In addition to the types the compiler also encodes the type specifiers.
54826The table below describes the encoding of the current Objective-C type
54827specifiers:
54828
54829
54830Specifier          Encoding
54831'const'            'r'
54832'in'               'n'
54833'inout'            'N'
54834'out'              'o'
54835'bycopy'           'O'
54836'byref'            'R'
54837'oneway'           'V'
54838
54839
54840 The type specifiers are encoded just before the type.  Unlike types
54841however, the type specifiers are only encoded when they appear in method
54842argument types.
54843
54844 Note how 'const' interacts with pointers:
54845
54846
54847Objective-C type   Compiler encoding
54848     const int     'ri'
54849     const int*    '^ri'
54850     int *const    'r^i'
54851
54852
54853 'const int*' is a pointer to a 'const int', and so is encoded as '^ri'.
54854'int* const', instead, is a 'const' pointer to an 'int', and so is
54855encoded as 'r^i'.
54856
54857 Finally, there is a complication when encoding 'const char *' versus
54858'char * const'.  Because 'char *' is encoded as '*' and not as '^c',
54859there is no way to express the fact that 'r' applies to the pointer or
54860to the pointee.
54861
54862 Hence, it is assumed as a convention that 'r*' means 'const char *'
54863(since it is what is most often meant), and there is no way to encode
54864'char *const'.  'char *const' would simply be encoded as '*', and the
54865'const' is lost.
54866
54867* Menu:
54868
54869* Legacy type encoding::
54870* @encode::
54871* Method signatures::
54872
54873
54874File: gcc.info,  Node: Legacy type encoding,  Next: @encode,  Up: Type encoding
54875
548768.3.1 Legacy Type Encoding
54877--------------------------
54878
54879Unfortunately, historically GCC used to have a number of bugs in its
54880encoding code.  The NeXT runtime expects GCC to emit type encodings in
54881this historical format (compatible with GCC-3.3), so when using the NeXT
54882runtime, GCC will introduce on purpose a number of incorrect encodings:
54883
54884   * the read-only qualifier of the pointee gets emitted before the '^'.
54885     The read-only qualifier of the pointer itself gets ignored, unless
54886     it is a typedef.  Also, the 'r' is only emitted for the outermost
54887     type.
54888
54889   * 32-bit longs are encoded as 'l' or 'L', but not always.  For
54890     typedefs, the compiler uses 'i' or 'I' instead if encoding a struct
54891     field or a pointer.
54892
54893   * 'enum's are always encoded as 'i' (int) even if they are actually
54894     unsigned or long.
54895
54896 In addition to that, the NeXT runtime uses a different encoding for
54897bitfields.  It encodes them as 'b' followed by the size, without a bit
54898offset or the underlying field type.
54899
54900
54901File: gcc.info,  Node: @encode,  Next: Method signatures,  Prev: Legacy type encoding,  Up: Type encoding
54902
549038.3.2 '@encode'
54904---------------
54905
54906GNU Objective-C supports the '@encode' syntax that allows you to create
54907a type encoding from a C/Objective-C type.  For example, '@encode(int)'
54908is compiled by the compiler into '"i"'.
54909
54910 '@encode' does not support type qualifiers other than 'const'.  For
54911example, '@encode(const char*)' is valid and is compiled into '"r*"',
54912while '@encode(bycopy char *)' is invalid and will cause a compilation
54913error.
54914
54915
54916File: gcc.info,  Node: Method signatures,  Prev: @encode,  Up: Type encoding
54917
549188.3.3 Method Signatures
54919-----------------------
54920
54921This section documents the encoding of method types, which is rarely
54922needed to use Objective-C. You should skip it at a first reading; the
54923runtime provides functions that will work on methods and can walk
54924through the list of parameters and interpret them for you.  These
54925functions are part of the public "API" and are the preferred way to
54926interact with method signatures from user code.
54927
54928 But if you need to debug a problem with method signatures and need to
54929know how they are implemented (i.e., the "ABI"), read on.
54930
54931 Methods have their "signature" encoded and made available to the
54932runtime.  The "signature" encodes all the information required to
54933dynamically build invocations of the method at runtime: return type and
54934arguments.
54935
54936 The "signature" is a null-terminated string, composed of the following:
54937
54938   * The return type, including type qualifiers.  For example, a method
54939     returning 'int' would have 'i' here.
54940
54941   * The total size (in bytes) required to pass all the parameters.
54942     This includes the two hidden parameters (the object 'self' and the
54943     method selector '_cmd').
54944
54945   * Each argument, with the type encoding, followed by the offset (in
54946     bytes) of the argument in the list of parameters.
54947
54948 For example, a method with no arguments and returning 'int' would have
54949the signature 'i8@0:4' if the size of a pointer is 4.  The signature is
54950interpreted as follows: the 'i' is the return type (an 'int'), the '8'
54951is the total size of the parameters in bytes (two pointers each of size
549524), the '@0' is the first parameter (an object at byte offset '0') and
54953':4' is the second parameter (a 'SEL' at byte offset '4').
54954
54955 You can easily find more examples by running the "strings" program on
54956an Objective-C object file compiled by GCC. You'll see a lot of strings
54957that look very much like 'i8@0:4'.  They are signatures of Objective-C
54958methods.
54959
54960
54961File: gcc.info,  Node: Garbage Collection,  Next: Constant string objects,  Prev: Type encoding,  Up: Objective-C
54962
549638.4 Garbage Collection
54964======================
54965
54966This section is specific for the GNU Objective-C runtime.  If you are
54967using a different runtime, you can skip it.
54968
54969 Support for garbage collection with the GNU runtime has been added by
54970using a powerful conservative garbage collector, known as the
54971Boehm-Demers-Weiser conservative garbage collector.
54972
54973 To enable the support for it you have to configure the compiler using
54974an additional argument, '--enable-objc-gc'.  This will build the
54975boehm-gc library, and build an additional runtime library which has
54976several enhancements to support the garbage collector.  The new library
54977has a new name, 'libobjc_gc.a' to not conflict with the
54978non-garbage-collected library.
54979
54980 When the garbage collector is used, the objects are allocated using the
54981so-called typed memory allocation mechanism available in the
54982Boehm-Demers-Weiser collector.  This mode requires precise information
54983on where pointers are located inside objects.  This information is
54984computed once per class, immediately after the class has been
54985initialized.
54986
54987 There is a new runtime function 'class_ivar_set_gcinvisible()' which
54988can be used to declare a so-called "weak pointer" reference.  Such a
54989pointer is basically hidden for the garbage collector; this can be
54990useful in certain situations, especially when you want to keep track of
54991the allocated objects, yet allow them to be collected.  This kind of
54992pointers can only be members of objects, you cannot declare a global
54993pointer as a weak reference.  Every type which is a pointer type can be
54994declared a weak pointer, including 'id', 'Class' and 'SEL'.
54995
54996 Here is an example of how to use this feature.  Suppose you want to
54997implement a class whose instances hold a weak pointer reference; the
54998following class does this:
54999
55000
55001     @interface WeakPointer : Object
55002     {
55003         const void* weakPointer;
55004     }
55005
55006     - initWithPointer:(const void*)p;
55007     - (const void*)weakPointer;
55008     @end
55009
55010
55011     @implementation WeakPointer
55012
55013     + (void)initialize
55014     {
55015       if (self == objc_lookUpClass ("WeakPointer"))
55016         class_ivar_set_gcinvisible (self, "weakPointer", YES);
55017     }
55018
55019     - initWithPointer:(const void*)p
55020     {
55021       weakPointer = p;
55022       return self;
55023     }
55024
55025     - (const void*)weakPointer
55026     {
55027       return weakPointer;
55028     }
55029
55030     @end
55031
55032
55033 Weak pointers are supported through a new type character specifier
55034represented by the '!' character.  The 'class_ivar_set_gcinvisible()'
55035function adds or removes this specifier to the string type description
55036of the instance variable named as argument.
55037
55038
55039File: gcc.info,  Node: Constant string objects,  Next: compatibility_alias,  Prev: Garbage Collection,  Up: Objective-C
55040
550418.5 Constant String Objects
55042===========================
55043
55044GNU Objective-C provides constant string objects that are generated
55045directly by the compiler.  You declare a constant string object by
55046prefixing a C constant string with the character '@':
55047
55048       id myString = @"this is a constant string object";
55049
55050 The constant string objects are by default instances of the
55051'NXConstantString' class which is provided by the GNU Objective-C
55052runtime.  To get the definition of this class you must include the
55053'objc/NXConstStr.h' header file.
55054
55055 User defined libraries may want to implement their own constant string
55056class.  To be able to support them, the GNU Objective-C compiler
55057provides a new command line options
55058'-fconstant-string-class=CLASS-NAME'.  The provided class should adhere
55059to a strict structure, the same as 'NXConstantString''s structure:
55060
55061
55062     @interface MyConstantStringClass
55063     {
55064       Class isa;
55065       char *c_string;
55066       unsigned int len;
55067     }
55068     @end
55069
55070
55071 'NXConstantString' inherits from 'Object'; user class libraries may
55072choose to inherit the customized constant string class from a different
55073class than 'Object'.  There is no requirement in the methods the
55074constant string class has to implement, but the final ivar layout of the
55075class must be the compatible with the given structure.
55076
55077 When the compiler creates the statically allocated constant string
55078object, the 'c_string' field will be filled by the compiler with the
55079string; the 'length' field will be filled by the compiler with the
55080string length; the 'isa' pointer will be filled with 'NULL' by the
55081compiler, and it will later be fixed up automatically at runtime by the
55082GNU Objective-C runtime library to point to the class which was set by
55083the '-fconstant-string-class' option when the object file is loaded (if
55084you wonder how it works behind the scenes, the name of the class to use,
55085and the list of static objects to fixup, are stored by the compiler in
55086the object file in a place where the GNU runtime library will find them
55087at runtime).
55088
55089 As a result, when a file is compiled with the '-fconstant-string-class'
55090option, all the constant string objects will be instances of the class
55091specified as argument to this option.  It is possible to have multiple
55092compilation units referring to different constant string classes,
55093neither the compiler nor the linker impose any restrictions in doing
55094this.
55095
55096
55097File: gcc.info,  Node: compatibility_alias,  Next: Exceptions,  Prev: Constant string objects,  Up: Objective-C
55098
550998.6 'compatibility_alias'
55100=========================
55101
55102The keyword '@compatibility_alias' allows you to define a class name as
55103equivalent to another class name.  For example:
55104
55105     @compatibility_alias WOApplication GSWApplication;
55106
55107 tells the compiler that each time it encounters 'WOApplication' as a
55108class name, it should replace it with 'GSWApplication' (that is,
55109'WOApplication' is just an alias for 'GSWApplication').
55110
55111 There are some constraints on how this can be used--
55112
55113   * 'WOApplication' (the alias) must not be an existing class;
55114
55115   * 'GSWApplication' (the real class) must be an existing class.
55116
55117
55118File: gcc.info,  Node: Exceptions,  Next: Synchronization,  Prev: compatibility_alias,  Up: Objective-C
55119
551208.7 Exceptions
55121==============
55122
55123GNU Objective-C provides exception support built into the language, as
55124in the following example:
55125
55126       @try {
55127         ...
55128            @throw expr;
55129         ...
55130       }
55131       @catch (AnObjCClass *exc) {
55132         ...
55133           @throw expr;
55134         ...
55135           @throw;
55136         ...
55137       }
55138       @catch (AnotherClass *exc) {
55139         ...
55140       }
55141       @catch (id allOthers) {
55142         ...
55143       }
55144       @finally {
55145         ...
55146           @throw expr;
55147         ...
55148       }
55149
55150 The '@throw' statement may appear anywhere in an Objective-C or
55151Objective-C++ program; when used inside of a '@catch' block, the
55152'@throw' may appear without an argument (as shown above), in which case
55153the object caught by the '@catch' will be rethrown.
55154
55155 Note that only (pointers to) Objective-C objects may be thrown and
55156caught using this scheme.  When an object is thrown, it will be caught
55157by the nearest '@catch' clause capable of handling objects of that type,
55158analogously to how 'catch' blocks work in C++ and Java.  A '@catch(id
55159...)' clause (as shown above) may also be provided to catch any and all
55160Objective-C exceptions not caught by previous '@catch' clauses (if any).
55161
55162 The '@finally' clause, if present, will be executed upon exit from the
55163immediately preceding '@try ... @catch' section.  This will happen
55164regardless of whether any exceptions are thrown, caught or rethrown
55165inside the '@try ... @catch' section, analogously to the behavior of the
55166'finally' clause in Java.
55167
55168 There are several caveats to using the new exception mechanism:
55169
55170   * The '-fobjc-exceptions' command line option must be used when
55171     compiling Objective-C files that use exceptions.
55172
55173   * With the GNU runtime, exceptions are always implemented as "native"
55174     exceptions and it is recommended that the '-fexceptions' and
55175     '-shared-libgcc' options are used when linking.
55176
55177   * With the NeXT runtime, although currently designed to be binary
55178     compatible with 'NS_HANDLER'-style idioms provided by the
55179     'NSException' class, the new exceptions can only be used on Mac OS
55180     X 10.3 (Panther) and later systems, due to additional functionality
55181     needed in the NeXT Objective-C runtime.
55182
55183   * As mentioned above, the new exceptions do not support handling
55184     types other than Objective-C objects.  Furthermore, when used from
55185     Objective-C++, the Objective-C exception model does not
55186     interoperate with C++ exceptions at this time.  This means you
55187     cannot '@throw' an exception from Objective-C and 'catch' it in
55188     C++, or vice versa (i.e., 'throw ... @catch').
55189
55190
55191File: gcc.info,  Node: Synchronization,  Next: Fast enumeration,  Prev: Exceptions,  Up: Objective-C
55192
551938.8 Synchronization
55194===================
55195
55196GNU Objective-C provides support for synchronized blocks:
55197
55198       @synchronized (ObjCClass *guard) {
55199         ...
55200       }
55201
55202 Upon entering the '@synchronized' block, a thread of execution shall
55203first check whether a lock has been placed on the corresponding 'guard'
55204object by another thread.  If it has, the current thread shall wait
55205until the other thread relinquishes its lock.  Once 'guard' becomes
55206available, the current thread will place its own lock on it, execute the
55207code contained in the '@synchronized' block, and finally relinquish the
55208lock (thereby making 'guard' available to other threads).
55209
55210 Unlike Java, Objective-C does not allow for entire methods to be marked
55211'@synchronized'.  Note that throwing exceptions out of '@synchronized'
55212blocks is allowed, and will cause the guarding object to be unlocked
55213properly.
55214
55215 Because of the interactions between synchronization and exception
55216handling, you can only use '@synchronized' when compiling with
55217exceptions enabled, that is with the command line option
55218'-fobjc-exceptions'.
55219
55220
55221File: gcc.info,  Node: Fast enumeration,  Next: Messaging with the GNU Objective-C runtime,  Prev: Synchronization,  Up: Objective-C
55222
552238.9 Fast Enumeration
55224====================
55225
55226* Menu:
55227
55228* Using fast enumeration::
55229* c99-like fast enumeration syntax::
55230* Fast enumeration details::
55231* Fast enumeration protocol::
55232
55233
55234File: gcc.info,  Node: Using fast enumeration,  Next: c99-like fast enumeration syntax,  Up: Fast enumeration
55235
552368.9.1 Using Fast Enumeration
55237----------------------------
55238
55239GNU Objective-C provides support for the fast enumeration syntax:
55240
55241       id array = ...;
55242       id object;
55243
55244       for (object in array)
55245       {
55246         /* Do something with 'object' */
55247       }
55248
55249 'array' needs to be an Objective-C object (usually a collection object,
55250for example an array, a dictionary or a set) which implements the "Fast
55251Enumeration Protocol" (see below).  If you are using a Foundation
55252library such as GNUstep Base or Apple Cocoa Foundation, all collection
55253objects in the library implement this protocol and can be used in this
55254way.
55255
55256 The code above would iterate over all objects in 'array'.  For each of
55257them, it assigns it to 'object', then executes the 'Do something with
55258'object'' statements.
55259
55260 Here is a fully worked-out example using a Foundation library (which
55261provides the implementation of 'NSArray', 'NSString' and 'NSLog'):
55262
55263       NSArray *array = [NSArray arrayWithObjects: @"1", @"2", @"3", nil];
55264       NSString *object;
55265
55266       for (object in array)
55267         NSLog (@"Iterating over %@", object);
55268
55269
55270File: gcc.info,  Node: c99-like fast enumeration syntax,  Next: Fast enumeration details,  Prev: Using fast enumeration,  Up: Fast enumeration
55271
552728.9.2 C99-Like Fast Enumeration Syntax
55273--------------------------------------
55274
55275A c99-like declaration syntax is also allowed:
55276
55277       id array = ...;
55278
55279       for (id object in array)
55280       {
55281         /* Do something with 'object'  */
55282       }
55283
55284 this is completely equivalent to:
55285
55286       id array = ...;
55287
55288       {
55289         id object;
55290         for (object in array)
55291         {
55292           /* Do something with 'object'  */
55293         }
55294       }
55295
55296 but can save some typing.
55297
55298 Note that the option '-std=c99' is not required to allow this syntax in
55299Objective-C.
55300
55301
55302File: gcc.info,  Node: Fast enumeration details,  Next: Fast enumeration protocol,  Prev: c99-like fast enumeration syntax,  Up: Fast enumeration
55303
553048.9.3 Fast Enumeration Details
55305------------------------------
55306
55307Here is a more technical description with the gory details.  Consider
55308the code
55309
55310       for (OBJECT EXPRESSION in COLLECTION EXPRESSION)
55311       {
55312         STATEMENTS
55313       }
55314
55315 here is what happens when you run it:
55316
55317   * 'COLLECTION EXPRESSION' is evaluated exactly once and the result is
55318     used as the collection object to iterate over.  This means it is
55319     safe to write code such as 'for (object in [NSDictionary
55320     keyEnumerator]) ...'.
55321
55322   * the iteration is implemented by the compiler by repeatedly getting
55323     batches of objects from the collection object using the fast
55324     enumeration protocol (see below), then iterating over all objects
55325     in the batch.  This is faster than a normal enumeration where
55326     objects are retrieved one by one (hence the name "fast
55327     enumeration").
55328
55329   * if there are no objects in the collection, then 'OBJECT EXPRESSION'
55330     is set to 'nil' and the loop immediately terminates.
55331
55332   * if there are objects in the collection, then for each object in the
55333     collection (in the order they are returned) 'OBJECT EXPRESSION' is
55334     set to the object, then 'STATEMENTS' are executed.
55335
55336   * 'STATEMENTS' can contain 'break' and 'continue' commands, which
55337     will abort the iteration or skip to the next loop iteration as
55338     expected.
55339
55340   * when the iteration ends because there are no more objects to
55341     iterate over, 'OBJECT EXPRESSION' is set to 'nil'.  This allows you
55342     to determine whether the iteration finished because a 'break'
55343     command was used (in which case 'OBJECT EXPRESSION' will remain set
55344     to the last object that was iterated over) or because it iterated
55345     over all the objects (in which case 'OBJECT EXPRESSION' will be set
55346     to 'nil').
55347
55348   * 'STATEMENTS' must not make any changes to the collection object; if
55349     they do, it is a hard error and the fast enumeration terminates by
55350     invoking 'objc_enumerationMutation', a runtime function that
55351     normally aborts the program but which can be customized by
55352     Foundation libraries via 'objc_set_mutation_handler' to do
55353     something different, such as raising an exception.
55354
55355
55356File: gcc.info,  Node: Fast enumeration protocol,  Prev: Fast enumeration details,  Up: Fast enumeration
55357
553588.9.4 Fast Enumeration Protocol
55359-------------------------------
55360
55361If you want your own collection object to be usable with fast
55362enumeration, you need to have it implement the method
55363
55364     - (unsigned long) countByEnumeratingWithState: (NSFastEnumerationState *)state
55365                                           objects: (id *)objects
55366                                             count: (unsigned long)len;
55367
55368 where 'NSFastEnumerationState' must be defined in your code as follows:
55369
55370     typedef struct
55371     {
55372       unsigned long state;
55373       id            *itemsPtr;
55374       unsigned long *mutationsPtr;
55375       unsigned long extra[5];
55376     } NSFastEnumerationState;
55377
55378 If no 'NSFastEnumerationState' is defined in your code, the compiler
55379will automatically replace 'NSFastEnumerationState *' with 'struct
55380__objcFastEnumerationState *', where that type is silently defined by
55381the compiler in an identical way.  This can be confusing and we
55382recommend that you define 'NSFastEnumerationState' (as shown above)
55383instead.
55384
55385 The method is called repeatedly during a fast enumeration to retrieve
55386batches of objects.  Each invocation of the method should retrieve the
55387next batch of objects.
55388
55389 The return value of the method is the number of objects in the current
55390batch; this should not exceed 'len', which is the maximum size of a
55391batch as requested by the caller.  The batch itself is returned in the
55392'itemsPtr' field of the 'NSFastEnumerationState' struct.
55393
55394 To help with returning the objects, the 'objects' array is a C array
55395preallocated by the caller (on the stack) of size 'len'.  In many cases
55396you can put the objects you want to return in that 'objects' array, then
55397do 'itemsPtr = objects'.  But you don't have to; if your collection
55398already has the objects to return in some form of C array, it could
55399return them from there instead.
55400
55401 The 'state' and 'extra' fields of the 'NSFastEnumerationState'
55402structure allows your collection object to keep track of the state of
55403the enumeration.  In a simple array implementation, 'state' may keep
55404track of the index of the last object that was returned, and 'extra' may
55405be unused.
55406
55407 The 'mutationsPtr' field of the 'NSFastEnumerationState' is used to
55408keep track of mutations.  It should point to a number; before working on
55409each object, the fast enumeration loop will check that this number has
55410not changed.  If it has, a mutation has happened and the fast
55411enumeration will abort.  So, 'mutationsPtr' could be set to point to
55412some sort of version number of your collection, which is increased by
55413one every time there is a change (for example when an object is added or
55414removed).  Or, if you are content with less strict mutation checks, it
55415could point to the number of objects in your collection or some other
55416value that can be checked to perform an approximate check that the
55417collection has not been mutated.
55418
55419 Finally, note how we declared the 'len' argument and the return value
55420to be of type 'unsigned long'.  They could also be declared to be of
55421type 'unsigned int' and everything would still work.
55422
55423
55424File: gcc.info,  Node: Messaging with the GNU Objective-C runtime,  Prev: Fast enumeration,  Up: Objective-C
55425
554268.10 Messaging with the GNU Objective-C Runtime
55427===============================================
55428
55429This section is specific for the GNU Objective-C runtime.  If you are
55430using a different runtime, you can skip it.
55431
55432 The implementation of messaging in the GNU Objective-C runtime is
55433designed to be portable, and so is based on standard C.
55434
55435 Sending a message in the GNU Objective-C runtime is composed of two
55436separate steps.  First, there is a call to the lookup function,
55437'objc_msg_lookup ()' (or, in the case of messages to super,
55438'objc_msg_lookup_super ()').  This runtime function takes as argument
55439the receiver and the selector of the method to be called; it returns the
55440'IMP', that is a pointer to the function implementing the method.  The
55441second step of method invocation consists of casting this pointer
55442function to the appropriate function pointer type, and calling the
55443function pointed to it with the right arguments.
55444
55445 For example, when the compiler encounters a method invocation such as
55446'[object init]', it compiles it into a call to 'objc_msg_lookup (object,
55447@selector(init))' followed by a cast of the returned value to the
55448appropriate function pointer type, and then it calls it.
55449
55450* Menu:
55451
55452* Dynamically registering methods::
55453* Forwarding hook::
55454
55455
55456File: gcc.info,  Node: Dynamically registering methods,  Next: Forwarding hook,  Up: Messaging with the GNU Objective-C runtime
55457
554588.10.1 Dynamically Registering Methods
55459--------------------------------------
55460
55461If 'objc_msg_lookup()' does not find a suitable method implementation,
55462because the receiver does not implement the required method, it tries to
55463see if the class can dynamically register the method.
55464
55465 To do so, the runtime checks if the class of the receiver implements
55466the method
55467
55468     + (BOOL) resolveInstanceMethod: (SEL)selector;
55469
55470 in the case of an instance method, or
55471
55472     + (BOOL) resolveClassMethod: (SEL)selector;
55473
55474 in the case of a class method.  If the class implements it, the runtime
55475invokes it, passing as argument the selector of the original method, and
55476if it returns 'YES', the runtime tries the lookup again, which could now
55477succeed if a matching method was added dynamically by
55478'+resolveInstanceMethod:' or '+resolveClassMethod:'.
55479
55480 This allows classes to dynamically register methods (by adding them to
55481the class using 'class_addMethod') when they are first called.  To do
55482so, a class should implement '+resolveInstanceMethod:' (or, depending on
55483the case, '+resolveClassMethod:') and have it recognize the selectors of
55484methods that can be registered dynamically at runtime, register them,
55485and return 'YES'.  It should return 'NO' for methods that it does not
55486dynamically registered at runtime.
55487
55488 If '+resolveInstanceMethod:' (or '+resolveClassMethod:') is not
55489implemented or returns 'NO', the runtime then tries the forwarding hook.
55490
55491 Support for '+resolveInstanceMethod:' and 'resolveClassMethod:' was
55492added to the GNU Objective-C runtime in GCC version 4.6.
55493
55494
55495File: gcc.info,  Node: Forwarding hook,  Prev: Dynamically registering methods,  Up: Messaging with the GNU Objective-C runtime
55496
554978.10.2 Forwarding Hook
55498----------------------
55499
55500The GNU Objective-C runtime provides a hook, called
55501'__objc_msg_forward2', which is called by 'objc_msg_lookup()' when it
55502cannot find a method implementation in the runtime tables and after
55503calling '+resolveInstanceMethod:' and '+resolveClassMethod:' has been
55504attempted and did not succeed in dynamically registering the method.
55505
55506 To configure the hook, you set the global variable
55507'__objc_msg_forward2' to a function with the same argument and return
55508types of 'objc_msg_lookup()'.  When 'objc_msg_lookup()' cannot find a
55509method implementation, it invokes the hook function you provided to get
55510a method implementation to return.  So, in practice
55511'__objc_msg_forward2' allows you to extend 'objc_msg_lookup()' by adding
55512some custom code that is called to do a further lookup when no standard
55513method implementation can be found using the normal lookup.
55514
55515 This hook is generally reserved for "Foundation" libraries such as
55516GNUstep Base, which use it to implement their high-level method
55517forwarding API, typically based around the 'forwardInvocation:' method.
55518So, unless you are implementing your own "Foundation" library, you
55519should not set this hook.
55520
55521 In a typical forwarding implementation, the '__objc_msg_forward2' hook
55522function determines the argument and return type of the method that is
55523being looked up, and then creates a function that takes these arguments
55524and has that return type, and returns it to the caller.  Creating this
55525function is non-trivial and is typically performed using a dedicated
55526library such as 'libffi'.
55527
55528 The forwarding method implementation thus created is returned by
55529'objc_msg_lookup()' and is executed as if it was a normal method
55530implementation.  When the forwarding method implementation is called, it
55531is usually expected to pack all arguments into some sort of object
55532(typically, an 'NSInvocation' in a "Foundation" library), and hand it
55533over to the programmer ('forwardInvocation:') who is then allowed to
55534manipulate the method invocation using a high-level API provided by the
55535"Foundation" library.  For example, the programmer may want to examine
55536the method invocation arguments and name and potentially change them
55537before forwarding the method invocation to one or more local objects
55538('performInvocation:') or even to remote objects (by using Distributed
55539Objects or some other mechanism).  When all this completes, the return
55540value is passed back and must be returned correctly to the original
55541caller.
55542
55543 Note that the GNU Objective-C runtime currently provides no support for
55544method forwarding or method invocations other than the
55545'__objc_msg_forward2' hook.
55546
55547 If the forwarding hook does not exist or returns 'NULL', the runtime
55548currently attempts forwarding using an older, deprecated API, and if
55549that fails, it aborts the program.  In future versions of the GNU
55550Objective-C runtime, the runtime will immediately abort.
55551
55552
55553File: gcc.info,  Node: Compatibility,  Next: Gcov,  Prev: Objective-C,  Up: Top
55554
555559 Binary Compatibility
55556**********************
55557
55558Binary compatibility encompasses several related concepts:
55559
55560"application binary interface (ABI)"
55561     The set of runtime conventions followed by all of the tools that
55562     deal with binary representations of a program, including compilers,
55563     assemblers, linkers, and language runtime support.  Some ABIs are
55564     formal with a written specification, possibly designed by multiple
55565     interested parties.  Others are simply the way things are actually
55566     done by a particular set of tools.
55567
55568"ABI conformance"
55569     A compiler conforms to an ABI if it generates code that follows all
55570     of the specifications enumerated by that ABI.  A library conforms
55571     to an ABI if it is implemented according to that ABI.  An
55572     application conforms to an ABI if it is built using tools that
55573     conform to that ABI and does not contain source code that
55574     specifically changes behavior specified by the ABI.
55575
55576"calling conventions"
55577     Calling conventions are a subset of an ABI that specify of how
55578     arguments are passed and function results are returned.
55579
55580"interoperability"
55581     Different sets of tools are interoperable if they generate files
55582     that can be used in the same program.  The set of tools includes
55583     compilers, assemblers, linkers, libraries, header files, startup
55584     files, and debuggers.  Binaries produced by different sets of tools
55585     are not interoperable unless they implement the same ABI.  This
55586     applies to different versions of the same tools as well as tools
55587     from different vendors.
55588
55589"intercallability"
55590     Whether a function in a binary built by one set of tools can call a
55591     function in a binary built by a different set of tools is a subset
55592     of interoperability.
55593
55594"implementation-defined features"
55595     Language standards include lists of implementation-defined features
55596     whose behavior can vary from one implementation to another.  Some
55597     of these features are normally covered by a platform's ABI and
55598     others are not.  The features that are not covered by an ABI
55599     generally affect how a program behaves, but not intercallability.
55600
55601"compatibility"
55602     Conformance to the same ABI and the same behavior of
55603     implementation-defined features are both relevant for
55604     compatibility.
55605
55606 The application binary interface implemented by a C or C++ compiler
55607affects code generation and runtime support for:
55608
55609   * size and alignment of data types
55610   * layout of structured types
55611   * calling conventions
55612   * register usage conventions
55613   * interfaces for runtime arithmetic support
55614   * object file formats
55615
55616 In addition, the application binary interface implemented by a C++
55617compiler affects code generation and runtime support for:
55618   * name mangling
55619   * exception handling
55620   * invoking constructors and destructors
55621   * layout, alignment, and padding of classes
55622   * layout and alignment of virtual tables
55623
55624 Some GCC compilation options cause the compiler to generate code that
55625does not conform to the platform's default ABI.  Other options cause
55626different program behavior for implementation-defined features that are
55627not covered by an ABI.  These options are provided for consistency with
55628other compilers that do not follow the platform's default ABI or the
55629usual behavior of implementation-defined features for the platform.  Be
55630very careful about using such options.
55631
55632 Most platforms have a well-defined ABI that covers C code, but ABIs
55633that cover C++ functionality are not yet common.
55634
55635 Starting with GCC 3.2, GCC binary conventions for C++ are based on a
55636written, vendor-neutral C++ ABI that was designed to be specific to
5563764-bit Itanium but also includes generic specifications that apply to
55638any platform.  This C++ ABI is also implemented by other compiler
55639vendors on some platforms, notably GNU/Linux and BSD systems.  We have
55640tried hard to provide a stable ABI that will be compatible with future
55641GCC releases, but it is possible that we will encounter problems that
55642make this difficult.  Such problems could include different
55643interpretations of the C++ ABI by different vendors, bugs in the ABI, or
55644bugs in the implementation of the ABI in different compilers.  GCC's
55645'-Wabi' switch warns when G++ generates code that is probably not
55646compatible with the C++ ABI.
55647
55648 The C++ library used with a C++ compiler includes the Standard C++
55649Library, with functionality defined in the C++ Standard, plus language
55650runtime support.  The runtime support is included in a C++ ABI, but
55651there is no formal ABI for the Standard C++ Library.  Two
55652implementations of that library are interoperable if one follows the
55653de-facto ABI of the other and if they are both built with the same
55654compiler, or with compilers that conform to the same ABI for C++
55655compiler and runtime support.
55656
55657 When G++ and another C++ compiler conform to the same C++ ABI, but the
55658implementations of the Standard C++ Library that they normally use do
55659not follow the same ABI for the Standard C++ Library, object files built
55660with those compilers can be used in the same program only if they use
55661the same C++ library.  This requires specifying the location of the C++
55662library header files when invoking the compiler whose usual library is
55663not being used.  The location of GCC's C++ header files depends on how
55664the GCC build was configured, but can be seen by using the G++ '-v'
55665option.  With default configuration options for G++ 3.3 the compile line
55666for a different C++ compiler needs to include
55667
55668         -IGCC_INSTALL_DIRECTORY/include/c++/3.3
55669
55670 Similarly, compiling code with G++ that must use a C++ library other
55671than the GNU C++ library requires specifying the location of the header
55672files for that other library.
55673
55674 The most straightforward way to link a program to use a particular C++
55675library is to use a C++ driver that specifies that C++ library by
55676default.  The 'g++' driver, for example, tells the linker where to find
55677GCC's C++ library ('libstdc++') plus the other libraries and startup
55678files it needs, in the proper order.
55679
55680 If a program must use a different C++ library and it's not possible to
55681do the final link using a C++ driver that uses that library by default,
55682it is necessary to tell 'g++' the location and name of that library.  It
55683might also be necessary to specify different startup files and other
55684runtime support libraries, and to suppress the use of GCC's support
55685libraries with one or more of the options '-nostdlib', '-nostartfiles',
55686and '-nodefaultlibs'.
55687
55688
55689File: gcc.info,  Node: Gcov,  Next: Gcov-tool,  Prev: Compatibility,  Up: Top
55690
5569110 'gcov'--a Test Coverage Program
55692**********************************
55693
55694'gcov' is a tool you can use in conjunction with GCC to test code
55695coverage in your programs.
55696
55697* Menu:
55698
55699* Gcov Intro::                  Introduction to gcov.
55700* Invoking Gcov::               How to use gcov.
55701* Gcov and Optimization::       Using gcov with GCC optimization.
55702* Gcov Data Files::             The files used by gcov.
55703* Cross-profiling::             Data file relocation.
55704
55705
55706File: gcc.info,  Node: Gcov Intro,  Next: Invoking Gcov,  Up: Gcov
55707
5570810.1 Introduction to 'gcov'
55709===========================
55710
55711'gcov' is a test coverage program.  Use it in concert with GCC to
55712analyze your programs to help create more efficient, faster running code
55713and to discover untested parts of your program.  You can use 'gcov' as a
55714profiling tool to help discover where your optimization efforts will
55715best affect your code.  You can also use 'gcov' along with the other
55716profiling tool, 'gprof', to assess which parts of your code use the
55717greatest amount of computing time.
55718
55719 Profiling tools help you analyze your code's performance.  Using a
55720profiler such as 'gcov' or 'gprof', you can find out some basic
55721performance statistics, such as:
55722
55723   * how often each line of code executes
55724
55725   * what lines of code are actually executed
55726
55727   * how much computing time each section of code uses
55728
55729 Once you know these things about how your code works when compiled, you
55730can look at each module to see which modules should be optimized.
55731'gcov' helps you determine where to work on optimization.
55732
55733 Software developers also use coverage testing in concert with
55734testsuites, to make sure software is actually good enough for a release.
55735Testsuites can verify that a program works as expected; a coverage
55736program tests to see how much of the program is exercised by the
55737testsuite.  Developers can then determine what kinds of test cases need
55738to be added to the testsuites to create both better testing and a better
55739final product.
55740
55741 You should compile your code without optimization if you plan to use
55742'gcov' because the optimization, by combining some lines of code into
55743one function, may not give you as much information as you need to look
55744for 'hot spots' where the code is using a great deal of computer time.
55745Likewise, because 'gcov' accumulates statistics by line (at the lowest
55746resolution), it works best with a programming style that places only one
55747statement on each line.  If you use complicated macros that expand to
55748loops or to other control structures, the statistics are less
55749helpful--they only report on the line where the macro call appears.  If
55750your complex macros behave like functions, you can replace them with
55751inline functions to solve this problem.
55752
55753 'gcov' creates a logfile called 'SOURCEFILE.gcov' which indicates how
55754many times each line of a source file 'SOURCEFILE.c' has executed.  You
55755can use these logfiles along with 'gprof' to aid in fine-tuning the
55756performance of your programs.  'gprof' gives timing information you can
55757use along with the information you get from 'gcov'.
55758
55759 'gcov' works only on code compiled with GCC.  It is not compatible with
55760any other profiling or test coverage mechanism.
55761
55762
55763File: gcc.info,  Node: Invoking Gcov,  Next: Gcov and Optimization,  Prev: Gcov Intro,  Up: Gcov
55764
5576510.2 Invoking 'gcov'
55766====================
55767
55768     gcov [OPTIONS] FILES
55769
55770 'gcov' accepts the following options:
55771
55772'-a'
55773'--all-blocks'
55774     Write individual execution counts for every basic block.  Normally
55775     gcov outputs execution counts only for the main blocks of a line.
55776     With this option you can determine if blocks within a single line
55777     are not being executed.
55778
55779'-b'
55780'--branch-probabilities'
55781     Write branch frequencies to the output file, and write branch
55782     summary info to the standard output.  This option allows you to see
55783     how often each branch in your program was taken.  Unconditional
55784     branches will not be shown, unless the '-u' option is given.
55785
55786'-c'
55787'--branch-counts'
55788     Write branch frequencies as the number of branches taken, rather
55789     than the percentage of branches taken.
55790
55791'-d'
55792'--display-progress'
55793     Display the progress on the standard output.
55794
55795'-f'
55796'--function-summaries'
55797     Output summaries for each function in addition to the file level
55798     summary.
55799
55800'-h'
55801'--help'
55802     Display help about using 'gcov' (on the standard output), and exit
55803     without doing any further processing.
55804
55805'-i'
55806'--json-format'
55807     Output gcov file in an easy-to-parse JSON intermediate format which
55808     does not require source code for generation.  The JSON file is
55809     compressed with gzip compression algorithm and the files have
55810     '.gcov.json.gz' extension.
55811
55812     Structure of the JSON is following:
55813
55814          {
55815            "current_working_directory": CURRENT_WORKING_DIRECTORY,
55816            "data_file": DATA_FILE,
55817            "format_version": FORMAT_VERSION,
55818            "gcc_version": GCC_VERSION
55819            "files": [FILE]
55820          }
55821
55822     Fields of the root element have following semantics:
55823
55824        * CURRENT_WORKING_DIRECTORY: working directory where a
55825          compilation unit was compiled
55826
55827        * DATA_FILE: name of the data file (GCDA)
55828
55829        * FORMAT_VERSION: semantic version of the format
55830
55831        * GCC_VERSION: version of the GCC compiler
55832
55833     Each FILE has the following form:
55834
55835          {
55836            "file": FILE_NAME,
55837            "functions": [FUNCTION],
55838            "lines": [LINE]
55839          }
55840
55841     Fields of the FILE element have following semantics:
55842
55843        * FILE_NAME: name of the source file
55844
55845     Each FUNCTION has the following form:
55846
55847          {
55848            "blocks": BLOCKS,
55849            "blocks_executed": BLOCKS_EXECUTED,
55850            "demangled_name": "DEMANGLED_NAME,
55851            "end_column": END_COLUMN,
55852            "end_line": END_LINE,
55853            "execution_count": EXECUTION_COUNT,
55854            "name": NAME,
55855            "start_column": START_COLUMN
55856            "start_line": START_LINE
55857          }
55858
55859     Fields of the FUNCTION element have following semantics:
55860
55861        * BLOCKS: number of blocks that are in the function
55862
55863        * BLOCKS_EXECUTED: number of executed blocks of the function
55864
55865        * DEMANGLED_NAME: demangled name of the function
55866
55867        * END_COLUMN: column in the source file where the function ends
55868
55869        * END_LINE: line in the source file where the function ends
55870
55871        * EXECUTION_COUNT: number of executions of the function
55872
55873        * NAME: name of the function
55874
55875        * START_COLUMN: column in the source file where the function
55876          begins
55877
55878        * START_LINE: line in the source file where the function begins
55879
55880     Note that line numbers and column numbers number from 1.  In the
55881     current implementation, START_LINE and START_COLUMN do not include
55882     any template parameters and the leading return type but that this
55883     is likely to be fixed in the future.
55884
55885     Each LINE has the following form:
55886
55887          {
55888            "branches": [BRANCH],
55889            "count": COUNT,
55890            "line_number": LINE_NUMBER,
55891            "unexecuted_block": UNEXECUTED_BLOCK
55892            "function_name": FUNCTION_NAME,
55893          }
55894
55895     Branches are present only with -B option.  Fields of the LINE
55896     element have following semantics:
55897
55898        * COUNT: number of executions of the line
55899
55900        * LINE_NUMBER: line number
55901
55902        * UNEXECUTED_BLOCK: flag whether the line contains an unexecuted
55903          block (not all statements on the line are executed)
55904
55905        * FUNCTION_NAME: a name of a function this LINE belongs to (for
55906          a line with an inlined statements can be not set)
55907
55908     Each BRANCH has the following form:
55909
55910          {
55911            "count": COUNT,
55912            "fallthrough": FALLTHROUGH,
55913            "throw": THROW
55914          }
55915
55916     Fields of the BRANCH element have following semantics:
55917
55918        * COUNT: number of executions of the branch
55919
55920        * FALLTHROUGH: true when the branch is a fall through branch
55921
55922        * THROW: true when the branch is an exceptional branch
55923
55924'-j'
55925'--human-readable'
55926     Write counts in human readable format (like 24.6k).
55927
55928'-k'
55929'--use-colors'
55930
55931     Use colors for lines of code that have zero coverage.  We use red
55932     color for non-exceptional lines and cyan for exceptional.  Same
55933     colors are used for basic blocks with '-a' option.
55934
55935'-l'
55936'--long-file-names'
55937     Create long file names for included source files.  For example, if
55938     the header file 'x.h' contains code, and was included in the file
55939     'a.c', then running 'gcov' on the file 'a.c' will produce an output
55940     file called 'a.c##x.h.gcov' instead of 'x.h.gcov'.  This can be
55941     useful if 'x.h' is included in multiple source files and you want
55942     to see the individual contributions.  If you use the '-p' option,
55943     both the including and included file names will be complete path
55944     names.
55945
55946'-m'
55947'--demangled-names'
55948     Display demangled function names in output.  The default is to show
55949     mangled function names.
55950
55951'-n'
55952'--no-output'
55953     Do not create the 'gcov' output file.
55954
55955'-o DIRECTORY|FILE'
55956'--object-directory DIRECTORY'
55957'--object-file FILE'
55958     Specify either the directory containing the gcov data files, or the
55959     object path name.  The '.gcno', and '.gcda' data files are searched
55960     for using this option.  If a directory is specified, the data files
55961     are in that directory and named after the input file name, without
55962     its extension.  If a file is specified here, the data files are
55963     named after that file, without its extension.
55964
55965'-p'
55966'--preserve-paths'
55967     Preserve complete path information in the names of generated
55968     '.gcov' files.  Without this option, just the filename component is
55969     used.  With this option, all directories are used, with '/'
55970     characters translated to '#' characters, '.' directory components
55971     removed and unremoveable '..' components renamed to '^'.  This is
55972     useful if sourcefiles are in several different directories.
55973
55974'-q'
55975'--use-hotness-colors'
55976
55977     Emit perf-like colored output for hot lines.  Legend of the color
55978     scale is printed at the very beginning of the output file.
55979
55980'-r'
55981'--relative-only'
55982     Only output information about source files with a relative pathname
55983     (after source prefix elision).  Absolute paths are usually system
55984     header files and coverage of any inline functions therein is
55985     normally uninteresting.
55986
55987'-s DIRECTORY'
55988'--source-prefix DIRECTORY'
55989     A prefix for source file names to remove when generating the output
55990     coverage files.  This option is useful when building in a separate
55991     directory, and the pathname to the source directory is not wanted
55992     when determining the output file names.  Note that this prefix
55993     detection is applied before determining whether the source file is
55994     absolute.
55995
55996'-t'
55997'--stdout'
55998     Output to standard output instead of output files.
55999
56000'-u'
56001'--unconditional-branches'
56002     When branch probabilities are given, include those of unconditional
56003     branches.  Unconditional branches are normally not interesting.
56004
56005'-v'
56006'--version'
56007     Display the 'gcov' version number (on the standard output), and
56008     exit without doing any further processing.
56009
56010'-w'
56011'--verbose'
56012     Print verbose informations related to basic blocks and arcs.
56013
56014'-x'
56015'--hash-filenames'
56016     When using -PRESERVE-PATHS, gcov uses the full pathname of the
56017     source files to create an output filename.  This can lead to long
56018     filenames that can overflow filesystem limits.  This option creates
56019     names of the form 'SOURCE-FILE##MD5.gcov', where the SOURCE-FILE
56020     component is the final filename part and the MD5 component is
56021     calculated from the full mangled name that would have been used
56022     otherwise.  The option is an alternative to the -PRESERVE-PATHS on
56023     systems which have a filesystem limit.
56024
56025 'gcov' should be run with the current directory the same as that when
56026you invoked the compiler.  Otherwise it will not be able to locate the
56027source files.  'gcov' produces files called 'MANGLEDNAME.gcov' in the
56028current directory.  These contain the coverage information of the source
56029file they correspond to.  One '.gcov' file is produced for each source
56030(or header) file containing code, which was compiled to produce the data
56031files.  The MANGLEDNAME part of the output file name is usually simply
56032the source file name, but can be something more complicated if the '-l'
56033or '-p' options are given.  Refer to those options for details.
56034
56035 If you invoke 'gcov' with multiple input files, the contributions from
56036each input file are summed.  Typically you would invoke it with the same
56037list of files as the final link of your executable.
56038
56039 The '.gcov' files contain the ':' separated fields along with program
56040source code.  The format is
56041
56042     EXECUTION_COUNT:LINE_NUMBER:SOURCE LINE TEXT
56043
56044 Additional block information may succeed each line, when requested by
56045command line option.  The EXECUTION_COUNT is '-' for lines containing no
56046code.  Unexecuted lines are marked '#####' or '=====', depending on
56047whether they are reachable by non-exceptional paths or only exceptional
56048paths such as C++ exception handlers, respectively.  Given the '-a'
56049option, unexecuted blocks are marked '$$$$$' or '%%%%%', depending on
56050whether a basic block is reachable via non-exceptional or exceptional
56051paths.  Executed basic blocks having a statement with zero
56052EXECUTION_COUNT end with '*' character and are colored with magenta
56053color with the '-k' option.  This functionality is not supported in Ada.
56054
56055 Note that GCC can completely remove the bodies of functions that are
56056not needed - for instance if they are inlined everywhere.  Such
56057functions are marked with '-', which can be confusing.  Use the
56058'-fkeep-inline-functions' and '-fkeep-static-functions' options to
56059retain these functions and allow gcov to properly show their
56060EXECUTION_COUNT.
56061
56062 Some lines of information at the start have LINE_NUMBER of zero.  These
56063preamble lines are of the form
56064
56065     -:0:TAG:VALUE
56066
56067 The ordering and number of these preamble lines will be augmented as
56068'gcov' development progresses -- do not rely on them remaining
56069unchanged.  Use TAG to locate a particular preamble line.
56070
56071 The additional block information is of the form
56072
56073     TAG INFORMATION
56074
56075 The INFORMATION is human readable, but designed to be simple enough for
56076machine parsing too.
56077
56078 When printing percentages, 0% and 100% are only printed when the values
56079are _exactly_ 0% and 100% respectively.  Other values which would
56080conventionally be rounded to 0% or 100% are instead printed as the
56081nearest non-boundary value.
56082
56083 When using 'gcov', you must first compile your program with a special
56084GCC option '--coverage'.  This tells the compiler to generate additional
56085information needed by gcov (basically a flow graph of the program) and
56086also includes additional code in the object files for generating the
56087extra profiling information needed by gcov.  These additional files are
56088placed in the directory where the object file is located.
56089
56090 Running the program will cause profile output to be generated.  For
56091each source file compiled with '-fprofile-arcs', an accompanying '.gcda'
56092file will be placed in the object file directory.
56093
56094 Running 'gcov' with your program's source file names as arguments will
56095now produce a listing of the code along with frequency of execution for
56096each line.  For example, if your program is called 'tmp.cpp', this is
56097what you see when you use the basic 'gcov' facility:
56098
56099     $ g++ --coverage tmp.cpp
56100     $ a.out
56101     $ gcov tmp.cpp -m
56102     File 'tmp.cpp'
56103     Lines executed:92.86% of 14
56104     Creating 'tmp.cpp.gcov'
56105
56106 The file 'tmp.cpp.gcov' contains output from 'gcov'.  Here is a sample:
56107
56108             -:    0:Source:tmp.cpp
56109             -:    0:Working directory:/home/gcc/testcase
56110             -:    0:Graph:tmp.gcno
56111             -:    0:Data:tmp.gcda
56112             -:    0:Runs:1
56113             -:    0:Programs:1
56114             -:    1:#include <stdio.h>
56115             -:    2:
56116             -:    3:template<class T>
56117             -:    4:class Foo
56118             -:    5:{
56119             -:    6:  public:
56120            1*:    7:  Foo(): b (1000) {}
56121     ------------------
56122     Foo<char>::Foo():
56123         #####:    7:  Foo(): b (1000) {}
56124     ------------------
56125     Foo<int>::Foo():
56126             1:    7:  Foo(): b (1000) {}
56127     ------------------
56128            2*:    8:  void inc () { b++; }
56129     ------------------
56130     Foo<char>::inc():
56131         #####:    8:  void inc () { b++; }
56132     ------------------
56133     Foo<int>::inc():
56134             2:    8:  void inc () { b++; }
56135     ------------------
56136             -:    9:
56137             -:   10:  private:
56138             -:   11:  int b;
56139             -:   12:};
56140             -:   13:
56141             -:   14:template class Foo<int>;
56142             -:   15:template class Foo<char>;
56143             -:   16:
56144             -:   17:int
56145             1:   18:main (void)
56146             -:   19:{
56147             -:   20:  int i, total;
56148             1:   21:  Foo<int> counter;
56149             -:   22:
56150             1:   23:  counter.inc();
56151             1:   24:  counter.inc();
56152             1:   25:  total = 0;
56153             -:   26:
56154            11:   27:  for (i = 0; i < 10; i++)
56155            10:   28:    total += i;
56156             -:   29:
56157            1*:   30:  int v = total > 100 ? 1 : 2;
56158             -:   31:
56159             1:   32:  if (total != 45)
56160         #####:   33:    printf ("Failure\n");
56161             -:   34:  else
56162             1:   35:    printf ("Success\n");
56163             1:   36:  return 0;
56164             -:   37:}
56165
56166 Note that line 7 is shown in the report multiple times.  First
56167occurrence presents total number of execution of the line and the next
56168two belong to instances of class Foo constructors.  As you can also see,
56169line 30 contains some unexecuted basic blocks and thus execution count
56170has asterisk symbol.
56171
56172 When you use the '-a' option, you will get individual block counts, and
56173the output looks like this:
56174
56175             -:    0:Source:tmp.cpp
56176             -:    0:Working directory:/home/gcc/testcase
56177             -:    0:Graph:tmp.gcno
56178             -:    0:Data:tmp.gcda
56179             -:    0:Runs:1
56180             -:    0:Programs:1
56181             -:    1:#include <stdio.h>
56182             -:    2:
56183             -:    3:template<class T>
56184             -:    4:class Foo
56185             -:    5:{
56186             -:    6:  public:
56187            1*:    7:  Foo(): b (1000) {}
56188     ------------------
56189     Foo<char>::Foo():
56190         #####:    7:  Foo(): b (1000) {}
56191     ------------------
56192     Foo<int>::Foo():
56193             1:    7:  Foo(): b (1000) {}
56194     ------------------
56195            2*:    8:  void inc () { b++; }
56196     ------------------
56197     Foo<char>::inc():
56198         #####:    8:  void inc () { b++; }
56199     ------------------
56200     Foo<int>::inc():
56201             2:    8:  void inc () { b++; }
56202     ------------------
56203             -:    9:
56204             -:   10:  private:
56205             -:   11:  int b;
56206             -:   12:};
56207             -:   13:
56208             -:   14:template class Foo<int>;
56209             -:   15:template class Foo<char>;
56210             -:   16:
56211             -:   17:int
56212             1:   18:main (void)
56213             -:   19:{
56214             -:   20:  int i, total;
56215             1:   21:  Foo<int> counter;
56216             1:   21-block  0
56217             -:   22:
56218             1:   23:  counter.inc();
56219             1:   23-block  0
56220             1:   24:  counter.inc();
56221             1:   24-block  0
56222             1:   25:  total = 0;
56223             -:   26:
56224            11:   27:  for (i = 0; i < 10; i++)
56225             1:   27-block  0
56226            11:   27-block  1
56227            10:   28:    total += i;
56228            10:   28-block  0
56229             -:   29:
56230            1*:   30:  int v = total > 100 ? 1 : 2;
56231             1:   30-block  0
56232         %%%%%:   30-block  1
56233             1:   30-block  2
56234             -:   31:
56235             1:   32:  if (total != 45)
56236             1:   32-block  0
56237         #####:   33:    printf ("Failure\n");
56238         %%%%%:   33-block  0
56239             -:   34:  else
56240             1:   35:    printf ("Success\n");
56241             1:   35-block  0
56242             1:   36:  return 0;
56243             1:   36-block  0
56244             -:   37:}
56245
56246 In this mode, each basic block is only shown on one line - the last
56247line of the block.  A multi-line block will only contribute to the
56248execution count of that last line, and other lines will not be shown to
56249contain code, unless previous blocks end on those lines.  The total
56250execution count of a line is shown and subsequent lines show the
56251execution counts for individual blocks that end on that line.  After
56252each block, the branch and call counts of the block will be shown, if
56253the '-b' option is given.
56254
56255 Because of the way GCC instruments calls, a call count can be shown
56256after a line with no individual blocks.  As you can see, line 33
56257contains a basic block that was not executed.
56258
56259 When you use the '-b' option, your output looks like this:
56260
56261             -:    0:Source:tmp.cpp
56262             -:    0:Working directory:/home/gcc/testcase
56263             -:    0:Graph:tmp.gcno
56264             -:    0:Data:tmp.gcda
56265             -:    0:Runs:1
56266             -:    0:Programs:1
56267             -:    1:#include <stdio.h>
56268             -:    2:
56269             -:    3:template<class T>
56270             -:    4:class Foo
56271             -:    5:{
56272             -:    6:  public:
56273            1*:    7:  Foo(): b (1000) {}
56274     ------------------
56275     Foo<char>::Foo():
56276     function Foo<char>::Foo() called 0 returned 0% blocks executed 0%
56277         #####:    7:  Foo(): b (1000) {}
56278     ------------------
56279     Foo<int>::Foo():
56280     function Foo<int>::Foo() called 1 returned 100% blocks executed 100%
56281             1:    7:  Foo(): b (1000) {}
56282     ------------------
56283            2*:    8:  void inc () { b++; }
56284     ------------------
56285     Foo<char>::inc():
56286     function Foo<char>::inc() called 0 returned 0% blocks executed 0%
56287         #####:    8:  void inc () { b++; }
56288     ------------------
56289     Foo<int>::inc():
56290     function Foo<int>::inc() called 2 returned 100% blocks executed 100%
56291             2:    8:  void inc () { b++; }
56292     ------------------
56293             -:    9:
56294             -:   10:  private:
56295             -:   11:  int b;
56296             -:   12:};
56297             -:   13:
56298             -:   14:template class Foo<int>;
56299             -:   15:template class Foo<char>;
56300             -:   16:
56301             -:   17:int
56302     function main called 1 returned 100% blocks executed 81%
56303             1:   18:main (void)
56304             -:   19:{
56305             -:   20:  int i, total;
56306             1:   21:  Foo<int> counter;
56307     call    0 returned 100%
56308     branch  1 taken 100% (fallthrough)
56309     branch  2 taken 0% (throw)
56310             -:   22:
56311             1:   23:  counter.inc();
56312     call    0 returned 100%
56313     branch  1 taken 100% (fallthrough)
56314     branch  2 taken 0% (throw)
56315             1:   24:  counter.inc();
56316     call    0 returned 100%
56317     branch  1 taken 100% (fallthrough)
56318     branch  2 taken 0% (throw)
56319             1:   25:  total = 0;
56320             -:   26:
56321            11:   27:  for (i = 0; i < 10; i++)
56322     branch  0 taken 91% (fallthrough)
56323     branch  1 taken 9%
56324            10:   28:    total += i;
56325             -:   29:
56326            1*:   30:  int v = total > 100 ? 1 : 2;
56327     branch  0 taken 0% (fallthrough)
56328     branch  1 taken 100%
56329             -:   31:
56330             1:   32:  if (total != 45)
56331     branch  0 taken 0% (fallthrough)
56332     branch  1 taken 100%
56333         #####:   33:    printf ("Failure\n");
56334     call    0 never executed
56335     branch  1 never executed
56336     branch  2 never executed
56337             -:   34:  else
56338             1:   35:    printf ("Success\n");
56339     call    0 returned 100%
56340     branch  1 taken 100% (fallthrough)
56341     branch  2 taken 0% (throw)
56342             1:   36:  return 0;
56343             -:   37:}
56344
56345 For each function, a line is printed showing how many times the
56346function is called, how many times it returns and what percentage of the
56347function's blocks were executed.
56348
56349 For each basic block, a line is printed after the last line of the
56350basic block describing the branch or call that ends the basic block.
56351There can be multiple branches and calls listed for a single source line
56352if there are multiple basic blocks that end on that line.  In this case,
56353the branches and calls are each given a number.  There is no simple way
56354to map these branches and calls back to source constructs.  In general,
56355though, the lowest numbered branch or call will correspond to the
56356leftmost construct on the source line.
56357
56358 For a branch, if it was executed at least once, then a percentage
56359indicating the number of times the branch was taken divided by the
56360number of times the branch was executed will be printed.  Otherwise, the
56361message "never executed" is printed.
56362
56363 For a call, if it was executed at least once, then a percentage
56364indicating the number of times the call returned divided by the number
56365of times the call was executed will be printed.  This will usually be
56366100%, but may be less for functions that call 'exit' or 'longjmp', and
56367thus may not return every time they are called.
56368
56369 The execution counts are cumulative.  If the example program were
56370executed again without removing the '.gcda' file, the count for the
56371number of times each line in the source was executed would be added to
56372the results of the previous run(s).  This is potentially useful in
56373several ways.  For example, it could be used to accumulate data over a
56374number of program runs as part of a test verification suite, or to
56375provide more accurate long-term information over a large number of
56376program runs.
56377
56378 The data in the '.gcda' files is saved immediately before the program
56379exits.  For each source file compiled with '-fprofile-arcs', the
56380profiling code first attempts to read in an existing '.gcda' file; if
56381the file doesn't match the executable (differing number of basic block
56382counts) it will ignore the contents of the file.  It then adds in the
56383new execution counts and finally writes the data to the file.
56384
56385
56386File: gcc.info,  Node: Gcov and Optimization,  Next: Gcov Data Files,  Prev: Invoking Gcov,  Up: Gcov
56387
5638810.3 Using 'gcov' with GCC Optimization
56389=======================================
56390
56391If you plan to use 'gcov' to help optimize your code, you must first
56392compile your program with a special GCC option '--coverage'.  Aside from
56393that, you can use any other GCC options; but if you want to prove that
56394every single line in your program was executed, you should not compile
56395with optimization at the same time.  On some machines the optimizer can
56396eliminate some simple code lines by combining them with other lines.
56397For example, code like this:
56398
56399     if (a != b)
56400       c = 1;
56401     else
56402       c = 0;
56403
56404can be compiled into one instruction on some machines.  In this case,
56405there is no way for 'gcov' to calculate separate execution counts for
56406each line because there isn't separate code for each line.  Hence the
56407'gcov' output looks like this if you compiled the program with
56408optimization:
56409
56410           100:   12:if (a != b)
56411           100:   13:  c = 1;
56412           100:   14:else
56413           100:   15:  c = 0;
56414
56415 The output shows that this block of code, combined by optimization,
56416executed 100 times.  In one sense this result is correct, because there
56417was only one instruction representing all four of these lines.  However,
56418the output does not indicate how many times the result was 0 and how
56419many times the result was 1.
56420
56421 Inlineable functions can create unexpected line counts.  Line counts
56422are shown for the source code of the inlineable function, but what is
56423shown depends on where the function is inlined, or if it is not inlined
56424at all.
56425
56426 If the function is not inlined, the compiler must emit an out of line
56427copy of the function, in any object file that needs it.  If 'fileA.o'
56428and 'fileB.o' both contain out of line bodies of a particular inlineable
56429function, they will also both contain coverage counts for that function.
56430When 'fileA.o' and 'fileB.o' are linked together, the linker will, on
56431many systems, select one of those out of line bodies for all calls to
56432that function, and remove or ignore the other.  Unfortunately, it will
56433not remove the coverage counters for the unused function body.  Hence
56434when instrumented, all but one use of that function will show zero
56435counts.
56436
56437 If the function is inlined in several places, the block structure in
56438each location might not be the same.  For instance, a condition might
56439now be calculable at compile time in some instances.  Because the
56440coverage of all the uses of the inline function will be shown for the
56441same source lines, the line counts themselves might seem inconsistent.
56442
56443 Long-running applications can use the '__gcov_reset' and '__gcov_dump'
56444facilities to restrict profile collection to the program region of
56445interest.  Calling '__gcov_reset(void)' will clear all profile counters
56446to zero, and calling '__gcov_dump(void)' will cause the profile
56447information collected at that point to be dumped to '.gcda' output
56448files.  Instrumented applications use a static destructor with priority
5644999 to invoke the '__gcov_dump' function.  Thus '__gcov_dump' is executed
56450after all user defined static destructors, as well as handlers
56451registered with 'atexit'.  If an executable loads a dynamic shared
56452object via dlopen functionality, '-Wl,--dynamic-list-data' is needed to
56453dump all profile data.
56454
56455 Profiling run-time library reports various errors related to profile
56456manipulation and profile saving.  Errors are printed into standard error
56457output or 'GCOV_ERROR_FILE' file, if environment variable is used.  In
56458order to terminate immediately after an errors occurs set
56459'GCOV_EXIT_AT_ERROR' environment variable.  That can help users to find
56460profile clashing which leads to a misleading profile.
56461
56462
56463File: gcc.info,  Node: Gcov Data Files,  Next: Cross-profiling,  Prev: Gcov and Optimization,  Up: Gcov
56464
5646510.4 Brief Description of 'gcov' Data Files
56466===========================================
56467
56468'gcov' uses two files for profiling.  The names of these files are
56469derived from the original _object_ file by substituting the file suffix
56470with either '.gcno', or '.gcda'.  The files contain coverage and profile
56471data stored in a platform-independent format.  The '.gcno' files are
56472placed in the same directory as the object file.  By default, the
56473'.gcda' files are also stored in the same directory as the object file,
56474but the GCC '-fprofile-dir' option may be used to store the '.gcda'
56475files in a separate directory.
56476
56477 The '.gcno' notes file is generated when the source file is compiled
56478with the GCC '-ftest-coverage' option.  It contains information to
56479reconstruct the basic block graphs and assign source line numbers to
56480blocks.
56481
56482 The '.gcda' count data file is generated when a program containing
56483object files built with the GCC '-fprofile-arcs' option is executed.  A
56484separate '.gcda' file is created for each object file compiled with this
56485option.  It contains arc transition counts, value profile counts, and
56486some summary information.
56487
56488 It is not recommended to access the coverage files directly.  Consumers
56489should use the intermediate format that is provided by 'gcov' tool via
56490'--json-format' option.
56491
56492
56493File: gcc.info,  Node: Cross-profiling,  Prev: Gcov Data Files,  Up: Gcov
56494
5649510.5 Data File Relocation to Support Cross-Profiling
56496====================================================
56497
56498Running the program will cause profile output to be generated.  For each
56499source file compiled with '-fprofile-arcs', an accompanying '.gcda' file
56500will be placed in the object file directory.  That implicitly requires
56501running the program on the same system as it was built or having the
56502same absolute directory structure on the target system.  The program
56503will try to create the needed directory structure, if it is not already
56504present.
56505
56506 To support cross-profiling, a program compiled with '-fprofile-arcs'
56507can relocate the data files based on two environment variables:
56508
56509   * GCOV_PREFIX contains the prefix to add to the absolute paths in the
56510     object file.  Prefix can be absolute, or relative.  The default is
56511     no prefix.
56512
56513   * GCOV_PREFIX_STRIP indicates the how many initial directory names to
56514     strip off the hardwired absolute paths.  Default value is 0.
56515
56516     _Note:_ If GCOV_PREFIX_STRIP is set without GCOV_PREFIX is
56517     undefined, then a relative path is made out of the hardwired
56518     absolute paths.
56519
56520 For example, if the object file '/user/build/foo.o' was built with
56521'-fprofile-arcs', the final executable will try to create the data file
56522'/user/build/foo.gcda' when running on the target system.  This will
56523fail if the corresponding directory does not exist and it is unable to
56524create it.  This can be overcome by, for example, setting the
56525environment as 'GCOV_PREFIX=/target/run' and 'GCOV_PREFIX_STRIP=1'.
56526Such a setting will name the data file '/target/run/build/foo.gcda'.
56527
56528 You must move the data files to the expected directory tree in order to
56529use them for profile directed optimizations ('-fprofile-use'), or to use
56530the 'gcov' tool.
56531
56532
56533File: gcc.info,  Node: Gcov-tool,  Next: Gcov-dump,  Prev: Gcov,  Up: Top
56534
5653511 'gcov-tool'--an Offline Gcda Profile Processing Tool
56536*******************************************************
56537
56538'gcov-tool' is a tool you can use in conjunction with GCC to manipulate
56539or process gcda profile files offline.
56540
56541* Menu:
56542
56543* Gcov-tool Intro::             Introduction to gcov-tool.
56544* Invoking Gcov-tool::          How to use gcov-tool.
56545
56546
56547File: gcc.info,  Node: Gcov-tool Intro,  Next: Invoking Gcov-tool,  Up: Gcov-tool
56548
5654911.1 Introduction to 'gcov-tool'
56550================================
56551
56552'gcov-tool' is an offline tool to process gcc's gcda profile files.
56553
56554 Current gcov-tool supports the following functionalities:
56555
56556   * merge two sets of profiles with weights.
56557
56558   * read one set of profile and rewrite profile contents.  One can
56559     scale or normalize the count values.
56560
56561 Examples of the use cases for this tool are:
56562   * Collect the profiles for different set of inputs, and use this tool
56563     to merge them.  One can specify the weight to factor in the
56564     relative importance of each input.
56565
56566   * Rewrite the profile after removing a subset of the gcda files,
56567     while maintaining the consistency of the summary and the histogram.
56568
56569   * It can also be used to debug or libgcov code as the tools shares
56570     the majority code as the runtime library.
56571
56572 Note that for the merging operation, this profile generated offline may
56573contain slight different values from the online merged profile.  Here
56574are a list of typical differences:
56575
56576   * histogram difference: This offline tool recomputes the histogram
56577     after merging the counters.  The resulting histogram, therefore, is
56578     precise.  The online merging does not have this capability - the
56579     histogram is merged from two histograms and the result is an
56580     approximation.
56581
56582   * summary checksum difference: Summary checksum uses a CRC32
56583     operation.  The value depends on the link list order of gcov-info
56584     objects.  This order is different in gcov-tool from that in the
56585     online merge.  It's expected to have different summary checksums.
56586     It does not really matter as the compiler does not use this
56587     checksum anywhere.
56588
56589   * value profile counter values difference: Some counter values for
56590     value profile are runtime dependent, like heap addresses.  It's
56591     normal to see some difference in these kind of counters.
56592
56593
56594File: gcc.info,  Node: Invoking Gcov-tool,  Prev: Gcov-tool Intro,  Up: Gcov-tool
56595
5659611.2 Invoking 'gcov-tool'
56597=========================
56598
56599     gcov-tool [GLOBAL-OPTIONS] SUB_COMMAND [SUB_COMMAND-OPTIONS] PROFILE_DIR
56600
56601 'gcov-tool' accepts the following options:
56602
56603'-h'
56604'--help'
56605     Display help about using 'gcov-tool' (on the standard output), and
56606     exit without doing any further processing.
56607
56608'-v'
56609'--version'
56610     Display the 'gcov-tool' version number (on the standard output),
56611     and exit without doing any further processing.
56612
56613'merge'
56614     Merge two profile directories.
56615
56616     '-o DIRECTORY'
56617     '--output DIRECTORY'
56618          Set the output profile directory.  Default output directory
56619          name is MERGED_PROFILE.
56620
56621     '-v'
56622     '--verbose'
56623          Set the verbose mode.
56624
56625     '-w W1,W2'
56626     '--weight W1,W2'
56627          Set the merge weights of the DIRECTORY1 and DIRECTORY2,
56628          respectively.  The default weights are 1 for both.
56629
56630'rewrite'
56631     Read the specified profile directory and rewrite to a new
56632     directory.
56633
56634     '-n LONG_LONG_VALUE'
56635     '--normalize <long_long_value>'
56636          Normalize the profile.  The specified value is the max counter
56637          value in the new profile.
56638
56639     '-o DIRECTORY'
56640     '--output DIRECTORY'
56641          Set the output profile directory.  Default output name is
56642          REWRITE_PROFILE.
56643
56644     '-s FLOAT_OR_SIMPLE-FRAC_VALUE'
56645     '--scale FLOAT_OR_SIMPLE-FRAC_VALUE'
56646          Scale the profile counters.  The specified value can be in
56647          floating point value, or simple fraction value form, such 1,
56648          2, 2/3, and 5/3.
56649
56650     '-v'
56651     '--verbose'
56652          Set the verbose mode.
56653
56654'overlap'
56655     Compute the overlap score between the two specified profile
56656     directories.  The overlap score is computed based on the arc
56657     profiles.  It is defined as the sum of min (p1_counter[i] /
56658     p1_sum_all, p2_counter[i] / p2_sum_all), for all arc counter i,
56659     where p1_counter[i] and p2_counter[i] are two matched counters and
56660     p1_sum_all and p2_sum_all are the sum of counter values in profile
56661     1 and profile 2, respectively.
56662
56663     '-f'
56664     '--function'
56665          Print function level overlap score.
56666
56667     '-F'
56668     '--fullname'
56669          Print full gcda filename.
56670
56671     '-h'
56672     '--hotonly'
56673          Only print info for hot objects/functions.
56674
56675     '-o'
56676     '--object'
56677          Print object level overlap score.
56678
56679     '-t FLOAT'
56680     '--hot_threshold <float>'
56681          Set the threshold for hot counter value.
56682
56683     '-v'
56684     '--verbose'
56685          Set the verbose mode.
56686
56687
56688File: gcc.info,  Node: Gcov-dump,  Next: lto-dump,  Prev: Gcov-tool,  Up: Top
56689
5669012 'gcov-dump'--an Offline Gcda and Gcno Profile Dump Tool
56691**********************************************************
56692
56693* Menu:
56694
56695* Gcov-dump Intro::             Introduction to gcov-dump.
56696* Invoking Gcov-dump::          How to use gcov-dump.
56697
56698
56699File: gcc.info,  Node: Gcov-dump Intro,  Next: Invoking Gcov-dump,  Up: Gcov-dump
56700
5670112.1 Introduction to 'gcov-dump'
56702================================
56703
56704'gcov-dump' is a tool you can use in conjunction with GCC to dump
56705content of gcda and gcno profile files offline.
56706
56707
56708File: gcc.info,  Node: Invoking Gcov-dump,  Prev: Gcov-dump Intro,  Up: Gcov-dump
56709
5671012.2 Invoking 'gcov-dump'
56711=========================
56712
56713     Usage: gcov-dump [OPTION] ... GCOVFILES
56714
56715 'gcov-dump' accepts the following options:
56716
56717'-h'
56718'--help'
56719     Display help about using 'gcov-dump' (on the standard output), and
56720     exit without doing any further processing.
56721
56722'-l'
56723'--long'
56724     Dump content of records.
56725
56726'-p'
56727'--positions'
56728     Dump positions of records.
56729
56730'-v'
56731'--version'
56732     Display the 'gcov-dump' version number (on the standard output),
56733     and exit without doing any further processing.
56734
56735
56736File: gcc.info,  Node: lto-dump,  Next: Trouble,  Prev: Gcov-dump,  Up: Top
56737
5673813 'lto-dump'--Tool for dumping LTO object files.
56739*************************************************
56740
56741* Menu:
56742
56743* lto-dump Intro::             Introduction to lto-dump.
56744* Invoking lto-dump::          How to use lto-dump.
56745
56746
56747File: gcc.info,  Node: lto-dump Intro,  Next: Invoking lto-dump,  Up: lto-dump
56748
5674913.1 Introduction to 'lto-dump'
56750===============================
56751
56752'lto-dump' is a tool you can use in conjunction with GCC to dump link
56753time optimization object files.
56754
56755
56756File: gcc.info,  Node: Invoking lto-dump,  Prev: lto-dump Intro,  Up: lto-dump
56757
5675813.2 Invoking 'lto-dump'
56759========================
56760
56761     Usage: lto-dump [OPTION] ... OBJFILES
56762
56763 'lto-dump' accepts the following options:
56764
56765'-list'
56766     Dumps list of details of functions and variables.
56767
56768'-demangle'
56769     Dump the demangled output.
56770
56771'-defined-only'
56772     Dump only the defined symbols.
56773
56774'-print-value'
56775     Dump initial values of the variables.
56776
56777'-name-sort'
56778     Sort the symbols alphabetically.
56779
56780'-size-sort'
56781     Sort the symbols according to size.
56782
56783'-reverse-sort'
56784     Dump the symbols in reverse order.
56785
56786'-no-sort'
56787     Dump the symbols in order of occurrence.
56788
56789'-symbol='
56790     Dump the details of specific symbol.
56791
56792'-objects'
56793     Dump the details of LTO objects.
56794
56795'-type-stats'
56796     Dump the statistics of tree types.
56797
56798'-tree-stats'
56799     Dump the statistics of trees.
56800
56801'-gimple-stats'
56802     Dump the statistics of gimple statements.
56803
56804'-dump-level='
56805     For deciding the optimization level of body.
56806
56807'-dump-body='
56808     Dump the specific gimple body.
56809
56810'-help'
56811     Display the dump tool help.
56812
56813
56814File: gcc.info,  Node: Trouble,  Next: Bugs,  Prev: lto-dump,  Up: Top
56815
5681614 Known Causes of Trouble with GCC
56817***********************************
56818
56819This section describes known problems that affect users of GCC.  Most of
56820these are not GCC bugs per se--if they were, we would fix them.  But the
56821result for a user may be like the result of a bug.
56822
56823 Some of these problems are due to bugs in other software, some are
56824missing features that are too much work to add, and some are places
56825where people's opinions differ as to what is best.
56826
56827* Menu:
56828
56829* Actual Bugs::         Bugs we will fix later.
56830* Interoperation::      Problems using GCC with other compilers,
56831                        and with certain linkers, assemblers and debuggers.
56832* Incompatibilities::   GCC is incompatible with traditional C.
56833* Fixed Headers::       GCC uses corrected versions of system header files.
56834                        This is necessary, but doesn't always work smoothly.
56835* Standard Libraries::  GCC uses the system C library, which might not be
56836                        compliant with the ISO C standard.
56837* Disappointments::     Regrettable things we cannot change, but not quite bugs.
56838* C++ Misunderstandings:: Common misunderstandings with GNU C++.
56839* Non-bugs::            Things we think are right, but some others disagree.
56840* Warnings and Errors:: Which problems in your code get warnings,
56841                        and which get errors.
56842
56843
56844File: gcc.info,  Node: Actual Bugs,  Next: Interoperation,  Up: Trouble
56845
5684614.1 Actual Bugs We Haven't Fixed Yet
56847=====================================
56848
56849   * The 'fixincludes' script interacts badly with automounters; if the
56850     directory of system header files is automounted, it tends to be
56851     unmounted while 'fixincludes' is running.  This would seem to be a
56852     bug in the automounter.  We don't know any good way to work around
56853     it.
56854
56855
56856File: gcc.info,  Node: Interoperation,  Next: Incompatibilities,  Prev: Actual Bugs,  Up: Trouble
56857
5685814.2 Interoperation
56859===================
56860
56861This section lists various difficulties encountered in using GCC
56862together with other compilers or with the assemblers, linkers, libraries
56863and debuggers on certain systems.
56864
56865   * On many platforms, GCC supports a different ABI for C++ than do
56866     other compilers, so the object files compiled by GCC cannot be used
56867     with object files generated by another C++ compiler.
56868
56869     An area where the difference is most apparent is name mangling.
56870     The use of different name mangling is intentional, to protect you
56871     from more subtle problems.  Compilers differ as to many internal
56872     details of C++ implementation, including: how class instances are
56873     laid out, how multiple inheritance is implemented, and how virtual
56874     function calls are handled.  If the name encoding were made the
56875     same, your programs would link against libraries provided from
56876     other compilers--but the programs would then crash when run.
56877     Incompatible libraries are then detected at link time, rather than
56878     at run time.
56879
56880   * On some BSD systems, including some versions of Ultrix, use of
56881     profiling causes static variable destructors (currently used only
56882     in C++) not to be run.
56883
56884   * On a SPARC, GCC aligns all values of type 'double' on an 8-byte
56885     boundary, and it expects every 'double' to be so aligned.  The Sun
56886     compiler usually gives 'double' values 8-byte alignment, with one
56887     exception: function arguments of type 'double' may not be aligned.
56888
56889     As a result, if a function compiled with Sun CC takes the address
56890     of an argument of type 'double' and passes this pointer of type
56891     'double *' to a function compiled with GCC, dereferencing the
56892     pointer may cause a fatal signal.
56893
56894     One way to solve this problem is to compile your entire program
56895     with GCC.  Another solution is to modify the function that is
56896     compiled with Sun CC to copy the argument into a local variable;
56897     local variables are always properly aligned.  A third solution is
56898     to modify the function that uses the pointer to dereference it via
56899     the following function 'access_double' instead of directly with
56900     '*':
56901
56902          inline double
56903          access_double (double *unaligned_ptr)
56904          {
56905            union d2i { double d; int i[2]; };
56906
56907            union d2i *p = (union d2i *) unaligned_ptr;
56908            union d2i u;
56909
56910            u.i[0] = p->i[0];
56911            u.i[1] = p->i[1];
56912
56913            return u.d;
56914          }
56915
56916     Storing into the pointer can be done likewise with the same union.
56917
56918   * On Solaris, the 'malloc' function in the 'libmalloc.a' library may
56919     allocate memory that is only 4 byte aligned.  Since GCC on the
56920     SPARC assumes that doubles are 8 byte aligned, this may result in a
56921     fatal signal if doubles are stored in memory allocated by the
56922     'libmalloc.a' library.
56923
56924     The solution is to not use the 'libmalloc.a' library.  Use instead
56925     'malloc' and related functions from 'libc.a'; they do not have this
56926     problem.
56927
56928   * On the HP PA machine, ADB sometimes fails to work on functions
56929     compiled with GCC.  Specifically, it fails to work on functions
56930     that use 'alloca' or variable-size arrays.  This is because GCC
56931     doesn't generate HP-UX unwind descriptors for such functions.  It
56932     may even be impossible to generate them.
56933
56934   * Debugging ('-g') is not supported on the HP PA machine, unless you
56935     use the preliminary GNU tools.
56936
56937   * Taking the address of a label may generate errors from the HP-UX PA
56938     assembler.  GAS for the PA does not have this problem.
56939
56940   * Using floating point parameters for indirect calls to static
56941     functions will not work when using the HP assembler.  There simply
56942     is no way for GCC to specify what registers hold arguments for
56943     static functions when using the HP assembler.  GAS for the PA does
56944     not have this problem.
56945
56946   * In extremely rare cases involving some very large functions you may
56947     receive errors from the HP linker complaining about an out of
56948     bounds unconditional branch offset.  This used to occur more often
56949     in previous versions of GCC, but is now exceptionally rare.  If you
56950     should run into it, you can work around by making your function
56951     smaller.
56952
56953   * GCC compiled code sometimes emits warnings from the HP-UX assembler
56954     of the form:
56955
56956          (warning) Use of GR3 when
56957            frame >= 8192 may cause conflict.
56958
56959     These warnings are harmless and can be safely ignored.
56960
56961   * In extremely rare cases involving some very large functions you may
56962     receive errors from the AIX Assembler complaining about a
56963     displacement that is too large.  If you should run into it, you can
56964     work around by making your function smaller.
56965
56966   * The 'libstdc++.a' library in GCC relies on the SVR4 dynamic linker
56967     semantics which merges global symbols between libraries and
56968     applications, especially necessary for C++ streams functionality.
56969     This is not the default behavior of AIX shared libraries and
56970     dynamic linking.  'libstdc++.a' is built on AIX with
56971     "runtime-linking" enabled so that symbol merging can occur.  To
56972     utilize this feature, the application linked with 'libstdc++.a'
56973     must include the '-Wl,-brtl' flag on the link line.  G++ cannot
56974     impose this because this option may interfere with the semantics of
56975     the user program and users may not always use 'g++' to link his or
56976     her application.  Applications are not required to use the
56977     '-Wl,-brtl' flag on the link line--the rest of the 'libstdc++.a'
56978     library which is not dependent on the symbol merging semantics will
56979     continue to function correctly.
56980
56981   * An application can interpose its own definition of functions for
56982     functions invoked by 'libstdc++.a' with "runtime-linking" enabled
56983     on AIX.  To accomplish this the application must be linked with
56984     "runtime-linking" option and the functions explicitly must be
56985     exported by the application ('-Wl,-brtl,-bE:exportfile').
56986
56987   * AIX on the RS/6000 provides support (NLS) for environments outside
56988     of the United States.  Compilers and assemblers use NLS to support
56989     locale-specific representations of various objects including
56990     floating-point numbers ('.' vs ',' for separating decimal
56991     fractions).  There have been problems reported where the library
56992     linked with GCC does not produce the same floating-point formats
56993     that the assembler accepts.  If you have this problem, set the
56994     'LANG' environment variable to 'C' or 'En_US'.
56995
56996   * Even if you specify '-fdollars-in-identifiers', you cannot
56997     successfully use '$' in identifiers on the RS/6000 due to a
56998     restriction in the IBM assembler.  GAS supports these identifiers.
56999
57000
57001File: gcc.info,  Node: Incompatibilities,  Next: Fixed Headers,  Prev: Interoperation,  Up: Trouble
57002
5700314.3 Incompatibilities of GCC
57004=============================
57005
57006There are several noteworthy incompatibilities between GNU C and K&R
57007(non-ISO) versions of C.
57008
57009   * GCC normally makes string constants read-only.  If several
57010     identical-looking string constants are used, GCC stores only one
57011     copy of the string.
57012
57013     One consequence is that you cannot call 'mktemp' with a string
57014     constant argument.  The function 'mktemp' always alters the string
57015     its argument points to.
57016
57017     Another consequence is that 'sscanf' does not work on some very old
57018     systems when passed a string constant as its format control string
57019     or input.  This is because 'sscanf' incorrectly tries to write into
57020     the string constant.  Likewise 'fscanf' and 'scanf'.
57021
57022     The solution to these problems is to change the program to use
57023     'char'-array variables with initialization strings for these
57024     purposes instead of string constants.
57025
57026   * '-2147483648' is positive.
57027
57028     This is because 2147483648 cannot fit in the type 'int', so
57029     (following the ISO C rules) its data type is 'unsigned long int'.
57030     Negating this value yields 2147483648 again.
57031
57032   * GCC does not substitute macro arguments when they appear inside of
57033     string constants.  For example, the following macro in GCC
57034
57035          #define foo(a) "a"
57036
57037     will produce output '"a"' regardless of what the argument A is.
57038
57039   * When you use 'setjmp' and 'longjmp', the only automatic variables
57040     guaranteed to remain valid are those declared 'volatile'.  This is
57041     a consequence of automatic register allocation.  Consider this
57042     function:
57043
57044          jmp_buf j;
57045
57046          foo ()
57047          {
57048            int a, b;
57049
57050            a = fun1 ();
57051            if (setjmp (j))
57052              return a;
57053
57054            a = fun2 ();
57055            /* 'longjmp (j)' may occur in 'fun3'. */
57056            return a + fun3 ();
57057          }
57058
57059     Here 'a' may or may not be restored to its first value when the
57060     'longjmp' occurs.  If 'a' is allocated in a register, then its
57061     first value is restored; otherwise, it keeps the last value stored
57062     in it.
57063
57064     If you use the '-W' option with the '-O' option, you will get a
57065     warning when GCC thinks such a problem might be possible.
57066
57067   * Programs that use preprocessing directives in the middle of macro
57068     arguments do not work with GCC.  For example, a program like this
57069     will not work:
57070
57071          foobar (
57072          #define luser
57073                  hack)
57074
57075     ISO C does not permit such a construct.
57076
57077   * K&R compilers allow comments to cross over an inclusion boundary
57078     (i.e. started in an include file and ended in the including file).
57079
57080   * Declarations of external variables and functions within a block
57081     apply only to the block containing the declaration.  In other
57082     words, they have the same scope as any other declaration in the
57083     same place.
57084
57085     In some other C compilers, an 'extern' declaration affects all the
57086     rest of the file even if it happens within a block.
57087
57088   * In traditional C, you can combine 'long', etc., with a typedef
57089     name, as shown here:
57090
57091          typedef int foo;
57092          typedef long foo bar;
57093
57094     In ISO C, this is not allowed: 'long' and other type modifiers
57095     require an explicit 'int'.
57096
57097   * PCC allows typedef names to be used as function parameters.
57098
57099   * Traditional C allows the following erroneous pair of declarations
57100     to appear together in a given scope:
57101
57102          typedef int foo;
57103          typedef foo foo;
57104
57105   * GCC treats all characters of identifiers as significant.  According
57106     to K&R-1 (2.2), "No more than the first eight characters are
57107     significant, although more may be used.".  Also according to K&R-1
57108     (2.2), "An identifier is a sequence of letters and digits; the
57109     first character must be a letter.  The underscore _ counts as a
57110     letter.", but GCC also allows dollar signs in identifiers.
57111
57112   * PCC allows whitespace in the middle of compound assignment
57113     operators such as '+='.  GCC, following the ISO standard, does not
57114     allow this.
57115
57116   * GCC complains about unterminated character constants inside of
57117     preprocessing conditionals that fail.  Some programs have English
57118     comments enclosed in conditionals that are guaranteed to fail; if
57119     these comments contain apostrophes, GCC will probably report an
57120     error.  For example, this code would produce an error:
57121
57122          #if 0
57123          You can't expect this to work.
57124          #endif
57125
57126     The best solution to such a problem is to put the text into an
57127     actual C comment delimited by '/*...*/'.
57128
57129   * Many user programs contain the declaration 'long time ();'.  In the
57130     past, the system header files on many systems did not actually
57131     declare 'time', so it did not matter what type your program
57132     declared it to return.  But in systems with ISO C headers, 'time'
57133     is declared to return 'time_t', and if that is not the same as
57134     'long', then 'long time ();' is erroneous.
57135
57136     The solution is to change your program to use appropriate system
57137     headers ('<time.h>' on systems with ISO C headers) and not to
57138     declare 'time' if the system header files declare it, or failing
57139     that to use 'time_t' as the return type of 'time'.
57140
57141   * When compiling functions that return 'float', PCC converts it to a
57142     double.  GCC actually returns a 'float'.  If you are concerned with
57143     PCC compatibility, you should declare your functions to return
57144     'double'; you might as well say what you mean.
57145
57146   * When compiling functions that return structures or unions, GCC
57147     output code normally uses a method different from that used on most
57148     versions of Unix.  As a result, code compiled with GCC cannot call
57149     a structure-returning function compiled with PCC, and vice versa.
57150
57151     The method used by GCC is as follows: a structure or union which is
57152     1, 2, 4 or 8 bytes long is returned like a scalar.  A structure or
57153     union with any other size is stored into an address supplied by the
57154     caller (usually in a special, fixed register, but on some machines
57155     it is passed on the stack).  The target hook
57156     'TARGET_STRUCT_VALUE_RTX' tells GCC where to pass this address.
57157
57158     By contrast, PCC on most target machines returns structures and
57159     unions of any size by copying the data into an area of static
57160     storage, and then returning the address of that storage as if it
57161     were a pointer value.  The caller must copy the data from that
57162     memory area to the place where the value is wanted.  GCC does not
57163     use this method because it is slower and nonreentrant.
57164
57165     On some newer machines, PCC uses a reentrant convention for all
57166     structure and union returning.  GCC on most of these machines uses
57167     a compatible convention when returning structures and unions in
57168     memory, but still returns small structures and unions in registers.
57169
57170     You can tell GCC to use a compatible convention for all structure
57171     and union returning with the option '-fpcc-struct-return'.
57172
57173   * GCC complains about program fragments such as '0x74ae-0x4000' which
57174     appear to be two hexadecimal constants separated by the minus
57175     operator.  Actually, this string is a single "preprocessing token".
57176     Each such token must correspond to one token in C.  Since this does
57177     not, GCC prints an error message.  Although it may appear obvious
57178     that what is meant is an operator and two values, the ISO C
57179     standard specifically requires that this be treated as erroneous.
57180
57181     A "preprocessing token" is a "preprocessing number" if it begins
57182     with a digit and is followed by letters, underscores, digits,
57183     periods and 'e+', 'e-', 'E+', 'E-', 'p+', 'p-', 'P+', or 'P-'
57184     character sequences.  (In strict C90 mode, the sequences 'p+',
57185     'p-', 'P+' and 'P-' cannot appear in preprocessing numbers.)
57186
57187     To make the above program fragment valid, place whitespace in front
57188     of the minus sign.  This whitespace will end the preprocessing
57189     number.
57190
57191
57192File: gcc.info,  Node: Fixed Headers,  Next: Standard Libraries,  Prev: Incompatibilities,  Up: Trouble
57193
5719414.4 Fixed Header Files
57195=======================
57196
57197GCC needs to install corrected versions of some system header files.
57198This is because most target systems have some header files that won't
57199work with GCC unless they are changed.  Some have bugs, some are
57200incompatible with ISO C, and some depend on special features of other
57201compilers.
57202
57203 Installing GCC automatically creates and installs the fixed header
57204files, by running a program called 'fixincludes'.  Normally, you don't
57205need to pay attention to this.  But there are cases where it doesn't do
57206the right thing automatically.
57207
57208   * If you update the system's header files, such as by installing a
57209     new system version, the fixed header files of GCC are not
57210     automatically updated.  They can be updated using the 'mkheaders'
57211     script installed in 'LIBEXECDIR/gcc/TARGET/VERSION/install-tools/'.
57212
57213   * On some systems, header file directories contain machine-specific
57214     symbolic links in certain places.  This makes it possible to share
57215     most of the header files among hosts running the same version of
57216     the system on different machine models.
57217
57218     The programs that fix the header files do not understand this
57219     special way of using symbolic links; therefore, the directory of
57220     fixed header files is good only for the machine model used to build
57221     it.
57222
57223     It is possible to make separate sets of fixed header files for the
57224     different machine models, and arrange a structure of symbolic links
57225     so as to use the proper set, but you'll have to do this by hand.
57226
57227
57228File: gcc.info,  Node: Standard Libraries,  Next: Disappointments,  Prev: Fixed Headers,  Up: Trouble
57229
5723014.5 Standard Libraries
57231=======================
57232
57233GCC by itself attempts to be a conforming freestanding implementation.
57234*Note Language Standards Supported by GCC: Standards, for details of
57235what this means.  Beyond the library facilities required of such an
57236implementation, the rest of the C library is supplied by the vendor of
57237the operating system.  If that C library doesn't conform to the C
57238standards, then your programs might get warnings (especially when using
57239'-Wall') that you don't expect.
57240
57241 For example, the 'sprintf' function on SunOS 4.1.3 returns 'char *'
57242while the C standard says that 'sprintf' returns an 'int'.  The
57243'fixincludes' program could make the prototype for this function match
57244the Standard, but that would be wrong, since the function will still
57245return 'char *'.
57246
57247 If you need a Standard compliant library, then you need to find one, as
57248GCC does not provide one.  The GNU C library (called 'glibc') provides
57249ISO C, POSIX, BSD, SystemV and X/Open compatibility for GNU/Linux and
57250HURD-based GNU systems; no recent version of it supports other systems,
57251though some very old versions did.  Version 2.2 of the GNU C library
57252includes nearly complete C99 support.  You could also ask your operating
57253system vendor if newer libraries are available.
57254
57255
57256File: gcc.info,  Node: Disappointments,  Next: C++ Misunderstandings,  Prev: Standard Libraries,  Up: Trouble
57257
5725814.6 Disappointments and Misunderstandings
57259==========================================
57260
57261These problems are perhaps regrettable, but we don't know any practical
57262way around them.
57263
57264   * Certain local variables aren't recognized by debuggers when you
57265     compile with optimization.
57266
57267     This occurs because sometimes GCC optimizes the variable out of
57268     existence.  There is no way to tell the debugger how to compute the
57269     value such a variable "would have had", and it is not clear that
57270     would be desirable anyway.  So GCC simply does not mention the
57271     eliminated variable when it writes debugging information.
57272
57273     You have to expect a certain amount of disagreement between the
57274     executable and your source code, when you use optimization.
57275
57276   * Users often think it is a bug when GCC reports an error for code
57277     like this:
57278
57279          int foo (struct mumble *);
57280
57281          struct mumble { ... };
57282
57283          int foo (struct mumble *x)
57284          { ... }
57285
57286     This code really is erroneous, because the scope of 'struct mumble'
57287     in the prototype is limited to the argument list containing it.  It
57288     does not refer to the 'struct mumble' defined with file scope
57289     immediately below--they are two unrelated types with similar names
57290     in different scopes.
57291
57292     But in the definition of 'foo', the file-scope type is used because
57293     that is available to be inherited.  Thus, the definition and the
57294     prototype do not match, and you get an error.
57295
57296     This behavior may seem silly, but it's what the ISO standard
57297     specifies.  It is easy enough for you to make your code work by
57298     moving the definition of 'struct mumble' above the prototype.  It's
57299     not worth being incompatible with ISO C just to avoid an error for
57300     the example shown above.
57301
57302   * Accesses to bit-fields even in volatile objects works by accessing
57303     larger objects, such as a byte or a word.  You cannot rely on what
57304     size of object is accessed in order to read or write the bit-field;
57305     it may even vary for a given bit-field according to the precise
57306     usage.
57307
57308     If you care about controlling the amount of memory that is
57309     accessed, use volatile but do not use bit-fields.
57310
57311   * GCC comes with shell scripts to fix certain known problems in
57312     system header files.  They install corrected copies of various
57313     header files in a special directory where only GCC will normally
57314     look for them.  The scripts adapt to various systems by searching
57315     all the system header files for the problem cases that we know
57316     about.
57317
57318     If new system header files are installed, nothing automatically
57319     arranges to update the corrected header files.  They can be updated
57320     using the 'mkheaders' script installed in
57321     'LIBEXECDIR/gcc/TARGET/VERSION/install-tools/'.
57322
57323   * On 68000 and x86 systems, for instance, you can get paradoxical
57324     results if you test the precise values of floating point numbers.
57325     For example, you can find that a floating point value which is not
57326     a NaN is not equal to itself.  This results from the fact that the
57327     floating point registers hold a few more bits of precision than fit
57328     in a 'double' in memory.  Compiled code moves values between memory
57329     and floating point registers at its convenience, and moving them
57330     into memory truncates them.
57331
57332     You can partially avoid this problem by using the '-ffloat-store'
57333     option (*note Optimize Options::).
57334
57335   * On AIX and other platforms without weak symbol support, templates
57336     need to be instantiated explicitly and symbols for static members
57337     of templates will not be generated.
57338
57339   * On AIX, GCC scans object files and library archives for static
57340     constructors and destructors when linking an application before the
57341     linker prunes unreferenced symbols.  This is necessary to prevent
57342     the AIX linker from mistakenly assuming that static constructor or
57343     destructor are unused and removing them before the scanning can
57344     occur.  All static constructors and destructors found will be
57345     referenced even though the modules in which they occur may not be
57346     used by the program.  This may lead to both increased executable
57347     size and unexpected symbol references.
57348
57349
57350File: gcc.info,  Node: C++ Misunderstandings,  Next: Non-bugs,  Prev: Disappointments,  Up: Trouble
57351
5735214.7 Common Misunderstandings with GNU C++
57353==========================================
57354
57355C++ is a complex language and an evolving one, and its standard
57356definition (the ISO C++ standard) was only recently completed.  As a
57357result, your C++ compiler may occasionally surprise you, even when its
57358behavior is correct.  This section discusses some areas that frequently
57359give rise to questions of this sort.
57360
57361* Menu:
57362
57363* Static Definitions::  Static member declarations are not definitions
57364* Name lookup::         Name lookup, templates, and accessing members of base classes
57365* Temporaries::         Temporaries may vanish before you expect
57366* Copy Assignment::     Copy Assignment operators copy virtual bases twice
57367
57368
57369File: gcc.info,  Node: Static Definitions,  Next: Name lookup,  Up: C++ Misunderstandings
57370
5737114.7.1 Declare _and_ Define Static Members
57372------------------------------------------
57373
57374When a class has static data members, it is not enough to _declare_ the
57375static member; you must also _define_ it.  For example:
57376
57377     class Foo
57378     {
57379       ...
57380       void method();
57381       static int bar;
57382     };
57383
57384 This declaration only establishes that the class 'Foo' has an 'int'
57385named 'Foo::bar', and a member function named 'Foo::method'.  But you
57386still need to define _both_ 'method' and 'bar' elsewhere.  According to
57387the ISO standard, you must supply an initializer in one (and only one)
57388source file, such as:
57389
57390     int Foo::bar = 0;
57391
57392 Other C++ compilers may not correctly implement the standard behavior.
57393As a result, when you switch to 'g++' from one of these compilers, you
57394may discover that a program that appeared to work correctly in fact does
57395not conform to the standard: 'g++' reports as undefined symbols any
57396static data members that lack definitions.
57397
57398
57399File: gcc.info,  Node: Name lookup,  Next: Temporaries,  Prev: Static Definitions,  Up: C++ Misunderstandings
57400
5740114.7.2 Name Lookup, Templates, and Accessing Members of Base Classes
57402--------------------------------------------------------------------
57403
57404The C++ standard prescribes that all names that are not dependent on
57405template parameters are bound to their present definitions when parsing
57406a template function or class.(1)  Only names that are dependent are
57407looked up at the point of instantiation.  For example, consider
57408
57409       void foo(double);
57410
57411       struct A {
57412         template <typename T>
57413         void f () {
57414           foo (1);        // 1
57415           int i = N;      // 2
57416           T t;
57417           t.bar();        // 3
57418           foo (t);        // 4
57419         }
57420
57421         static const int N;
57422       };
57423
57424 Here, the names 'foo' and 'N' appear in a context that does not depend
57425on the type of 'T'.  The compiler will thus require that they are
57426defined in the context of use in the template, not only before the point
57427of instantiation, and will here use '::foo(double)' and 'A::N',
57428respectively.  In particular, it will convert the integer value to a
57429'double' when passing it to '::foo(double)'.
57430
57431 Conversely, 'bar' and the call to 'foo' in the fourth marked line are
57432used in contexts that do depend on the type of 'T', so they are only
57433looked up at the point of instantiation, and you can provide
57434declarations for them after declaring the template, but before
57435instantiating it.  In particular, if you instantiate 'A::f<int>', the
57436last line will call an overloaded '::foo(int)' if one was provided, even
57437if after the declaration of 'struct A'.
57438
57439 This distinction between lookup of dependent and non-dependent names is
57440called two-stage (or dependent) name lookup.  G++ implements it since
57441version 3.4.
57442
57443 Two-stage name lookup sometimes leads to situations with behavior
57444different from non-template codes.  The most common is probably this:
57445
57446       template <typename T> struct Base {
57447         int i;
57448       };
57449
57450       template <typename T> struct Derived : public Base<T> {
57451         int get_i() { return i; }
57452       };
57453
57454 In 'get_i()', 'i' is not used in a dependent context, so the compiler
57455will look for a name declared at the enclosing namespace scope (which is
57456the global scope here).  It will not look into the base class, since
57457that is dependent and you may declare specializations of 'Base' even
57458after declaring 'Derived', so the compiler cannot really know what 'i'
57459would refer to.  If there is no global variable 'i', then you will get
57460an error message.
57461
57462 In order to make it clear that you want the member of the base class,
57463you need to defer lookup until instantiation time, at which the base
57464class is known.  For this, you need to access 'i' in a dependent
57465context, by either using 'this->i' (remember that 'this' is of type
57466'Derived<T>*', so is obviously dependent), or using 'Base<T>::i'.
57467Alternatively, 'Base<T>::i' might be brought into scope by a
57468'using'-declaration.
57469
57470 Another, similar example involves calling member functions of a base
57471class:
57472
57473       template <typename T> struct Base {
57474           int f();
57475       };
57476
57477       template <typename T> struct Derived : Base<T> {
57478           int g() { return f(); };
57479       };
57480
57481 Again, the call to 'f()' is not dependent on template arguments (there
57482are no arguments that depend on the type 'T', and it is also not
57483otherwise specified that the call should be in a dependent context).
57484Thus a global declaration of such a function must be available, since
57485the one in the base class is not visible until instantiation time.  The
57486compiler will consequently produce the following error message:
57487
57488       x.cc: In member function `int Derived<T>::g()':
57489       x.cc:6: error: there are no arguments to `f' that depend on a template
57490          parameter, so a declaration of `f' must be available
57491       x.cc:6: error: (if you use `-fpermissive', G++ will accept your code, but
57492          allowing the use of an undeclared name is deprecated)
57493
57494 To make the code valid either use 'this->f()', or 'Base<T>::f()'.
57495Using the '-fpermissive' flag will also let the compiler accept the
57496code, by marking all function calls for which no declaration is visible
57497at the time of definition of the template for later lookup at
57498instantiation time, as if it were a dependent call.  We do not recommend
57499using '-fpermissive' to work around invalid code, and it will also only
57500catch cases where functions in base classes are called, not where
57501variables in base classes are used (as in the example above).
57502
57503 Note that some compilers (including G++ versions prior to 3.4) get
57504these examples wrong and accept above code without an error.  Those
57505compilers do not implement two-stage name lookup correctly.
57506
57507   ---------- Footnotes ----------
57508
57509   (1) The C++ standard just uses the term "dependent" for names that
57510depend on the type or value of template parameters.  This shorter term
57511will also be used in the rest of this section.
57512
57513
57514File: gcc.info,  Node: Temporaries,  Next: Copy Assignment,  Prev: Name lookup,  Up: C++ Misunderstandings
57515
5751614.7.3 Temporaries May Vanish Before You Expect
57517-----------------------------------------------
57518
57519It is dangerous to use pointers or references to _portions_ of a
57520temporary object.  The compiler may very well delete the object before
57521you expect it to, leaving a pointer to garbage.  The most common place
57522where this problem crops up is in classes like string classes,
57523especially ones that define a conversion function to type 'char *' or
57524'const char *'--which is one reason why the standard 'string' class
57525requires you to call the 'c_str' member function.  However, any class
57526that returns a pointer to some internal structure is potentially subject
57527to this problem.
57528
57529 For example, a program may use a function 'strfunc' that returns
57530'string' objects, and another function 'charfunc' that operates on
57531pointers to 'char':
57532
57533     string strfunc ();
57534     void charfunc (const char *);
57535
57536     void
57537     f ()
57538     {
57539       const char *p = strfunc().c_str();
57540       ...
57541       charfunc (p);
57542       ...
57543       charfunc (p);
57544     }
57545
57546In this situation, it may seem reasonable to save a pointer to the C
57547string returned by the 'c_str' member function and use that rather than
57548call 'c_str' repeatedly.  However, the temporary string created by the
57549call to 'strfunc' is destroyed after 'p' is initialized, at which point
57550'p' is left pointing to freed memory.
57551
57552 Code like this may run successfully under some other compilers,
57553particularly obsolete cfront-based compilers that delete temporaries
57554along with normal local variables.  However, the GNU C++ behavior is
57555standard-conforming, so if your program depends on late destruction of
57556temporaries it is not portable.
57557
57558 The safe way to write such code is to give the temporary a name, which
57559forces it to remain until the end of the scope of the name.  For
57560example:
57561
57562     const string& tmp = strfunc ();
57563     charfunc (tmp.c_str ());
57564
57565
57566File: gcc.info,  Node: Copy Assignment,  Prev: Temporaries,  Up: C++ Misunderstandings
57567
5756814.7.4 Implicit Copy-Assignment for Virtual Bases
57569-------------------------------------------------
57570
57571When a base class is virtual, only one subobject of the base class
57572belongs to each full object.  Also, the constructors and destructors are
57573invoked only once, and called from the most-derived class.  However,
57574such objects behave unspecified when being assigned.  For example:
57575
57576     struct Base{
57577       char *name;
57578       Base(char *n) : name(strdup(n)){}
57579       Base& operator= (const Base& other){
57580        free (name);
57581        name = strdup (other.name);
57582       }
57583     };
57584
57585     struct A:virtual Base{
57586       int val;
57587       A():Base("A"){}
57588     };
57589
57590     struct B:virtual Base{
57591       int bval;
57592       B():Base("B"){}
57593     };
57594
57595     struct Derived:public A, public B{
57596       Derived():Base("Derived"){}
57597     };
57598
57599     void func(Derived &d1, Derived &d2)
57600     {
57601       d1 = d2;
57602     }
57603
57604 The C++ standard specifies that 'Base::Base' is only called once when
57605constructing or copy-constructing a Derived object.  It is unspecified
57606whether 'Base::operator=' is called more than once when the implicit
57607copy-assignment for Derived objects is invoked (as it is inside 'func'
57608in the example).
57609
57610 G++ implements the "intuitive" algorithm for copy-assignment: assign
57611all direct bases, then assign all members.  In that algorithm, the
57612virtual base subobject can be encountered more than once.  In the
57613example, copying proceeds in the following order: 'val', 'name' (via
57614'strdup'), 'bval', and 'name' again.
57615
57616 If application code relies on copy-assignment, a user-defined
57617copy-assignment operator removes any uncertainties.  With such an
57618operator, the application can define whether and how the virtual base
57619subobject is assigned.
57620
57621
57622File: gcc.info,  Node: Non-bugs,  Next: Warnings and Errors,  Prev: C++ Misunderstandings,  Up: Trouble
57623
5762414.8 Certain Changes We Don't Want to Make
57625==========================================
57626
57627This section lists changes that people frequently request, but which we
57628do not make because we think GCC is better without them.
57629
57630   * Checking the number and type of arguments to a function which has
57631     an old-fashioned definition and no prototype.
57632
57633     Such a feature would work only occasionally--only for calls that
57634     appear in the same file as the called function, following the
57635     definition.  The only way to check all calls reliably is to add a
57636     prototype for the function.  But adding a prototype eliminates the
57637     motivation for this feature.  So the feature is not worthwhile.
57638
57639   * Warning about using an expression whose type is signed as a shift
57640     count.
57641
57642     Shift count operands are probably signed more often than unsigned.
57643     Warning about this would cause far more annoyance than good.
57644
57645   * Warning about assigning a signed value to an unsigned variable.
57646
57647     Such assignments must be very common; warning about them would
57648     cause more annoyance than good.
57649
57650   * Warning when a non-void function value is ignored.
57651
57652     C contains many standard functions that return a value that most
57653     programs choose to ignore.  One obvious example is 'printf'.
57654     Warning about this practice only leads the defensive programmer to
57655     clutter programs with dozens of casts to 'void'.  Such casts are
57656     required so frequently that they become visual noise.  Writing
57657     those casts becomes so automatic that they no longer convey useful
57658     information about the intentions of the programmer.  For functions
57659     where the return value should never be ignored, use the
57660     'warn_unused_result' function attribute (*note Function
57661     Attributes::).
57662
57663   * Making '-fshort-enums' the default.
57664
57665     This would cause storage layout to be incompatible with most other
57666     C compilers.  And it doesn't seem very important, given that you
57667     can get the same result in other ways.  The case where it matters
57668     most is when the enumeration-valued object is inside a structure,
57669     and in that case you can specify a field width explicitly.
57670
57671   * Making bit-fields unsigned by default on particular machines where
57672     "the ABI standard" says to do so.
57673
57674     The ISO C standard leaves it up to the implementation whether a
57675     bit-field declared plain 'int' is signed or not.  This in effect
57676     creates two alternative dialects of C.
57677
57678     The GNU C compiler supports both dialects; you can specify the
57679     signed dialect with '-fsigned-bitfields' and the unsigned dialect
57680     with '-funsigned-bitfields'.  However, this leaves open the
57681     question of which dialect to use by default.
57682
57683     Currently, the preferred dialect makes plain bit-fields signed,
57684     because this is simplest.  Since 'int' is the same as 'signed int'
57685     in every other context, it is cleanest for them to be the same in
57686     bit-fields as well.
57687
57688     Some computer manufacturers have published Application Binary
57689     Interface standards which specify that plain bit-fields should be
57690     unsigned.  It is a mistake, however, to say anything about this
57691     issue in an ABI.  This is because the handling of plain bit-fields
57692     distinguishes two dialects of C.  Both dialects are meaningful on
57693     every type of machine.  Whether a particular object file was
57694     compiled using signed bit-fields or unsigned is of no concern to
57695     other object files, even if they access the same bit-fields in the
57696     same data structures.
57697
57698     A given program is written in one or the other of these two
57699     dialects.  The program stands a chance to work on most any machine
57700     if it is compiled with the proper dialect.  It is unlikely to work
57701     at all if compiled with the wrong dialect.
57702
57703     Many users appreciate the GNU C compiler because it provides an
57704     environment that is uniform across machines.  These users would be
57705     inconvenienced if the compiler treated plain bit-fields differently
57706     on certain machines.
57707
57708     Occasionally users write programs intended only for a particular
57709     machine type.  On these occasions, the users would benefit if the
57710     GNU C compiler were to support by default the same dialect as the
57711     other compilers on that machine.  But such applications are rare.
57712     And users writing a program to run on more than one type of machine
57713     cannot possibly benefit from this kind of compatibility.
57714
57715     This is why GCC does and will treat plain bit-fields in the same
57716     fashion on all types of machines (by default).
57717
57718     There are some arguments for making bit-fields unsigned by default
57719     on all machines.  If, for example, this becomes a universal de
57720     facto standard, it would make sense for GCC to go along with it.
57721     This is something to be considered in the future.
57722
57723     (Of course, users strongly concerned about portability should
57724     indicate explicitly in each bit-field whether it is signed or not.
57725     In this way, they write programs which have the same meaning in
57726     both C dialects.)
57727
57728   * Undefining '__STDC__' when '-ansi' is not used.
57729
57730     Currently, GCC defines '__STDC__' unconditionally.  This provides
57731     good results in practice.
57732
57733     Programmers normally use conditionals on '__STDC__' to ask whether
57734     it is safe to use certain features of ISO C, such as function
57735     prototypes or ISO token concatenation.  Since plain 'gcc' supports
57736     all the features of ISO C, the correct answer to these questions is
57737     "yes".
57738
57739     Some users try to use '__STDC__' to check for the availability of
57740     certain library facilities.  This is actually incorrect usage in an
57741     ISO C program, because the ISO C standard says that a conforming
57742     freestanding implementation should define '__STDC__' even though it
57743     does not have the library facilities.  'gcc -ansi -pedantic' is a
57744     conforming freestanding implementation, and it is therefore
57745     required to define '__STDC__', even though it does not come with an
57746     ISO C library.
57747
57748     Sometimes people say that defining '__STDC__' in a compiler that
57749     does not completely conform to the ISO C standard somehow violates
57750     the standard.  This is illogical.  The standard is a standard for
57751     compilers that claim to support ISO C, such as 'gcc -ansi'--not for
57752     other compilers such as plain 'gcc'.  Whatever the ISO C standard
57753     says is relevant to the design of plain 'gcc' without '-ansi' only
57754     for pragmatic reasons, not as a requirement.
57755
57756     GCC normally defines '__STDC__' to be 1, and in addition defines
57757     '__STRICT_ANSI__' if you specify the '-ansi' option, or a '-std'
57758     option for strict conformance to some version of ISO C.  On some
57759     hosts, system include files use a different convention, where
57760     '__STDC__' is normally 0, but is 1 if the user specifies strict
57761     conformance to the C Standard.  GCC follows the host convention
57762     when processing system include files, but when processing user
57763     files it follows the usual GNU C convention.
57764
57765   * Undefining '__STDC__' in C++.
57766
57767     Programs written to compile with C++-to-C translators get the value
57768     of '__STDC__' that goes with the C compiler that is subsequently
57769     used.  These programs must test '__STDC__' to determine what kind
57770     of C preprocessor that compiler uses: whether they should
57771     concatenate tokens in the ISO C fashion or in the traditional
57772     fashion.
57773
57774     These programs work properly with GNU C++ if '__STDC__' is defined.
57775     They would not work otherwise.
57776
57777     In addition, many header files are written to provide prototypes in
57778     ISO C but not in traditional C.  Many of these header files can
57779     work without change in C++ provided '__STDC__' is defined.  If
57780     '__STDC__' is not defined, they will all fail, and will all need to
57781     be changed to test explicitly for C++ as well.
57782
57783   * Deleting "empty" loops.
57784
57785     Historically, GCC has not deleted "empty" loops under the
57786     assumption that the most likely reason you would put one in a
57787     program is to have a delay, so deleting them will not make real
57788     programs run any faster.
57789
57790     However, the rationale here is that optimization of a nonempty loop
57791     cannot produce an empty one.  This held for carefully written C
57792     compiled with less powerful optimizers but is not always the case
57793     for carefully written C++ or with more powerful optimizers.  Thus
57794     GCC will remove operations from loops whenever it can determine
57795     those operations are not externally visible (apart from the time
57796     taken to execute them, of course).  In case the loop can be proved
57797     to be finite, GCC will also remove the loop itself.
57798
57799     Be aware of this when performing timing tests, for instance the
57800     following loop can be completely removed, provided
57801     'some_expression' can provably not change any global state.
57802
57803          {
57804             int sum = 0;
57805             int ix;
57806
57807             for (ix = 0; ix != 10000; ix++)
57808                sum += some_expression;
57809          }
57810
57811     Even though 'sum' is accumulated in the loop, no use is made of
57812     that summation, so the accumulation can be removed.
57813
57814   * Making side effects happen in the same order as in some other
57815     compiler.
57816
57817     It is never safe to depend on the order of evaluation of side
57818     effects.  For example, a function call like this may very well
57819     behave differently from one compiler to another:
57820
57821          void func (int, int);
57822
57823          int i = 2;
57824          func (i++, i++);
57825
57826     There is no guarantee (in either the C or the C++ standard language
57827     definitions) that the increments will be evaluated in any
57828     particular order.  Either increment might happen first.  'func'
57829     might get the arguments '2, 3', or it might get '3, 2', or even '2,
57830     2'.
57831
57832   * Making certain warnings into errors by default.
57833
57834     Some ISO C testsuites report failure when the compiler does not
57835     produce an error message for a certain program.
57836
57837     ISO C requires a "diagnostic" message for certain kinds of invalid
57838     programs, but a warning is defined by GCC to count as a diagnostic.
57839     If GCC produces a warning but not an error, that is correct ISO C
57840     support.  If testsuites call this "failure", they should be run
57841     with the GCC option '-pedantic-errors', which will turn these
57842     warnings into errors.
57843
57844
57845File: gcc.info,  Node: Warnings and Errors,  Prev: Non-bugs,  Up: Trouble
57846
5784714.9 Warning Messages and Error Messages
57848========================================
57849
57850The GNU compiler can produce two kinds of diagnostics: errors and
57851warnings.  Each kind has a different purpose:
57852
57853     "Errors" report problems that make it impossible to compile your
57854     program.  GCC reports errors with the source file name and line
57855     number where the problem is apparent.
57856
57857     "Warnings" report other unusual conditions in your code that _may_
57858     indicate a problem, although compilation can (and does) proceed.
57859     Warning messages also report the source file name and line number,
57860     but include the text 'warning:' to distinguish them from error
57861     messages.
57862
57863 Warnings may indicate danger points where you should check to make sure
57864that your program really does what you intend; or the use of obsolete
57865features; or the use of nonstandard features of GNU C or C++.  Many
57866warnings are issued only if you ask for them, with one of the '-W'
57867options (for instance, '-Wall' requests a variety of useful warnings).
57868
57869 GCC always tries to compile your program if possible; it never
57870gratuitously rejects a program whose meaning is clear merely because
57871(for instance) it fails to conform to a standard.  In some cases,
57872however, the C and C++ standards specify that certain extensions are
57873forbidden, and a diagnostic _must_ be issued by a conforming compiler.
57874The '-pedantic' option tells GCC to issue warnings in such cases;
57875'-pedantic-errors' says to make them errors instead.  This does not mean
57876that _all_ non-ISO constructs get warnings or errors.
57877
57878 *Note Options to Request or Suppress Warnings: Warning Options, for
57879more detail on these and related command-line options.
57880
57881
57882File: gcc.info,  Node: Bugs,  Next: Service,  Prev: Trouble,  Up: Top
57883
5788415 Reporting Bugs
57885*****************
57886
57887Your bug reports play an essential role in making GCC reliable.
57888
57889 When you encounter a problem, the first thing to do is to see if it is
57890already known.  *Note Trouble::.  If it isn't known, then you should
57891report the problem.
57892
57893* Menu:
57894
57895* Criteria:  Bug Criteria.   Have you really found a bug?
57896* Reporting: Bug Reporting.  How to report a bug effectively.
57897
57898
57899File: gcc.info,  Node: Bug Criteria,  Next: Bug Reporting,  Up: Bugs
57900
5790115.1 Have You Found a Bug?
57902==========================
57903
57904If you are not sure whether you have found a bug, here are some
57905guidelines:
57906
57907   * If the compiler gets a fatal signal, for any input whatever, that
57908     is a compiler bug.  Reliable compilers never crash.
57909
57910   * If the compiler produces invalid assembly code, for any input
57911     whatever (except an 'asm' statement), that is a compiler bug,
57912     unless the compiler reports errors (not just warnings) which would
57913     ordinarily prevent the assembler from being run.
57914
57915   * If the compiler produces valid assembly code that does not
57916     correctly execute the input source code, that is a compiler bug.
57917
57918     However, you must double-check to make sure, because you may have a
57919     program whose behavior is undefined, which happened by chance to
57920     give the desired results with another C or C++ compiler.
57921
57922     For example, in many nonoptimizing compilers, you can write 'x;' at
57923     the end of a function instead of 'return x;', with the same
57924     results.  But the value of the function is undefined if 'return' is
57925     omitted; it is not a bug when GCC produces different results.
57926
57927     Problems often result from expressions with two increment
57928     operators, as in 'f (*p++, *p++)'.  Your previous compiler might
57929     have interpreted that expression the way you intended; GCC might
57930     interpret it another way.  Neither compiler is wrong.  The bug is
57931     in your code.
57932
57933     After you have localized the error to a single source line, it
57934     should be easy to check for these things.  If your program is
57935     correct and well defined, you have found a compiler bug.
57936
57937   * If the compiler produces an error message for valid input, that is
57938     a compiler bug.
57939
57940   * If the compiler does not produce an error message for invalid
57941     input, that is a compiler bug.  However, you should note that your
57942     idea of "invalid input" might be someone else's idea of "an
57943     extension" or "support for traditional practice".
57944
57945   * If you are an experienced user of one of the languages GCC
57946     supports, your suggestions for improvement of GCC are welcome in
57947     any case.
57948
57949
57950File: gcc.info,  Node: Bug Reporting,  Prev: Bug Criteria,  Up: Bugs
57951
5795215.2 How and Where to Report Bugs
57953=================================
57954
57955Bugs should be reported to the bug database at
57956<https://gcc.gnu.org/bugs/>.
57957
57958
57959File: gcc.info,  Node: Service,  Next: Contributing,  Prev: Bugs,  Up: Top
57960
5796116 How To Get Help with GCC
57962***************************
57963
57964If you need help installing, using or changing GCC, there are two ways
57965to find it:
57966
57967   * Send a message to a suitable network mailing list.  First try
57968     <gcc-help@gcc.gnu.org> (for help installing or using GCC), and if
57969     that brings no response, try <gcc@gcc.gnu.org>.  For help changing
57970     GCC, ask <gcc@gcc.gnu.org>.  If you think you have found a bug in
57971     GCC, please report it following the instructions at *note Bug
57972     Reporting::.
57973
57974   * Look in the service directory for someone who might help you for a
57975     fee.  The service directory is found at
57976     <https://www.fsf.org/resources/service>.
57977
57978 For further information, see <http://gcc.gnu.org/faq.html#support>.
57979
57980
57981File: gcc.info,  Node: Contributing,  Next: Funding,  Prev: Service,  Up: Top
57982
5798317 Contributing to GCC Development
57984**********************************
57985
57986If you would like to help pretest GCC releases to assure they work well,
57987current development sources are available via Git (see
57988<http://gcc.gnu.org/git.html>).  Source and binary snapshots are also
57989available for FTP; see <http://gcc.gnu.org/snapshots.html>.
57990
57991 If you would like to work on improvements to GCC, please read the
57992advice at these URLs:
57993
57994     <http://gcc.gnu.org/contribute.html>
57995     <http://gcc.gnu.org/contributewhy.html>
57996
57997for information on how to make useful contributions and avoid
57998duplication of effort.  Suggested projects are listed at
57999<http://gcc.gnu.org/projects/>.
58000
58001
58002File: gcc.info,  Node: Funding,  Next: GNU Project,  Prev: Contributing,  Up: Top
58003
58004Funding Free Software
58005*********************
58006
58007If you want to have more free software a few years from now, it makes
58008sense for you to help encourage people to contribute funds for its
58009development.  The most effective approach known is to encourage
58010commercial redistributors to donate.
58011
58012 Users of free software systems can boost the pace of development by
58013encouraging for-a-fee distributors to donate part of their selling price
58014to free software developers--the Free Software Foundation, and others.
58015
58016 The way to convince distributors to do this is to demand it and expect
58017it from them.  So when you compare distributors, judge them partly by
58018how much they give to free software development.  Show distributors they
58019must compete to be the one who gives the most.
58020
58021 To make this approach work, you must insist on numbers that you can
58022compare, such as, "We will donate ten dollars to the Frobnitz project
58023for each disk sold."  Don't be satisfied with a vague promise, such as
58024"A portion of the profits are donated," since it doesn't give a basis
58025for comparison.
58026
58027 Even a precise fraction "of the profits from this disk" is not very
58028meaningful, since creative accounting and unrelated business decisions
58029can greatly alter what fraction of the sales price counts as profit.  If
58030the price you pay is $50, ten percent of the profit is probably less
58031than a dollar; it might be a few cents, or nothing at all.
58032
58033 Some redistributors do development work themselves.  This is useful
58034too; but to keep everyone honest, you need to inquire how much they do,
58035and what kind.  Some kinds of development make much more long-term
58036difference than others.  For example, maintaining a separate version of
58037a program contributes very little; maintaining the standard version of a
58038program for the whole community contributes much.  Easy new ports
58039contribute little, since someone else would surely do them; difficult
58040ports such as adding a new CPU to the GNU Compiler Collection contribute
58041more; major new features or packages contribute the most.
58042
58043 By establishing the idea that supporting further development is "the
58044proper thing to do" when distributing free software for a fee, we can
58045assure a steady flow of resources into making more free software.
58046
58047     Copyright (C) 1994 Free Software Foundation, Inc.
58048     Verbatim copying and redistribution of this section is permitted
58049     without royalty; alteration is not permitted.
58050
58051
58052File: gcc.info,  Node: GNU Project,  Next: Copying,  Prev: Funding,  Up: Top
58053
58054The GNU Project and GNU/Linux
58055*****************************
58056
58057The GNU Project was launched in 1984 to develop a complete Unix-like
58058operating system which is free software: the GNU system.  (GNU is a
58059recursive acronym for "GNU's Not Unix"; it is pronounced "guh-NEW".)
58060Variants of the GNU operating system, which use the kernel Linux, are
58061now widely used; though these systems are often referred to as "Linux",
58062they are more accurately called GNU/Linux systems.
58063
58064 For more information, see:
58065     <http://www.gnu.org/>
58066     <http://www.gnu.org/gnu/linux-and-gnu.html>
58067
58068
58069File: gcc.info,  Node: Copying,  Next: GNU Free Documentation License,  Prev: GNU Project,  Up: Top
58070
58071GNU General Public License
58072**************************
58073
58074                        Version 3, 29 June 2007
58075
58076     Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
58077
58078     Everyone is permitted to copy and distribute verbatim copies of this
58079     license document, but changing it is not allowed.
58080
58081Preamble
58082========
58083
58084The GNU General Public License is a free, copyleft license for software
58085and other kinds of works.
58086
58087 The licenses for most software and other practical works are designed
58088to take away your freedom to share and change the works.  By contrast,
58089the GNU General Public License is intended to guarantee your freedom to
58090share and change all versions of a program-to make sure it remains free
58091software for all its users.  We, the Free Software Foundation, use the
58092GNU General Public License for most of our software; it applies also to
58093any other work released this way by its authors.  You can apply it to
58094your programs, too.
58095
58096 When we speak of free software, we are referring to freedom, not price.
58097Our General Public Licenses are designed to make sure that you have the
58098freedom to distribute copies of free software (and charge for them if
58099you wish), that you receive source code or can get it if you want it,
58100that you can change the software or use pieces of it in new free
58101programs, and that you know you can do these things.
58102
58103 To protect your rights, we need to prevent others from denying you
58104these rights or asking you to surrender the rights.  Therefore, you have
58105certain responsibilities if you distribute copies of the software, or if
58106you modify it: responsibilities to respect the freedom of others.
58107
58108 For example, if you distribute copies of such a program, whether gratis
58109or for a fee, you must pass on to the recipients the same freedoms that
58110you received.  You must make sure that they, too, receive or can get the
58111source code.  And you must show them these terms so they know their
58112rights.
58113
58114 Developers that use the GNU GPL protect your rights with two steps: (1)
58115assert copyright on the software, and (2) offer you this License giving
58116you legal permission to copy, distribute and/or modify it.
58117
58118 For the developers' and authors' protection, the GPL clearly explains
58119that there is no warranty for this free software.  For both users' and
58120authors' sake, the GPL requires that modified versions be marked as
58121changed, so that their problems will not be attributed erroneously to
58122authors of previous versions.
58123
58124 Some devices are designed to deny users access to install or run
58125modified versions of the software inside them, although the manufacturer
58126can do so.  This is fundamentally incompatible with the aim of
58127protecting users' freedom to change the software.  The systematic
58128pattern of such abuse occurs in the area of products for individuals to
58129use, which is precisely where it is most unacceptable.  Therefore, we
58130have designed this version of the GPL to prohibit the practice for those
58131products.  If such problems arise substantially in other domains, we
58132stand ready to extend this provision to those domains in future versions
58133of the GPL, as needed to protect the freedom of users.
58134
58135 Finally, every program is threatened constantly by software patents.
58136States should not allow patents to restrict development and use of
58137software on general-purpose computers, but in those that do, we wish to
58138avoid the special danger that patents applied to a free program could
58139make it effectively proprietary.  To prevent this, the GPL assures that
58140patents cannot be used to render the program non-free.
58141
58142 The precise terms and conditions for copying, distribution and
58143modification follow.
58144
58145TERMS AND CONDITIONS
58146====================
58147
58148  0. Definitions.
58149
58150     "This License" refers to version 3 of the GNU General Public
58151     License.
58152
58153     "Copyright" also means copyright-like laws that apply to other
58154     kinds of works, such as semiconductor masks.
58155
58156     "The Program" refers to any copyrightable work licensed under this
58157     License.  Each licensee is addressed as "you".  "Licensees" and
58158     "recipients" may be individuals or organizations.
58159
58160     To "modify" a work means to copy from or adapt all or part of the
58161     work in a fashion requiring copyright permission, other than the
58162     making of an exact copy.  The resulting work is called a "modified
58163     version" of the earlier work or a work "based on" the earlier work.
58164
58165     A "covered work" means either the unmodified Program or a work
58166     based on the Program.
58167
58168     To "propagate" a work means to do anything with it that, without
58169     permission, would make you directly or secondarily liable for
58170     infringement under applicable copyright law, except executing it on
58171     a computer or modifying a private copy.  Propagation includes
58172     copying, distribution (with or without modification), making
58173     available to the public, and in some countries other activities as
58174     well.
58175
58176     To "convey" a work means any kind of propagation that enables other
58177     parties to make or receive copies.  Mere interaction with a user
58178     through a computer network, with no transfer of a copy, is not
58179     conveying.
58180
58181     An interactive user interface displays "Appropriate Legal Notices"
58182     to the extent that it includes a convenient and prominently visible
58183     feature that (1) displays an appropriate copyright notice, and (2)
58184     tells the user that there is no warranty for the work (except to
58185     the extent that warranties are provided), that licensees may convey
58186     the work under this License, and how to view a copy of this
58187     License.  If the interface presents a list of user commands or
58188     options, such as a menu, a prominent item in the list meets this
58189     criterion.
58190
58191  1. Source Code.
58192
58193     The "source code" for a work means the preferred form of the work
58194     for making modifications to it.  "Object code" means any non-source
58195     form of a work.
58196
58197     A "Standard Interface" means an interface that either is an
58198     official standard defined by a recognized standards body, or, in
58199     the case of interfaces specified for a particular programming
58200     language, one that is widely used among developers working in that
58201     language.
58202
58203     The "System Libraries" of an executable work include anything,
58204     other than the work as a whole, that (a) is included in the normal
58205     form of packaging a Major Component, but which is not part of that
58206     Major Component, and (b) serves only to enable use of the work with
58207     that Major Component, or to implement a Standard Interface for
58208     which an implementation is available to the public in source code
58209     form.  A "Major Component", in this context, means a major
58210     essential component (kernel, window system, and so on) of the
58211     specific operating system (if any) on which the executable work
58212     runs, or a compiler used to produce the work, or an object code
58213     interpreter used to run it.
58214
58215     The "Corresponding Source" for a work in object code form means all
58216     the source code needed to generate, install, and (for an executable
58217     work) run the object code and to modify the work, including scripts
58218     to control those activities.  However, it does not include the
58219     work's System Libraries, or general-purpose tools or generally
58220     available free programs which are used unmodified in performing
58221     those activities but which are not part of the work.  For example,
58222     Corresponding Source includes interface definition files associated
58223     with source files for the work, and the source code for shared
58224     libraries and dynamically linked subprograms that the work is
58225     specifically designed to require, such as by intimate data
58226     communication or control flow between those subprograms and other
58227     parts of the work.
58228
58229     The Corresponding Source need not include anything that users can
58230     regenerate automatically from other parts of the Corresponding
58231     Source.
58232
58233     The Corresponding Source for a work in source code form is that
58234     same work.
58235
58236  2. Basic Permissions.
58237
58238     All rights granted under this License are granted for the term of
58239     copyright on the Program, and are irrevocable provided the stated
58240     conditions are met.  This License explicitly affirms your unlimited
58241     permission to run the unmodified Program.  The output from running
58242     a covered work is covered by this License only if the output, given
58243     its content, constitutes a covered work.  This License acknowledges
58244     your rights of fair use or other equivalent, as provided by
58245     copyright law.
58246
58247     You may make, run and propagate covered works that you do not
58248     convey, without conditions so long as your license otherwise
58249     remains in force.  You may convey covered works to others for the
58250     sole purpose of having them make modifications exclusively for you,
58251     or provide you with facilities for running those works, provided
58252     that you comply with the terms of this License in conveying all
58253     material for which you do not control copyright.  Those thus making
58254     or running the covered works for you must do so exclusively on your
58255     behalf, under your direction and control, on terms that prohibit
58256     them from making any copies of your copyrighted material outside
58257     their relationship with you.
58258
58259     Conveying under any other circumstances is permitted solely under
58260     the conditions stated below.  Sublicensing is not allowed; section
58261     10 makes it unnecessary.
58262
58263  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
58264
58265     No covered work shall be deemed part of an effective technological
58266     measure under any applicable law fulfilling obligations under
58267     article 11 of the WIPO copyright treaty adopted on 20 December
58268     1996, or similar laws prohibiting or restricting circumvention of
58269     such measures.
58270
58271     When you convey a covered work, you waive any legal power to forbid
58272     circumvention of technological measures to the extent such
58273     circumvention is effected by exercising rights under this License
58274     with respect to the covered work, and you disclaim any intention to
58275     limit operation or modification of the work as a means of
58276     enforcing, against the work's users, your or third parties' legal
58277     rights to forbid circumvention of technological measures.
58278
58279  4. Conveying Verbatim Copies.
58280
58281     You may convey verbatim copies of the Program's source code as you
58282     receive it, in any medium, provided that you conspicuously and
58283     appropriately publish on each copy an appropriate copyright notice;
58284     keep intact all notices stating that this License and any
58285     non-permissive terms added in accord with section 7 apply to the
58286     code; keep intact all notices of the absence of any warranty; and
58287     give all recipients a copy of this License along with the Program.
58288
58289     You may charge any price or no price for each copy that you convey,
58290     and you may offer support or warranty protection for a fee.
58291
58292  5. Conveying Modified Source Versions.
58293
58294     You may convey a work based on the Program, or the modifications to
58295     produce it from the Program, in the form of source code under the
58296     terms of section 4, provided that you also meet all of these
58297     conditions:
58298
58299       a. The work must carry prominent notices stating that you
58300          modified it, and giving a relevant date.
58301
58302       b. The work must carry prominent notices stating that it is
58303          released under this License and any conditions added under
58304          section 7.  This requirement modifies the requirement in
58305          section 4 to "keep intact all notices".
58306
58307       c. You must license the entire work, as a whole, under this
58308          License to anyone who comes into possession of a copy.  This
58309          License will therefore apply, along with any applicable
58310          section 7 additional terms, to the whole of the work, and all
58311          its parts, regardless of how they are packaged.  This License
58312          gives no permission to license the work in any other way, but
58313          it does not invalidate such permission if you have separately
58314          received it.
58315
58316       d. If the work has interactive user interfaces, each must display
58317          Appropriate Legal Notices; however, if the Program has
58318          interactive interfaces that do not display Appropriate Legal
58319          Notices, your work need not make them do so.
58320
58321     A compilation of a covered work with other separate and independent
58322     works, which are not by their nature extensions of the covered
58323     work, and which are not combined with it such as to form a larger
58324     program, in or on a volume of a storage or distribution medium, is
58325     called an "aggregate" if the compilation and its resulting
58326     copyright are not used to limit the access or legal rights of the
58327     compilation's users beyond what the individual works permit.
58328     Inclusion of a covered work in an aggregate does not cause this
58329     License to apply to the other parts of the aggregate.
58330
58331  6. Conveying Non-Source Forms.
58332
58333     You may convey a covered work in object code form under the terms
58334     of sections 4 and 5, provided that you also convey the
58335     machine-readable Corresponding Source under the terms of this
58336     License, in one of these ways:
58337
58338       a. Convey the object code in, or embodied in, a physical product
58339          (including a physical distribution medium), accompanied by the
58340          Corresponding Source fixed on a durable physical medium
58341          customarily used for software interchange.
58342
58343       b. Convey the object code in, or embodied in, a physical product
58344          (including a physical distribution medium), accompanied by a
58345          written offer, valid for at least three years and valid for as
58346          long as you offer spare parts or customer support for that
58347          product model, to give anyone who possesses the object code
58348          either (1) a copy of the Corresponding Source for all the
58349          software in the product that is covered by this License, on a
58350          durable physical medium customarily used for software
58351          interchange, for a price no more than your reasonable cost of
58352          physically performing this conveying of source, or (2) access
58353          to copy the Corresponding Source from a network server at no
58354          charge.
58355
58356       c. Convey individual copies of the object code with a copy of the
58357          written offer to provide the Corresponding Source.  This
58358          alternative is allowed only occasionally and noncommercially,
58359          and only if you received the object code with such an offer,
58360          in accord with subsection 6b.
58361
58362       d. Convey the object code by offering access from a designated
58363          place (gratis or for a charge), and offer equivalent access to
58364          the Corresponding Source in the same way through the same
58365          place at no further charge.  You need not require recipients
58366          to copy the Corresponding Source along with the object code.
58367          If the place to copy the object code is a network server, the
58368          Corresponding Source may be on a different server (operated by
58369          you or a third party) that supports equivalent copying
58370          facilities, provided you maintain clear directions next to the
58371          object code saying where to find the Corresponding Source.
58372          Regardless of what server hosts the Corresponding Source, you
58373          remain obligated to ensure that it is available for as long as
58374          needed to satisfy these requirements.
58375
58376       e. Convey the object code using peer-to-peer transmission,
58377          provided you inform other peers where the object code and
58378          Corresponding Source of the work are being offered to the
58379          general public at no charge under subsection 6d.
58380
58381     A separable portion of the object code, whose source code is
58382     excluded from the Corresponding Source as a System Library, need
58383     not be included in conveying the object code work.
58384
58385     A "User Product" is either (1) a "consumer product", which means
58386     any tangible personal property which is normally used for personal,
58387     family, or household purposes, or (2) anything designed or sold for
58388     incorporation into a dwelling.  In determining whether a product is
58389     a consumer product, doubtful cases shall be resolved in favor of
58390     coverage.  For a particular product received by a particular user,
58391     "normally used" refers to a typical or common use of that class of
58392     product, regardless of the status of the particular user or of the
58393     way in which the particular user actually uses, or expects or is
58394     expected to use, the product.  A product is a consumer product
58395     regardless of whether the product has substantial commercial,
58396     industrial or non-consumer uses, unless such uses represent the
58397     only significant mode of use of the product.
58398
58399     "Installation Information" for a User Product means any methods,
58400     procedures, authorization keys, or other information required to
58401     install and execute modified versions of a covered work in that
58402     User Product from a modified version of its Corresponding Source.
58403     The information must suffice to ensure that the continued
58404     functioning of the modified object code is in no case prevented or
58405     interfered with solely because modification has been made.
58406
58407     If you convey an object code work under this section in, or with,
58408     or specifically for use in, a User Product, and the conveying
58409     occurs as part of a transaction in which the right of possession
58410     and use of the User Product is transferred to the recipient in
58411     perpetuity or for a fixed term (regardless of how the transaction
58412     is characterized), the Corresponding Source conveyed under this
58413     section must be accompanied by the Installation Information.  But
58414     this requirement does not apply if neither you nor any third party
58415     retains the ability to install modified object code on the User
58416     Product (for example, the work has been installed in ROM).
58417
58418     The requirement to provide Installation Information does not
58419     include a requirement to continue to provide support service,
58420     warranty, or updates for a work that has been modified or installed
58421     by the recipient, or for the User Product in which it has been
58422     modified or installed.  Access to a network may be denied when the
58423     modification itself materially and adversely affects the operation
58424     of the network or violates the rules and protocols for
58425     communication across the network.
58426
58427     Corresponding Source conveyed, and Installation Information
58428     provided, in accord with this section must be in a format that is
58429     publicly documented (and with an implementation available to the
58430     public in source code form), and must require no special password
58431     or key for unpacking, reading or copying.
58432
58433  7. Additional Terms.
58434
58435     "Additional permissions" are terms that supplement the terms of
58436     this License by making exceptions from one or more of its
58437     conditions.  Additional permissions that are applicable to the
58438     entire Program shall be treated as though they were included in
58439     this License, to the extent that they are valid under applicable
58440     law.  If additional permissions apply only to part of the Program,
58441     that part may be used separately under those permissions, but the
58442     entire Program remains governed by this License without regard to
58443     the additional permissions.
58444
58445     When you convey a copy of a covered work, you may at your option
58446     remove any additional permissions from that copy, or from any part
58447     of it.  (Additional permissions may be written to require their own
58448     removal in certain cases when you modify the work.)  You may place
58449     additional permissions on material, added by you to a covered work,
58450     for which you have or can give appropriate copyright permission.
58451
58452     Notwithstanding any other provision of this License, for material
58453     you add to a covered work, you may (if authorized by the copyright
58454     holders of that material) supplement the terms of this License with
58455     terms:
58456
58457       a. Disclaiming warranty or limiting liability differently from
58458          the terms of sections 15 and 16 of this License; or
58459
58460       b. Requiring preservation of specified reasonable legal notices
58461          or author attributions in that material or in the Appropriate
58462          Legal Notices displayed by works containing it; or
58463
58464       c. Prohibiting misrepresentation of the origin of that material,
58465          or requiring that modified versions of such material be marked
58466          in reasonable ways as different from the original version; or
58467
58468       d. Limiting the use for publicity purposes of names of licensors
58469          or authors of the material; or
58470
58471       e. Declining to grant rights under trademark law for use of some
58472          trade names, trademarks, or service marks; or
58473
58474       f. Requiring indemnification of licensors and authors of that
58475          material by anyone who conveys the material (or modified
58476          versions of it) with contractual assumptions of liability to
58477          the recipient, for any liability that these contractual
58478          assumptions directly impose on those licensors and authors.
58479
58480     All other non-permissive additional terms are considered "further
58481     restrictions" within the meaning of section 10.  If the Program as
58482     you received it, or any part of it, contains a notice stating that
58483     it is governed by this License along with a term that is a further
58484     restriction, you may remove that term.  If a license document
58485     contains a further restriction but permits relicensing or conveying
58486     under this License, you may add to a covered work material governed
58487     by the terms of that license document, provided that the further
58488     restriction does not survive such relicensing or conveying.
58489
58490     If you add terms to a covered work in accord with this section, you
58491     must place, in the relevant source files, a statement of the
58492     additional terms that apply to those files, or a notice indicating
58493     where to find the applicable terms.
58494
58495     Additional terms, permissive or non-permissive, may be stated in
58496     the form of a separately written license, or stated as exceptions;
58497     the above requirements apply either way.
58498
58499  8. Termination.
58500
58501     You may not propagate or modify a covered work except as expressly
58502     provided under this License.  Any attempt otherwise to propagate or
58503     modify it is void, and will automatically terminate your rights
58504     under this License (including any patent licenses granted under the
58505     third paragraph of section 11).
58506
58507     However, if you cease all violation of this License, then your
58508     license from a particular copyright holder is reinstated (a)
58509     provisionally, unless and until the copyright holder explicitly and
58510     finally terminates your license, and (b) permanently, if the
58511     copyright holder fails to notify you of the violation by some
58512     reasonable means prior to 60 days after the cessation.
58513
58514     Moreover, your license from a particular copyright holder is
58515     reinstated permanently if the copyright holder notifies you of the
58516     violation by some reasonable means, this is the first time you have
58517     received notice of violation of this License (for any work) from
58518     that copyright holder, and you cure the violation prior to 30 days
58519     after your receipt of the notice.
58520
58521     Termination of your rights under this section does not terminate
58522     the licenses of parties who have received copies or rights from you
58523     under this License.  If your rights have been terminated and not
58524     permanently reinstated, you do not qualify to receive new licenses
58525     for the same material under section 10.
58526
58527  9. Acceptance Not Required for Having Copies.
58528
58529     You are not required to accept this License in order to receive or
58530     run a copy of the Program.  Ancillary propagation of a covered work
58531     occurring solely as a consequence of using peer-to-peer
58532     transmission to receive a copy likewise does not require
58533     acceptance.  However, nothing other than this License grants you
58534     permission to propagate or modify any covered work.  These actions
58535     infringe copyright if you do not accept this License.  Therefore,
58536     by modifying or propagating a covered work, you indicate your
58537     acceptance of this License to do so.
58538
58539  10. Automatic Licensing of Downstream Recipients.
58540
58541     Each time you convey a covered work, the recipient automatically
58542     receives a license from the original licensors, to run, modify and
58543     propagate that work, subject to this License.  You are not
58544     responsible for enforcing compliance by third parties with this
58545     License.
58546
58547     An "entity transaction" is a transaction transferring control of an
58548     organization, or substantially all assets of one, or subdividing an
58549     organization, or merging organizations.  If propagation of a
58550     covered work results from an entity transaction, each party to that
58551     transaction who receives a copy of the work also receives whatever
58552     licenses to the work the party's predecessor in interest had or
58553     could give under the previous paragraph, plus a right to possession
58554     of the Corresponding Source of the work from the predecessor in
58555     interest, if the predecessor has it or can get it with reasonable
58556     efforts.
58557
58558     You may not impose any further restrictions on the exercise of the
58559     rights granted or affirmed under this License.  For example, you
58560     may not impose a license fee, royalty, or other charge for exercise
58561     of rights granted under this License, and you may not initiate
58562     litigation (including a cross-claim or counterclaim in a lawsuit)
58563     alleging that any patent claim is infringed by making, using,
58564     selling, offering for sale, or importing the Program or any portion
58565     of it.
58566
58567  11. Patents.
58568
58569     A "contributor" is a copyright holder who authorizes use under this
58570     License of the Program or a work on which the Program is based.
58571     The work thus licensed is called the contributor's "contributor
58572     version".
58573
58574     A contributor's "essential patent claims" are all patent claims
58575     owned or controlled by the contributor, whether already acquired or
58576     hereafter acquired, that would be infringed by some manner,
58577     permitted by this License, of making, using, or selling its
58578     contributor version, but do not include claims that would be
58579     infringed only as a consequence of further modification of the
58580     contributor version.  For purposes of this definition, "control"
58581     includes the right to grant patent sublicenses in a manner
58582     consistent with the requirements of this License.
58583
58584     Each contributor grants you a non-exclusive, worldwide,
58585     royalty-free patent license under the contributor's essential
58586     patent claims, to make, use, sell, offer for sale, import and
58587     otherwise run, modify and propagate the contents of its contributor
58588     version.
58589
58590     In the following three paragraphs, a "patent license" is any
58591     express agreement or commitment, however denominated, not to
58592     enforce a patent (such as an express permission to practice a
58593     patent or covenant not to sue for patent infringement).  To "grant"
58594     such a patent license to a party means to make such an agreement or
58595     commitment not to enforce a patent against the party.
58596
58597     If you convey a covered work, knowingly relying on a patent
58598     license, and the Corresponding Source of the work is not available
58599     for anyone to copy, free of charge and under the terms of this
58600     License, through a publicly available network server or other
58601     readily accessible means, then you must either (1) cause the
58602     Corresponding Source to be so available, or (2) arrange to deprive
58603     yourself of the benefit of the patent license for this particular
58604     work, or (3) arrange, in a manner consistent with the requirements
58605     of this License, to extend the patent license to downstream
58606     recipients.  "Knowingly relying" means you have actual knowledge
58607     that, but for the patent license, your conveying the covered work
58608     in a country, or your recipient's use of the covered work in a
58609     country, would infringe one or more identifiable patents in that
58610     country that you have reason to believe are valid.
58611
58612     If, pursuant to or in connection with a single transaction or
58613     arrangement, you convey, or propagate by procuring conveyance of, a
58614     covered work, and grant a patent license to some of the parties
58615     receiving the covered work authorizing them to use, propagate,
58616     modify or convey a specific copy of the covered work, then the
58617     patent license you grant is automatically extended to all
58618     recipients of the covered work and works based on it.
58619
58620     A patent license is "discriminatory" if it does not include within
58621     the scope of its coverage, prohibits the exercise of, or is
58622     conditioned on the non-exercise of one or more of the rights that
58623     are specifically granted under this License.  You may not convey a
58624     covered work if you are a party to an arrangement with a third
58625     party that is in the business of distributing software, under which
58626     you make payment to the third party based on the extent of your
58627     activity of conveying the work, and under which the third party
58628     grants, to any of the parties who would receive the covered work
58629     from you, a discriminatory patent license (a) in connection with
58630     copies of the covered work conveyed by you (or copies made from
58631     those copies), or (b) primarily for and in connection with specific
58632     products or compilations that contain the covered work, unless you
58633     entered into that arrangement, or that patent license was granted,
58634     prior to 28 March 2007.
58635
58636     Nothing in this License shall be construed as excluding or limiting
58637     any implied license or other defenses to infringement that may
58638     otherwise be available to you under applicable patent law.
58639
58640  12. No Surrender of Others' Freedom.
58641
58642     If conditions are imposed on you (whether by court order, agreement
58643     or otherwise) that contradict the conditions of this License, they
58644     do not excuse you from the conditions of this License.  If you
58645     cannot convey a covered work so as to satisfy simultaneously your
58646     obligations under this License and any other pertinent obligations,
58647     then as a consequence you may not convey it at all.  For example,
58648     if you agree to terms that obligate you to collect a royalty for
58649     further conveying from those to whom you convey the Program, the
58650     only way you could satisfy both those terms and this License would
58651     be to refrain entirely from conveying the Program.
58652
58653  13. Use with the GNU Affero General Public License.
58654
58655     Notwithstanding any other provision of this License, you have
58656     permission to link or combine any covered work with a work licensed
58657     under version 3 of the GNU Affero General Public License into a
58658     single combined work, and to convey the resulting work.  The terms
58659     of this License will continue to apply to the part which is the
58660     covered work, but the special requirements of the GNU Affero
58661     General Public License, section 13, concerning interaction through
58662     a network will apply to the combination as such.
58663
58664  14. Revised Versions of this License.
58665
58666     The Free Software Foundation may publish revised and/or new
58667     versions of the GNU General Public License from time to time.  Such
58668     new versions will be similar in spirit to the present version, but
58669     may differ in detail to address new problems or concerns.
58670
58671     Each version is given a distinguishing version number.  If the
58672     Program specifies that a certain numbered version of the GNU
58673     General Public License "or any later version" applies to it, you
58674     have the option of following the terms and conditions either of
58675     that numbered version or of any later version published by the Free
58676     Software Foundation.  If the Program does not specify a version
58677     number of the GNU General Public License, you may choose any
58678     version ever published by the Free Software Foundation.
58679
58680     If the Program specifies that a proxy can decide which future
58681     versions of the GNU General Public License can be used, that
58682     proxy's public statement of acceptance of a version permanently
58683     authorizes you to choose that version for the Program.
58684
58685     Later license versions may give you additional or different
58686     permissions.  However, no additional obligations are imposed on any
58687     author or copyright holder as a result of your choosing to follow a
58688     later version.
58689
58690  15. Disclaimer of Warranty.
58691
58692     THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
58693     APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE
58694     COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS"
58695     WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED,
58696     INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
58697     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE
58698     RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.
58699     SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL
58700     NECESSARY SERVICING, REPAIR OR CORRECTION.
58701
58702  16. Limitation of Liability.
58703
58704     IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
58705     WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES
58706     AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR
58707     DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
58708     CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE
58709     THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA
58710     BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
58711     PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
58712     PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF
58713     THE POSSIBILITY OF SUCH DAMAGES.
58714
58715  17. Interpretation of Sections 15 and 16.
58716
58717     If the disclaimer of warranty and limitation of liability provided
58718     above cannot be given local legal effect according to their terms,
58719     reviewing courts shall apply local law that most closely
58720     approximates an absolute waiver of all civil liability in
58721     connection with the Program, unless a warranty or assumption of
58722     liability accompanies a copy of the Program in return for a fee.
58723
58724END OF TERMS AND CONDITIONS
58725===========================
58726
58727How to Apply These Terms to Your New Programs
58728=============================================
58729
58730If you develop a new program, and you want it to be of the greatest
58731possible use to the public, the best way to achieve this is to make it
58732free software which everyone can redistribute and change under these
58733terms.
58734
58735 To do so, attach the following notices to the program.  It is safest to
58736attach them to the start of each source file to most effectively state
58737the exclusion of warranty; and each file should have at least the
58738"copyright" line and a pointer to where the full notice is found.
58739
58740     ONE LINE TO GIVE THE PROGRAM'S NAME AND A BRIEF IDEA OF WHAT IT DOES.
58741     Copyright (C) YEAR NAME OF AUTHOR
58742
58743     This program is free software: you can redistribute it and/or modify
58744     it under the terms of the GNU General Public License as published by
58745     the Free Software Foundation, either version 3 of the License, or (at
58746     your option) any later version.
58747
58748     This program is distributed in the hope that it will be useful, but
58749     WITHOUT ANY WARRANTY; without even the implied warranty of
58750     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
58751     General Public License for more details.
58752
58753     You should have received a copy of the GNU General Public License
58754     along with this program.  If not, see <http://www.gnu.org/licenses/>.
58755
58756 Also add information on how to contact you by electronic and paper
58757mail.
58758
58759 If the program does terminal interaction, make it output a short notice
58760like this when it starts in an interactive mode:
58761
58762     PROGRAM Copyright (C) YEAR NAME OF AUTHOR
58763     This program comes with ABSOLUTELY NO WARRANTY; for details type 'show w'.
58764     This is free software, and you are welcome to redistribute it
58765     under certain conditions; type 'show c' for details.
58766
58767 The hypothetical commands 'show w' and 'show c' should show the
58768appropriate parts of the General Public License.  Of course, your
58769program's commands might be different; for a GUI interface, you would
58770use an "about box".
58771
58772 You should also get your employer (if you work as a programmer) or
58773school, if any, to sign a "copyright disclaimer" for the program, if
58774necessary.  For more information on this, and how to apply and follow
58775the GNU GPL, see <http://www.gnu.org/licenses/>.
58776
58777 The GNU General Public License does not permit incorporating your
58778program into proprietary programs.  If your program is a subroutine
58779library, you may consider it more useful to permit linking proprietary
58780applications with the library.  If this is what you want to do, use the
58781GNU Lesser General Public License instead of this License.  But first,
58782please read <https://www.gnu.org/licenses/why-not-lgpl.html>.
58783
58784
58785File: gcc.info,  Node: GNU Free Documentation License,  Next: Contributors,  Prev: Copying,  Up: Top
58786
58787GNU Free Documentation License
58788******************************
58789
58790                     Version 1.3, 3 November 2008
58791
58792     Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
58793     <http://fsf.org/>
58794
58795     Everyone is permitted to copy and distribute verbatim copies
58796     of this license document, but changing it is not allowed.
58797
58798  0. PREAMBLE
58799
58800     The purpose of this License is to make a manual, textbook, or other
58801     functional and useful document "free" in the sense of freedom: to
58802     assure everyone the effective freedom to copy and redistribute it,
58803     with or without modifying it, either commercially or
58804     noncommercially.  Secondarily, this License preserves for the
58805     author and publisher a way to get credit for their work, while not
58806     being considered responsible for modifications made by others.
58807
58808     This License is a kind of "copyleft", which means that derivative
58809     works of the document must themselves be free in the same sense.
58810     It complements the GNU General Public License, which is a copyleft
58811     license designed for free software.
58812
58813     We have designed this License in order to use it for manuals for
58814     free software, because free software needs free documentation: a
58815     free program should come with manuals providing the same freedoms
58816     that the software does.  But this License is not limited to
58817     software manuals; it can be used for any textual work, regardless
58818     of subject matter or whether it is published as a printed book.  We
58819     recommend this License principally for works whose purpose is
58820     instruction or reference.
58821
58822  1. APPLICABILITY AND DEFINITIONS
58823
58824     This License applies to any manual or other work, in any medium,
58825     that contains a notice placed by the copyright holder saying it can
58826     be distributed under the terms of this License.  Such a notice
58827     grants a world-wide, royalty-free license, unlimited in duration,
58828     to use that work under the conditions stated herein.  The
58829     "Document", below, refers to any such manual or work.  Any member
58830     of the public is a licensee, and is addressed as "you".  You accept
58831     the license if you copy, modify or distribute the work in a way
58832     requiring permission under copyright law.
58833
58834     A "Modified Version" of the Document means any work containing the
58835     Document or a portion of it, either copied verbatim, or with
58836     modifications and/or translated into another language.
58837
58838     A "Secondary Section" is a named appendix or a front-matter section
58839     of the Document that deals exclusively with the relationship of the
58840     publishers or authors of the Document to the Document's overall
58841     subject (or to related matters) and contains nothing that could
58842     fall directly within that overall subject.  (Thus, if the Document
58843     is in part a textbook of mathematics, a Secondary Section may not
58844     explain any mathematics.)  The relationship could be a matter of
58845     historical connection with the subject or with related matters, or
58846     of legal, commercial, philosophical, ethical or political position
58847     regarding them.
58848
58849     The "Invariant Sections" are certain Secondary Sections whose
58850     titles are designated, as being those of Invariant Sections, in the
58851     notice that says that the Document is released under this License.
58852     If a section does not fit the above definition of Secondary then it
58853     is not allowed to be designated as Invariant.  The Document may
58854     contain zero Invariant Sections.  If the Document does not identify
58855     any Invariant Sections then there are none.
58856
58857     The "Cover Texts" are certain short passages of text that are
58858     listed, as Front-Cover Texts or Back-Cover Texts, in the notice
58859     that says that the Document is released under this License.  A
58860     Front-Cover Text may be at most 5 words, and a Back-Cover Text may
58861     be at most 25 words.
58862
58863     A "Transparent" copy of the Document means a machine-readable copy,
58864     represented in a format whose specification is available to the
58865     general public, that is suitable for revising the document
58866     straightforwardly with generic text editors or (for images composed
58867     of pixels) generic paint programs or (for drawings) some widely
58868     available drawing editor, and that is suitable for input to text
58869     formatters or for automatic translation to a variety of formats
58870     suitable for input to text formatters.  A copy made in an otherwise
58871     Transparent file format whose markup, or absence of markup, has
58872     been arranged to thwart or discourage subsequent modification by
58873     readers is not Transparent.  An image format is not Transparent if
58874     used for any substantial amount of text.  A copy that is not
58875     "Transparent" is called "Opaque".
58876
58877     Examples of suitable formats for Transparent copies include plain
58878     ASCII without markup, Texinfo input format, LaTeX input format,
58879     SGML or XML using a publicly available DTD, and standard-conforming
58880     simple HTML, PostScript or PDF designed for human modification.
58881     Examples of transparent image formats include PNG, XCF and JPG.
58882     Opaque formats include proprietary formats that can be read and
58883     edited only by proprietary word processors, SGML or XML for which
58884     the DTD and/or processing tools are not generally available, and
58885     the machine-generated HTML, PostScript or PDF produced by some word
58886     processors for output purposes only.
58887
58888     The "Title Page" means, for a printed book, the title page itself,
58889     plus such following pages as are needed to hold, legibly, the
58890     material this License requires to appear in the title page.  For
58891     works in formats which do not have any title page as such, "Title
58892     Page" means the text near the most prominent appearance of the
58893     work's title, preceding the beginning of the body of the text.
58894
58895     The "publisher" means any person or entity that distributes copies
58896     of the Document to the public.
58897
58898     A section "Entitled XYZ" means a named subunit of the Document
58899     whose title either is precisely XYZ or contains XYZ in parentheses
58900     following text that translates XYZ in another language.  (Here XYZ
58901     stands for a specific section name mentioned below, such as
58902     "Acknowledgements", "Dedications", "Endorsements", or "History".)
58903     To "Preserve the Title" of such a section when you modify the
58904     Document means that it remains a section "Entitled XYZ" according
58905     to this definition.
58906
58907     The Document may include Warranty Disclaimers next to the notice
58908     which states that this License applies to the Document.  These
58909     Warranty Disclaimers are considered to be included by reference in
58910     this License, but only as regards disclaiming warranties: any other
58911     implication that these Warranty Disclaimers may have is void and
58912     has no effect on the meaning of this License.
58913
58914  2. VERBATIM COPYING
58915
58916     You may copy and distribute the Document in any medium, either
58917     commercially or noncommercially, provided that this License, the
58918     copyright notices, and the license notice saying this License
58919     applies to the Document are reproduced in all copies, and that you
58920     add no other conditions whatsoever to those of this License.  You
58921     may not use technical measures to obstruct or control the reading
58922     or further copying of the copies you make or distribute.  However,
58923     you may accept compensation in exchange for copies.  If you
58924     distribute a large enough number of copies you must also follow the
58925     conditions in section 3.
58926
58927     You may also lend copies, under the same conditions stated above,
58928     and you may publicly display copies.
58929
58930  3. COPYING IN QUANTITY
58931
58932     If you publish printed copies (or copies in media that commonly
58933     have printed covers) of the Document, numbering more than 100, and
58934     the Document's license notice requires Cover Texts, you must
58935     enclose the copies in covers that carry, clearly and legibly, all
58936     these Cover Texts: Front-Cover Texts on the front cover, and
58937     Back-Cover Texts on the back cover.  Both covers must also clearly
58938     and legibly identify you as the publisher of these copies.  The
58939     front cover must present the full title with all words of the title
58940     equally prominent and visible.  You may add other material on the
58941     covers in addition.  Copying with changes limited to the covers, as
58942     long as they preserve the title of the Document and satisfy these
58943     conditions, can be treated as verbatim copying in other respects.
58944
58945     If the required texts for either cover are too voluminous to fit
58946     legibly, you should put the first ones listed (as many as fit
58947     reasonably) on the actual cover, and continue the rest onto
58948     adjacent pages.
58949
58950     If you publish or distribute Opaque copies of the Document
58951     numbering more than 100, you must either include a machine-readable
58952     Transparent copy along with each Opaque copy, or state in or with
58953     each Opaque copy a computer-network location from which the general
58954     network-using public has access to download using public-standard
58955     network protocols a complete Transparent copy of the Document, free
58956     of added material.  If you use the latter option, you must take
58957     reasonably prudent steps, when you begin distribution of Opaque
58958     copies in quantity, to ensure that this Transparent copy will
58959     remain thus accessible at the stated location until at least one
58960     year after the last time you distribute an Opaque copy (directly or
58961     through your agents or retailers) of that edition to the public.
58962
58963     It is requested, but not required, that you contact the authors of
58964     the Document well before redistributing any large number of copies,
58965     to give them a chance to provide you with an updated version of the
58966     Document.
58967
58968  4. MODIFICATIONS
58969
58970     You may copy and distribute a Modified Version of the Document
58971     under the conditions of sections 2 and 3 above, provided that you
58972     release the Modified Version under precisely this License, with the
58973     Modified Version filling the role of the Document, thus licensing
58974     distribution and modification of the Modified Version to whoever
58975     possesses a copy of it.  In addition, you must do these things in
58976     the Modified Version:
58977
58978       A. Use in the Title Page (and on the covers, if any) a title
58979          distinct from that of the Document, and from those of previous
58980          versions (which should, if there were any, be listed in the
58981          History section of the Document).  You may use the same title
58982          as a previous version if the original publisher of that
58983          version gives permission.
58984
58985       B. List on the Title Page, as authors, one or more persons or
58986          entities responsible for authorship of the modifications in
58987          the Modified Version, together with at least five of the
58988          principal authors of the Document (all of its principal
58989          authors, if it has fewer than five), unless they release you
58990          from this requirement.
58991
58992       C. State on the Title page the name of the publisher of the
58993          Modified Version, as the publisher.
58994
58995       D. Preserve all the copyright notices of the Document.
58996
58997       E. Add an appropriate copyright notice for your modifications
58998          adjacent to the other copyright notices.
58999
59000       F. Include, immediately after the copyright notices, a license
59001          notice giving the public permission to use the Modified
59002          Version under the terms of this License, in the form shown in
59003          the Addendum below.
59004
59005       G. Preserve in that license notice the full lists of Invariant
59006          Sections and required Cover Texts given in the Document's
59007          license notice.
59008
59009       H. Include an unaltered copy of this License.
59010
59011       I. Preserve the section Entitled "History", Preserve its Title,
59012          and add to it an item stating at least the title, year, new
59013          authors, and publisher of the Modified Version as given on the
59014          Title Page.  If there is no section Entitled "History" in the
59015          Document, create one stating the title, year, authors, and
59016          publisher of the Document as given on its Title Page, then add
59017          an item describing the Modified Version as stated in the
59018          previous sentence.
59019
59020       J. Preserve the network location, if any, given in the Document
59021          for public access to a Transparent copy of the Document, and
59022          likewise the network locations given in the Document for
59023          previous versions it was based on.  These may be placed in the
59024          "History" section.  You may omit a network location for a work
59025          that was published at least four years before the Document
59026          itself, or if the original publisher of the version it refers
59027          to gives permission.
59028
59029       K. For any section Entitled "Acknowledgements" or "Dedications",
59030          Preserve the Title of the section, and preserve in the section
59031          all the substance and tone of each of the contributor
59032          acknowledgements and/or dedications given therein.
59033
59034       L. Preserve all the Invariant Sections of the Document, unaltered
59035          in their text and in their titles.  Section numbers or the
59036          equivalent are not considered part of the section titles.
59037
59038       M. Delete any section Entitled "Endorsements".  Such a section
59039          may not be included in the Modified Version.
59040
59041       N. Do not retitle any existing section to be Entitled
59042          "Endorsements" or to conflict in title with any Invariant
59043          Section.
59044
59045       O. Preserve any Warranty Disclaimers.
59046
59047     If the Modified Version includes new front-matter sections or
59048     appendices that qualify as Secondary Sections and contain no
59049     material copied from the Document, you may at your option designate
59050     some or all of these sections as invariant.  To do this, add their
59051     titles to the list of Invariant Sections in the Modified Version's
59052     license notice.  These titles must be distinct from any other
59053     section titles.
59054
59055     You may add a section Entitled "Endorsements", provided it contains
59056     nothing but endorsements of your Modified Version by various
59057     parties--for example, statements of peer review or that the text
59058     has been approved by an organization as the authoritative
59059     definition of a standard.
59060
59061     You may add a passage of up to five words as a Front-Cover Text,
59062     and a passage of up to 25 words as a Back-Cover Text, to the end of
59063     the list of Cover Texts in the Modified Version.  Only one passage
59064     of Front-Cover Text and one of Back-Cover Text may be added by (or
59065     through arrangements made by) any one entity.  If the Document
59066     already includes a cover text for the same cover, previously added
59067     by you or by arrangement made by the same entity you are acting on
59068     behalf of, you may not add another; but you may replace the old
59069     one, on explicit permission from the previous publisher that added
59070     the old one.
59071
59072     The author(s) and publisher(s) of the Document do not by this
59073     License give permission to use their names for publicity for or to
59074     assert or imply endorsement of any Modified Version.
59075
59076  5. COMBINING DOCUMENTS
59077
59078     You may combine the Document with other documents released under
59079     this License, under the terms defined in section 4 above for
59080     modified versions, provided that you include in the combination all
59081     of the Invariant Sections of all of the original documents,
59082     unmodified, and list them all as Invariant Sections of your
59083     combined work in its license notice, and that you preserve all
59084     their Warranty Disclaimers.
59085
59086     The combined work need only contain one copy of this License, and
59087     multiple identical Invariant Sections may be replaced with a single
59088     copy.  If there are multiple Invariant Sections with the same name
59089     but different contents, make the title of each such section unique
59090     by adding at the end of it, in parentheses, the name of the
59091     original author or publisher of that section if known, or else a
59092     unique number.  Make the same adjustment to the section titles in
59093     the list of Invariant Sections in the license notice of the
59094     combined work.
59095
59096     In the combination, you must combine any sections Entitled
59097     "History" in the various original documents, forming one section
59098     Entitled "History"; likewise combine any sections Entitled
59099     "Acknowledgements", and any sections Entitled "Dedications".  You
59100     must delete all sections Entitled "Endorsements."
59101
59102  6. COLLECTIONS OF DOCUMENTS
59103
59104     You may make a collection consisting of the Document and other
59105     documents released under this License, and replace the individual
59106     copies of this License in the various documents with a single copy
59107     that is included in the collection, provided that you follow the
59108     rules of this License for verbatim copying of each of the documents
59109     in all other respects.
59110
59111     You may extract a single document from such a collection, and
59112     distribute it individually under this License, provided you insert
59113     a copy of this License into the extracted document, and follow this
59114     License in all other respects regarding verbatim copying of that
59115     document.
59116
59117  7. AGGREGATION WITH INDEPENDENT WORKS
59118
59119     A compilation of the Document or its derivatives with other
59120     separate and independent documents or works, in or on a volume of a
59121     storage or distribution medium, is called an "aggregate" if the
59122     copyright resulting from the compilation is not used to limit the
59123     legal rights of the compilation's users beyond what the individual
59124     works permit.  When the Document is included in an aggregate, this
59125     License does not apply to the other works in the aggregate which
59126     are not themselves derivative works of the Document.
59127
59128     If the Cover Text requirement of section 3 is applicable to these
59129     copies of the Document, then if the Document is less than one half
59130     of the entire aggregate, the Document's Cover Texts may be placed
59131     on covers that bracket the Document within the aggregate, or the
59132     electronic equivalent of covers if the Document is in electronic
59133     form.  Otherwise they must appear on printed covers that bracket
59134     the whole aggregate.
59135
59136  8. TRANSLATION
59137
59138     Translation is considered a kind of modification, so you may
59139     distribute translations of the Document under the terms of section
59140     4.  Replacing Invariant Sections with translations requires special
59141     permission from their copyright holders, but you may include
59142     translations of some or all Invariant Sections in addition to the
59143     original versions of these Invariant Sections.  You may include a
59144     translation of this License, and all the license notices in the
59145     Document, and any Warranty Disclaimers, provided that you also
59146     include the original English version of this License and the
59147     original versions of those notices and disclaimers.  In case of a
59148     disagreement between the translation and the original version of
59149     this License or a notice or disclaimer, the original version will
59150     prevail.
59151
59152     If a section in the Document is Entitled "Acknowledgements",
59153     "Dedications", or "History", the requirement (section 4) to
59154     Preserve its Title (section 1) will typically require changing the
59155     actual title.
59156
59157  9. TERMINATION
59158
59159     You may not copy, modify, sublicense, or distribute the Document
59160     except as expressly provided under this License.  Any attempt
59161     otherwise to copy, modify, sublicense, or distribute it is void,
59162     and will automatically terminate your rights under this License.
59163
59164     However, if you cease all violation of this License, then your
59165     license from a particular copyright holder is reinstated (a)
59166     provisionally, unless and until the copyright holder explicitly and
59167     finally terminates your license, and (b) permanently, if the
59168     copyright holder fails to notify you of the violation by some
59169     reasonable means prior to 60 days after the cessation.
59170
59171     Moreover, your license from a particular copyright holder is
59172     reinstated permanently if the copyright holder notifies you of the
59173     violation by some reasonable means, this is the first time you have
59174     received notice of violation of this License (for any work) from
59175     that copyright holder, and you cure the violation prior to 30 days
59176     after your receipt of the notice.
59177
59178     Termination of your rights under this section does not terminate
59179     the licenses of parties who have received copies or rights from you
59180     under this License.  If your rights have been terminated and not
59181     permanently reinstated, receipt of a copy of some or all of the
59182     same material does not give you any rights to use it.
59183
59184  10. FUTURE REVISIONS OF THIS LICENSE
59185
59186     The Free Software Foundation may publish new, revised versions of
59187     the GNU Free Documentation License from time to time.  Such new
59188     versions will be similar in spirit to the present version, but may
59189     differ in detail to address new problems or concerns.  See
59190     <http://www.gnu.org/copyleft/>.
59191
59192     Each version of the License is given a distinguishing version
59193     number.  If the Document specifies that a particular numbered
59194     version of this License "or any later version" applies to it, you
59195     have the option of following the terms and conditions either of
59196     that specified version or of any later version that has been
59197     published (not as a draft) by the Free Software Foundation.  If the
59198     Document does not specify a version number of this License, you may
59199     choose any version ever published (not as a draft) by the Free
59200     Software Foundation.  If the Document specifies that a proxy can
59201     decide which future versions of this License can be used, that
59202     proxy's public statement of acceptance of a version permanently
59203     authorizes you to choose that version for the Document.
59204
59205  11. RELICENSING
59206
59207     "Massive Multiauthor Collaboration Site" (or "MMC Site") means any
59208     World Wide Web server that publishes copyrightable works and also
59209     provides prominent facilities for anybody to edit those works.  A
59210     public wiki that anybody can edit is an example of such a server.
59211     A "Massive Multiauthor Collaboration" (or "MMC") contained in the
59212     site means any set of copyrightable works thus published on the MMC
59213     site.
59214
59215     "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0
59216     license published by Creative Commons Corporation, a not-for-profit
59217     corporation with a principal place of business in San Francisco,
59218     California, as well as future copyleft versions of that license
59219     published by that same organization.
59220
59221     "Incorporate" means to publish or republish a Document, in whole or
59222     in part, as part of another Document.
59223
59224     An MMC is "eligible for relicensing" if it is licensed under this
59225     License, and if all works that were first published under this
59226     License somewhere other than this MMC, and subsequently
59227     incorporated in whole or in part into the MMC, (1) had no cover
59228     texts or invariant sections, and (2) were thus incorporated prior
59229     to November 1, 2008.
59230
59231     The operator of an MMC Site may republish an MMC contained in the
59232     site under CC-BY-SA on the same site at any time before August 1,
59233     2009, provided the MMC is eligible for relicensing.
59234
59235ADDENDUM: How to use this License for your documents
59236====================================================
59237
59238To use this License in a document you have written, include a copy of
59239the License in the document and put the following copyright and license
59240notices just after the title page:
59241
59242       Copyright (C)  YEAR  YOUR NAME.
59243       Permission is granted to copy, distribute and/or modify this document
59244       under the terms of the GNU Free Documentation License, Version 1.3
59245       or any later version published by the Free Software Foundation;
59246       with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
59247       Texts.  A copy of the license is included in the section entitled ``GNU
59248       Free Documentation License''.
59249
59250 If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
59251replace the "with...Texts."  line with this:
59252
59253         with the Invariant Sections being LIST THEIR TITLES, with
59254         the Front-Cover Texts being LIST, and with the Back-Cover Texts
59255         being LIST.
59256
59257 If you have Invariant Sections without Cover Texts, or some other
59258combination of the three, merge those two alternatives to suit the
59259situation.
59260
59261 If your document contains nontrivial examples of program code, we
59262recommend releasing these examples in parallel under your choice of free
59263software license, such as the GNU General Public License, to permit
59264their use in free software.
59265
59266
59267File: gcc.info,  Node: Contributors,  Next: Option Index,  Prev: GNU Free Documentation License,  Up: Top
59268
59269Contributors to GCC
59270*******************
59271
59272The GCC project would like to thank its many contributors.  Without them
59273the project would not have been nearly as successful as it has been.
59274Any omissions in this list are accidental.  Feel free to contact
59275<law@redhat.com> or <gerald@pfeifer.com> if you have been left out or
59276some of your contributions are not listed.  Please keep this list in
59277alphabetical order.
59278
59279   * Analog Devices helped implement the support for complex data types
59280     and iterators.
59281
59282   * John David Anglin for threading-related fixes and improvements to
59283     libstdc++-v3, and the HP-UX port.
59284
59285   * James van Artsdalen wrote the code that makes efficient use of the
59286     Intel 80387 register stack.
59287
59288   * Abramo and Roberto Bagnara for the SysV68 Motorola 3300 Delta
59289     Series port.
59290
59291   * Alasdair Baird for various bug fixes.
59292
59293   * Giovanni Bajo for analyzing lots of complicated C++ problem
59294     reports.
59295
59296   * Peter Barada for his work to improve code generation for new
59297     ColdFire cores.
59298
59299   * Gerald Baumgartner added the signature extension to the C++ front
59300     end.
59301
59302   * Godmar Back for his Java improvements and encouragement.
59303
59304   * Scott Bambrough for help porting the Java compiler.
59305
59306   * Wolfgang Bangerth for processing tons of bug reports.
59307
59308   * Jon Beniston for his Microsoft Windows port of Java and port to
59309     Lattice Mico32.
59310
59311   * Daniel Berlin for better DWARF 2 support, faster/better
59312     optimizations, improved alias analysis, plus migrating GCC to
59313     Bugzilla.
59314
59315   * Geoff Berry for his Java object serialization work and various
59316     patches.
59317
59318   * David Binderman tests weekly snapshots of GCC trunk against Fedora
59319     Rawhide for several architectures.
59320
59321   * Laurynas Biveinis for memory management work and DJGPP port fixes.
59322
59323   * Uros Bizjak for the implementation of x87 math built-in functions
59324     and for various middle end and i386 back end improvements and bug
59325     fixes.
59326
59327   * Eric Blake for helping to make GCJ and libgcj conform to the
59328     specifications.
59329
59330   * Janne Blomqvist for contributions to GNU Fortran.
59331
59332   * Hans-J. Boehm for his garbage collector, IA-64 libffi port, and
59333     other Java work.
59334
59335   * Segher Boessenkool for helping maintain the PowerPC port and the
59336     instruction combiner plus various contributions to the middle end.
59337
59338   * Neil Booth for work on cpplib, lang hooks, debug hooks and other
59339     miscellaneous clean-ups.
59340
59341   * Steven Bosscher for integrating the GNU Fortran front end into GCC
59342     and for contributing to the tree-ssa branch.
59343
59344   * Eric Botcazou for fixing middle- and backend bugs left and right.
59345
59346   * Per Bothner for his direction via the steering committee and
59347     various improvements to the infrastructure for supporting new
59348     languages.  Chill front end implementation.  Initial
59349     implementations of cpplib, fix-header, config.guess, libio, and
59350     past C++ library (libg++) maintainer.  Dreaming up, designing and
59351     implementing much of GCJ.
59352
59353   * Devon Bowen helped port GCC to the Tahoe.
59354
59355   * Don Bowman for mips-vxworks contributions.
59356
59357   * James Bowman for the FT32 port.
59358
59359   * Dave Brolley for work on cpplib and Chill.
59360
59361   * Paul Brook for work on the ARM architecture and maintaining GNU
59362     Fortran.
59363
59364   * Robert Brown implemented the support for Encore 32000 systems.
59365
59366   * Christian Bruel for improvements to local store elimination.
59367
59368   * Herman A.J. ten Brugge for various fixes.
59369
59370   * Joerg Brunsmann for Java compiler hacking and help with the GCJ
59371     FAQ.
59372
59373   * Joe Buck for his direction via the steering committee from its
59374     creation to 2013.
59375
59376   * Iain Buclaw for the D frontend.
59377
59378   * Craig Burley for leadership of the G77 Fortran effort.
59379
59380   * Tobias Burnus for contributions to GNU Fortran.
59381
59382   * Stephan Buys for contributing Doxygen notes for libstdc++.
59383
59384   * Paolo Carlini for libstdc++ work: lots of efficiency improvements
59385     to the C++ strings, streambufs and formatted I/O, hard detective
59386     work on the frustrating localization issues, and keeping up with
59387     the problem reports.
59388
59389   * John Carr for his alias work, SPARC hacking, infrastructure
59390     improvements, previous contributions to the steering committee,
59391     loop optimizations, etc.
59392
59393   * Stephane Carrez for 68HC11 and 68HC12 ports.
59394
59395   * Steve Chamberlain for support for the Renesas SH and H8 processors
59396     and the PicoJava processor, and for GCJ config fixes.
59397
59398   * Glenn Chambers for help with the GCJ FAQ.
59399
59400   * John-Marc Chandonia for various libgcj patches.
59401
59402   * Denis Chertykov for contributing and maintaining the AVR port, the
59403     first GCC port for an 8-bit architecture.
59404
59405   * Kito Cheng for his work on the RISC-V port, including bringing up
59406     the test suite and maintenance.
59407
59408   * Scott Christley for his Objective-C contributions.
59409
59410   * Eric Christopher for his Java porting help and clean-ups.
59411
59412   * Branko Cibej for more warning contributions.
59413
59414   * The GNU Classpath project for all of their merged runtime code.
59415
59416   * Nick Clifton for arm, mcore, fr30, v850, m32r, msp430 rx work,
59417     '--help', and other random hacking.
59418
59419   * Michael Cook for libstdc++ cleanup patches to reduce warnings.
59420
59421   * R. Kelley Cook for making GCC buildable from a read-only directory
59422     as well as other miscellaneous build process and documentation
59423     clean-ups.
59424
59425   * Ralf Corsepius for SH testing and minor bug fixing.
59426
59427   * Franc,ois-Xavier Coudert for contributions to GNU Fortran.
59428
59429   * Stan Cox for care and feeding of the x86 port and lots of behind
59430     the scenes hacking.
59431
59432   * Alex Crain provided changes for the 3b1.
59433
59434   * Ian Dall for major improvements to the NS32k port.
59435
59436   * Paul Dale for his work to add uClinux platform support to the m68k
59437     backend.
59438
59439   * Palmer Dabbelt for his work maintaining the RISC-V port.
59440
59441   * Dario Dariol contributed the four varieties of sample programs that
59442     print a copy of their source.
59443
59444   * Russell Davidson for fstream and stringstream fixes in libstdc++.
59445
59446   * Bud Davis for work on the G77 and GNU Fortran compilers.
59447
59448   * Mo DeJong for GCJ and libgcj bug fixes.
59449
59450   * Jerry DeLisle for contributions to GNU Fortran.
59451
59452   * DJ Delorie for the DJGPP port, build and libiberty maintenance,
59453     various bug fixes, and the M32C, MeP, MSP430, and RL78 ports.
59454
59455   * Arnaud Desitter for helping to debug GNU Fortran.
59456
59457   * Gabriel Dos Reis for contributions to G++, contributions and
59458     maintenance of GCC diagnostics infrastructure, libstdc++-v3,
59459     including 'valarray<>', 'complex<>', maintaining the numerics
59460     library (including that pesky '<limits>' :-) and keeping up-to-date
59461     anything to do with numbers.
59462
59463   * Ulrich Drepper for his work on glibc, testing of GCC using glibc,
59464     ISO C99 support, CFG dumping support, etc., plus support of the C++
59465     runtime libraries including for all kinds of C interface issues,
59466     contributing and maintaining 'complex<>', sanity checking and
59467     disbursement, configuration architecture, libio maintenance, and
59468     early math work.
59469
59470   * Franc,ois Dumont for his work on libstdc++-v3, especially
59471     maintaining and improving 'debug-mode' and associative and
59472     unordered containers.
59473
59474   * Zdenek Dvorak for a new loop unroller and various fixes.
59475
59476   * Michael Eager for his work on the Xilinx MicroBlaze port.
59477
59478   * Richard Earnshaw for his ongoing work with the ARM.
59479
59480   * David Edelsohn for his direction via the steering committee,
59481     ongoing work with the RS6000/PowerPC port, help cleaning up Haifa
59482     loop changes, doing the entire AIX port of libstdc++ with his bare
59483     hands, and for ensuring GCC properly keeps working on AIX.
59484
59485   * Kevin Ediger for the floating point formatting of num_put::do_put
59486     in libstdc++.
59487
59488   * Phil Edwards for libstdc++ work including configuration hackery,
59489     documentation maintainer, chief breaker of the web pages, the
59490     occasional iostream bug fix, and work on shared library symbol
59491     versioning.
59492
59493   * Paul Eggert for random hacking all over GCC.
59494
59495   * Mark Elbrecht for various DJGPP improvements, and for libstdc++
59496     configuration support for locales and fstream-related fixes.
59497
59498   * Vadim Egorov for libstdc++ fixes in strings, streambufs, and
59499     iostreams.
59500
59501   * Christian Ehrhardt for dealing with bug reports.
59502
59503   * Ben Elliston for his work to move the Objective-C runtime into its
59504     own subdirectory and for his work on autoconf.
59505
59506   * Revital Eres for work on the PowerPC 750CL port.
59507
59508   * Marc Espie for OpenBSD support.
59509
59510   * Doug Evans for much of the global optimization framework, arc,
59511     m32r, and SPARC work.
59512
59513   * Christopher Faylor for his work on the Cygwin port and for caring
59514     and feeding the gcc.gnu.org box and saving its users tons of spam.
59515
59516   * Fred Fish for BeOS support and Ada fixes.
59517
59518   * Ivan Fontes Garcia for the Portuguese translation of the GCJ FAQ.
59519
59520   * Peter Gerwinski for various bug fixes and the Pascal front end.
59521
59522   * Kaveh R. Ghazi for his direction via the steering committee,
59523     amazing work to make '-W -Wall -W* -Werror' useful, and testing GCC
59524     on a plethora of platforms.  Kaveh extends his gratitude to the
59525     CAIP Center at Rutgers University for providing him with computing
59526     resources to work on Free Software from the late 1980s to 2010.
59527
59528   * John Gilmore for a donation to the FSF earmarked improving GNU
59529     Java.
59530
59531   * Judy Goldberg for c++ contributions.
59532
59533   * Torbjorn Granlund for various fixes and the c-torture testsuite,
59534     multiply- and divide-by-constant optimization, improved long long
59535     support, improved leaf function register allocation, and his
59536     direction via the steering committee.
59537
59538   * Jonny Grant for improvements to 'collect2's' '--help'
59539     documentation.
59540
59541   * Anthony Green for his '-Os' contributions, the moxie port, and Java
59542     front end work.
59543
59544   * Stu Grossman for gdb hacking, allowing GCJ developers to debug Java
59545     code.
59546
59547   * Michael K. Gschwind contributed the port to the PDP-11.
59548
59549   * Richard Biener for his ongoing middle-end contributions and bug
59550     fixes and for release management.
59551
59552   * Ron Guilmette implemented the 'protoize' and 'unprotoize' tools,
59553     the support for DWARF 1 symbolic debugging information, and much of
59554     the support for System V Release 4.  He has also worked heavily on
59555     the Intel 386 and 860 support.
59556
59557   * Sumanth Gundapaneni for contributing the CR16 port.
59558
59559   * Mostafa Hagog for Swing Modulo Scheduling (SMS) and post reload
59560     GCSE.
59561
59562   * Bruno Haible for improvements in the runtime overhead for EH, new
59563     warnings and assorted bug fixes.
59564
59565   * Andrew Haley for his amazing Java compiler and library efforts.
59566
59567   * Chris Hanson assisted in making GCC work on HP-UX for the 9000
59568     series 300.
59569
59570   * Michael Hayes for various thankless work he's done trying to get
59571     the c30/c40 ports functional.  Lots of loop and unroll improvements
59572     and fixes.
59573
59574   * Dara Hazeghi for wading through myriads of target-specific bug
59575     reports.
59576
59577   * Kate Hedstrom for staking the G77 folks with an initial testsuite.
59578
59579   * Richard Henderson for his ongoing SPARC, alpha, ia32, and ia64
59580     work, loop opts, and generally fixing lots of old problems we've
59581     ignored for years, flow rewrite and lots of further stuff,
59582     including reviewing tons of patches.
59583
59584   * Aldy Hernandez for working on the PowerPC port, SIMD support, and
59585     various fixes.
59586
59587   * Nobuyuki Hikichi of Software Research Associates, Tokyo,
59588     contributed the support for the Sony NEWS machine.
59589
59590   * Kazu Hirata for caring and feeding the Renesas H8/300 port and
59591     various fixes.
59592
59593   * Katherine Holcomb for work on GNU Fortran.
59594
59595   * Manfred Hollstein for his ongoing work to keep the m88k alive, lots
59596     of testing and bug fixing, particularly of GCC configury code.
59597
59598   * Steve Holmgren for MachTen patches.
59599
59600   * Mat Hostetter for work on the TILE-Gx and TILEPro ports.
59601
59602   * Jan Hubicka for his x86 port improvements.
59603
59604   * Falk Hueffner for working on C and optimization bug reports.
59605
59606   * Bernardo Innocenti for his m68k work, including merging of ColdFire
59607     improvements and uClinux support.
59608
59609   * Christian Iseli for various bug fixes.
59610
59611   * Kamil Iskra for general m68k hacking.
59612
59613   * Lee Iverson for random fixes and MIPS testing.
59614
59615   * Balaji V. Iyer for Cilk+ development and merging.
59616
59617   * Andreas Jaeger for testing and benchmarking of GCC and various bug
59618     fixes.
59619
59620   * Martin Jambor for his work on inter-procedural optimizations, the
59621     switch conversion pass, and scalar replacement of aggregates.
59622
59623   * Jakub Jelinek for his SPARC work and sibling call optimizations as
59624     well as lots of bug fixes and test cases, and for improving the
59625     Java build system.
59626
59627   * Janis Johnson for ia64 testing and fixes, her quality improvement
59628     sidetracks, and web page maintenance.
59629
59630   * Kean Johnston for SCO OpenServer support and various fixes.
59631
59632   * Tim Josling for the sample language treelang based originally on
59633     Richard Kenner's "toy" language.
59634
59635   * Nicolai Josuttis for additional libstdc++ documentation.
59636
59637   * Klaus Kaempf for his ongoing work to make alpha-vms a viable
59638     target.
59639
59640   * Steven G. Kargl for work on GNU Fortran.
59641
59642   * David Kashtan of SRI adapted GCC to VMS.
59643
59644   * Ryszard Kabatek for many, many libstdc++ bug fixes and
59645     optimizations of strings, especially member functions, and for
59646     auto_ptr fixes.
59647
59648   * Geoffrey Keating for his ongoing work to make the PPC work for
59649     GNU/Linux and his automatic regression tester.
59650
59651   * Brendan Kehoe for his ongoing work with G++ and for a lot of early
59652     work in just about every part of libstdc++.
59653
59654   * Oliver M. Kellogg of Deutsche Aerospace contributed the port to the
59655     MIL-STD-1750A.
59656
59657   * Richard Kenner of the New York University Ultracomputer Research
59658     Laboratory wrote the machine descriptions for the AMD 29000, the
59659     DEC Alpha, the IBM RT PC, and the IBM RS/6000 as well as the
59660     support for instruction attributes.  He also made changes to better
59661     support RISC processors including changes to common subexpression
59662     elimination, strength reduction, function calling sequence
59663     handling, and condition code support, in addition to generalizing
59664     the code for frame pointer elimination and delay slot scheduling.
59665     Richard Kenner was also the head maintainer of GCC for several
59666     years.
59667
59668   * Mumit Khan for various contributions to the Cygwin and Mingw32
59669     ports and maintaining binary releases for Microsoft Windows hosts,
59670     and for massive libstdc++ porting work to Cygwin/Mingw32.
59671
59672   * Robin Kirkham for cpu32 support.
59673
59674   * Mark Klein for PA improvements.
59675
59676   * Thomas Koenig for various bug fixes.
59677
59678   * Bruce Korb for the new and improved fixincludes code.
59679
59680   * Benjamin Kosnik for his G++ work and for leading the libstdc++-v3
59681     effort.
59682
59683   * Maxim Kuvyrkov for contributions to the instruction scheduler, the
59684     Android and m68k/Coldfire ports, and optimizations.
59685
59686   * Charles LaBrec contributed the support for the Integrated Solutions
59687     68020 system.
59688
59689   * Asher Langton and Mike Kumbera for contributing Cray pointer
59690     support to GNU Fortran, and for other GNU Fortran improvements.
59691
59692   * Jeff Law for his direction via the steering committee, coordinating
59693     the entire egcs project and GCC 2.95, rolling out snapshots and
59694     releases, handling merges from GCC2, reviewing tons of patches that
59695     might have fallen through the cracks else, and random but extensive
59696     hacking.
59697
59698   * Walter Lee for work on the TILE-Gx and TILEPro ports.
59699
59700   * Marc Lehmann for his direction via the steering committee and
59701     helping with analysis and improvements of x86 performance.
59702
59703   * Victor Leikehman for work on GNU Fortran.
59704
59705   * Ted Lemon wrote parts of the RTL reader and printer.
59706
59707   * Kriang Lerdsuwanakij for C++ improvements including template as
59708     template parameter support, and many C++ fixes.
59709
59710   * Warren Levy for tremendous work on libgcj (Java Runtime Library)
59711     and random work on the Java front end.
59712
59713   * Alain Lichnewsky ported GCC to the MIPS CPU.
59714
59715   * Oskar Liljeblad for hacking on AWT and his many Java bug reports
59716     and patches.
59717
59718   * Robert Lipe for OpenServer support, new testsuites, testing, etc.
59719
59720   * Chen Liqin for various S+core related fixes/improvement, and for
59721     maintaining the S+core port.
59722
59723   * Martin Liska for his work on identical code folding, the
59724     sanitizers, HSA, general bug fixing and for running automated
59725     regression testing of GCC and reporting numerous bugs.
59726
59727   * Weiwen Liu for testing and various bug fixes.
59728
59729   * Manuel Lo'pez-Iba'n~ez for improving '-Wconversion' and many other
59730     diagnostics fixes and improvements.
59731
59732   * Dave Love for his ongoing work with the Fortran front end and
59733     runtime libraries.
59734
59735   * Martin von Lo"wis for internal consistency checking infrastructure,
59736     various C++ improvements including namespace support, and tons of
59737     assistance with libstdc++/compiler merges.
59738
59739   * H.J. Lu for his previous contributions to the steering committee,
59740     many x86 bug reports, prototype patches, and keeping the GNU/Linux
59741     ports working.
59742
59743   * Greg McGary for random fixes and (someday) bounded pointers.
59744
59745   * Andrew MacLeod for his ongoing work in building a real EH system,
59746     various code generation improvements, work on the global optimizer,
59747     etc.
59748
59749   * Vladimir Makarov for hacking some ugly i960 problems, PowerPC
59750     hacking improvements to compile-time performance, overall knowledge
59751     and direction in the area of instruction scheduling, design and
59752     implementation of the automaton based instruction scheduler and
59753     design and implementation of the integrated and local register
59754     allocators.
59755
59756   * David Malcolm for his work on improving GCC diagnostics, JIT,
59757     self-tests and unit testing.
59758
59759   * Bob Manson for his behind the scenes work on dejagnu.
59760
59761   * John Marino for contributing the DragonFly BSD port.
59762
59763   * Philip Martin for lots of libstdc++ string and vector iterator
59764     fixes and improvements, and string clean up and testsuites.
59765
59766   * Michael Matz for his work on dominance tree discovery, the x86-64
59767     port, link-time optimization framework and general optimization
59768     improvements.
59769
59770   * All of the Mauve project contributors for Java test code.
59771
59772   * Bryce McKinlay for numerous GCJ and libgcj fixes and improvements.
59773
59774   * Adam Megacz for his work on the Microsoft Windows port of GCJ.
59775
59776   * Michael Meissner for LRS framework, ia32, m32r, v850, m88k, MIPS,
59777     powerpc, haifa, ECOFF debug support, and other assorted hacking.
59778
59779   * Jason Merrill for his direction via the steering committee and
59780     leading the G++ effort.
59781
59782   * Martin Michlmayr for testing GCC on several architectures using the
59783     entire Debian archive.
59784
59785   * David Miller for his direction via the steering committee, lots of
59786     SPARC work, improvements in jump.c and interfacing with the Linux
59787     kernel developers.
59788
59789   * Gary Miller ported GCC to Charles River Data Systems machines.
59790
59791   * Alfred Minarik for libstdc++ string and ios bug fixes, and turning
59792     the entire libstdc++ testsuite namespace-compatible.
59793
59794   * Mark Mitchell for his direction via the steering committee,
59795     mountains of C++ work, load/store hoisting out of loops, alias
59796     analysis improvements, ISO C 'restrict' support, and serving as
59797     release manager from 2000 to 2011.
59798
59799   * Alan Modra for various GNU/Linux bits and testing.
59800
59801   * Toon Moene for his direction via the steering committee, Fortran
59802     maintenance, and his ongoing work to make us make Fortran run fast.
59803
59804   * Jason Molenda for major help in the care and feeding of all the
59805     services on the gcc.gnu.org (formerly egcs.cygnus.com)
59806     machine--mail, web services, ftp services, etc etc.  Doing all this
59807     work on scrap paper and the backs of envelopes would have been...
59808     difficult.
59809
59810   * Catherine Moore for fixing various ugly problems we have sent her
59811     way, including the haifa bug which was killing the Alpha & PowerPC
59812     Linux kernels.
59813
59814   * Mike Moreton for his various Java patches.
59815
59816   * David Mosberger-Tang for various Alpha improvements, and for the
59817     initial IA-64 port.
59818
59819   * Stephen Moshier contributed the floating point emulator that
59820     assists in cross-compilation and permits support for floating point
59821     numbers wider than 64 bits and for ISO C99 support.
59822
59823   * Bill Moyer for his behind the scenes work on various issues.
59824
59825   * Philippe De Muyter for his work on the m68k port.
59826
59827   * Joseph S. Myers for his work on the PDP-11 port, format checking
59828     and ISO C99 support, and continuous emphasis on (and contributions
59829     to) documentation.
59830
59831   * Nathan Myers for his work on libstdc++-v3: architecture and
59832     authorship through the first three snapshots, including
59833     implementation of locale infrastructure, string, shadow C headers,
59834     and the initial project documentation (DESIGN, CHECKLIST, and so
59835     forth).  Later, more work on MT-safe string and shadow headers.
59836
59837   * Felix Natter for documentation on porting libstdc++.
59838
59839   * Nathanael Nerode for cleaning up the configuration/build process.
59840
59841   * NeXT, Inc. donated the front end that supports the Objective-C
59842     language.
59843
59844   * Hans-Peter Nilsson for the CRIS and MMIX ports, improvements to the
59845     search engine setup, various documentation fixes and other small
59846     fixes.
59847
59848   * Geoff Noer for his work on getting cygwin native builds working.
59849
59850   * Vegard Nossum for running automated regression testing of GCC and
59851     reporting numerous bugs.
59852
59853   * Diego Novillo for his work on Tree SSA, OpenMP, SPEC performance
59854     tracking web pages, GIMPLE tuples, and assorted fixes.
59855
59856   * David O'Brien for the FreeBSD/alpha, FreeBSD/AMD x86-64,
59857     FreeBSD/ARM, FreeBSD/PowerPC, and FreeBSD/SPARC64 ports and related
59858     infrastructure improvements.
59859
59860   * Alexandre Oliva for various build infrastructure improvements,
59861     scripts and amazing testing work, including keeping libtool issues
59862     sane and happy.
59863
59864   * Stefan Olsson for work on mt_alloc.
59865
59866   * Melissa O'Neill for various NeXT fixes.
59867
59868   * Rainer Orth for random MIPS work, including improvements to GCC's
59869     o32 ABI support, improvements to dejagnu's MIPS support, Java
59870     configuration clean-ups and porting work, and maintaining the IRIX,
59871     Solaris 2, and Tru64 UNIX ports.
59872
59873   * Steven Pemberton for his contribution of 'enquire' which allowed
59874     GCC to determine various properties of the floating point unit and
59875     generate 'float.h' in older versions of GCC.
59876
59877   * Hartmut Penner for work on the s390 port.
59878
59879   * Paul Petersen wrote the machine description for the Alliant FX/8.
59880
59881   * Alexandre Petit-Bianco for implementing much of the Java compiler
59882     and continued Java maintainership.
59883
59884   * Matthias Pfaller for major improvements to the NS32k port.
59885
59886   * Gerald Pfeifer for his direction via the steering committee,
59887     pointing out lots of problems we need to solve, maintenance of the
59888     web pages, and taking care of documentation maintenance in general.
59889
59890   * Marek Polacek for his work on the C front end, the sanitizers and
59891     general bug fixing.
59892
59893   * Andrew Pinski for processing bug reports by the dozen.
59894
59895   * Ovidiu Predescu for his work on the Objective-C front end and
59896     runtime libraries.
59897
59898   * Jerry Quinn for major performance improvements in C++ formatted
59899     I/O.
59900
59901   * Ken Raeburn for various improvements to checker, MIPS ports and
59902     various cleanups in the compiler.
59903
59904   * Rolf W. Rasmussen for hacking on AWT.
59905
59906   * David Reese of Sun Microsystems contributed to the Solaris on
59907     PowerPC port.
59908
59909   * John Regehr for running automated regression testing of GCC and
59910     reporting numerous bugs.
59911
59912   * Volker Reichelt for running automated regression testing of GCC and
59913     reporting numerous bugs and for keeping up with the problem
59914     reports.
59915
59916   * Joern Rennecke for maintaining the sh port, loop, regmove & reload
59917     hacking and developing and maintaining the Epiphany port.
59918
59919   * Loren J. Rittle for improvements to libstdc++-v3 including the
59920     FreeBSD port, threading fixes, thread-related configury changes,
59921     critical threading documentation, and solutions to really tricky
59922     I/O problems, as well as keeping GCC properly working on FreeBSD
59923     and continuous testing.
59924
59925   * Craig Rodrigues for processing tons of bug reports.
59926
59927   * Ola Ro"nnerup for work on mt_alloc.
59928
59929   * Gavin Romig-Koch for lots of behind the scenes MIPS work.
59930
59931   * David Ronis inspired and encouraged Craig to rewrite the G77
59932     documentation in texinfo format by contributing a first pass at a
59933     translation of the old 'g77-0.5.16/f/DOC' file.
59934
59935   * Ken Rose for fixes to GCC's delay slot filling code.
59936
59937   * Ira Rosen for her contributions to the auto-vectorizer.
59938
59939   * Paul Rubin wrote most of the preprocessor.
59940
59941   * Pe'tur Runo'lfsson for major performance improvements in C++
59942     formatted I/O and large file support in C++ filebuf.
59943
59944   * Chip Salzenberg for libstdc++ patches and improvements to locales,
59945     traits, Makefiles, libio, libtool hackery, and "long long" support.
59946
59947   * Juha Sarlin for improvements to the H8 code generator.
59948
59949   * Greg Satz assisted in making GCC work on HP-UX for the 9000 series
59950     300.
59951
59952   * Roger Sayle for improvements to constant folding and GCC's RTL
59953     optimizers as well as for fixing numerous bugs.
59954
59955   * Bradley Schatz for his work on the GCJ FAQ.
59956
59957   * Peter Schauer wrote the code to allow debugging to work on the
59958     Alpha.
59959
59960   * William Schelter did most of the work on the Intel 80386 support.
59961
59962   * Tobias Schlu"ter for work on GNU Fortran.
59963
59964   * Bernd Schmidt for various code generation improvements and major
59965     work in the reload pass, serving as release manager for GCC 2.95.3,
59966     and work on the Blackfin and C6X ports.
59967
59968   * Peter Schmid for constant testing of libstdc++--especially
59969     application testing, going above and beyond what was requested for
59970     the release criteria--and libstdc++ header file tweaks.
59971
59972   * Jason Schroeder for jcf-dump patches.
59973
59974   * Andreas Schwab for his work on the m68k port.
59975
59976   * Lars Segerlund for work on GNU Fortran.
59977
59978   * Dodji Seketeli for numerous C++ bug fixes and debug info
59979     improvements.
59980
59981   * Tim Shen for major work on '<regex>'.
59982
59983   * Joel Sherrill for his direction via the steering committee, RTEMS
59984     contributions and RTEMS testing.
59985
59986   * Nathan Sidwell for many C++ fixes/improvements.
59987
59988   * Jeffrey Siegal for helping RMS with the original design of GCC,
59989     some code which handles the parse tree and RTL data structures,
59990     constant folding and help with the original VAX & m68k ports.
59991
59992   * Kenny Simpson for prompting libstdc++ fixes due to defect reports
59993     from the LWG (thereby keeping GCC in line with updates from the
59994     ISO).
59995
59996   * Franz Sirl for his ongoing work with making the PPC port stable for
59997     GNU/Linux.
59998
59999   * Andrey Slepuhin for assorted AIX hacking.
60000
60001   * Trevor Smigiel for contributing the SPU port.
60002
60003   * Christopher Smith did the port for Convex machines.
60004
60005   * Danny Smith for his major efforts on the Mingw (and Cygwin) ports.
60006     Retired from GCC maintainership August 2010, having mentored two
60007     new maintainers into the role.
60008
60009   * Randy Smith finished the Sun FPA support.
60010
60011   * Ed Smith-Rowland for his continuous work on libstdc++-v3, special
60012     functions, '<random>', and various improvements to C++11 features.
60013
60014   * Scott Snyder for queue, iterator, istream, and string fixes and
60015     libstdc++ testsuite entries.  Also for providing the patch to G77
60016     to add rudimentary support for 'INTEGER*1', 'INTEGER*2', and
60017     'LOGICAL*1'.
60018
60019   * Zdenek Sojka for running automated regression testing of GCC and
60020     reporting numerous bugs.
60021
60022   * Arseny Solokha for running automated regression testing of GCC and
60023     reporting numerous bugs.
60024
60025   * Jayant Sonar for contributing the CR16 port.
60026
60027   * Brad Spencer for contributions to the GLIBCPP_FORCE_NEW technique.
60028
60029   * Richard Stallman, for writing the original GCC and launching the
60030     GNU project.
60031
60032   * Jan Stein of the Chalmers Computer Society provided support for
60033     Genix, as well as part of the 32000 machine description.
60034
60035   * Gerhard Steinmetz for running automated regression testing of GCC
60036     and reporting numerous bugs.
60037
60038   * Nigel Stephens for various mips16 related fixes/improvements.
60039
60040   * Jonathan Stone wrote the machine description for the Pyramid
60041     computer.
60042
60043   * Graham Stott for various infrastructure improvements.
60044
60045   * John Stracke for his Java HTTP protocol fixes.
60046
60047   * Mike Stump for his Elxsi port, G++ contributions over the years and
60048     more recently his vxworks contributions
60049
60050   * Jeff Sturm for Java porting help, bug fixes, and encouragement.
60051
60052   * Zhendong Su for running automated regression testing of GCC and
60053     reporting numerous bugs.
60054
60055   * Chengnian Sun for running automated regression testing of GCC and
60056     reporting numerous bugs.
60057
60058   * Shigeya Suzuki for this fixes for the bsdi platforms.
60059
60060   * Ian Lance Taylor for the Go frontend, the initial mips16 and mips64
60061     support, general configury hacking, fixincludes, etc.
60062
60063   * Holger Teutsch provided the support for the Clipper CPU.
60064
60065   * Gary Thomas for his ongoing work to make the PPC work for
60066     GNU/Linux.
60067
60068   * Paul Thomas for contributions to GNU Fortran.
60069
60070   * Philipp Thomas for random bug fixes throughout the compiler
60071
60072   * Jason Thorpe for thread support in libstdc++ on NetBSD.
60073
60074   * Kresten Krab Thorup wrote the run time support for the Objective-C
60075     language and the fantastic Java bytecode interpreter.
60076
60077   * Michael Tiemann for random bug fixes, the first instruction
60078     scheduler, initial C++ support, function integration, NS32k, SPARC
60079     and M88k machine description work, delay slot scheduling.
60080
60081   * Andreas Tobler for his work porting libgcj to Darwin.
60082
60083   * Teemu Torma for thread safe exception handling support.
60084
60085   * Leonard Tower wrote parts of the parser, RTL generator, and RTL
60086     definitions, and of the VAX machine description.
60087
60088   * Daniel Towner and Hariharan Sandanagobalane contributed and
60089     maintain the picoChip port.
60090
60091   * Tom Tromey for internationalization support and for his many Java
60092     contributions and libgcj maintainership.
60093
60094   * Lassi Tuura for improvements to config.guess to determine HP
60095     processor types.
60096
60097   * Petter Urkedal for libstdc++ CXXFLAGS, math, and algorithms fixes.
60098
60099   * Andy Vaught for the design and initial implementation of the GNU
60100     Fortran front end.
60101
60102   * Brent Verner for work with the libstdc++ cshadow files and their
60103     associated configure steps.
60104
60105   * Todd Vierling for contributions for NetBSD ports.
60106
60107   * Andrew Waterman for contributing the RISC-V port, as well as
60108     maintaining it.
60109
60110   * Jonathan Wakely for contributing libstdc++ Doxygen notes and XHTML
60111     guidance and maintaining libstdc++.
60112
60113   * Dean Wakerley for converting the install documentation from HTML to
60114     texinfo in time for GCC 3.0.
60115
60116   * Krister Walfridsson for random bug fixes.
60117
60118   * Feng Wang for contributions to GNU Fortran.
60119
60120   * Stephen M. Webb for time and effort on making libstdc++ shadow
60121     files work with the tricky Solaris 8+ headers, and for pushing the
60122     build-time header tree.  Also, for starting and driving the
60123     '<regex>' effort.
60124
60125   * John Wehle for various improvements for the x86 code generator,
60126     related infrastructure improvements to help x86 code generation,
60127     value range propagation and other work, WE32k port.
60128
60129   * Ulrich Weigand for work on the s390 port.
60130
60131   * Janus Weil for contributions to GNU Fortran.
60132
60133   * Zack Weinberg for major work on cpplib and various other bug fixes.
60134
60135   * Matt Welsh for help with Linux Threads support in GCJ.
60136
60137   * Urban Widmark for help fixing java.io.
60138
60139   * Mark Wielaard for new Java library code and his work integrating
60140     with Classpath.
60141
60142   * Dale Wiles helped port GCC to the Tahoe.
60143
60144   * Bob Wilson from Tensilica, Inc. for the Xtensa port.
60145
60146   * Jim Wilson for his direction via the steering committee, tackling
60147     hard problems in various places that nobody else wanted to work on,
60148     strength reduction and other loop optimizations.
60149
60150   * Paul Woegerer and Tal Agmon for the CRX port.
60151
60152   * Carlo Wood for various fixes.
60153
60154   * Tom Wood for work on the m88k port.
60155
60156   * Chung-Ju Wu for his work on the Andes NDS32 port.
60157
60158   * Canqun Yang for work on GNU Fortran.
60159
60160   * Masanobu Yuhara of Fujitsu Laboratories implemented the machine
60161     description for the Tron architecture (specifically, the Gmicro).
60162
60163   * Kevin Zachmann helped port GCC to the Tahoe.
60164
60165   * Ayal Zaks for Swing Modulo Scheduling (SMS).
60166
60167   * Qirun Zhang for running automated regression testing of GCC and
60168     reporting numerous bugs.
60169
60170   * Xiaoqiang Zhang for work on GNU Fortran.
60171
60172   * Gilles Zunino for help porting Java to Irix.
60173
60174 The following people are recognized for their contributions to GNAT,
60175the Ada front end of GCC:
60176   * Bernard Banner
60177
60178   * Romain Berrendonner
60179
60180   * Geert Bosch
60181
60182   * Emmanuel Briot
60183
60184   * Joel Brobecker
60185
60186   * Ben Brosgol
60187
60188   * Vincent Celier
60189
60190   * Arnaud Charlet
60191
60192   * Chien Chieng
60193
60194   * Cyrille Comar
60195
60196   * Cyrille Crozes
60197
60198   * Robert Dewar
60199
60200   * Gary Dismukes
60201
60202   * Robert Duff
60203
60204   * Ed Falis
60205
60206   * Ramon Fernandez
60207
60208   * Sam Figueroa
60209
60210   * Vasiliy Fofanov
60211
60212   * Michael Friess
60213
60214   * Franco Gasperoni
60215
60216   * Ted Giering
60217
60218   * Matthew Gingell
60219
60220   * Laurent Guerby
60221
60222   * Jerome Guitton
60223
60224   * Olivier Hainque
60225
60226   * Jerome Hugues
60227
60228   * Hristian Kirtchev
60229
60230   * Jerome Lambourg
60231
60232   * Bruno Leclerc
60233
60234   * Albert Lee
60235
60236   * Sean McNeil
60237
60238   * Javier Miranda
60239
60240   * Laurent Nana
60241
60242   * Pascal Obry
60243
60244   * Dong-Ik Oh
60245
60246   * Laurent Pautet
60247
60248   * Brett Porter
60249
60250   * Thomas Quinot
60251
60252   * Nicolas Roche
60253
60254   * Pat Rogers
60255
60256   * Jose Ruiz
60257
60258   * Douglas Rupp
60259
60260   * Sergey Rybin
60261
60262   * Gail Schenker
60263
60264   * Ed Schonberg
60265
60266   * Nicolas Setton
60267
60268   * Samuel Tardieu
60269
60270 The following people are recognized for their contributions of new
60271features, bug reports, testing and integration of classpath/libgcj for
60272GCC version 4.1:
60273   * Lillian Angel for 'JTree' implementation and lots Free Swing
60274     additions and bug fixes.
60275
60276   * Wolfgang Baer for 'GapContent' bug fixes.
60277
60278   * Anthony Balkissoon for 'JList', Free Swing 1.5 updates and mouse
60279     event fixes, lots of Free Swing work including 'JTable' editing.
60280
60281   * Stuart Ballard for RMI constant fixes.
60282
60283   * Goffredo Baroncelli for 'HTTPURLConnection' fixes.
60284
60285   * Gary Benson for 'MessageFormat' fixes.
60286
60287   * Daniel Bonniot for 'Serialization' fixes.
60288
60289   * Chris Burdess for lots of gnu.xml and http protocol fixes, 'StAX'
60290     and 'DOM xml:id' support.
60291
60292   * Ka-Hing Cheung for 'TreePath' and 'TreeSelection' fixes.
60293
60294   * Archie Cobbs for build fixes, VM interface updates,
60295     'URLClassLoader' updates.
60296
60297   * Kelley Cook for build fixes.
60298
60299   * Martin Cordova for Suggestions for better 'SocketTimeoutException'.
60300
60301   * David Daney for 'BitSet' bug fixes, 'HttpURLConnection' rewrite and
60302     improvements.
60303
60304   * Thomas Fitzsimmons for lots of upgrades to the gtk+ AWT and Cairo
60305     2D support.  Lots of imageio framework additions, lots of AWT and
60306     Free Swing bug fixes.
60307
60308   * Jeroen Frijters for 'ClassLoader' and nio cleanups, serialization
60309     fixes, better 'Proxy' support, bug fixes and IKVM integration.
60310
60311   * Santiago Gala for 'AccessControlContext' fixes.
60312
60313   * Nicolas Geoffray for 'VMClassLoader' and 'AccessController'
60314     improvements.
60315
60316   * David Gilbert for 'basic' and 'metal' icon and plaf support and
60317     lots of documenting, Lots of Free Swing and metal theme additions.
60318     'MetalIconFactory' implementation.
60319
60320   * Anthony Green for 'MIDI' framework, 'ALSA' and 'DSSI' providers.
60321
60322   * Andrew Haley for 'Serialization' and 'URLClassLoader' fixes, gcj
60323     build speedups.
60324
60325   * Kim Ho for 'JFileChooser' implementation.
60326
60327   * Andrew John Hughes for 'Locale' and net fixes, URI RFC2986 updates,
60328     'Serialization' fixes, 'Properties' XML support and generic branch
60329     work, VMIntegration guide update.
60330
60331   * Bastiaan Huisman for 'TimeZone' bug fixing.
60332
60333   * Andreas Jaeger for mprec updates.
60334
60335   * Paul Jenner for better '-Werror' support.
60336
60337   * Ito Kazumitsu for 'NetworkInterface' implementation and updates.
60338
60339   * Roman Kennke for 'BoxLayout', 'GrayFilter' and 'SplitPane', plus
60340     bug fixes all over.  Lots of Free Swing work including styled text.
60341
60342   * Simon Kitching for 'String' cleanups and optimization suggestions.
60343
60344   * Michael Koch for configuration fixes, 'Locale' updates, bug and
60345     build fixes.
60346
60347   * Guilhem Lavaux for configuration, thread and channel fixes and
60348     Kaffe integration.  JCL native 'Pointer' updates.  Logger bug
60349     fixes.
60350
60351   * David Lichteblau for JCL support library global/local reference
60352     cleanups.
60353
60354   * Aaron Luchko for JDWP updates and documentation fixes.
60355
60356   * Ziga Mahkovec for 'Graphics2D' upgraded to Cairo 0.5 and new regex
60357     features.
60358
60359   * Sven de Marothy for BMP imageio support, CSS and 'TextLayout'
60360     fixes.  'GtkImage' rewrite, 2D, awt, free swing and date/time fixes
60361     and implementing the Qt4 peers.
60362
60363   * Casey Marshall for crypto algorithm fixes, 'FileChannel' lock,
60364     'SystemLogger' and 'FileHandler' rotate implementations, NIO
60365     'FileChannel.map' support, security and policy updates.
60366
60367   * Bryce McKinlay for RMI work.
60368
60369   * Audrius Meskauskas for lots of Free Corba, RMI and HTML work plus
60370     testing and documenting.
60371
60372   * Kalle Olavi Niemitalo for build fixes.
60373
60374   * Rainer Orth for build fixes.
60375
60376   * Andrew Overholt for 'File' locking fixes.
60377
60378   * Ingo Proetel for 'Image', 'Logger' and 'URLClassLoader' updates.
60379
60380   * Olga Rodimina for 'MenuSelectionManager' implementation.
60381
60382   * Jan Roehrich for 'BasicTreeUI' and 'JTree' fixes.
60383
60384   * Julian Scheid for documentation updates and gjdoc support.
60385
60386   * Christian Schlichtherle for zip fixes and cleanups.
60387
60388   * Robert Schuster for documentation updates and beans fixes,
60389     'TreeNode' enumerations and 'ActionCommand' and various fixes, XML
60390     and URL, AWT and Free Swing bug fixes.
60391
60392   * Keith Seitz for lots of JDWP work.
60393
60394   * Christian Thalinger for 64-bit cleanups, Configuration and VM
60395     interface fixes and 'CACAO' integration, 'fdlibm' updates.
60396
60397   * Gael Thomas for 'VMClassLoader' boot packages support suggestions.
60398
60399   * Andreas Tobler for Darwin and Solaris testing and fixing, 'Qt4'
60400     support for Darwin/OS X, 'Graphics2D' support, 'gtk+' updates.
60401
60402   * Dalibor Topic for better 'DEBUG' support, build cleanups and Kaffe
60403     integration.  'Qt4' build infrastructure, 'SHA1PRNG' and
60404     'GdkPixbugDecoder' updates.
60405
60406   * Tom Tromey for Eclipse integration, generics work, lots of bug
60407     fixes and gcj integration including coordinating The Big Merge.
60408
60409   * Mark Wielaard for bug fixes, packaging and release management,
60410     'Clipboard' implementation, system call interrupts and network
60411     timeouts and 'GdkPixpufDecoder' fixes.
60412
60413 In addition to the above, all of which also contributed time and energy
60414in testing GCC, we would like to thank the following for their
60415contributions to testing:
60416
60417   * Michael Abd-El-Malek
60418
60419   * Thomas Arend
60420
60421   * Bonzo Armstrong
60422
60423   * Steven Ashe
60424
60425   * Chris Baldwin
60426
60427   * David Billinghurst
60428
60429   * Jim Blandy
60430
60431   * Stephane Bortzmeyer
60432
60433   * Horst von Brand
60434
60435   * Frank Braun
60436
60437   * Rodney Brown
60438
60439   * Sidney Cadot
60440
60441   * Bradford Castalia
60442
60443   * Robert Clark
60444
60445   * Jonathan Corbet
60446
60447   * Ralph Doncaster
60448
60449   * Richard Emberson
60450
60451   * Levente Farkas
60452
60453   * Graham Fawcett
60454
60455   * Mark Fernyhough
60456
60457   * Robert A. French
60458
60459   * Jo"rgen Freyh
60460
60461   * Mark K. Gardner
60462
60463   * Charles-Antoine Gauthier
60464
60465   * Yung Shing Gene
60466
60467   * David Gilbert
60468
60469   * Simon Gornall
60470
60471   * Fred Gray
60472
60473   * John Griffin
60474
60475   * Patrik Hagglund
60476
60477   * Phil Hargett
60478
60479   * Amancio Hasty
60480
60481   * Takafumi Hayashi
60482
60483   * Bryan W. Headley
60484
60485   * Kevin B. Hendricks
60486
60487   * Joep Jansen
60488
60489   * Christian Joensson
60490
60491   * Michel Kern
60492
60493   * David Kidd
60494
60495   * Tobias Kuipers
60496
60497   * Anand Krishnaswamy
60498
60499   * A. O. V. Le Blanc
60500
60501   * llewelly
60502
60503   * Damon Love
60504
60505   * Brad Lucier
60506
60507   * Matthias Klose
60508
60509   * Martin Knoblauch
60510
60511   * Rick Lutowski
60512
60513   * Jesse Macnish
60514
60515   * Stefan Morrell
60516
60517   * Anon A. Mous
60518
60519   * Matthias Mueller
60520
60521   * Pekka Nikander
60522
60523   * Rick Niles
60524
60525   * Jon Olson
60526
60527   * Magnus Persson
60528
60529   * Chris Pollard
60530
60531   * Richard Polton
60532
60533   * Derk Reefman
60534
60535   * David Rees
60536
60537   * Paul Reilly
60538
60539   * Tom Reilly
60540
60541   * Torsten Rueger
60542
60543   * Danny Sadinoff
60544
60545   * Marc Schifer
60546
60547   * Erik Schnetter
60548
60549   * Wayne K. Schroll
60550
60551   * David Schuler
60552
60553   * Vin Shelton
60554
60555   * Tim Souder
60556
60557   * Adam Sulmicki
60558
60559   * Bill Thorson
60560
60561   * George Talbot
60562
60563   * Pedro A. M. Vazquez
60564
60565   * Gregory Warnes
60566
60567   * Ian Watson
60568
60569   * David E. Young
60570
60571   * And many others
60572
60573 And finally we'd like to thank everyone who uses the compiler, provides
60574feedback and generally reminds us why we're doing this work in the first
60575place.
60576
60577
60578File: gcc.info,  Node: Option Index,  Next: Keyword Index,  Prev: Contributors,  Up: Top
60579
60580Option Index
60581************
60582
60583GCC's command line options are indexed here without any initial '-' or
60584'--'.  Where an option has both positive and negative forms (such as
60585'-fOPTION' and '-fno-OPTION'), relevant entries in the manual are
60586indexed under the most appropriate form; it may sometimes be useful to
60587look up both forms.
60588
60589�[index�]
60590* Menu:
60591
60592* ###:                                   Overall Options.    (line  214)
60593* 80387:                                 x86 Options.        (line  520)
60594* A:                                     Preprocessor Options.
60595                                                             (line  332)
60596* allowable_client:                      Darwin Options.     (line  196)
60597* all_load:                              Darwin Options.     (line  110)
60598* analyzer:                              Static Analyzer Options.
60599                                                             (line    7)
60600* ansi:                                  Standards.          (line   13)
60601* ansi <1>:                              C Dialect Options.  (line   11)
60602* ansi <2>:                              Other Builtins.     (line   31)
60603* ansi <3>:                              Non-bugs.           (line  107)
60604* arch_errors_fatal:                     Darwin Options.     (line  114)
60605* aux-info:                              C Dialect Options.  (line  229)
60606* B:                                     Directory Options.  (line  122)
60607* Bdynamic:                              VxWorks Options.    (line   22)
60608* bind_at_load:                          Darwin Options.     (line  118)
60609* Bstatic:                               VxWorks Options.    (line   22)
60610* bundle:                                Darwin Options.     (line  123)
60611* bundle_loader:                         Darwin Options.     (line  127)
60612* c:                                     Overall Options.    (line  169)
60613* C:                                     Preprocessor Options.
60614                                                             (line  341)
60615* c <1>:                                 Link Options.       (line   20)
60616* CC:                                    Preprocessor Options.
60617                                                             (line  353)
60618* client_name:                           Darwin Options.     (line  196)
60619* compatibility_version:                 Darwin Options.     (line  196)
60620* coverage:                              Instrumentation Options.
60621                                                             (line   50)
60622* current_version:                       Darwin Options.     (line  196)
60623* D:                                     Preprocessor Options.
60624                                                             (line   19)
60625* d:                                     Preprocessor Options.
60626                                                             (line  407)
60627* d <1>:                                 Developer Options.  (line   52)
60628* da:                                    Developer Options.  (line  246)
60629* dA:                                    Developer Options.  (line  249)
60630* dD:                                    Preprocessor Options.
60631                                                             (line  431)
60632* dD <1>:                                Developer Options.  (line  253)
60633* dead_strip:                            Darwin Options.     (line  196)
60634* dependency-file:                       Darwin Options.     (line  196)
60635* dH:                                    Developer Options.  (line  257)
60636* dI:                                    Preprocessor Options.
60637                                                             (line  441)
60638* dM:                                    Preprocessor Options.
60639                                                             (line  416)
60640* dN:                                    Preprocessor Options.
60641                                                             (line  437)
60642* dp:                                    Developer Options.  (line  260)
60643* dP:                                    Developer Options.  (line  265)
60644* dU:                                    Preprocessor Options.
60645                                                             (line  445)
60646* dump-analyzer-exploded-nodes:          Static Analyzer Options.
60647                                                             (line  290)
60648* dump-analyzer-exploded-nodes-2:        Static Analyzer Options.
60649                                                             (line  294)
60650* dump-analyzer-exploded-nodes-3:        Static Analyzer Options.
60651                                                             (line  298)
60652* dumpfullversion:                       Developer Options.  (line 1025)
60653* dumpmachine:                           Developer Options.  (line 1013)
60654* dumpspecs:                             Developer Options.  (line 1030)
60655* dumpversion:                           Developer Options.  (line 1017)
60656* dx:                                    Developer Options.  (line  269)
60657* dylib_file:                            Darwin Options.     (line  196)
60658* dylinker_install_name:                 Darwin Options.     (line  196)
60659* dynamic:                               Darwin Options.     (line  196)
60660* dynamiclib:                            Darwin Options.     (line  131)
60661* E:                                     Overall Options.    (line  190)
60662* E <1>:                                 Link Options.       (line   20)
60663* e:                                     Link Options.       (line  169)
60664* EB:                                    ARC Options.        (line  597)
60665* EB <1>:                                C-SKY Options.      (line   29)
60666* EB <2>:                                MIPS Options.       (line    7)
60667* EL:                                    ARC Options.        (line  606)
60668* EL <1>:                                C-SKY Options.      (line   31)
60669* EL <2>:                                MIPS Options.       (line   10)
60670* entry:                                 Link Options.       (line  169)
60671* exported_symbols_list:                 Darwin Options.     (line  196)
60672* F:                                     Darwin Options.     (line   31)
60673* fabi-compat-version:                   C++ Dialect Options.
60674                                                             (line   88)
60675* fabi-version:                          C++ Dialect Options.
60676                                                             (line   24)
60677* faccess-control:                       C++ Dialect Options.
60678                                                             (line  104)
60679* fada-spec-parent:                      Overall Options.    (line  397)
60680* faggressive-loop-optimizations:        Optimize Options.   (line  546)
60681* falign-functions:                      Optimize Options.   (line 1668)
60682* falign-jumps:                          Optimize Options.   (line 1750)
60683* falign-labels:                         Optimize Options.   (line 1709)
60684* falign-loops:                          Optimize Options.   (line 1729)
60685* faligned-new:                          C++ Dialect Options.
60686                                                             (line  108)
60687* fallow-parameterless-variadic-functions: C Dialect Options.
60688                                                             (line  245)
60689* fallow-store-data-races:               Optimize Options.   (line 1770)
60690* fanalyzer:                             Static Analyzer Options.
60691                                                             (line    7)
60692* fanalyzer-call-summaries:              Static Analyzer Options.
60693                                                             (line  174)
60694* fanalyzer-checker:                     Static Analyzer Options.
60695                                                             (line  183)
60696* fanalyzer-fine-grained:                Static Analyzer Options.
60697                                                             (line  191)
60698* fanalyzer-show-duplicate-count:        Static Analyzer Options.
60699                                                             (line  201)
60700* fanalyzer-state-merge:                 Static Analyzer Options.
60701                                                             (line  208)
60702* fanalyzer-state-purge:                 Static Analyzer Options.
60703                                                             (line  216)
60704* fanalyzer-transitivity:                Static Analyzer Options.
60705                                                             (line  227)
60706* fasan-shadow-offset:                   Instrumentation Options.
60707                                                             (line  453)
60708* fasm:                                  C Dialect Options.  (line  252)
60709* fassociative-math:                     Optimize Options.   (line 2283)
60710* fasynchronous-unwind-tables:           Code Gen Options.   (line  156)
60711* fauto-inc-dec:                         Optimize Options.   (line  568)
60712* fauto-profile:                         Optimize Options.   (line 2158)
60713* fbranch-count-reg:                     Optimize Options.   (line  420)
60714* fbranch-probabilities:                 Optimize Options.   (line 2429)
60715* fbuiltin:                              C Dialect Options.  (line  266)
60716* fcall-saved:                           Code Gen Options.   (line  448)
60717* fcall-used:                            Code Gen Options.   (line  434)
60718* fcaller-saves:                         Optimize Options.   (line  926)
60719* fcallgraph-info:                       Developer Options.  (line   34)
60720* fcf-protection:                        Instrumentation Options.
60721                                                             (line  526)
60722* fchar8_t:                              C++ Dialect Options.
60723                                                             (line  118)
60724* fcheck-new:                            C++ Dialect Options.
60725                                                             (line  161)
60726* fchecking:                             Developer Options.  (line  705)
60727* fcode-hoisting:                        Optimize Options.   (line  967)
60728* fcombine-stack-adjustments:            Optimize Options.   (line  938)
60729* fcommon:                               Code Gen Options.   (line  231)
60730* fcommon <1>:                           Common Variable Attributes.
60731                                                             (line  176)
60732* fcompare-debug:                        Developer Options.  (line  799)
60733* fcompare-debug-second:                 Developer Options.  (line  825)
60734* fcompare-elim:                         Optimize Options.   (line 2088)
60735* fconcepts:                             C++ Dialect Options.
60736                                                             (line  172)
60737* fconcepts-ts:                          C++ Dialect Options.
60738                                                             (line  172)
60739* fcond-mismatch:                        C Dialect Options.  (line  396)
60740* fconserve-stack:                       Optimize Options.   (line  957)
60741* fconstant-string-class:                Objective-C and Objective-C++ Dialect Options.
60742                                                             (line   30)
60743* fconstexpr-cache-depth:                C++ Dialect Options.
60744                                                             (line  188)
60745* fconstexpr-depth:                      C++ Dialect Options.
60746                                                             (line  182)
60747* fconstexpr-loop-limit:                 C++ Dialect Options.
60748                                                             (line  198)
60749* fconstexpr-ops-limit:                  C++ Dialect Options.
60750                                                             (line  203)
60751* fcoroutines:                           C++ Dialect Options.
60752                                                             (line  212)
60753* fcprop-registers:                      Optimize Options.   (line 2100)
60754* fcrossjumping:                         Optimize Options.   (line  561)
60755* fcse-follow-jumps:                     Optimize Options.   (line  480)
60756* fcse-skip-blocks:                      Optimize Options.   (line  489)
60757* fcx-fortran-rules:                     Optimize Options.   (line 2416)
60758* fcx-limited-range:                     Optimize Options.   (line 2404)
60759* fdata-sections:                        Optimize Options.   (line 2567)
60760* fdbg-cnt:                              Developer Options.  (line  935)
60761* fdbg-cnt-list:                         Developer Options.  (line  932)
60762* fdce:                                  Optimize Options.   (line  574)
60763* fdebug-cpp:                            Preprocessor Options.
60764                                                             (line  452)
60765* fdebug-prefix-map:                     Debugging Options.  (line  141)
60766* fdebug-types-section:                  Debugging Options.  (line  192)
60767* fdeclone-ctor-dtor:                    Optimize Options.   (line  597)
60768* fdefer-pop:                            Optimize Options.   (line  221)
60769* fdelayed-branch:                       Optimize Options.   (line  750)
60770* fdelete-dead-exceptions:               Code Gen Options.   (line  141)
60771* fdelete-null-pointer-checks:           Optimize Options.   (line  608)
60772* fdevirtualize:                         Optimize Options.   (line  629)
60773* fdevirtualize-at-ltrans:               Optimize Options.   (line  646)
60774* fdevirtualize-speculatively:           Optimize Options.   (line  636)
60775* fdiagnostics-color:                    Diagnostic Message Formatting Options.
60776                                                             (line   40)
60777* fdiagnostics-format:                   Diagnostic Message Formatting Options.
60778                                                             (line  398)
60779* fdiagnostics-generate-patch:           Diagnostic Message Formatting Options.
60780                                                             (line  240)
60781* fdiagnostics-minimum-margin-width:     Diagnostic Message Formatting Options.
60782                                                             (line  209)
60783* fdiagnostics-parseable-fixits:         Diagnostic Message Formatting Options.
60784                                                             (line  213)
60785* fdiagnostics-path-format:              Diagnostic Message Formatting Options.
60786                                                             (line  290)
60787* fdiagnostics-show-caret:               Diagnostic Message Formatting Options.
60788                                                             (line  173)
60789* fdiagnostics-show-cwe:                 Diagnostic Message Formatting Options.
60790                                                             (line  195)
60791* fdiagnostics-show-labels:              Diagnostic Message Formatting Options.
60792                                                             (line  182)
60793* fdiagnostics-show-line-numbers:        Diagnostic Message Formatting Options.
60794                                                             (line  204)
60795* fdiagnostics-show-location:            Diagnostic Message Formatting Options.
60796                                                             (line   25)
60797* fdiagnostics-show-option:              Diagnostic Message Formatting Options.
60798                                                             (line  167)
60799* fdiagnostics-show-path-depths:         Diagnostic Message Formatting Options.
60800                                                             (line  381)
60801* fdiagnostics-show-template-tree:       Diagnostic Message Formatting Options.
60802                                                             (line  258)
60803* fdiagnostics-urls:                     Diagnostic Message Formatting Options.
60804                                                             (line  129)
60805* fdirectives-only:                      Preprocessor Options.
60806                                                             (line  202)
60807* fdisable-:                             Developer Options.  (line  636)
60808* fdollars-in-identifiers:               Preprocessor Options.
60809                                                             (line  223)
60810* fdollars-in-identifiers <1>:           Interoperation.     (line  141)
60811* fdpic:                                 SH Options.         (line  388)
60812* fdse:                                  Optimize Options.   (line  578)
60813* fdump-ada-spec:                        Overall Options.    (line  392)
60814* fdump-analyzer:                        Static Analyzer Options.
60815                                                             (line  272)
60816* fdump-analyzer-callgraph:              Static Analyzer Options.
60817                                                             (line  281)
60818* fdump-analyzer-exploded-graph:         Static Analyzer Options.
60819                                                             (line  285)
60820* fdump-analyzer-state-purge:            Static Analyzer Options.
60821                                                             (line  303)
60822* fdump-analyzer-stderr:                 Static Analyzer Options.
60823                                                             (line  277)
60824* fdump-analyzer-supergraph:             Static Analyzer Options.
60825                                                             (line  309)
60826* fdump-debug:                           Developer Options.  (line  273)
60827* fdump-earlydebug:                      Developer Options.  (line  277)
60828* fdump-final-insns:                     Developer Options.  (line  793)
60829* fdump-go-spec:                         Overall Options.    (line  401)
60830* fdump-ipa:                             Developer Options.  (line  303)
60831* fdump-lang:                            Developer Options.  (line  335)
60832* fdump-lang-all:                        Developer Options.  (line  335)
60833* fdump-noaddr:                          Developer Options.  (line  281)
60834* fdump-passes:                          Developer Options.  (line  353)
60835* fdump-rtl-alignments:                  Developer Options.  (line   65)
60836* fdump-rtl-all:                         Developer Options.  (line  246)
60837* fdump-rtl-asmcons:                     Developer Options.  (line   68)
60838* fdump-rtl-auto_inc_dec:                Developer Options.  (line   72)
60839* fdump-rtl-barriers:                    Developer Options.  (line   76)
60840* fdump-rtl-bbpart:                      Developer Options.  (line   79)
60841* fdump-rtl-bbro:                        Developer Options.  (line   82)
60842* fdump-rtl-btl2:                        Developer Options.  (line   86)
60843* fdump-rtl-btl2 <1>:                    Developer Options.  (line   86)
60844* fdump-rtl-bypass:                      Developer Options.  (line   90)
60845* fdump-rtl-ce1:                         Developer Options.  (line  101)
60846* fdump-rtl-ce2:                         Developer Options.  (line  101)
60847* fdump-rtl-ce3:                         Developer Options.  (line  101)
60848* fdump-rtl-combine:                     Developer Options.  (line   93)
60849* fdump-rtl-compgotos:                   Developer Options.  (line   96)
60850* fdump-rtl-cprop_hardreg:               Developer Options.  (line  105)
60851* fdump-rtl-csa:                         Developer Options.  (line  108)
60852* fdump-rtl-cse1:                        Developer Options.  (line  112)
60853* fdump-rtl-cse2:                        Developer Options.  (line  112)
60854* fdump-rtl-dbr:                         Developer Options.  (line  119)
60855* fdump-rtl-dce:                         Developer Options.  (line  116)
60856* fdump-rtl-dce1:                        Developer Options.  (line  123)
60857* fdump-rtl-dce2:                        Developer Options.  (line  123)
60858* fdump-rtl-dfinish:                     Developer Options.  (line  242)
60859* fdump-rtl-dfinit:                      Developer Options.  (line  242)
60860* fdump-rtl-eh:                          Developer Options.  (line  127)
60861* fdump-rtl-eh_ranges:                   Developer Options.  (line  130)
60862* fdump-rtl-expand:                      Developer Options.  (line  133)
60863* fdump-rtl-fwprop1:                     Developer Options.  (line  137)
60864* fdump-rtl-fwprop2:                     Developer Options.  (line  137)
60865* fdump-rtl-gcse1:                       Developer Options.  (line  142)
60866* fdump-rtl-gcse2:                       Developer Options.  (line  142)
60867* fdump-rtl-init-regs:                   Developer Options.  (line  146)
60868* fdump-rtl-initvals:                    Developer Options.  (line  149)
60869* fdump-rtl-into_cfglayout:              Developer Options.  (line  152)
60870* fdump-rtl-ira:                         Developer Options.  (line  155)
60871* fdump-rtl-jump:                        Developer Options.  (line  158)
60872* fdump-rtl-loop2:                       Developer Options.  (line  161)
60873* fdump-rtl-mach:                        Developer Options.  (line  165)
60874* fdump-rtl-mode_sw:                     Developer Options.  (line  169)
60875* fdump-rtl-outof_cfglayout:             Developer Options.  (line  175)
60876* fdump-rtl-PASS:                        Developer Options.  (line   52)
60877* fdump-rtl-peephole2:                   Developer Options.  (line  178)
60878* fdump-rtl-postreload:                  Developer Options.  (line  181)
60879* fdump-rtl-pro_and_epilogue:            Developer Options.  (line  184)
60880* fdump-rtl-ree:                         Developer Options.  (line  192)
60881* fdump-rtl-regclass:                    Developer Options.  (line  242)
60882* fdump-rtl-rnreg:                       Developer Options.  (line  172)
60883* fdump-rtl-sched1:                      Developer Options.  (line  188)
60884* fdump-rtl-sched2:                      Developer Options.  (line  188)
60885* fdump-rtl-seqabstr:                    Developer Options.  (line  195)
60886* fdump-rtl-shorten:                     Developer Options.  (line  198)
60887* fdump-rtl-sibling:                     Developer Options.  (line  201)
60888* fdump-rtl-sms:                         Developer Options.  (line  212)
60889* fdump-rtl-split1:                      Developer Options.  (line  208)
60890* fdump-rtl-split2:                      Developer Options.  (line  208)
60891* fdump-rtl-split3:                      Developer Options.  (line  208)
60892* fdump-rtl-split4:                      Developer Options.  (line  208)
60893* fdump-rtl-split5:                      Developer Options.  (line  208)
60894* fdump-rtl-stack:                       Developer Options.  (line  216)
60895* fdump-rtl-subreg1:                     Developer Options.  (line  222)
60896* fdump-rtl-subreg2:                     Developer Options.  (line  222)
60897* fdump-rtl-subregs_of_mode_finish:      Developer Options.  (line  242)
60898* fdump-rtl-subregs_of_mode_init:        Developer Options.  (line  242)
60899* fdump-rtl-unshare:                     Developer Options.  (line  226)
60900* fdump-rtl-vartrack:                    Developer Options.  (line  229)
60901* fdump-rtl-vregs:                       Developer Options.  (line  232)
60902* fdump-rtl-web:                         Developer Options.  (line  235)
60903* fdump-statistics:                      Developer Options.  (line  357)
60904* fdump-tree:                            Developer Options.  (line  370)
60905* fdump-tree-all:                        Developer Options.  (line  370)
60906* fdump-unnumbered:                      Developer Options.  (line  291)
60907* fdump-unnumbered-links:                Developer Options.  (line  297)
60908* fdwarf2-cfi-asm:                       Debugging Options.  (line  397)
60909* fearly-inlining:                       Optimize Options.   (line  320)
60910* felide-constructors:                   C++ Dialect Options.
60911                                                             (line  215)
60912* felide-type:                           Diagnostic Message Formatting Options.
60913                                                             (line  278)
60914* feliminate-unused-debug-symbols:       Debugging Options.  (line  121)
60915* feliminate-unused-debug-types:         Debugging Options.  (line  401)
60916* femit-class-debug-always:              Debugging Options.  (line  126)
60917* femit-struct-debug-baseonly:           Debugging Options.  (line  328)
60918* femit-struct-debug-detailed:           Debugging Options.  (line  355)
60919* femit-struct-debug-reduced:            Debugging Options.  (line  341)
60920* fenable-:                              Developer Options.  (line  636)
60921* fenforce-eh-specs:                     C++ Dialect Options.
60922                                                             (line  226)
60923* fexceptions:                           Code Gen Options.   (line  119)
60924* fexcess-precision:                     Optimize Options.   (line 2209)
60925* fexec-charset:                         Preprocessor Options.
60926                                                             (line  270)
60927* fexpensive-optimizations:              Optimize Options.   (line  653)
60928* fext-numeric-literals:                 C++ Dialect Options.
60929                                                             (line  478)
60930* fextended-identifiers:                 Preprocessor Options.
60931                                                             (line  226)
60932* fextern-tls-init:                      C++ Dialect Options.
60933                                                             (line  236)
60934* ffast-math:                            Optimize Options.   (line 2233)
60935* ffat-lto-objects:                      Optimize Options.   (line 2065)
60936* ffile-prefix-map:                      Overall Options.    (line  372)
60937* ffinite-loops:                         Optimize Options.   (line 1207)
60938* ffinite-math-only:                     Optimize Options.   (line 2310)
60939* ffix-and-continue:                     Darwin Options.     (line  104)
60940* ffixed:                                Code Gen Options.   (line  422)
60941* ffloat-store:                          Optimize Options.   (line 2195)
60942* ffloat-store <1>:                      Disappointments.    (line   77)
60943* fforward-propagate:                    Optimize Options.   (line  228)
60944* ffp-contract:                          Optimize Options.   (line  237)
60945* ffp-int-builtin-inexact:               Optimize Options.   (line 2382)
60946* ffreestanding:                         Standards.          (line   99)
60947* ffreestanding <1>:                     C Dialect Options.  (line  314)
60948* ffreestanding <2>:                     Warning Options.    (line  412)
60949* ffreestanding <3>:                     Common Function Attributes.
60950                                                             (line  421)
60951* ffunction-cse:                         Optimize Options.   (line  434)
60952* ffunction-sections:                    Optimize Options.   (line 2567)
60953* fgcse:                                 Optimize Options.   (line  503)
60954* fgcse-after-reload:                    Optimize Options.   (line  539)
60955* fgcse-las:                             Optimize Options.   (line  532)
60956* fgcse-lm:                              Optimize Options.   (line  514)
60957* fgcse-sm:                              Optimize Options.   (line  523)
60958* fgimple:                               C Dialect Options.  (line  300)
60959* fgnu-keywords:                         C++ Dialect Options.
60960                                                             (line  256)
60961* fgnu-runtime:                          Objective-C and Objective-C++ Dialect Options.
60962                                                             (line   39)
60963* fgnu-tm:                               C Dialect Options.  (line  353)
60964* fgnu-unique:                           Code Gen Options.   (line  162)
60965* fgnu89-inline:                         C Dialect Options.  (line  190)
60966* fgraphite-identity:                    Optimize Options.   (line 1249)
60967* fguess-branch-probability:             Optimize Options.   (line 1548)
60968* fhoist-adjacent-loads:                 Optimize Options.   (line  997)
60969* fhosted:                               C Dialect Options.  (line  306)
60970* fident:                                Code Gen Options.   (line  252)
60971* fif-conversion:                        Optimize Options.   (line  582)
60972* fif-conversion2:                       Optimize Options.   (line  591)
60973* fiji:                                  AMD GCN Options.    (line   13)
60974* filelist:                              Darwin Options.     (line  196)
60975* fimplement-inlines:                    C++ Dialect Options.
60976                                                             (line  276)
60977* fimplicit-inline-templates:            C++ Dialect Options.
60978                                                             (line  270)
60979* fimplicit-templates:                   C++ Dialect Options.
60980                                                             (line  262)
60981* findirect-data:                        Darwin Options.     (line  104)
60982* findirect-inlining:                    Optimize Options.   (line  292)
60983* finhibit-size-directive:               Code Gen Options.   (line  255)
60984* finline:                               Optimize Options.   (line  275)
60985* finline-functions:                     Optimize Options.   (line  300)
60986* finline-functions-called-once:         Optimize Options.   (line  312)
60987* finline-limit:                         Optimize Options.   (line  336)
60988* finline-small-functions:               Optimize Options.   (line  283)
60989* finput-charset:                        Preprocessor Options.
60990                                                             (line  283)
60991* finstrument-functions:                 Instrumentation Options.
60992                                                             (line  723)
60993* finstrument-functions <1>:             Common Function Attributes.
60994                                                             (line  691)
60995* finstrument-functions-exclude-file-list: Instrumentation Options.
60996                                                             (line  759)
60997* finstrument-functions-exclude-function-list: Instrumentation Options.
60998                                                             (line  780)
60999* fipa-bit-cp:                           Optimize Options.   (line 1057)
61000* fipa-cp:                               Optimize Options.   (line 1038)
61001* fipa-cp-clone:                         Optimize Options.   (line 1047)
61002* fipa-icf:                              Optimize Options.   (line 1067)
61003* fipa-profile:                          Optimize Options.   (line 1030)
61004* fipa-pta:                              Optimize Options.   (line 1024)
61005* fipa-pure-const:                       Optimize Options.   (line 1008)
61006* fipa-ra:                               Optimize Options.   (line  944)
61007* fipa-reference:                        Optimize Options.   (line 1012)
61008* fipa-reference-addressable:            Optimize Options.   (line 1016)
61009* fipa-sra:                              Optimize Options.   (line  329)
61010* fipa-stack-alignment:                  Optimize Options.   (line 1020)
61011* fipa-vrp:                              Optimize Options.   (line 1062)
61012* fira-algorithm:                        Optimize Options.   (line  687)
61013* fira-hoist-pressure:                   Optimize Options.   (line  716)
61014* fira-loop-pressure:                    Optimize Options.   (line  723)
61015* fira-region:                           Optimize Options.   (line  695)
61016* fira-share-save-slots:                 Optimize Options.   (line  731)
61017* fira-share-spill-slots:                Optimize Options.   (line  737)
61018* fira-verbose:                          Developer Options.  (line  862)
61019* fisolate-erroneous-paths-attribute:    Optimize Options.   (line 1149)
61020* fisolate-erroneous-paths-dereference:  Optimize Options.   (line 1141)
61021* fivar-visibility:                      Objective-C and Objective-C++ Dialect Options.
61022                                                             (line  161)
61023* fivopts:                               Optimize Options.   (line 1374)
61024* fjump-tables:                          Code Gen Options.   (line  414)
61025* fkeep-inline-dllexport:                Optimize Options.   (line  361)
61026* fkeep-inline-functions:                Optimize Options.   (line  367)
61027* fkeep-inline-functions <1>:            Inline.             (line   51)
61028* fkeep-static-consts:                   Optimize Options.   (line  378)
61029* fkeep-static-functions:                Optimize Options.   (line  374)
61030* flat_namespace:                        Darwin Options.     (line  196)
61031* flax-vector-conversions:               C Dialect Options.  (line  401)
61032* fleading-underscore:                   Code Gen Options.   (line  478)
61033* flifetime-dse:                         Optimize Options.   (line  667)
61034* flinker-output:                        Link Options.       (line   25)
61035* flive-patching:                        Optimize Options.   (line 1081)
61036* flive-range-shrinkage:                 Optimize Options.   (line  682)
61037* flocal-ivars:                          Objective-C and Objective-C++ Dialect Options.
61038                                                             (line  152)
61039* floop-block:                           Optimize Options.   (line 1243)
61040* floop-interchange:                     Optimize Options.   (line 1327)
61041* floop-nest-optimize:                   Optimize Options.   (line 1257)
61042* floop-parallelize-all:                 Optimize Options.   (line 1263)
61043* floop-strip-mine:                      Optimize Options.   (line 1243)
61044* floop-unroll-and-jam:                  Optimize Options.   (line 1344)
61045* flra-remat:                            Optimize Options.   (line  743)
61046* flto:                                  Optimize Options.   (line 1817)
61047* flto-compression-level:                Optimize Options.   (line 2039)
61048* flto-partition:                        Optimize Options.   (line 2025)
61049* flto-report:                           Developer Options.  (line  868)
61050* flto-report-wpa:                       Developer Options.  (line  876)
61051* fmacro-prefix-map:                     Preprocessor Options.
61052                                                             (line  261)
61053* fmath-errno:                           Optimize Options.   (line 2247)
61054* fmax-errors:                           Warning Options.    (line   18)
61055* fmax-include-depth:                    Preprocessor Options.
61056                                                             (line  235)
61057* fmem-report:                           Developer Options.  (line  880)
61058* fmem-report-wpa:                       Developer Options.  (line  884)
61059* fmerge-all-constants:                  Optimize Options.   (line  397)
61060* fmerge-constants:                      Optimize Options.   (line  387)
61061* fmerge-debug-strings:                  Debugging Options.  (line  134)
61062* fmessage-length:                       Diagnostic Message Formatting Options.
61063                                                             (line   14)
61064* fmodulo-sched:                         Optimize Options.   (line  408)
61065* fmodulo-sched-allow-regmoves:          Optimize Options.   (line  413)
61066* fmove-loop-invariants:                 Optimize Options.   (line 2527)
61067* fms-extensions:                        C Dialect Options.  (line  368)
61068* fms-extensions <1>:                    C++ Dialect Options.
61069                                                             (line  281)
61070* fms-extensions <2>:                    Unnamed Fields.     (line   36)
61071* fnew-inheriting-ctors:                 C++ Dialect Options.
61072                                                             (line  286)
61073* fnew-ttp-matching:                     C++ Dialect Options.
61074                                                             (line  292)
61075* fnext-runtime:                         Objective-C and Objective-C++ Dialect Options.
61076                                                             (line   43)
61077* fnil-receivers:                        Objective-C and Objective-C++ Dialect Options.
61078                                                             (line   49)
61079* fno-access-control:                    C++ Dialect Options.
61080                                                             (line  104)
61081* fno-allocation-dce:                    Optimize Options.   (line 1767)
61082* fno-analyzer:                          Static Analyzer Options.
61083                                                             (line    7)
61084* fno-analyzer-call-summaries:           Static Analyzer Options.
61085                                                             (line  174)
61086* fno-analyzer-fine-grained:             Static Analyzer Options.
61087                                                             (line  191)
61088* fno-analyzer-show-duplicate-count:     Static Analyzer Options.
61089                                                             (line  201)
61090* fno-analyzer-state-merge:              Static Analyzer Options.
61091                                                             (line  208)
61092* fno-analyzer-state-purge:              Static Analyzer Options.
61093                                                             (line  216)
61094* fno-analyzer-transitivity:             Static Analyzer Options.
61095                                                             (line  227)
61096* fno-asm:                               C Dialect Options.  (line  252)
61097* fno-branch-count-reg:                  Optimize Options.   (line  420)
61098* fno-builtin:                           C Dialect Options.  (line  266)
61099* fno-builtin <1>:                       Warning Options.    (line  412)
61100* fno-builtin <2>:                       Common Function Attributes.
61101                                                             (line  421)
61102* fno-builtin <3>:                       Other Builtins.     (line   21)
61103* fno-canonical-system-headers:          Preprocessor Options.
61104                                                             (line  231)
61105* fno-char8_t:                           C++ Dialect Options.
61106                                                             (line  118)
61107* fno-checking:                          Developer Options.  (line  705)
61108* fno-common:                            Code Gen Options.   (line  231)
61109* fno-common <1>:                        Common Variable Attributes.
61110                                                             (line  176)
61111* fno-compare-debug:                     Developer Options.  (line  799)
61112* fno-debug-types-section:               Debugging Options.  (line  192)
61113* fno-default-inline:                    Inline.             (line   68)
61114* fno-defer-pop:                         Optimize Options.   (line  221)
61115* fno-diagnostics-show-caret:            Diagnostic Message Formatting Options.
61116                                                             (line  173)
61117* fno-diagnostics-show-cwe:              Diagnostic Message Formatting Options.
61118                                                             (line  195)
61119* fno-diagnostics-show-labels:           Diagnostic Message Formatting Options.
61120                                                             (line  182)
61121* fno-diagnostics-show-line-numbers:     Diagnostic Message Formatting Options.
61122                                                             (line  204)
61123* fno-diagnostics-show-option:           Diagnostic Message Formatting Options.
61124                                                             (line  167)
61125* fno-dwarf2-cfi-asm:                    Debugging Options.  (line  397)
61126* fno-elide-constructors:                C++ Dialect Options.
61127                                                             (line  215)
61128* fno-elide-type:                        Diagnostic Message Formatting Options.
61129                                                             (line  278)
61130* fno-eliminate-unused-debug-symbols:    Debugging Options.  (line  121)
61131* fno-eliminate-unused-debug-types:      Debugging Options.  (line  401)
61132* fno-enforce-eh-specs:                  C++ Dialect Options.
61133                                                             (line  226)
61134* fno-ext-numeric-literals:              C++ Dialect Options.
61135                                                             (line  478)
61136* fno-extern-tls-init:                   C++ Dialect Options.
61137                                                             (line  236)
61138* fno-finite-loops:                      Optimize Options.   (line 1207)
61139* fno-fp-int-builtin-inexact:            Optimize Options.   (line 2382)
61140* fno-function-cse:                      Optimize Options.   (line  434)
61141* fno-gnu-keywords:                      C++ Dialect Options.
61142                                                             (line  256)
61143* fno-gnu-unique:                        Code Gen Options.   (line  162)
61144* fno-guess-branch-probability:          Optimize Options.   (line 1548)
61145* fno-ident:                             Code Gen Options.   (line  252)
61146* fno-implement-inlines:                 C++ Dialect Options.
61147                                                             (line  276)
61148* fno-implement-inlines <1>:             C++ Interface.      (line   66)
61149* fno-implicit-inline-templates:         C++ Dialect Options.
61150                                                             (line  270)
61151* fno-implicit-templates:                C++ Dialect Options.
61152                                                             (line  262)
61153* fno-implicit-templates <1>:            Template Instantiation.
61154                                                             (line   94)
61155* fno-inline:                            Optimize Options.   (line  275)
61156* fno-ira-share-save-slots:              Optimize Options.   (line  731)
61157* fno-ira-share-spill-slots:             Optimize Options.   (line  737)
61158* fno-jump-tables:                       Code Gen Options.   (line  414)
61159* fno-keep-inline-dllexport:             Optimize Options.   (line  361)
61160* fno-lifetime-dse:                      Optimize Options.   (line  667)
61161* fno-local-ivars:                       Objective-C and Objective-C++ Dialect Options.
61162                                                             (line  152)
61163* fno-math-errno:                        Optimize Options.   (line 2247)
61164* fno-merge-debug-strings:               Debugging Options.  (line  134)
61165* fno-nil-receivers:                     Objective-C and Objective-C++ Dialect Options.
61166                                                             (line   49)
61167* fno-nonansi-builtins:                  C++ Dialect Options.
61168                                                             (line  299)
61169* fno-operator-names:                    C++ Dialect Options.
61170                                                             (line  315)
61171* fno-optional-diags:                    C++ Dialect Options.
61172                                                             (line  319)
61173* fno-peephole:                          Optimize Options.   (line 1539)
61174* fno-peephole2:                         Optimize Options.   (line 1539)
61175* fno-plt:                               Code Gen Options.   (line  396)
61176* fno-pretty-templates:                  C++ Dialect Options.
61177                                                             (line  329)
61178* fno-printf-return-value:               Optimize Options.   (line 1516)
61179* fno-rtti:                              C++ Dialect Options.
61180                                                             (line  341)
61181* fno-sanitize-recover:                  Instrumentation Options.
61182                                                             (line  462)
61183* fno-sanitize=all:                      Instrumentation Options.
61184                                                             (line  447)
61185* fno-sched-interblock:                  Optimize Options.   (line  776)
61186* fno-sched-spec:                        Optimize Options.   (line  781)
61187* fno-set-stack-executable:              x86 Windows Options.
61188                                                             (line   46)
61189* fno-show-column:                       Diagnostic Message Formatting Options.
61190                                                             (line  393)
61191* fno-signed-bitfields:                  C Dialect Options.  (line  434)
61192* fno-signed-zeros:                      Optimize Options.   (line 2322)
61193* fno-stack-limit:                       Instrumentation Options.
61194                                                             (line  635)
61195* fno-threadsafe-statics:                C++ Dialect Options.
61196                                                             (line  396)
61197* fno-toplevel-reorder:                  Optimize Options.   (line 1782)
61198* fno-trapping-math:                     Optimize Options.   (line 2332)
61199* fno-unsigned-bitfields:                C Dialect Options.  (line  434)
61200* fno-use-cxa-get-exception-ptr:         C++ Dialect Options.
61201                                                             (line  409)
61202* fno-var-tracking-assignments:          Debugging Options.  (line  161)
61203* fno-var-tracking-assignments-toggle:   Developer Options.  (line  846)
61204* fno-weak:                              C++ Dialect Options.
61205                                                             (line  471)
61206* fno-working-directory:                 Preprocessor Options.
61207                                                             (line  318)
61208* fno-writable-relocated-rdata:          x86 Windows Options.
61209                                                             (line   53)
61210* fno-zero-initialized-in-bss:           Optimize Options.   (line  445)
61211* fnon-call-exceptions:                  Code Gen Options.   (line  133)
61212* fnonansi-builtins:                     C++ Dialect Options.
61213                                                             (line  299)
61214* fnothrow-opt:                          C++ Dialect Options.
61215                                                             (line  304)
61216* fobjc-abi-version:                     Objective-C and Objective-C++ Dialect Options.
61217                                                             (line   56)
61218* fobjc-call-cxx-cdtors:                 Objective-C and Objective-C++ Dialect Options.
61219                                                             (line   67)
61220* fobjc-direct-dispatch:                 Objective-C and Objective-C++ Dialect Options.
61221                                                             (line   92)
61222* fobjc-exceptions:                      Objective-C and Objective-C++ Dialect Options.
61223                                                             (line   96)
61224* fobjc-gc:                              Objective-C and Objective-C++ Dialect Options.
61225                                                             (line  104)
61226* fobjc-nilcheck:                        Objective-C and Objective-C++ Dialect Options.
61227                                                             (line  110)
61228* fobjc-std:                             Objective-C and Objective-C++ Dialect Options.
61229                                                             (line  119)
61230* fomit-frame-pointer:                   Optimize Options.   (line  248)
61231* fopenacc:                              C Dialect Options.  (line  325)
61232* fopenacc-dim:                          C Dialect Options.  (line  334)
61233* fopenmp:                               C Dialect Options.  (line  340)
61234* fopenmp-simd:                          C Dialect Options.  (line  349)
61235* foperator-names:                       C++ Dialect Options.
61236                                                             (line  315)
61237* fopt-info:                             Developer Options.  (line  476)
61238* foptimize-sibling-calls:               Optimize Options.   (line  263)
61239* foptimize-strlen:                      Optimize Options.   (line  268)
61240* foptional-diags:                       C++ Dialect Options.
61241                                                             (line  319)
61242* force_cpusubtype_ALL:                  Darwin Options.     (line  135)
61243* force_flat_namespace:                  Darwin Options.     (line  196)
61244* fpack-struct:                          Code Gen Options.   (line  465)
61245* fpartial-inlining:                     Optimize Options.   (line 1491)
61246* fpatchable-function-entry:             Instrumentation Options.
61247                                                             (line  792)
61248* fpcc-struct-return:                    Code Gen Options.   (line  175)
61249* fpcc-struct-return <1>:                Incompatibilities.  (line  170)
61250* fpch-deps:                             Preprocessor Options.
61251                                                             (line  293)
61252* fpch-preprocess:                       Preprocessor Options.
61253                                                             (line  301)
61254* fpeel-loops:                           Optimize Options.   (line 2519)
61255* fpeephole:                             Optimize Options.   (line 1539)
61256* fpeephole2:                            Optimize Options.   (line 1539)
61257* fpermissive:                           C++ Dialect Options.
61258                                                             (line  324)
61259* fpermitted-flt-eval-methods:           C Dialect Options.  (line  207)
61260* fpermitted-flt-eval-methods=c11:       C Dialect Options.  (line  207)
61261* fpermitted-flt-eval-methods=ts-18661-3: C Dialect Options. (line  207)
61262* fpic:                                  Code Gen Options.   (line  353)
61263* fPIC:                                  Code Gen Options.   (line  374)
61264* fpie:                                  Code Gen Options.   (line  387)
61265* fPIE:                                  Code Gen Options.   (line  387)
61266* fplan9-extensions:                     C Dialect Options.  (line  386)
61267* fplan9-extensions <1>:                 Unnamed Fields.     (line   43)
61268* fplt:                                  Code Gen Options.   (line  396)
61269* fplugin:                               Overall Options.    (line  381)
61270* fplugin-arg:                           Overall Options.    (line  388)
61271* fpost-ipa-mem-report:                  Developer Options.  (line  889)
61272* fpre-ipa-mem-report:                   Developer Options.  (line  888)
61273* fpredictive-commoning:                 Optimize Options.   (line 1498)
61274* fprefetch-loop-arrays:                 Optimize Options.   (line 1506)
61275* fpreprocessed:                         Preprocessor Options.
61276                                                             (line  189)
61277* fpretty-templates:                     C++ Dialect Options.
61278                                                             (line  329)
61279* fprintf-return-value:                  Optimize Options.   (line 1516)
61280* fprofile-abs-path:                     Instrumentation Options.
61281                                                             (line  106)
61282* fprofile-arcs:                         Instrumentation Options.
61283                                                             (line   30)
61284* fprofile-arcs <1>:                     Other Builtins.     (line  563)
61285* fprofile-correction:                   Optimize Options.   (line 2107)
61286* fprofile-dir:                          Instrumentation Options.
61287                                                             (line  112)
61288* fprofile-exclude-files:                Instrumentation Options.
61289                                                             (line  200)
61290* fprofile-filter-files:                 Instrumentation Options.
61291                                                             (line  192)
61292* fprofile-generate:                     Instrumentation Options.
61293                                                             (line  137)
61294* fprofile-note:                         Instrumentation Options.
61295                                                             (line  154)
61296* fprofile-partial-training:             Optimize Options.   (line 2116)
61297* fprofile-prefix-path:                  Instrumentation Options.
61298                                                             (line  160)
61299* fprofile-reorder-functions:            Optimize Options.   (line 2459)
61300* fprofile-report:                       Developer Options.  (line  893)
61301* fprofile-reproducible:                 Instrumentation Options.
61302                                                             (line  208)
61303* fprofile-update:                       Instrumentation Options.
61304                                                             (line  175)
61305* fprofile-use:                          Optimize Options.   (line 2130)
61306* fprofile-values:                       Optimize Options.   (line 2449)
61307* fpu:                                   RX Options.         (line   17)
61308* frandom-seed:                          Developer Options.  (line  710)
61309* freciprocal-math:                      Optimize Options.   (line 2300)
61310* frecord-gcc-switches:                  Code Gen Options.   (line  341)
61311* free:                                  Optimize Options.   (line  659)
61312* freg-struct-return:                    Code Gen Options.   (line  193)
61313* frename-registers:                     Optimize Options.   (line 2478)
61314* freorder-blocks:                       Optimize Options.   (line 1569)
61315* freorder-blocks-algorithm:             Optimize Options.   (line 1575)
61316* freorder-blocks-and-partition:         Optimize Options.   (line 1586)
61317* freorder-functions:                    Optimize Options.   (line 1603)
61318* freplace-objc-classes:                 Objective-C and Objective-C++ Dialect Options.
61319                                                             (line  130)
61320* freport-bug:                           Developer Options.  (line  287)
61321* frerun-cse-after-loop:                 Optimize Options.   (line  497)
61322* freschedule-modulo-scheduled-loops:    Optimize Options.   (line  875)
61323* frounding-math:                        Optimize Options.   (line 2347)
61324* frtti:                                 C++ Dialect Options.
61325                                                             (line  341)
61326* fsanitize-address-use-after-scope:     Instrumentation Options.
61327                                                             (line  498)
61328* fsanitize-coverage=trace-cmp:          Instrumentation Options.
61329                                                             (line  513)
61330* fsanitize-coverage=trace-pc:           Instrumentation Options.
61331                                                             (line  509)
61332* fsanitize-recover:                     Instrumentation Options.
61333                                                             (line  462)
61334* fsanitize-sections:                    Instrumentation Options.
61335                                                             (line  458)
61336* fsanitize-undefined-trap-on-error:     Instrumentation Options.
61337                                                             (line  502)
61338* fsanitize=address:                     Instrumentation Options.
61339                                                             (line  236)
61340* fsanitize=alignment:                   Instrumentation Options.
61341                                                             (line  373)
61342* fsanitize=bool:                        Instrumentation Options.
61343                                                             (line  411)
61344* fsanitize=bounds:                      Instrumentation Options.
61345                                                             (line  360)
61346* fsanitize=bounds-strict:               Instrumentation Options.
61347                                                             (line  366)
61348* fsanitize=builtin:                     Instrumentation Options.
61349                                                             (line  435)
61350* fsanitize=enum:                        Instrumentation Options.
61351                                                             (line  416)
61352* fsanitize=float-cast-overflow:         Instrumentation Options.
61353                                                             (line  391)
61354* fsanitize=float-divide-by-zero:        Instrumentation Options.
61355                                                             (line  385)
61356* fsanitize=integer-divide-by-zero:      Instrumentation Options.
61357                                                             (line  323)
61358* fsanitize=kernel-address:              Instrumentation Options.
61359                                                             (line  250)
61360* fsanitize=leak:                        Instrumentation Options.
61361                                                             (line  288)
61362* fsanitize=nonnull-attribute:           Instrumentation Options.
61363                                                             (line  399)
61364* fsanitize=null:                        Instrumentation Options.
61365                                                             (line  337)
61366* fsanitize=object-size:                 Instrumentation Options.
61367                                                             (line  380)
61368* fsanitize=pointer-compare:             Instrumentation Options.
61369                                                             (line  254)
61370* fsanitize=pointer-overflow:            Instrumentation Options.
61371                                                             (line  429)
61372* fsanitize=pointer-subtract:            Instrumentation Options.
61373                                                             (line  264)
61374* fsanitize=return:                      Instrumentation Options.
61375                                                             (line  345)
61376* fsanitize=returns-nonnull-attribute:   Instrumentation Options.
61377                                                             (line  405)
61378* fsanitize=shift:                       Instrumentation Options.
61379                                                             (line  303)
61380* fsanitize=shift-base:                  Instrumentation Options.
61381                                                             (line  316)
61382* fsanitize=shift-exponent:              Instrumentation Options.
61383                                                             (line  311)
61384* fsanitize=signed-integer-overflow:     Instrumentation Options.
61385                                                             (line  351)
61386* fsanitize=thread:                      Instrumentation Options.
61387                                                             (line  274)
61388* fsanitize=undefined:                   Instrumentation Options.
61389                                                             (line  298)
61390* fsanitize=unreachable:                 Instrumentation Options.
61391                                                             (line  327)
61392* fsanitize=vla-bound:                   Instrumentation Options.
61393                                                             (line  333)
61394* fsanitize=vptr:                        Instrumentation Options.
61395                                                             (line  422)
61396* fsave-optimization-record:             Developer Options.  (line  582)
61397* fsched-critical-path-heuristic:        Optimize Options.   (line  841)
61398* fsched-dep-count-heuristic:            Optimize Options.   (line  868)
61399* fsched-group-heuristic:                Optimize Options.   (line  835)
61400* fsched-interblock:                     Optimize Options.   (line  776)
61401* fsched-last-insn-heuristic:            Optimize Options.   (line  861)
61402* fsched-pressure:                       Optimize Options.   (line  786)
61403* fsched-rank-heuristic:                 Optimize Options.   (line  854)
61404* fsched-spec:                           Optimize Options.   (line  781)
61405* fsched-spec-insn-heuristic:            Optimize Options.   (line  847)
61406* fsched-spec-load:                      Optimize Options.   (line  795)
61407* fsched-spec-load-dangerous:            Optimize Options.   (line  800)
61408* fsched-stalled-insns:                  Optimize Options.   (line  806)
61409* fsched-stalled-insns-dep:              Optimize Options.   (line  816)
61410* fsched-verbose:                        Developer Options.  (line  622)
61411* fsched2-use-superblocks:               Optimize Options.   (line  825)
61412* fschedule-fusion:                      Optimize Options.   (line 2488)
61413* fschedule-insns:                       Optimize Options.   (line  757)
61414* fschedule-insns2:                      Optimize Options.   (line  767)
61415* fsection-anchors:                      Optimize Options.   (line 2600)
61416* fsel-sched-pipelining:                 Optimize Options.   (line  888)
61417* fsel-sched-pipelining-outer-loops:     Optimize Options.   (line  893)
61418* fselective-scheduling:                 Optimize Options.   (line  880)
61419* fselective-scheduling2:                Optimize Options.   (line  884)
61420* fsemantic-interposition:               Optimize Options.   (line  898)
61421* fset-stack-executable:                 x86 Windows Options.
61422                                                             (line   46)
61423* fshort-enums:                          Code Gen Options.   (line  211)
61424* fshort-enums <1>:                      Structures unions enumerations and bit-fields implementation.
61425                                                             (line   48)
61426* fshort-enums <2>:                      Common Type Attributes.
61427                                                             (line  288)
61428* fshort-enums <3>:                      Non-bugs.           (line   42)
61429* fshort-wchar:                          Code Gen Options.   (line  221)
61430* fshow-column:                          Diagnostic Message Formatting Options.
61431                                                             (line  393)
61432* fshrink-wrap:                          Optimize Options.   (line  915)
61433* fshrink-wrap-separate:                 Optimize Options.   (line  920)
61434* fsignaling-nans:                       Optimize Options.   (line 2367)
61435* fsigned-bitfields:                     C Dialect Options.  (line  434)
61436* fsigned-bitfields <1>:                 Non-bugs.           (line   57)
61437* fsigned-char:                          C Dialect Options.  (line  424)
61438* fsigned-char <1>:                      Characters implementation.
61439                                                             (line   31)
61440* fsigned-zeros:                         Optimize Options.   (line 2322)
61441* fsimd-cost-model:                      Optimize Options.   (line 1448)
61442* fsingle-precision-constant:            Optimize Options.   (line 2400)
61443* fsized-deallocation:                   C++ Dialect Options.
61444                                                             (line  356)
61445* fsplit-ivs-in-unroller:                Optimize Options.   (line 1469)
61446* fsplit-loops:                          Optimize Options.   (line 2531)
61447* fsplit-paths:                          Optimize Options.   (line 1464)
61448* fsplit-stack:                          Instrumentation Options.
61449                                                             (line  652)
61450* fsplit-stack <1>:                      Common Function Attributes.
61451                                                             (line  741)
61452* fsplit-wide-types:                     Optimize Options.   (line  466)
61453* fsplit-wide-types-early:               Optimize Options.   (line  474)
61454* fssa-backprop:                         Optimize Options.   (line 1173)
61455* fssa-phiopt:                           Optimize Options.   (line 1179)
61456* fsso-struct:                           C Dialect Options.  (line  440)
61457* fstack-check:                          Instrumentation Options.
61458                                                             (line  578)
61459* fstack-clash-protection:               Instrumentation Options.
61460                                                             (line  620)
61461* fstack-limit-register:                 Instrumentation Options.
61462                                                             (line  635)
61463* fstack-limit-symbol:                   Instrumentation Options.
61464                                                             (line  635)
61465* fstack-protector:                      Instrumentation Options.
61466                                                             (line  553)
61467* fstack-protector-all:                  Instrumentation Options.
61468                                                             (line  564)
61469* fstack-protector-explicit:             Instrumentation Options.
61470                                                             (line  574)
61471* fstack-protector-strong:               Instrumentation Options.
61472                                                             (line  567)
61473* fstack-usage:                          Developer Options.  (line  897)
61474* fstack_reuse:                          Code Gen Options.   (line   15)
61475* fstats:                                Developer Options.  (line  926)
61476* fstdarg-opt:                           Optimize Options.   (line 2596)
61477* fstore-merging:                        Optimize Options.   (line 1398)
61478* fstrict-aliasing:                      Optimize Options.   (line 1618)
61479* fstrict-enums:                         C++ Dialect Options.
61480                                                             (line  366)
61481* fstrict-overflow:                      Code Gen Options.   (line  115)
61482* fstrict-volatile-bitfields:            Code Gen Options.   (line  589)
61483* fstrong-eval-order:                    C++ Dialect Options.
61484                                                             (line  375)
61485* fsync-libcalls:                        Code Gen Options.   (line  621)
61486* fsyntax-only:                          Warning Options.    (line   14)
61487* ftabstop:                              Preprocessor Options.
61488                                                             (line  238)
61489* ftemplate-backtrace-limit:             C++ Dialect Options.
61490                                                             (line  383)
61491* ftemplate-depth:                       C++ Dialect Options.
61492                                                             (line  387)
61493* ftest-coverage:                        Instrumentation Options.
61494                                                             (line   97)
61495* fthread-jumps:                         Optimize Options.   (line  457)
61496* fthreadsafe-statics:                   C++ Dialect Options.
61497                                                             (line  396)
61498* ftime-report:                          Developer Options.  (line  854)
61499* ftime-report-details:                  Developer Options.  (line  858)
61500* ftls-model:                            Code Gen Options.   (line  489)
61501* ftoplevel-reorder:                     Optimize Options.   (line 1782)
61502* ftracer:                               Optimize Options.   (line 2496)
61503* ftrack-macro-expansion:                Preprocessor Options.
61504                                                             (line  244)
61505* ftrampolines:                          Code Gen Options.   (line  500)
61506* ftrapping-math:                        Optimize Options.   (line 2332)
61507* ftrapv:                                Code Gen Options.   (line   91)
61508* ftree-bit-ccp:                         Optimize Options.   (line 1161)
61509* ftree-builtin-call-dce:                Optimize Options.   (line 1201)
61510* ftree-ccp:                             Optimize Options.   (line 1168)
61511* ftree-ch:                              Optimize Options.   (line 1230)
61512* ftree-coalesce-vars:                   Optimize Options.   (line 1269)
61513* ftree-copy-prop:                       Optimize Options.   (line 1003)
61514* ftree-dce:                             Optimize Options.   (line 1197)
61515* ftree-dominator-opts:                  Optimize Options.   (line 1216)
61516* ftree-dse:                             Optimize Options.   (line 1223)
61517* ftree-forwprop:                        Optimize Options.   (line  982)
61518* ftree-fre:                             Optimize Options.   (line  986)
61519* ftree-loop-distribute-patterns:        Optimize Options.   (line 1305)
61520* ftree-loop-distribution:               Optimize Options.   (line 1286)
61521* ftree-loop-if-convert:                 Optimize Options.   (line 1279)
61522* ftree-loop-im:                         Optimize Options.   (line 1350)
61523* ftree-loop-ivcanon:                    Optimize Options.   (line 1359)
61524* ftree-loop-linear:                     Optimize Options.   (line 1243)
61525* ftree-loop-optimize:                   Optimize Options.   (line 1237)
61526* ftree-loop-vectorize:                  Optimize Options.   (line 1424)
61527* ftree-parallelize-loops:               Optimize Options.   (line 1379)
61528* ftree-partial-pre:                     Optimize Options.   (line  978)
61529* ftree-phiprop:                         Optimize Options.   (line  993)
61530* ftree-pre:                             Optimize Options.   (line  974)
61531* ftree-pta:                             Optimize Options.   (line 1388)
61532* ftree-reassoc:                         Optimize Options.   (line  963)
61533* ftree-scev-cprop:                      Optimize Options.   (line 1365)
61534* ftree-sink:                            Optimize Options.   (line 1157)
61535* ftree-slp-vectorize:                   Optimize Options.   (line 1429)
61536* ftree-slsr:                            Optimize Options.   (line 1413)
61537* ftree-sra:                             Optimize Options.   (line 1392)
61538* ftree-switch-conversion:               Optimize Options.   (line 1184)
61539* ftree-tail-merge:                      Optimize Options.   (line 1189)
61540* ftree-ter:                             Optimize Options.   (line 1405)
61541* ftree-vectorize:                       Optimize Options.   (line 1419)
61542* ftree-vrp:                             Optimize Options.   (line 1455)
61543* funconstrained-commons:                Optimize Options.   (line  555)
61544* funit-at-a-time:                       Optimize Options.   (line 1775)
61545* funroll-all-loops:                     Optimize Options.   (line 2513)
61546* funroll-loops:                         Optimize Options.   (line 2503)
61547* funsafe-math-optimizations:            Optimize Options.   (line 2265)
61548* funsigned-bitfields:                   C Dialect Options.  (line  434)
61549* funsigned-bitfields <1>:               Structures unions enumerations and bit-fields implementation.
61550                                                             (line   17)
61551* funsigned-bitfields <2>:               Non-bugs.           (line   57)
61552* funsigned-char:                        C Dialect Options.  (line  406)
61553* funsigned-char <1>:                    Characters implementation.
61554                                                             (line   31)
61555* funswitch-loops:                       Optimize Options.   (line 2537)
61556* funwind-tables:                        Code Gen Options.   (line  149)
61557* fuse-cxa-atexit:                       C++ Dialect Options.
61558                                                             (line  402)
61559* fuse-cxa-get-exception-ptr:            C++ Dialect Options.
61560                                                             (line  409)
61561* fuse-ld=bfd:                           Link Options.       (line   74)
61562* fuse-ld=gold:                          Link Options.       (line   77)
61563* fuse-ld=lld:                           Link Options.       (line   80)
61564* fuse-linker-plugin:                    Optimize Options.   (line 2047)
61565* fvar-tracking:                         Debugging Options.  (line  151)
61566* fvar-tracking-assignments:             Debugging Options.  (line  161)
61567* fvar-tracking-assignments-toggle:      Developer Options.  (line  846)
61568* fvariable-expansion-in-unroller:       Optimize Options.   (line 1483)
61569* fvect-cost-model:                      Optimize Options.   (line 1434)
61570* fverbose-asm:                          Code Gen Options.   (line  262)
61571* fversion-loops-for-strides:            Optimize Options.   (line 2544)
61572* fvisibility:                           Code Gen Options.   (line  524)
61573* fvisibility-inlines-hidden:            C++ Dialect Options.
61574                                                             (line  414)
61575* fvisibility-ms-compat:                 C++ Dialect Options.
61576                                                             (line  442)
61577* fvpt:                                  Optimize Options.   (line 2466)
61578* fvtable-verify:                        Instrumentation Options.
61579                                                             (line  670)
61580* fvtv-counts:                           Instrumentation Options.
61581                                                             (line  706)
61582* fvtv-debug:                            Instrumentation Options.
61583                                                             (line  693)
61584* fweak:                                 C++ Dialect Options.
61585                                                             (line  471)
61586* fweb:                                  Optimize Options.   (line 1795)
61587* fwhole-program:                        Optimize Options.   (line 1806)
61588* fwide-exec-charset:                    Preprocessor Options.
61589                                                             (line  275)
61590* fworking-directory:                    Preprocessor Options.
61591                                                             (line  318)
61592* fwrapv:                                Code Gen Options.   (line   99)
61593* fwrapv-pointer:                        Code Gen Options.   (line  109)
61594* fwritable-relocated-rdata:             x86 Windows Options.
61595                                                             (line   53)
61596* fzero-initialized-in-bss:              Optimize Options.   (line  445)
61597* fzero-link:                            Objective-C and Objective-C++ Dialect Options.
61598                                                             (line  140)
61599* g:                                     Debugging Options.  (line   25)
61600* G:                                     ARC Options.        (line  416)
61601* G <1>:                                 M32R/D Options.     (line   57)
61602* G <2>:                                 MIPS Options.       (line  460)
61603* G <3>:                                 Nios II Options.    (line    9)
61604* G <4>:                                 RS/6000 and PowerPC Options.
61605                                                             (line  713)
61606* G <5>:                                 System V Options.   (line   10)
61607* gas-loc-support:                       Debugging Options.  (line  221)
61608* gas-locview-support:                   Debugging Options.  (line  237)
61609* gcolumn-info:                          Debugging Options.  (line  249)
61610* gdescribe-dies:                        Debugging Options.  (line  179)
61611* gdwarf:                                Debugging Options.  (line   45)
61612* gen-decls:                             Objective-C and Objective-C++ Dialect Options.
61613                                                             (line  166)
61614* gfull:                                 Darwin Options.     (line   69)
61615* ggdb:                                  Debugging Options.  (line   38)
61616* ggnu-pubnames:                         Debugging Options.  (line  187)
61617* ginline-points:                        Debugging Options.  (line  308)
61618* ginternal-reset-location-views:        Debugging Options.  (line  297)
61619* gno-as-loc-support:                    Debugging Options.  (line  233)
61620* gno-column-info:                       Debugging Options.  (line  249)
61621* gno-inline-points:                     Debugging Options.  (line  308)
61622* gno-internal-reset-location-views:     Debugging Options.  (line  297)
61623* gno-record-gcc-switches:               Debugging Options.  (line  202)
61624* gno-statement-frontiers:               Debugging Options.  (line  254)
61625* gno-strict-dwarf:                      Debugging Options.  (line  217)
61626* gno-variable-location-views:           Debugging Options.  (line  265)
61627* gpubnames:                             Debugging Options.  (line  184)
61628* grecord-gcc-switches:                  Debugging Options.  (line  202)
61629* gsplit-dwarf:                          Debugging Options.  (line  172)
61630* gstabs:                                Debugging Options.  (line   63)
61631* gstabs+:                               Debugging Options.  (line   71)
61632* gstatement-frontiers:                  Debugging Options.  (line  254)
61633* gstrict-dwarf:                         Debugging Options.  (line  211)
61634* gtoggle:                               Developer Options.  (line  838)
61635* gused:                                 Darwin Options.     (line   64)
61636* gvariable-location-views:              Debugging Options.  (line  265)
61637* gvariable-location-views=incompat5:    Debugging Options.  (line  265)
61638* gvms:                                  Debugging Options.  (line   90)
61639* gxcoff:                                Debugging Options.  (line   77)
61640* gxcoff+:                               Debugging Options.  (line   82)
61641* gz:                                    Debugging Options.  (line  317)
61642* H:                                     Preprocessor Options.
61643                                                             (line  400)
61644* headerpad_max_install_names:           Darwin Options.     (line  196)
61645* help:                                  Overall Options.    (line  220)
61646* I:                                     Directory Options.  (line   13)
61647* I-:                                    Directory Options.  (line   65)
61648* idirafter:                             Directory Options.  (line   13)
61649* iframework:                            Darwin Options.     (line   57)
61650* imacros:                               Preprocessor Options.
61651                                                             (line   57)
61652* image_base:                            Darwin Options.     (line  196)
61653* imultilib:                             Directory Options.  (line   98)
61654* include:                               Preprocessor Options.
61655                                                             (line   46)
61656* init:                                  Darwin Options.     (line  196)
61657* install_name:                          Darwin Options.     (line  196)
61658* iplugindir=:                           Directory Options.  (line  113)
61659* iprefix:                               Directory Options.  (line   80)
61660* iquote:                                Directory Options.  (line   13)
61661* isysroot:                              Directory Options.  (line   92)
61662* isystem:                               Directory Options.  (line   13)
61663* iwithprefix:                           Directory Options.  (line   86)
61664* iwithprefixbefore:                     Directory Options.  (line   86)
61665* keep_private_externs:                  Darwin Options.     (line  196)
61666* l:                                     Link Options.       (line   84)
61667* L:                                     Directory Options.  (line  118)
61668* lobjc:                                 Link Options.       (line  110)
61669* M:                                     Preprocessor Options.
61670                                                             (line   77)
61671* m:                                     RS/6000 and PowerPC Options.
61672                                                             (line  521)
61673* m1:                                    SH Options.         (line    9)
61674* m10:                                   PDP-11 Options.     (line   29)
61675* m128bit-long-double:                   x86 Options.        (line  572)
61676* m16:                                   x86 Options.        (line 1413)
61677* m16-bit:                               CRIS Options.       (line   64)
61678* m16-bit <1>:                           NDS32 Options.      (line   51)
61679* m1reg-:                                Adapteva Epiphany Options.
61680                                                             (line  131)
61681* m2:                                    SH Options.         (line   12)
61682* m210:                                  MCore Options.      (line   43)
61683* m2a:                                   SH Options.         (line   30)
61684* m2a-nofpu:                             SH Options.         (line   18)
61685* m2a-single:                            SH Options.         (line   26)
61686* m2a-single-only:                       SH Options.         (line   22)
61687* m3:                                    SH Options.         (line   34)
61688* m31:                                   S/390 and zSeries Options.
61689                                                             (line   86)
61690* m32:                                   Nvidia PTX Options. (line   10)
61691* m32 <1>:                               RS/6000 and PowerPC Options.
61692                                                             (line  245)
61693* m32 <2>:                               SPARC Options.      (line  315)
61694* m32 <3>:                               TILE-Gx Options.    (line   23)
61695* m32 <4>:                               TILEPro Options.    (line   13)
61696* m32 <5>:                               x86 Options.        (line 1413)
61697* m32-bit:                               CRIS Options.       (line   64)
61698* m32bit-doubles:                        RL78 Options.       (line   73)
61699* m32bit-doubles <1>:                    RX Options.         (line   10)
61700* m32r:                                  M32R/D Options.     (line   15)
61701* m32r2:                                 M32R/D Options.     (line    9)
61702* m32rx:                                 M32R/D Options.     (line   12)
61703* m340:                                  MCore Options.      (line   43)
61704* m3dnow:                                x86 Options.        (line  795)
61705* m3dnowa:                               x86 Options.        (line  796)
61706* m3e:                                   SH Options.         (line   37)
61707* m4:                                    SH Options.         (line   51)
61708* m4-100:                                SH Options.         (line   54)
61709* m4-100-nofpu:                          SH Options.         (line   57)
61710* m4-100-single:                         SH Options.         (line   61)
61711* m4-100-single-only:                    SH Options.         (line   65)
61712* m4-200:                                SH Options.         (line   69)
61713* m4-200-nofpu:                          SH Options.         (line   72)
61714* m4-200-single:                         SH Options.         (line   76)
61715* m4-200-single-only:                    SH Options.         (line   80)
61716* m4-300:                                SH Options.         (line   84)
61717* m4-300-nofpu:                          SH Options.         (line   87)
61718* m4-300-single:                         SH Options.         (line   91)
61719* m4-300-single-only:                    SH Options.         (line   95)
61720* m4-340:                                SH Options.         (line   99)
61721* m4-500:                                SH Options.         (line  102)
61722* m4-nofpu:                              SH Options.         (line   40)
61723* m4-single:                             SH Options.         (line   47)
61724* m4-single-only:                        SH Options.         (line   43)
61725* m40:                                   PDP-11 Options.     (line   23)
61726* m45:                                   PDP-11 Options.     (line   26)
61727* m4a:                                   SH Options.         (line  118)
61728* m4a-nofpu:                             SH Options.         (line  106)
61729* m4a-single:                            SH Options.         (line  114)
61730* m4a-single-only:                       SH Options.         (line  110)
61731* m4al:                                  SH Options.         (line  121)
61732* m4byte-functions:                      MCore Options.      (line   27)
61733* m5200:                                 M680x0 Options.     (line  144)
61734* m5206e:                                M680x0 Options.     (line  153)
61735* m528x:                                 M680x0 Options.     (line  157)
61736* m5307:                                 M680x0 Options.     (line  161)
61737* m5407:                                 M680x0 Options.     (line  165)
61738* m64:                                   Nvidia PTX Options. (line   10)
61739* m64 <1>:                               RS/6000 and PowerPC Options.
61740                                                             (line  245)
61741* m64 <2>:                               S/390 and zSeries Options.
61742                                                             (line   86)
61743* m64 <3>:                               SPARC Options.      (line  315)
61744* m64 <4>:                               TILE-Gx Options.    (line   23)
61745* m64 <5>:                               x86 Options.        (line 1413)
61746* m64bit-doubles:                        RL78 Options.       (line   73)
61747* m64bit-doubles <1>:                    RX Options.         (line   10)
61748* m68000:                                M680x0 Options.     (line   93)
61749* m68010:                                M680x0 Options.     (line  101)
61750* m68020:                                M680x0 Options.     (line  107)
61751* m68020-40:                             M680x0 Options.     (line  175)
61752* m68020-60:                             M680x0 Options.     (line  184)
61753* m68030:                                M680x0 Options.     (line  112)
61754* m68040:                                M680x0 Options.     (line  117)
61755* m68060:                                M680x0 Options.     (line  126)
61756* m68881:                                M680x0 Options.     (line  194)
61757* m8-bit:                                CRIS Options.       (line   64)
61758* m8bit-idiv:                            x86 Options.        (line 1334)
61759* m8byte-align:                          V850 Options.       (line  170)
61760* m96bit-long-double:                    x86 Options.        (line  572)
61761* mA6:                                   ARC Options.        (line   23)
61762* mA7:                                   ARC Options.        (line   30)
61763* mabi:                                  AArch64 Options.    (line    9)
61764* mabi <1>:                              ARM Options.        (line    9)
61765* mabi <2>:                              PRU Options.        (line   28)
61766* mabi <3>:                              RISC-V Options.     (line   17)
61767* mabi <4>:                              RS/6000 and PowerPC Options.
61768                                                             (line  552)
61769* mabi <5>:                              x86 Options.        (line 1027)
61770* mabi=32:                               MIPS Options.       (line  156)
61771* mabi=64:                               MIPS Options.       (line  156)
61772* mabi=eabi:                             MIPS Options.       (line  156)
61773* mabi=elfv1:                            RS/6000 and PowerPC Options.
61774                                                             (line  573)
61775* mabi=elfv2:                            RS/6000 and PowerPC Options.
61776                                                             (line  579)
61777* mabi=gnu:                              MMIX Options.       (line   20)
61778* mabi=ibmlongdouble:                    RS/6000 and PowerPC Options.
61779                                                             (line  557)
61780* mabi=ieeelongdouble:                   RS/6000 and PowerPC Options.
61781                                                             (line  565)
61782* mabi=mmixware:                         MMIX Options.       (line   20)
61783* mabi=n32:                              MIPS Options.       (line  156)
61784* mabi=o64:                              MIPS Options.       (line  156)
61785* mabicalls:                             MIPS Options.       (line  192)
61786* mabm:                                  x86 Options.        (line  798)
61787* mabort-on-noreturn:                    ARM Options.        (line  750)
61788* mabs=2008:                             MIPS Options.       (line  300)
61789* mabs=legacy:                           MIPS Options.       (line  300)
61790* mabsdata:                              AVR Options.        (line  163)
61791* mabsdiff:                              MeP Options.        (line    7)
61792* mac0:                                  PDP-11 Options.     (line   16)
61793* macc-4:                                FRV Options.        (line  139)
61794* macc-8:                                FRV Options.        (line  143)
61795* maccumulate-args:                      AVR Options.        (line  170)
61796* maccumulate-outgoing-args:             SH Options.         (line  314)
61797* maccumulate-outgoing-args <1>:         x86 Options.        (line 1071)
61798* maddress-mode=long:                    x86 Options.        (line 1463)
61799* maddress-mode=short:                   x86 Options.        (line 1468)
61800* mads:                                  RS/6000 and PowerPC Options.
61801                                                             (line  613)
61802* madx:                                  x86 Options.        (line  799)
61803* maes:                                  x86 Options.        (line  776)
61804* maix-struct-return:                    RS/6000 and PowerPC Options.
61805                                                             (line  545)
61806* maix32:                                RS/6000 and PowerPC Options.
61807                                                             (line  283)
61808* maix64:                                RS/6000 and PowerPC Options.
61809                                                             (line  283)
61810* malign-300:                            H8/300 Options.     (line   41)
61811* malign-call:                           ARC Options.        (line  435)
61812* malign-data:                           RISC-V Options.     (line  127)
61813* malign-data <1>:                       x86 Options.        (line  612)
61814* malign-double:                         x86 Options.        (line  557)
61815* malign-int:                            M680x0 Options.     (line  261)
61816* malign-labels:                         FRV Options.        (line  128)
61817* malign-loops:                          M32R/D Options.     (line   73)
61818* malign-natural:                        RS/6000 and PowerPC Options.
61819                                                             (line  321)
61820* malign-power:                          RS/6000 and PowerPC Options.
61821                                                             (line  321)
61822* malign-stringops:                      x86 Options.        (line 1207)
61823* mall-opts:                             MeP Options.        (line   11)
61824* malloc-cc:                             FRV Options.        (line   31)
61825* mallow-string-insns:                   RX Options.         (line  150)
61826* mallregs:                              RL78 Options.       (line   66)
61827* maltivec:                              RS/6000 and PowerPC Options.
61828                                                             (line  136)
61829* mam33:                                 MN10300 Options.    (line   17)
61830* mam33-2:                               MN10300 Options.    (line   24)
61831* mam34:                                 MN10300 Options.    (line   27)
61832* manchor:                               C-SKY Options.      (line  110)
61833* mandroid:                              GNU/Linux Options.  (line   26)
61834* mannotate-align:                       ARC Options.        (line  382)
61835* mapcs:                                 ARM Options.        (line   21)
61836* mapcs-frame:                           ARM Options.        (line   13)
61837* mapp-regs:                             SPARC Options.      (line   10)
61838* mapp-regs <1>:                         V850 Options.       (line  181)
61839* mARC600:                               ARC Options.        (line   23)
61840* mARC601:                               ARC Options.        (line   27)
61841* mARC700:                               ARC Options.        (line   30)
61842* march:                                 AArch64 Options.    (line  165)
61843* march <1>:                             AMD GCN Options.    (line    9)
61844* march <2>:                             ARM Options.        (line   80)
61845* march <3>:                             C6X Options.        (line    7)
61846* march <4>:                             CRIS Options.       (line   10)
61847* march <5>:                             HPPA Options.       (line    9)
61848* march <6>:                             HPPA Options.       (line  162)
61849* march <7>:                             M680x0 Options.     (line   12)
61850* march <8>:                             MIPS Options.       (line   14)
61851* march <9>:                             NDS32 Options.      (line   64)
61852* march <10>:                            Nios II Options.    (line   94)
61853* march <11>:                            Nvidia PTX Options. (line   13)
61854* march <12>:                            RISC-V Options.     (line   54)
61855* march <13>:                            S/390 and zSeries Options.
61856                                                             (line  148)
61857* march <14>:                            x86 Options.        (line    9)
61858* march=:                                C-SKY Options.      (line    9)
61859* marclinux:                             ARC Options.        (line  388)
61860* marclinux_prof:                        ARC Options.        (line  395)
61861* margonaut:                             ARC Options.        (line  593)
61862* marm:                                  ARM Options.        (line  822)
61863* mas100-syntax:                         RX Options.         (line   76)
61864* masm-hex:                              MSP430 Options.     (line    9)
61865* masm-syntax-unified:                   ARM Options.        (line  921)
61866* masm=DIALECT:                          x86 Options.        (line  506)
61867* matomic:                               ARC Options.        (line  155)
61868* matomic-model=MODEL:                   SH Options.         (line  193)
61869* mauto-litpools:                        Xtensa Options.     (line   60)
61870* mauto-modify-reg:                      ARC Options.        (line  438)
61871* mauto-pic:                             IA-64 Options.      (line   50)
61872* maverage:                              MeP Options.        (line   16)
61873* mavoid-indexed-addresses:              RS/6000 and PowerPC Options.
61874                                                             (line  360)
61875* mavx:                                  x86 Options.        (line  764)
61876* mavx2:                                 x86 Options.        (line  765)
61877* mavx256-split-unaligned-load:          x86 Options.        (line 1342)
61878* mavx256-split-unaligned-store:         x86 Options.        (line 1342)
61879* mavx5124fmaps:                         x86 Options.        (line  826)
61880* mavx5124vnniw:                         x86 Options.        (line  828)
61881* mavx512bf16:                           x86 Options.        (line  815)
61882* mavx512bitalg:                         x86 Options.        (line  820)
61883* mavx512bw:                             x86 Options.        (line  771)
61884* mavx512cd:                             x86 Options.        (line  769)
61885* mavx512dq:                             x86 Options.        (line  772)
61886* mavx512er:                             x86 Options.        (line  768)
61887* mavx512f:                              x86 Options.        (line  766)
61888* mavx512ifma:                           x86 Options.        (line  773)
61889* mavx512pf:                             x86 Options.        (line  767)
61890* mavx512vbmi:                           x86 Options.        (line  774)
61891* mavx512vbmi2:                          x86 Options.        (line  814)
61892* mavx512vl:                             x86 Options.        (line  770)
61893* mavx512vnni:                           x86 Options.        (line  827)
61894* mavx512vp2intersect:                   x86 Options.        (line  825)
61895* mavx512vpopcntdq:                      x86 Options.        (line  824)
61896* max-vect-align:                        Adapteva Epiphany Options.
61897                                                             (line  119)
61898* mb:                                    SH Options.         (line  126)
61899* mbackchain:                            S/390 and zSeries Options.
61900                                                             (line   35)
61901* mbarrel-shift-enabled:                 LM32 Options.       (line    9)
61902* mbarrel-shifter:                       ARC Options.        (line   10)
61903* mbarrel_shifter:                       ARC Options.        (line  613)
61904* mbase-addresses:                       MMIX Options.       (line   53)
61905* mbased=:                               MeP Options.        (line   20)
61906* mbbit-peephole:                        ARC Options.        (line  441)
61907* mbe8:                                  ARM Options.        (line   72)
61908* mbig:                                  RS/6000 and PowerPC Options.
61909                                                             (line  440)
61910* mbig-endian:                           AArch64 Options.    (line   20)
61911* mbig-endian <1>:                       ARC Options.        (line  596)
61912* mbig-endian <2>:                       ARM Options.        (line   67)
61913* mbig-endian <3>:                       C6X Options.        (line   13)
61914* mbig-endian <4>:                       C-SKY Options.      (line   28)
61915* mbig-endian <5>:                       eBPF Options.       (line   22)
61916* mbig-endian <6>:                       IA-64 Options.      (line    9)
61917* mbig-endian <7>:                       MCore Options.      (line   39)
61918* mbig-endian <8>:                       MicroBlaze Options. (line   56)
61919* mbig-endian <9>:                       NDS32 Options.      (line    9)
61920* mbig-endian <10>:                      RS/6000 and PowerPC Options.
61921                                                             (line  440)
61922* mbig-endian <11>:                      TILE-Gx Options.    (line   29)
61923* mbig-endian-data:                      RX Options.         (line   42)
61924* mbig-switch:                           V850 Options.       (line  176)
61925* mbigtable:                             SH Options.         (line  141)
61926* mbionic:                               GNU/Linux Options.  (line   22)
61927* mbit-align:                            RS/6000 and PowerPC Options.
61928                                                             (line  392)
61929* mbit-ops:                              CR16 Options.       (line   25)
61930* mbitfield:                             M680x0 Options.     (line  231)
61931* mbitops:                               MeP Options.        (line   26)
61932* mbitops <1>:                           SH Options.         (line  145)
61933* mblock-compare-inline-limit:           RS/6000 and PowerPC Options.
61934                                                             (line  693)
61935* mblock-compare-inline-loop-limit:      RS/6000 and PowerPC Options.
61936                                                             (line  699)
61937* mblock-move-inline-limit:              RS/6000 and PowerPC Options.
61938                                                             (line  687)
61939* mbmi:                                  x86 Options.        (line  800)
61940* mbmi2:                                 x86 Options.        (line  801)
61941* mboard:                                OpenRISC Options.   (line    9)
61942* mbranch-cost:                          Adapteva Epiphany Options.
61943                                                             (line   18)
61944* mbranch-cost <1>:                      AVR Options.        (line  185)
61945* mbranch-cost <2>:                      MIPS Options.       (line  785)
61946* mbranch-cost <3>:                      RISC-V Options.     (line    9)
61947* mbranch-cost=:                         C-SKY Options.      (line  143)
61948* mbranch-cost=NUM:                      SH Options.         (line  334)
61949* mbranch-cost=NUMBER:                   M32R/D Options.     (line   82)
61950* mbranch-index:                         ARC Options.        (line  329)
61951* mbranch-likely:                        MIPS Options.       (line  792)
61952* mbranch-predict:                       MMIX Options.       (line   48)
61953* mbranch-protection:                    AArch64 Options.    (line  275)
61954* mbss-plt:                              RS/6000 and PowerPC Options.
61955                                                             (line  160)
61956* mbuild-constants:                      DEC Alpha Options.  (line  141)
61957* mbwx:                                  DEC Alpha Options.  (line  163)
61958* mbypass-cache:                         Nios II Options.    (line  103)
61959* mc68000:                               M680x0 Options.     (line   93)
61960* mc68020:                               M680x0 Options.     (line  107)
61961* mc=:                                   MeP Options.        (line   31)
61962* mcache:                                C-SKY Options.      (line   77)
61963* mcache-block-size:                     NDS32 Options.      (line   60)
61964* mcache-volatile:                       Nios II Options.    (line  109)
61965* mcall-eabi:                            RS/6000 and PowerPC Options.
61966                                                             (line  515)
61967* mcall-freebsd:                         RS/6000 and PowerPC Options.
61968                                                             (line  529)
61969* mcall-linux:                           RS/6000 and PowerPC Options.
61970                                                             (line  525)
61971* mcall-ms2sysv-xlogues:                 x86 Options.        (line 1047)
61972* mcall-netbsd:                          RS/6000 and PowerPC Options.
61973                                                             (line  533)
61974* mcall-netbsd <1>:                      RS/6000 and PowerPC Options.
61975                                                             (line  537)
61976* mcall-prologues:                       AVR Options.        (line  190)
61977* mcall-sysv:                            RS/6000 and PowerPC Options.
61978                                                             (line  507)
61979* mcall-sysv-eabi:                       RS/6000 and PowerPC Options.
61980                                                             (line  515)
61981* mcall-sysv-noeabi:                     RS/6000 and PowerPC Options.
61982                                                             (line  518)
61983* mcallee-super-interworking:            ARM Options.        (line  851)
61984* mcaller-copies:                        HPPA Options.       (line   23)
61985* mcaller-super-interworking:            ARM Options.        (line  858)
61986* mcallgraph-data:                       MCore Options.      (line   31)
61987* mcase-vector-pcrel:                    ARC Options.        (line  450)
61988* mcbcond:                               SPARC Options.      (line  260)
61989* mcbranch-force-delay-slot:             SH Options.         (line  349)
61990* mcc-init:                              CRIS Options.       (line   42)
61991* mccrt:                                 C-SKY Options.      (line  139)
61992* mcfv4e:                                M680x0 Options.     (line  169)
61993* mcheck-zero-division:                  MIPS Options.       (line  570)
61994* mcix:                                  DEC Alpha Options.  (line  163)
61995* mcld:                                  x86 Options.        (line  880)
61996* mcldemote:                             x86 Options.        (line  829)
61997* mclear-hwcap:                          Solaris 2 Options.  (line    9)
61998* mclflushopt:                           x86 Options.        (line  778)
61999* mclip:                                 MeP Options.        (line   35)
62000* mclwb:                                 x86 Options.        (line  779)
62001* mclzero:                               x86 Options.        (line  812)
62002* mcmodel:                               NDS32 Options.      (line   67)
62003* mcmodel <1>:                           SPARC Options.      (line  320)
62004* mcmodel=kernel:                        x86 Options.        (line 1447)
62005* mcmodel=large:                         AArch64 Options.    (line   45)
62006* mcmodel=large <1>:                     RS/6000 and PowerPC Options.
62007                                                             (line  130)
62008* mcmodel=large <2>:                     TILE-Gx Options.    (line   14)
62009* mcmodel=large <3>:                     x86 Options.        (line 1459)
62010* mcmodel=medany:                        RISC-V Options.     (line  105)
62011* mcmodel=medium:                        RS/6000 and PowerPC Options.
62012                                                             (line  125)
62013* mcmodel=medium <1>:                    x86 Options.        (line 1452)
62014* mcmodel=medlow:                        RISC-V Options.     (line   98)
62015* mcmodel=small:                         AArch64 Options.    (line   39)
62016* mcmodel=small <1>:                     RS/6000 and PowerPC Options.
62017                                                             (line  121)
62018* mcmodel=small <2>:                     TILE-Gx Options.    (line    9)
62019* mcmodel=small <3>:                     x86 Options.        (line 1441)
62020* mcmodel=tiny:                          AArch64 Options.    (line   34)
62021* mcmov:                                 NDS32 Options.      (line   21)
62022* mcmov <1>:                             OpenRISC Options.   (line   45)
62023* mcmove:                                Adapteva Epiphany Options.
62024                                                             (line   23)
62025* mcmpb:                                 RS/6000 and PowerPC Options.
62026                                                             (line   25)
62027* mcmse:                                 ARM Options.        (line  950)
62028* mcode-density:                         ARC Options.        (line  163)
62029* mcode-density-frame:                   ARC Options.        (line  511)
62030* mcode-readable:                        MIPS Options.       (line  530)
62031* mcode-region:                          MSP430 Options.     (line  135)
62032* mcompact-branches=always:              MIPS Options.       (line  804)
62033* mcompact-branches=never:               MIPS Options.       (line  804)
62034* mcompact-branches=optimal:             MIPS Options.       (line  804)
62035* mcompact-casesi:                       ARC Options.        (line  454)
62036* mcompat-align-parm:                    RS/6000 and PowerPC Options.
62037                                                             (line  898)
62038* mcompress:                             FT32 Options.       (line   26)
62039* mcond-exec:                            FRV Options.        (line  187)
62040* mcond-move:                            FRV Options.        (line  159)
62041* mconfig=:                              MeP Options.        (line   39)
62042* mconsole:                              x86 Windows Options.
62043                                                             (line    9)
62044* mconst-align:                          CRIS Options.       (line   55)
62045* mconst16:                              Xtensa Options.     (line   10)
62046* mconstant-gp:                          IA-64 Options.      (line   46)
62047* mconstpool:                            C-SKY Options.      (line  127)
62048* mcop:                                  MeP Options.        (line   48)
62049* mcop32:                                MeP Options.        (line   53)
62050* mcop64:                                MeP Options.        (line   56)
62051* mcorea:                                Blackfin Options.   (line  154)
62052* mcoreb:                                Blackfin Options.   (line  161)
62053* mcp:                                   C-SKY Options.      (line   74)
62054* mcpu:                                  AArch64 Options.    (line  231)
62055* mcpu <1>:                              ARC Options.        (line   18)
62056* mcpu <2>:                              ARM Options.        (line  620)
62057* mcpu <3>:                              CRIS Options.       (line   10)
62058* mcpu <4>:                              DEC Alpha Options.  (line  215)
62059* mcpu <5>:                              FRV Options.        (line  258)
62060* mcpu <6>:                              M680x0 Options.     (line   28)
62061* mcpu <7>:                              picoChip Options.   (line    9)
62062* mcpu <8>:                              RL78 Options.       (line   32)
62063* mcpu <9>:                              RS/6000 and PowerPC Options.
62064                                                             (line   62)
62065* mcpu <10>:                             RX Options.         (line   30)
62066* mcpu <11>:                             SPARC Options.      (line  115)
62067* mcpu <12>:                             TILE-Gx Options.    (line   18)
62068* mcpu <13>:                             TILEPro Options.    (line    9)
62069* mcpu <14>:                             Visium Options.     (line   33)
62070* mcpu <15>:                             x86 Options.        (line  452)
62071* mcpu32:                                M680x0 Options.     (line  135)
62072* mcpu=:                                 Blackfin Options.   (line    7)
62073* mcpu= <1>:                             C-SKY Options.      (line   14)
62074* mcpu= <2>:                             M32C Options.       (line    7)
62075* mcpu= <3>:                             MicroBlaze Options. (line   20)
62076* mcpu= <4>:                             MSP430 Options.     (line   72)
62077* mcr16c:                                CR16 Options.       (line   14)
62078* mcr16cplus:                            CR16 Options.       (line   14)
62079* mcrc:                                  MIPS Options.       (line  416)
62080* mcrc32:                                x86 Options.        (line  948)
62081* mcrypto:                               RS/6000 and PowerPC Options.
62082                                                             (line  177)
62083* mcsync-anomaly:                        Blackfin Options.   (line   57)
62084* mcsync-anomaly <1>:                    Blackfin Options.   (line   63)
62085* mctor-dtor:                            NDS32 Options.      (line   81)
62086* mcustom-fpu-cfg:                       Nios II Options.    (line  259)
62087* mcustom-INSN:                          Nios II Options.    (line  139)
62088* mcx16:                                 x86 Options.        (line  921)
62089* MD:                                    Preprocessor Options.
62090                                                             (line  169)
62091* mdalign:                               SH Options.         (line  132)
62092* mdata-align:                           CRIS Options.       (line   55)
62093* mdata-model:                           CR16 Options.       (line   28)
62094* mdata-region:                          MSP430 Options.     (line  135)
62095* mdc:                                   MeP Options.        (line   62)
62096* mdebug:                                M32R/D Options.     (line   69)
62097* mdebug <1>:                            S/390 and zSeries Options.
62098                                                             (line  144)
62099* mdebug <2>:                            Visium Options.     (line    7)
62100* mdebug-main=PREFIX:                    VMS Options.        (line   13)
62101* mdec-asm:                              PDP-11 Options.     (line   46)
62102* mdisable-callt:                        V850 Options.       (line   92)
62103* mdisable-fpregs:                       HPPA Options.       (line   34)
62104* mdisable-indexing:                     HPPA Options.       (line   40)
62105* mdiv:                                  C-SKY Options.      (line   93)
62106* mdiv <1>:                              M680x0 Options.     (line  206)
62107* mdiv <2>:                              MCore Options.      (line   15)
62108* mdiv <3>:                              MeP Options.        (line   65)
62109* mdiv <4>:                              RISC-V Options.     (line   49)
62110* mdiv-rem:                              ARC Options.        (line  160)
62111* mdiv=STRATEGY:                         SH Options.         (line  284)
62112* mdivide-breaks:                        MIPS Options.       (line  576)
62113* mdivide-enabled:                       LM32 Options.       (line   12)
62114* mdivide-traps:                         MIPS Options.       (line  576)
62115* mdivsi3_libfunc=NAME:                  SH Options.         (line  320)
62116* mdll:                                  x86 Windows Options.
62117                                                             (line   16)
62118* mdlmzb:                                RS/6000 and PowerPC Options.
62119                                                             (line  385)
62120* mdmx:                                  MIPS Options.       (line  376)
62121* mdouble:                               AVR Options.        (line  195)
62122* mdouble <1>:                           FRV Options.        (line   48)
62123* mdouble-float:                         C-SKY Options.      (line   42)
62124* mdouble-float <1>:                     MIPS Options.       (line  288)
62125* mdouble-float <2>:                     OpenRISC Options.   (line   33)
62126* mdpfp:                                 ARC Options.        (line   99)
62127* mdpfp-compact:                         ARC Options.        (line  100)
62128* mdpfp-fast:                            ARC Options.        (line  104)
62129* mdpfp_compact:                         ARC Options.        (line  616)
62130* mdpfp_fast:                            ARC Options.        (line  619)
62131* mdsp:                                  C-SKY Options.      (line   86)
62132* mdsp <1>:                              MIPS Options.       (line  353)
62133* mdsp-packa:                            ARC Options.        (line  335)
62134* mdspr2:                                MIPS Options.       (line  359)
62135* mdsp_packa:                            ARC Options.        (line  622)
62136* mdump-tune-features:                   x86 Options.        (line  862)
62137* mdvbf:                                 ARC Options.        (line  340)
62138* mdwarf2-asm:                           IA-64 Options.      (line   94)
62139* mdword:                                FRV Options.        (line   40)
62140* mdword <1>:                            FRV Options.        (line   44)
62141* mdynamic-no-pic:                       RS/6000 and PowerPC Options.
62142                                                             (line  445)
62143* mea:                                   ARC Options.        (line  112)
62144* mEA:                                   ARC Options.        (line  625)
62145* meabi:                                 RS/6000 and PowerPC Options.
62146                                                             (line  632)
62147* mearly-cbranchsi:                      ARC Options.        (line  476)
62148* mearly-stop-bits:                      IA-64 Options.      (line  100)
62149* meb:                                   MeP Options.        (line   68)
62150* meb <1>:                               Moxie Options.      (line    7)
62151* meb <2>:                               Nios II Options.    (line   90)
62152* meb <3>:                               Score Options.      (line    9)
62153* medsp:                                 C-SKY Options.      (line   87)
62154* mel:                                   MeP Options.        (line   71)
62155* mel <1>:                               Moxie Options.      (line   11)
62156* mel <2>:                               Nios II Options.    (line   90)
62157* mel <3>:                               Score Options.      (line   12)
62158* melf:                                  CRIS Options.       (line   87)
62159* melf <1>:                              MMIX Options.       (line   43)
62160* melrw:                                 C-SKY Options.      (line   60)
62161* memb:                                  RS/6000 and PowerPC Options.
62162                                                             (line  627)
62163* membedded-data:                        MIPS Options.       (line  517)
62164* memregs=:                              M32C Options.       (line   21)
62165* menqcmd:                               x86 Options.        (line  823)
62166* mep:                                   V850 Options.       (line   16)
62167* mepsilon:                              MMIX Options.       (line   15)
62168* mesa:                                  S/390 and zSeries Options.
62169                                                             (line   94)
62170* metrax100:                             CRIS Options.       (line   27)
62171* metrax4:                               CRIS Options.       (line   27)
62172* meva:                                  MIPS Options.       (line  403)
62173* mexpand-adddi:                         ARC Options.        (line  479)
62174* mexplicit-relocs:                      DEC Alpha Options.  (line  176)
62175* mexplicit-relocs <1>:                  MIPS Options.       (line  561)
62176* mexr:                                  H8/300 Options.     (line   28)
62177* mexr <1>:                              H8/300 Options.     (line   33)
62178* mext-perf:                             NDS32 Options.      (line   27)
62179* mext-perf2:                            NDS32 Options.      (line   33)
62180* mext-string:                           NDS32 Options.      (line   39)
62181* mextern-sdata:                         MIPS Options.       (line  480)
62182* MF:                                    Preprocessor Options.
62183                                                             (line  111)
62184* mf16c:                                 x86 Options.        (line  783)
62185* mfancy-math-387:                       x86 Options.        (line  547)
62186* mfast-fp:                              Blackfin Options.   (line  130)
62187* mfast-indirect-calls:                  HPPA Options.       (line   52)
62188* mfast-sw-div:                          Nios II Options.    (line  115)
62189* mfaster-structs:                       SPARC Options.      (line   91)
62190* mfdiv:                                 RISC-V Options.     (line   42)
62191* mfdivdu:                               C-SKY Options.      (line   48)
62192* mfdpic:                                ARM Options.        (line  957)
62193* mfdpic <1>:                            FRV Options.        (line   72)
62194* mfentry:                               x86 Options.        (line 1281)
62195* mfentry-name:                          x86 Options.        (line 1312)
62196* mfentry-section:                       x86 Options.        (line 1316)
62197* mfix:                                  DEC Alpha Options.  (line  163)
62198* mfix-24k:                              MIPS Options.       (line  641)
62199* mfix-and-continue:                     Darwin Options.     (line  104)
62200* mfix-at697f:                           SPARC Options.      (line  294)
62201* mfix-cortex-a53-835769:                AArch64 Options.    (line  105)
62202* mfix-cortex-a53-843419:                AArch64 Options.    (line  112)
62203* mfix-cortex-m3-ldrd:                   ARM Options.        (line  892)
62204* mfix-gr712rc:                          SPARC Options.      (line  307)
62205* mfix-r10000:                           MIPS Options.       (line  663)
62206* mfix-r4000:                            MIPS Options.       (line  647)
62207* mfix-r4400:                            MIPS Options.       (line  657)
62208* mfix-r5900:                            MIPS Options.       (line  674)
62209* mfix-rm7000:                           MIPS Options.       (line  684)
62210* mfix-sb1:                              MIPS Options.       (line  709)
62211* mfix-ut699:                            SPARC Options.      (line  299)
62212* mfix-ut700:                            SPARC Options.      (line  303)
62213* mfix-vr4120:                           MIPS Options.       (line  689)
62214* mfix-vr4130:                           MIPS Options.       (line  702)
62215* mfixed-cc:                             FRV Options.        (line   35)
62216* mfixed-range:                          HPPA Options.       (line   59)
62217* mfixed-range <1>:                      IA-64 Options.      (line  105)
62218* mfixed-range <2>:                      SH Options.         (line  327)
62219* mflat:                                 SPARC Options.      (line   22)
62220* mflip-mips16:                          MIPS Options.       (line  128)
62221* mflip-thumb:                           ARM Options.        (line  834)
62222* mfloat-abi:                            ARM Options.        (line   41)
62223* mfloat-ieee:                           DEC Alpha Options.  (line  171)
62224* mfloat-vax:                            DEC Alpha Options.  (line  171)
62225* mfloat128:                             RS/6000 and PowerPC Options.
62226                                                             (line  214)
62227* mfloat128-hardware:                    RS/6000 and PowerPC Options.
62228                                                             (line  236)
62229* mflush-func:                           MIPS Options.       (line  776)
62230* mflush-func=NAME:                      M32R/D Options.     (line   93)
62231* mflush-trap=NUMBER:                    M32R/D Options.     (line   86)
62232* mfma:                                  x86 Options.        (line  784)
62233* mfma4:                                 x86 Options.        (line  787)
62234* mfmaf:                                 SPARC Options.      (line  267)
62235* mfmovd:                                SH Options.         (line  148)
62236* mforce-indirect-call:                  x86 Options.        (line 1036)
62237* mforce-no-pic:                         Xtensa Options.     (line   41)
62238* mfp-exceptions:                        MIPS Options.       (line  824)
62239* mfp-mode:                              Adapteva Epiphany Options.
62240                                                             (line   71)
62241* mfp-reg:                               DEC Alpha Options.  (line   25)
62242* mfp-ret-in-387:                        x86 Options.        (line  537)
62243* mfp-rounding-mode:                     DEC Alpha Options.  (line   85)
62244* mfp-trap-mode:                         DEC Alpha Options.  (line   63)
62245* mfp16-format:                          ARM Options.        (line  728)
62246* mfp32:                                 MIPS Options.       (line  258)
62247* mfp64:                                 MIPS Options.       (line  261)
62248* mfpmath:                               Optimize Options.   (line 2226)
62249* mfpmath <1>:                           x86 Options.        (line  455)
62250* mfpr-32:                               FRV Options.        (line   15)
62251* mfpr-64:                               FRV Options.        (line   19)
62252* mfprnd:                                RS/6000 and PowerPC Options.
62253                                                             (line   25)
62254* mfpu:                                  ARC Options.        (line  231)
62255* mfpu <1>:                              ARM Options.        (line  700)
62256* mfpu <2>:                              PDP-11 Options.     (line    9)
62257* mfpu <3>:                              SPARC Options.      (line   34)
62258* mfpu <4>:                              Visium Options.     (line   19)
62259* mfpu=:                                 C-SKY Options.      (line   53)
62260* mfpxx:                                 MIPS Options.       (line  264)
62261* mfract-convert-truncate:               AVR Options.        (line  286)
62262* mframe-header-opt:                     MIPS Options.       (line  885)
62263* mfriz:                                 RS/6000 and PowerPC Options.
62264                                                             (line  869)
62265* mfsca:                                 SH Options.         (line  365)
62266* mfsgsbase:                             x86 Options.        (line  780)
62267* mfsmuld:                               SPARC Options.      (line  274)
62268* mfsrra:                                SH Options.         (line  374)
62269* mft32b:                                FT32 Options.       (line   23)
62270* mfull-regs:                            NDS32 Options.      (line   18)
62271* mfull-toc:                             RS/6000 and PowerPC Options.
62272                                                             (line  256)
62273* mfunction-return:                      x86 Options.        (line 1384)
62274* mfused-madd:                           IA-64 Options.      (line   88)
62275* mfused-madd <1>:                       MIPS Options.       (line  624)
62276* mfused-madd <2>:                       RS/6000 and PowerPC Options.
62277                                                             (line  369)
62278* mfused-madd <3>:                       S/390 and zSeries Options.
62279                                                             (line  182)
62280* mfused-madd <4>:                       SH Options.         (line  356)
62281* mfused-madd <5>:                       Xtensa Options.     (line   19)
62282* mfxsr:                                 x86 Options.        (line  803)
62283* MG:                                    Preprocessor Options.
62284                                                             (line  122)
62285* mg:                                    VAX Options.        (line   17)
62286* mg10:                                  RL78 Options.       (line   62)
62287* mg13:                                  RL78 Options.       (line   62)
62288* mg14:                                  RL78 Options.       (line   62)
62289* mgas:                                  HPPA Options.       (line   75)
62290* mgas-isr-prologues:                    AVR Options.        (line  203)
62291* mgcc-abi:                              V850 Options.       (line  148)
62292* mgeneral-regs-only:                    AArch64 Options.    (line   24)
62293* mgeneral-regs-only <1>:                ARM Options.        (line   57)
62294* mgeneral-regs-only <2>:                x86 Options.        (line 1360)
62295* mgfni:                                 x86 Options.        (line  816)
62296* mghs:                                  V850 Options.       (line  127)
62297* mginv:                                 MIPS Options.       (line  421)
62298* mglibc:                                GNU/Linux Options.  (line    9)
62299* mgnu:                                  VAX Options.        (line   13)
62300* mgnu-as:                               IA-64 Options.      (line   18)
62301* mgnu-asm:                              PDP-11 Options.     (line   49)
62302* mgnu-attribute:                        RS/6000 and PowerPC Options.
62303                                                             (line  586)
62304* mgnu-ld:                               HPPA Options.       (line  111)
62305* mgnu-ld <1>:                           IA-64 Options.      (line   23)
62306* mgomp:                                 Nvidia PTX Options. (line   53)
62307* mgotplt:                               CRIS Options.       (line   81)
62308* mgp32:                                 MIPS Options.       (line  252)
62309* mgp64:                                 MIPS Options.       (line  255)
62310* mgpopt:                                MIPS Options.       (line  502)
62311* mgpopt <1>:                            Nios II Options.    (line   16)
62312* mgpr-32:                               FRV Options.        (line    7)
62313* mgpr-64:                               FRV Options.        (line   11)
62314* mgprel-ro:                             FRV Options.        (line   99)
62315* mgprel-sec:                            Nios II Options.    (line   65)
62316* mh:                                    H8/300 Options.     (line   14)
62317* mhal:                                  Nios II Options.    (line  304)
62318* mhalf-reg-file:                        Adapteva Epiphany Options.
62319                                                             (line    9)
62320* mhard-dfp:                             RS/6000 and PowerPC Options.
62321                                                             (line   25)
62322* mhard-dfp <1>:                         S/390 and zSeries Options.
62323                                                             (line   20)
62324* mhard-div:                             OpenRISC Options.   (line   19)
62325* mhard-float:                           C-SKY Options.      (line   35)
62326* mhard-float <1>:                       FRV Options.        (line   23)
62327* mhard-float <2>:                       M680x0 Options.     (line  194)
62328* mhard-float <3>:                       MicroBlaze Options. (line   10)
62329* mhard-float <4>:                       MIPS Options.       (line  267)
62330* mhard-float <5>:                       OpenRISC Options.   (line   29)
62331* mhard-float <6>:                       RS/6000 and PowerPC Options.
62332                                                             (line  333)
62333* mhard-float <7>:                       S/390 and zSeries Options.
62334                                                             (line   11)
62335* mhard-float <8>:                       SPARC Options.      (line   34)
62336* mhard-float <9>:                       V850 Options.       (line  113)
62337* mhard-float <10>:                      Visium Options.     (line   19)
62338* mhard-float <11>:                      x86 Options.        (line  520)
62339* mhard-mul:                             OpenRISC Options.   (line   24)
62340* mhard-quad-float:                      SPARC Options.      (line   55)
62341* mhardlit:                              MCore Options.      (line   10)
62342* mhigh-registers:                       C-SKY Options.      (line  104)
62343* mhle:                                  x86 Options.        (line  809)
62344* mhotpatch:                             S/390 and zSeries Options.
62345                                                             (line  217)
62346* mhp-ld:                                HPPA Options.       (line  123)
62347* mhtm:                                  RS/6000 and PowerPC Options.
62348                                                             (line  183)
62349* mhtm <1>:                              S/390 and zSeries Options.
62350                                                             (line  104)
62351* mhw-div:                               Nios II Options.    (line  124)
62352* mhw-mul:                               Nios II Options.    (line  124)
62353* mhw-mulx:                              Nios II Options.    (line  124)
62354* mhwmult=:                              MSP430 Options.     (line   93)
62355* miamcu:                                x86 Options.        (line 1413)
62356* micplb:                                Blackfin Options.   (line  175)
62357* mid-shared-library:                    Blackfin Options.   (line   78)
62358* mid-shared-library <1>:                Blackfin Options.   (line   85)
62359* mieee:                                 DEC Alpha Options.  (line   39)
62360* mieee <1>:                             SH Options.         (line  165)
62361* mieee-conformant:                      DEC Alpha Options.  (line  134)
62362* mieee-fp:                              x86 Options.        (line  514)
62363* mieee-with-inexact:                    DEC Alpha Options.  (line   52)
62364* milp32:                                IA-64 Options.      (line  121)
62365* mimadd:                                MIPS Options.       (line  617)
62366* mimpure-text:                          Solaris 2 Options.  (line   15)
62367* mincoming-stack-boundary:              x86 Options.        (line  730)
62368* mindexed-loads:                        ARC Options.        (line  483)
62369* mindirect-branch:                      x86 Options.        (line 1365)
62370* mindirect-branch-register:             x86 Options.        (line 1403)
62371* minline-all-stringops:                 x86 Options.        (line 1212)
62372* minline-float-divide-max-throughput:   IA-64 Options.      (line   58)
62373* minline-float-divide-min-latency:      IA-64 Options.      (line   54)
62374* minline-ic_invalidate:                 SH Options.         (line  174)
62375* minline-int-divide:                    IA-64 Options.      (line   73)
62376* minline-int-divide-max-throughput:     IA-64 Options.      (line   69)
62377* minline-int-divide-min-latency:        IA-64 Options.      (line   65)
62378* minline-plt:                           Blackfin Options.   (line  135)
62379* minline-plt <1>:                       FRV Options.        (line   81)
62380* minline-sqrt-max-throughput:           IA-64 Options.      (line   80)
62381* minline-sqrt-min-latency:              IA-64 Options.      (line   76)
62382* minline-stringops-dynamically:         x86 Options.        (line 1220)
62383* minrt:                                 MSP430 Options.     (line  115)
62384* minrt <1>:                             PRU Options.        (line    9)
62385* minsert-sched-nops:                    RS/6000 and PowerPC Options.
62386                                                             (line  485)
62387* minstrument-return:                    x86 Options.        (line 1300)
62388* mint-register:                         RX Options.         (line  100)
62389* mint16:                                PDP-11 Options.     (line   33)
62390* mint32:                                CR16 Options.       (line   22)
62391* mint32 <1>:                            H8/300 Options.     (line   38)
62392* mint32 <2>:                            PDP-11 Options.     (line   37)
62393* mint8:                                 AVR Options.        (line  213)
62394* minterlink-compressed:                 MIPS Options.       (line  135)
62395* minterlink-mips16:                     MIPS Options.       (line  147)
62396* mio-volatile:                          MeP Options.        (line   74)
62397* mips1:                                 MIPS Options.       (line   80)
62398* mips16:                                MIPS Options.       (line  120)
62399* mips2:                                 MIPS Options.       (line   83)
62400* mips3:                                 MIPS Options.       (line   86)
62401* mips32:                                MIPS Options.       (line   92)
62402* mips32r3:                              MIPS Options.       (line   95)
62403* mips32r5:                              MIPS Options.       (line   98)
62404* mips32r6:                              MIPS Options.       (line  101)
62405* mips3d:                                MIPS Options.       (line  382)
62406* mips4:                                 MIPS Options.       (line   89)
62407* mips64:                                MIPS Options.       (line  104)
62408* mips64r2:                              MIPS Options.       (line  107)
62409* mips64r3:                              MIPS Options.       (line  110)
62410* mips64r5:                              MIPS Options.       (line  113)
62411* mips64r6:                              MIPS Options.       (line  116)
62412* mirq-ctrl-saved:                       ARC Options.        (line  296)
62413* misel:                                 RS/6000 and PowerPC Options.
62414                                                             (line  166)
62415* misize:                                ARC Options.        (line  379)
62416* misize <1>:                            SH Options.         (line  186)
62417* misr-vector-size:                      NDS32 Options.      (line   57)
62418* missue-rate=NUMBER:                    M32R/D Options.     (line   79)
62419* mistack:                               C-SKY Options.      (line   65)
62420* mivc2:                                 MeP Options.        (line   59)
62421* mjli-alawys:                           ARC Options.        (line   14)
62422* mjsr:                                  RX Options.         (line  169)
62423* mjump-in-delay:                        HPPA Options.       (line   30)
62424* mkernel:                               Darwin Options.     (line   82)
62425* mkernel <1>:                           eBPF Options.       (line   13)
62426* mknuthdiv:                             MMIX Options.       (line   32)
62427* ml:                                    MeP Options.        (line   78)
62428* ml <1>:                                SH Options.         (line  129)
62429* mlarge:                                MSP430 Options.     (line   82)
62430* mlarge-data:                           DEC Alpha Options.  (line  187)
62431* mlarge-data-threshold:                 x86 Options.        (line  619)
62432* mlarge-text:                           DEC Alpha Options.  (line  205)
62433* mleadz:                                MeP Options.        (line   81)
62434* mleaf-id-shared-library:               Blackfin Options.   (line   89)
62435* mleaf-id-shared-library <1>:           Blackfin Options.   (line   95)
62436* mlibfuncs:                             MMIX Options.       (line   10)
62437* mlibrary-pic:                          FRV Options.        (line  135)
62438* mlinked-fp:                            FRV Options.        (line  116)
62439* mlinker-opt:                           HPPA Options.       (line   85)
62440* mlinux:                                CRIS Options.       (line   91)
62441* mlittle:                               RS/6000 and PowerPC Options.
62442                                                             (line  434)
62443* mlittle-endian:                        AArch64 Options.    (line   30)
62444* mlittle-endian <1>:                    ARC Options.        (line  605)
62445* mlittle-endian <2>:                    ARM Options.        (line   63)
62446* mlittle-endian <3>:                    C6X Options.        (line   16)
62447* mlittle-endian <4>:                    C-SKY Options.      (line   30)
62448* mlittle-endian <5>:                    eBPF Options.       (line   25)
62449* mlittle-endian <6>:                    IA-64 Options.      (line   13)
62450* mlittle-endian <7>:                    MCore Options.      (line   39)
62451* mlittle-endian <8>:                    MicroBlaze Options. (line   59)
62452* mlittle-endian <9>:                    NDS32 Options.      (line   12)
62453* mlittle-endian <10>:                   RS/6000 and PowerPC Options.
62454                                                             (line  434)
62455* mlittle-endian <11>:                   TILE-Gx Options.    (line   29)
62456* mlittle-endian-data:                   RX Options.         (line   42)
62457* mliw:                                  MN10300 Options.    (line   54)
62458* mll64:                                 ARC Options.        (line  167)
62459* mllsc:                                 MIPS Options.       (line  339)
62460* mload-store-pairs:                     MIPS Options.       (line  590)
62461* mlocal-sdata:                          MIPS Options.       (line  468)
62462* mlock:                                 ARC Options.        (line  345)
62463* mlong-calls:                           Adapteva Epiphany Options.
62464                                                             (line   55)
62465* mlong-calls <1>:                       ARC Options.        (line  404)
62466* mlong-calls <2>:                       ARM Options.        (line  755)
62467* mlong-calls <3>:                       Blackfin Options.   (line  118)
62468* mlong-calls <4>:                       FRV Options.        (line  122)
62469* mlong-calls <5>:                       HPPA Options.       (line  136)
62470* mlong-calls <6>:                       MIPS Options.       (line  603)
62471* mlong-calls <7>:                       V850 Options.       (line   10)
62472* mlong-double:                          AVR Options.        (line  195)
62473* mlong-double-128:                      S/390 and zSeries Options.
62474                                                             (line   29)
62475* mlong-double-128 <1>:                  x86 Options.        (line  598)
62476* mlong-double-64:                       S/390 and zSeries Options.
62477                                                             (line   29)
62478* mlong-double-64 <1>:                   x86 Options.        (line  598)
62479* mlong-double-80:                       x86 Options.        (line  598)
62480* mlong-jump-table-offsets:              M680x0 Options.     (line  339)
62481* mlong-jumps:                           V850 Options.       (line  108)
62482* mlong-load-store:                      HPPA Options.       (line   66)
62483* mlong32:                               MIPS Options.       (line  443)
62484* mlong64:                               MIPS Options.       (line  438)
62485* mlongcall:                             RS/6000 and PowerPC Options.
62486                                                             (line  727)
62487* mlongcalls:                            Xtensa Options.     (line   87)
62488* mloongson-ext:                         MIPS Options.       (line  430)
62489* mloongson-ext2:                        MIPS Options.       (line  434)
62490* mloongson-mmi:                         MIPS Options.       (line  425)
62491* mloop:                                 PRU Options.        (line   25)
62492* mloop <1>:                             V850 Options.       (line  121)
62493* mlow-precision-div:                    AArch64 Options.    (line  135)
62494* mlow-precision-recip-sqrt:             AArch64 Options.    (line  118)
62495* mlow-precision-sqrt:                   AArch64 Options.    (line  126)
62496* mlow64k:                               Blackfin Options.   (line   67)
62497* mlp64:                                 IA-64 Options.      (line  121)
62498* mlpc-width:                            ARC Options.        (line  313)
62499* mlra:                                  ARC Options.        (line  488)
62500* mlra <1>:                              FT32 Options.       (line   16)
62501* mlra <2>:                              PDP-11 Options.     (line   52)
62502* mlra <3>:                              SPARC Options.      (line  111)
62503* mlra-priority-compact:                 ARC Options.        (line  496)
62504* mlra-priority-noncompact:              ARC Options.        (line  499)
62505* mlra-priority-none:                    ARC Options.        (line  493)
62506* mlwp:                                  x86 Options.        (line  794)
62507* mlxc1-sxc1:                            MIPS Options.       (line  895)
62508* mlzcnt:                                x86 Options.        (line  802)
62509* MM:                                    Preprocessor Options.
62510                                                             (line  102)
62511* mm:                                    MeP Options.        (line   84)
62512* mmac:                                  CR16 Options.       (line    9)
62513* mmac <1>:                              Score Options.      (line   21)
62514* mmac-24:                               ARC Options.        (line  354)
62515* mmac-d16:                              ARC Options.        (line  350)
62516* mmac_24:                               ARC Options.        (line  628)
62517* mmac_d16:                              ARC Options.        (line  631)
62518* mmad:                                  MIPS Options.       (line  612)
62519* mmadd4:                                MIPS Options.       (line  900)
62520* mmain-is-OS_task:                      AVR Options.        (line  219)
62521* mmainkernel:                           Nvidia PTX Options. (line   18)
62522* mmalloc64:                             VMS Options.        (line   17)
62523* mmanual-endbr:                         x86 Options.        (line 1041)
62524* mmax:                                  DEC Alpha Options.  (line  163)
62525* mmax-constant-size:                    RX Options.         (line   82)
62526* mmax-stack-frame:                      CRIS Options.       (line   23)
62527* mmcount-ra-address:                    MIPS Options.       (line  872)
62528* mmcu:                                  AVR Options.        (line    9)
62529* mmcu <1>:                              MIPS Options.       (line  399)
62530* mmcu <2>:                              PRU Options.        (line   17)
62531* mmcu=:                                 MSP430 Options.     (line   14)
62532* MMD:                                   Preprocessor Options.
62533                                                             (line  185)
62534* mmedia:                                FRV Options.        (line   56)
62535* mmedium-calls:                         ARC Options.        (line  408)
62536* mmemcpy:                               MicroBlaze Options. (line   13)
62537* mmemcpy <1>:                           MIPS Options.       (line  597)
62538* mmemcpy-strategy=STRATEGY:             x86 Options.        (line 1242)
62539* mmemory-latency:                       DEC Alpha Options.  (line  268)
62540* mmemory-model:                         SPARC Options.      (line  348)
62541* mmemset-strategy=STRATEGY:             x86 Options.        (line 1254)
62542* mmfcrf:                                RS/6000 and PowerPC Options.
62543                                                             (line   25)
62544* mmicromips:                            MIPS Options.       (line  387)
62545* mmillicode:                            ARC Options.        (line  502)
62546* mminimal-toc:                          RS/6000 and PowerPC Options.
62547                                                             (line  256)
62548* mminmax:                               MeP Options.        (line   87)
62549* mmixed-code:                           ARC Options.        (line  516)
62550* mmma:                                  RS/6000 and PowerPC Options.
62551                                                             (line  943)
62552* mmmx:                                  x86 Options.        (line  755)
62553* mmodel=large:                          M32R/D Options.     (line   33)
62554* mmodel=medium:                         M32R/D Options.     (line   27)
62555* mmodel=small:                          M32R/D Options.     (line   18)
62556* mmovbe:                                x86 Options.        (line  940)
62557* mmovdir64b:                            x86 Options.        (line  822)
62558* mmovdiri:                              x86 Options.        (line  821)
62559* mmp:                                   C-SKY Options.      (line   71)
62560* mmpy:                                  ARC Options.        (line  117)
62561* mmpy-option:                           ARC Options.        (line  173)
62562* mms-bitfields:                         x86 Options.        (line 1087)
62563* mmt:                                   MIPS Options.       (line  395)
62564* mmul:                                  RL78 Options.       (line   15)
62565* mmul-bug-workaround:                   CRIS Options.       (line   32)
62566* mmul.x:                                Moxie Options.      (line   14)
62567* mmul32x16:                             ARC Options.        (line  121)
62568* mmul64:                                ARC Options.        (line  124)
62569* mmuladd:                               FRV Options.        (line   64)
62570* mmulhw:                                RS/6000 and PowerPC Options.
62571                                                             (line  378)
62572* mmult:                                 MeP Options.        (line   90)
62573* mmult-bug:                             MN10300 Options.    (line    9)
62574* mmultcost:                             ARC Options.        (line  578)
62575* mmulti-cond-exec:                      FRV Options.        (line  215)
62576* mmulticore:                            Blackfin Options.   (line  139)
62577* mmultiple:                             RS/6000 and PowerPC Options.
62578                                                             (line  339)
62579* mmultiple-stld:                        C-SKY Options.      (line  121)
62580* mmusl:                                 GNU/Linux Options.  (line   18)
62581* mmvcle:                                S/390 and zSeries Options.
62582                                                             (line  138)
62583* mmvme:                                 RS/6000 and PowerPC Options.
62584                                                             (line  608)
62585* mmwaitx:                               x86 Options.        (line  811)
62586* mn:                                    H8/300 Options.     (line   20)
62587* mn-flash:                              AVR Options.        (line  224)
62588* mnan=2008:                             MIPS Options.       (line  320)
62589* mnan=legacy:                           MIPS Options.       (line  320)
62590* mneon-for-64bits:                      ARM Options.        (line  912)
62591* mnested-cond-exec:                     FRV Options.        (line  230)
62592* mnewlib:                               OpenRISC Options.   (line   13)
62593* mnhwloop:                              Score Options.      (line   15)
62594* mno-16-bit:                            NDS32 Options.      (line   54)
62595* mno-4byte-functions:                   MCore Options.      (line   27)
62596* mno-8byte-align:                       V850 Options.       (line  170)
62597* mno-abicalls:                          MIPS Options.       (line  192)
62598* mno-ac0:                               PDP-11 Options.     (line   20)
62599* mno-align-double:                      x86 Options.        (line  557)
62600* mno-align-int:                         M680x0 Options.     (line  261)
62601* mno-align-loops:                       M32R/D Options.     (line   76)
62602* mno-align-stringops:                   x86 Options.        (line 1207)
62603* mno-allow-string-insns:                RX Options.         (line  150)
62604* mno-altivec:                           RS/6000 and PowerPC Options.
62605                                                             (line  136)
62606* mno-am33:                              MN10300 Options.    (line   20)
62607* mno-app-regs:                          SPARC Options.      (line   10)
62608* mno-app-regs <1>:                      V850 Options.       (line  185)
62609* mno-as100-syntax:                      RX Options.         (line   76)
62610* mno-auto-litpools:                     Xtensa Options.     (line   60)
62611* mno-avoid-indexed-addresses:           RS/6000 and PowerPC Options.
62612                                                             (line  360)
62613* mno-backchain:                         S/390 and zSeries Options.
62614                                                             (line   35)
62615* mno-base-addresses:                    MMIX Options.       (line   53)
62616* mno-bit-align:                         RS/6000 and PowerPC Options.
62617                                                             (line  392)
62618* mno-bitfield:                          M680x0 Options.     (line  227)
62619* mno-branch-likely:                     MIPS Options.       (line  792)
62620* mno-branch-predict:                    MMIX Options.       (line   48)
62621* mno-brcc:                              ARC Options.        (line  444)
62622* mno-bwx:                               DEC Alpha Options.  (line  163)
62623* mno-bypass-cache:                      Nios II Options.    (line  103)
62624* mno-cache-volatile:                    Nios II Options.    (line  109)
62625* mno-call-ms2sysv-xlogues:              x86 Options.        (line 1047)
62626* mno-callgraph-data:                    MCore Options.      (line   31)
62627* mno-cbcond:                            SPARC Options.      (line  260)
62628* mno-check-zero-division:               MIPS Options.       (line  570)
62629* mno-cix:                               DEC Alpha Options.  (line  163)
62630* mno-clearbss:                          MicroBlaze Options. (line   16)
62631* mno-cmov:                              NDS32 Options.      (line   24)
62632* mno-cmpb:                              RS/6000 and PowerPC Options.
62633                                                             (line   25)
62634* mno-cond-exec:                         ARC Options.        (line  458)
62635* mno-cond-exec <1>:                     FRV Options.        (line  194)
62636* mno-cond-move:                         FRV Options.        (line  166)
62637* mno-const-align:                       CRIS Options.       (line   55)
62638* mno-const16:                           Xtensa Options.     (line   10)
62639* mno-crc:                               MIPS Options.       (line  416)
62640* mno-crt0:                              MN10300 Options.    (line   43)
62641* mno-crt0 <1>:                          Moxie Options.      (line   18)
62642* mno-crypto:                            RS/6000 and PowerPC Options.
62643                                                             (line  177)
62644* mno-csync-anomaly:                     Blackfin Options.   (line   63)
62645* mno-custom-INSN:                       Nios II Options.    (line  139)
62646* mno-data-align:                        CRIS Options.       (line   55)
62647* mno-debug:                             S/390 and zSeries Options.
62648                                                             (line  144)
62649* mno-default:                           x86 Options.        (line  876)
62650* mno-disable-callt:                     V850 Options.       (line   92)
62651* mno-div:                               M680x0 Options.     (line  206)
62652* mno-div <1>:                           MCore Options.      (line   15)
62653* mno-dlmzb:                             RS/6000 and PowerPC Options.
62654                                                             (line  385)
62655* mno-double:                            FRV Options.        (line   52)
62656* mno-dpfp-lrsr:                         ARC Options.        (line  108)
62657* mno-dsp:                               MIPS Options.       (line  353)
62658* mno-dspr2:                             MIPS Options.       (line  359)
62659* mno-dwarf2-asm:                        IA-64 Options.      (line   94)
62660* mno-dword:                             FRV Options.        (line   44)
62661* mno-eabi:                              RS/6000 and PowerPC Options.
62662                                                             (line  632)
62663* mno-early-stop-bits:                   IA-64 Options.      (line  100)
62664* mno-eflags:                            FRV Options.        (line  155)
62665* mno-embedded-data:                     MIPS Options.       (line  517)
62666* mno-ep:                                V850 Options.       (line   16)
62667* mno-epsilon:                           MMIX Options.       (line   15)
62668* mno-eva:                               MIPS Options.       (line  403)
62669* mno-explicit-relocs:                   DEC Alpha Options.  (line  176)
62670* mno-explicit-relocs <1>:               MIPS Options.       (line  561)
62671* mno-exr:                               H8/300 Options.     (line   33)
62672* mno-ext-perf:                          NDS32 Options.      (line   30)
62673* mno-ext-perf2:                         NDS32 Options.      (line   36)
62674* mno-ext-string:                        NDS32 Options.      (line   42)
62675* mno-extern-sdata:                      MIPS Options.       (line  480)
62676* mno-fancy-math-387:                    x86 Options.        (line  547)
62677* mno-fast-sw-div:                       Nios II Options.    (line  115)
62678* mno-faster-structs:                    SPARC Options.      (line   91)
62679* mno-fdpic:                             ARM Options.        (line  957)
62680* mno-fix:                               DEC Alpha Options.  (line  163)
62681* mno-fix-24k:                           MIPS Options.       (line  641)
62682* mno-fix-cortex-a53-835769:             AArch64 Options.    (line  105)
62683* mno-fix-cortex-a53-843419:             AArch64 Options.    (line  112)
62684* mno-fix-r10000:                        MIPS Options.       (line  663)
62685* mno-fix-r4000:                         MIPS Options.       (line  647)
62686* mno-fix-r4400:                         MIPS Options.       (line  657)
62687* mno-flat:                              SPARC Options.      (line   22)
62688* mno-float:                             MIPS Options.       (line  274)
62689* mno-float128:                          RS/6000 and PowerPC Options.
62690                                                             (line  214)
62691* mno-float128-hardware:                 RS/6000 and PowerPC Options.
62692                                                             (line  236)
62693* mno-flush-func:                        M32R/D Options.     (line   98)
62694* mno-flush-trap:                        M32R/D Options.     (line   90)
62695* mno-fmaf:                              SPARC Options.      (line  267)
62696* mno-fp-in-toc:                         RS/6000 and PowerPC Options.
62697                                                             (line  256)
62698* mno-fp-regs:                           DEC Alpha Options.  (line   25)
62699* mno-fp-ret-in-387:                     x86 Options.        (line  537)
62700* mno-fprnd:                             RS/6000 and PowerPC Options.
62701                                                             (line   25)
62702* mno-fpu:                               SPARC Options.      (line   39)
62703* mno-fpu <1>:                           Visium Options.     (line   24)
62704* mno-fsca:                              SH Options.         (line  365)
62705* mno-fsmuld:                            SPARC Options.      (line  274)
62706* mno-fsrra:                             SH Options.         (line  374)
62707* mno-fused-madd:                        IA-64 Options.      (line   88)
62708* mno-fused-madd <1>:                    MIPS Options.       (line  624)
62709* mno-fused-madd <2>:                    RS/6000 and PowerPC Options.
62710                                                             (line  369)
62711* mno-fused-madd <3>:                    S/390 and zSeries Options.
62712                                                             (line  182)
62713* mno-fused-madd <4>:                    SH Options.         (line  356)
62714* mno-fused-madd <5>:                    Xtensa Options.     (line   19)
62715* mno-ginv:                              MIPS Options.       (line  421)
62716* mno-gnu-as:                            IA-64 Options.      (line   18)
62717* mno-gnu-attribute:                     RS/6000 and PowerPC Options.
62718                                                             (line  586)
62719* mno-gnu-ld:                            IA-64 Options.      (line   23)
62720* mno-gotplt:                            CRIS Options.       (line   81)
62721* mno-gpopt:                             MIPS Options.       (line  502)
62722* mno-gpopt <1>:                         Nios II Options.    (line   16)
62723* mno-hard-dfp:                          RS/6000 and PowerPC Options.
62724                                                             (line   25)
62725* mno-hard-dfp <1>:                      S/390 and zSeries Options.
62726                                                             (line   20)
62727* mno-hardlit:                           MCore Options.      (line   10)
62728* mno-htm:                               RS/6000 and PowerPC Options.
62729                                                             (line  183)
62730* mno-htm <1>:                           S/390 and zSeries Options.
62731                                                             (line  104)
62732* mno-hw-div:                            Nios II Options.    (line  124)
62733* mno-hw-mul:                            Nios II Options.    (line  124)
62734* mno-hw-mulx:                           Nios II Options.    (line  124)
62735* mno-id-shared-library:                 Blackfin Options.   (line   85)
62736* mno-ieee:                              SH Options.         (line  165)
62737* mno-ieee-fp:                           x86 Options.        (line  514)
62738* mno-imadd:                             MIPS Options.       (line  617)
62739* mno-inline-float-divide:               IA-64 Options.      (line   62)
62740* mno-inline-int-divide:                 IA-64 Options.      (line   73)
62741* mno-inline-sqrt:                       IA-64 Options.      (line   84)
62742* mno-int16:                             PDP-11 Options.     (line   37)
62743* mno-int32:                             PDP-11 Options.     (line   33)
62744* mno-interlink-compressed:              MIPS Options.       (line  135)
62745* mno-interlink-mips16:                  MIPS Options.       (line  147)
62746* mno-interrupts:                        AVR Options.        (line  227)
62747* mno-isel:                              RS/6000 and PowerPC Options.
62748                                                             (line  166)
62749* mno-jsr:                               RX Options.         (line  169)
62750* mno-knuthdiv:                          MMIX Options.       (line   32)
62751* mno-leaf-id-shared-library:            Blackfin Options.   (line   95)
62752* mno-libfuncs:                          MMIX Options.       (line   10)
62753* mno-liw:                               MN10300 Options.    (line   59)
62754* mno-llsc:                              MIPS Options.       (line  339)
62755* mno-load-store-pairs:                  MIPS Options.       (line  590)
62756* mno-local-sdata:                       MIPS Options.       (line  468)
62757* mno-long-calls:                        ARM Options.        (line  755)
62758* mno-long-calls <1>:                    Blackfin Options.   (line  118)
62759* mno-long-calls <2>:                    HPPA Options.       (line  136)
62760* mno-long-calls <3>:                    MIPS Options.       (line  603)
62761* mno-long-calls <4>:                    V850 Options.       (line   10)
62762* mno-long-jumps:                        V850 Options.       (line  108)
62763* mno-longcall:                          RS/6000 and PowerPC Options.
62764                                                             (line  727)
62765* mno-longcalls:                         Xtensa Options.     (line   87)
62766* mno-loongson-ext:                      MIPS Options.       (line  430)
62767* mno-loongson-ext2:                     MIPS Options.       (line  434)
62768* mno-loongson-mmi:                      MIPS Options.       (line  425)
62769* mno-low-precision-div:                 AArch64 Options.    (line  135)
62770* mno-low-precision-recip-sqrt:          AArch64 Options.    (line  118)
62771* mno-low-precision-sqrt:                AArch64 Options.    (line  126)
62772* mno-low64k:                            Blackfin Options.   (line   71)
62773* mno-lra:                               SPARC Options.      (line  111)
62774* mno-lsim:                              FR30 Options.       (line   14)
62775* mno-lsim <1>:                          MCore Options.      (line   46)
62776* mno-mad:                               MIPS Options.       (line  612)
62777* mno-max:                               DEC Alpha Options.  (line  163)
62778* mno-mcount-ra-address:                 MIPS Options.       (line  872)
62779* mno-mcu:                               MIPS Options.       (line  399)
62780* mno-mdmx:                              MIPS Options.       (line  376)
62781* mno-media:                             FRV Options.        (line   60)
62782* mno-memcpy:                            MIPS Options.       (line  597)
62783* mno-mfcrf:                             RS/6000 and PowerPC Options.
62784                                                             (line   25)
62785* mno-mips16:                            MIPS Options.       (line  120)
62786* mno-mips3d:                            MIPS Options.       (line  382)
62787* mno-mma:                               RS/6000 and PowerPC Options.
62788                                                             (line  943)
62789* mno-mmicromips:                        MIPS Options.       (line  387)
62790* mno-mpy:                               ARC Options.        (line  117)
62791* mno-ms-bitfields:                      x86 Options.        (line 1087)
62792* mno-mt:                                MIPS Options.       (line  395)
62793* mno-mul-bug-workaround:                CRIS Options.       (line   32)
62794* mno-muladd:                            FRV Options.        (line   68)
62795* mno-mulhw:                             RS/6000 and PowerPC Options.
62796                                                             (line  378)
62797* mno-mult-bug:                          MN10300 Options.    (line   13)
62798* mno-multi-cond-exec:                   FRV Options.        (line  223)
62799* mno-multiple:                          RS/6000 and PowerPC Options.
62800                                                             (line  339)
62801* mno-mvcle:                             S/390 and zSeries Options.
62802                                                             (line  138)
62803* mno-nested-cond-exec:                  FRV Options.        (line  237)
62804* mno-odd-spreg:                         MIPS Options.       (line  293)
62805* mno-omit-leaf-frame-pointer:           AArch64 Options.    (line   58)
62806* mno-optimize-membar:                   FRV Options.        (line  249)
62807* mno-opts:                              MeP Options.        (line   93)
62808* mno-pack:                              FRV Options.        (line  151)
62809* mno-packed-stack:                      S/390 and zSeries Options.
62810                                                             (line   54)
62811* mno-paired-single:                     MIPS Options.       (line  370)
62812* mno-pc-relative-literal-loads:         AArch64 Options.    (line  261)
62813* mno-pcrel:                             RS/6000 and PowerPC Options.
62814                                                             (line  931)
62815* mno-pic:                               IA-64 Options.      (line   26)
62816* mno-pid:                               RX Options.         (line  117)
62817* mno-plt:                               MIPS Options.       (line  219)
62818* mno-pltseq:                            RS/6000 and PowerPC Options.
62819                                                             (line  764)
62820* mno-popc:                              SPARC Options.      (line  281)
62821* mno-popcntb:                           RS/6000 and PowerPC Options.
62822                                                             (line   25)
62823* mno-popcntd:                           RS/6000 and PowerPC Options.
62824                                                             (line   25)
62825* mno-postinc:                           Adapteva Epiphany Options.
62826                                                             (line  109)
62827* mno-postmodify:                        Adapteva Epiphany Options.
62828                                                             (line  109)
62829* mno-power8-fusion:                     RS/6000 and PowerPC Options.
62830                                                             (line  189)
62831* mno-power8-vector:                     RS/6000 and PowerPC Options.
62832                                                             (line  195)
62833* mno-powerpc-gfxopt:                    RS/6000 and PowerPC Options.
62834                                                             (line   25)
62835* mno-powerpc-gpopt:                     RS/6000 and PowerPC Options.
62836                                                             (line   25)
62837* mno-powerpc64:                         RS/6000 and PowerPC Options.
62838                                                             (line   25)
62839* mno-prefixed:                          RS/6000 and PowerPC Options.
62840                                                             (line  938)
62841* mno-prolog-function:                   V850 Options.       (line   23)
62842* mno-prologue-epilogue:                 CRIS Options.       (line   71)
62843* mno-prototype:                         RS/6000 and PowerPC Options.
62844                                                             (line  592)
62845* mno-push-args:                         x86 Options.        (line 1064)
62846* mno-quad-memory:                       RS/6000 and PowerPC Options.
62847                                                             (line  202)
62848* mno-quad-memory-atomic:                RS/6000 and PowerPC Options.
62849                                                             (line  208)
62850* mno-readonly-in-sdata:                 RS/6000 and PowerPC Options.
62851                                                             (line  683)
62852* mno-red-zone:                          x86 Options.        (line 1433)
62853* mno-register-names:                    IA-64 Options.      (line   37)
62854* mno-regnames:                          RS/6000 and PowerPC Options.
62855                                                             (line  721)
62856* mno-relax:                             PRU Options.        (line   21)
62857* mno-relax <1>:                         V850 Options.       (line  103)
62858* mno-relax-immediate:                   MCore Options.      (line   19)
62859* mno-relocatable:                       RS/6000 and PowerPC Options.
62860                                                             (line  408)
62861* mno-relocatable-lib:                   RS/6000 and PowerPC Options.
62862                                                             (line  419)
62863* mno-renesas:                           SH Options.         (line  155)
62864* mno-round-nearest:                     Adapteva Epiphany Options.
62865                                                             (line   51)
62866* mno-save-mduc-in-interrupts:           RL78 Options.       (line   79)
62867* mno-scc:                               FRV Options.        (line  180)
62868* mno-sched-ar-data-spec:                IA-64 Options.      (line  135)
62869* mno-sched-ar-in-data-spec:             IA-64 Options.      (line  157)
62870* mno-sched-br-data-spec:                IA-64 Options.      (line  128)
62871* mno-sched-br-in-data-spec:             IA-64 Options.      (line  150)
62872* mno-sched-control-spec:                IA-64 Options.      (line  142)
62873* mno-sched-count-spec-in-critical-path: IA-64 Options.      (line  185)
62874* mno-sched-in-control-spec:             IA-64 Options.      (line  164)
62875* mno-sched-prefer-non-control-spec-insns: IA-64 Options.    (line  178)
62876* mno-sched-prefer-non-data-spec-insns:  IA-64 Options.      (line  171)
62877* mno-sched-prolog:                      ARM Options.        (line   32)
62878* mno-sdata:                             ARC Options.        (line  422)
62879* mno-sdata <1>:                         IA-64 Options.      (line   42)
62880* mno-sdata <2>:                         RS/6000 and PowerPC Options.
62881                                                             (line  678)
62882* mno-sep-data:                          Blackfin Options.   (line  113)
62883* mno-serialize-volatile:                Xtensa Options.     (line   35)
62884* mno-setlb:                             MN10300 Options.    (line   69)
62885* mno-short:                             M680x0 Options.     (line  222)
62886* mno-side-effects:                      CRIS Options.       (line   46)
62887* mno-sim:                               RX Options.         (line   71)
62888* mno-single-exit:                       MMIX Options.       (line   65)
62889* mno-slow-bytes:                        MCore Options.      (line   35)
62890* mno-small-exec:                        S/390 and zSeries Options.
62891                                                             (line   79)
62892* mno-smartmips:                         MIPS Options.       (line  366)
62893* mno-soft-cmpsf:                        Adapteva Epiphany Options.
62894                                                             (line   29)
62895* mno-soft-float:                        DEC Alpha Options.  (line   10)
62896* mno-space-regs:                        HPPA Options.       (line   45)
62897* mno-specld-anomaly:                    Blackfin Options.   (line   53)
62898* mno-split-addresses:                   MIPS Options.       (line  555)
62899* mno-split-lohi:                        Adapteva Epiphany Options.
62900                                                             (line  109)
62901* mno-stack-align:                       CRIS Options.       (line   55)
62902* mno-stack-bias:                        SPARC Options.      (line  372)
62903* mno-std-struct-return:                 SPARC Options.      (line  102)
62904* mno-strict-align:                      AArch64 Options.    (line   52)
62905* mno-strict-align <1>:                  M680x0 Options.     (line  280)
62906* mno-strict-align <2>:                  RS/6000 and PowerPC Options.
62907                                                             (line  403)
62908* mno-subxc:                             SPARC Options.      (line  288)
62909* mno-sum-in-toc:                        RS/6000 and PowerPC Options.
62910                                                             (line  256)
62911* mno-sym32:                             MIPS Options.       (line  453)
62912* mno-target-align:                      Xtensa Options.     (line   74)
62913* mno-text-section-literals:             Xtensa Options.     (line   47)
62914* mno-tls-markers:                       RS/6000 and PowerPC Options.
62915                                                             (line  776)
62916* mno-toc:                               RS/6000 and PowerPC Options.
62917                                                             (line  428)
62918* mno-toplevel-symbols:                  MMIX Options.       (line   39)
62919* mno-tpf-trace:                         S/390 and zSeries Options.
62920                                                             (line  168)
62921* mno-tpf-trace-skip:                    S/390 and zSeries Options.
62922                                                             (line  174)
62923* mno-unaligned-access:                  ARM Options.        (line  899)
62924* mno-unaligned-doubles:                 SPARC Options.      (line   73)
62925* mno-uninit-const-in-rodata:            MIPS Options.       (line  525)
62926* mno-update:                            RS/6000 and PowerPC Options.
62927                                                             (line  350)
62928* mno-user-mode:                         SPARC Options.      (line   85)
62929* mno-usermode:                          SH Options.         (line  274)
62930* mno-v3push:                            NDS32 Options.      (line   48)
62931* mno-v8plus:                            SPARC Options.      (line  214)
62932* mno-vect-double:                       Adapteva Epiphany Options.
62933                                                             (line  115)
62934* mno-virt:                              MIPS Options.       (line  407)
62935* mno-vis:                               SPARC Options.      (line  221)
62936* mno-vis2:                              SPARC Options.      (line  227)
62937* mno-vis3:                              SPARC Options.      (line  235)
62938* mno-vis4:                              SPARC Options.      (line  243)
62939* mno-vis4b:                             SPARC Options.      (line  251)
62940* mno-vliw-branch:                       FRV Options.        (line  208)
62941* mno-volatile-asm-stop:                 IA-64 Options.      (line   32)
62942* mno-volatile-cache:                    ARC Options.        (line  431)
62943* mno-vrsave:                            RS/6000 and PowerPC Options.
62944                                                             (line  152)
62945* mno-vsx:                               RS/6000 and PowerPC Options.
62946                                                             (line  171)
62947* mno-vx:                                S/390 and zSeries Options.
62948                                                             (line  112)
62949* mno-warn-devices-csv:                  MSP430 Options.     (line  153)
62950* mno-warn-mcu:                          MSP430 Options.     (line   65)
62951* mno-warn-multiple-fast-interrupts:     RX Options.         (line  143)
62952* mno-wide-bitfields:                    MCore Options.      (line   23)
62953* mno-xgot:                              M680x0 Options.     (line  312)
62954* mno-xgot <1>:                          MIPS Options.       (line  229)
62955* mno-xl-compat:                         RS/6000 and PowerPC Options.
62956                                                             (line  291)
62957* mno-xpa:                               MIPS Options.       (line  411)
62958* mno-zdcbranch:                         SH Options.         (line  341)
62959* mno-zero-extend:                       MMIX Options.       (line   26)
62960* mno-zvector:                           S/390 and zSeries Options.
62961                                                             (line  123)
62962* mnobitfield:                           M680x0 Options.     (line  227)
62963* mnodiv:                                FT32 Options.       (line   20)
62964* mnomacsave:                            SH Options.         (line  160)
62965* mnop-fun-dllimport:                    x86 Windows Options.
62966                                                             (line   22)
62967* mnop-mcount:                           x86 Options.        (line 1294)
62968* mnopm:                                 FT32 Options.       (line   29)
62969* mnops:                                 Adapteva Epiphany Options.
62970                                                             (line   26)
62971* mnorm:                                 ARC Options.        (line  128)
62972* modd-spreg:                            MIPS Options.       (line  293)
62973* momit-leaf-frame-pointer:              AArch64 Options.    (line   58)
62974* momit-leaf-frame-pointer <1>:          Blackfin Options.   (line   43)
62975* momit-leaf-frame-pointer <2>:          x86 Options.        (line 1258)
62976* mone-byte-bool:                        Darwin Options.     (line   90)
62977* moptimize:                             Nvidia PTX Options. (line   22)
62978* moptimize-membar:                      FRV Options.        (line  244)
62979* moptimize-membar <1>:                  FRV Options.        (line  249)
62980* moverride:                             AArch64 Options.    (line  248)
62981* MP:                                    Preprocessor Options.
62982                                                             (line  132)
62983* mpa-risc-1-0:                          HPPA Options.       (line   19)
62984* mpa-risc-1-1:                          HPPA Options.       (line   19)
62985* mpa-risc-2-0:                          HPPA Options.       (line   19)
62986* mpack:                                 FRV Options.        (line  147)
62987* mpacked-stack:                         S/390 and zSeries Options.
62988                                                             (line   54)
62989* mpadstruct:                            SH Options.         (line  189)
62990* mpaired-single:                        MIPS Options.       (line  370)
62991* mpc-relative-literal-loads:            AArch64 Options.    (line  261)
62992* mpc32:                                 x86 Options.        (line  679)
62993* mpc64:                                 x86 Options.        (line  679)
62994* mpc80:                                 x86 Options.        (line  679)
62995* mpclmul:                               x86 Options.        (line  777)
62996* mpconfig:                              x86 Options.        (line  785)
62997* mpcrel:                                M680x0 Options.     (line  272)
62998* mpcrel <1>:                            RS/6000 and PowerPC Options.
62999                                                             (line  931)
63000* mpdebug:                               CRIS Options.       (line   36)
63001* mpe:                                   RS/6000 and PowerPC Options.
63002                                                             (line  310)
63003* mpe-aligned-commons:                   x86 Windows Options.
63004                                                             (line   59)
63005* mpic-data-is-text-relative:            ARM Options.        (line  792)
63006* mpic-data-is-text-relative <1>:        MicroBlaze Options. (line   70)
63007* mpic-register:                         ARM Options.        (line  785)
63008* mpid:                                  RX Options.         (line  117)
63009* mpku:                                  x86 Options.        (line  813)
63010* mplt:                                  MIPS Options.       (line  219)
63011* mpltseq:                               RS/6000 and PowerPC Options.
63012                                                             (line  764)
63013* mpointer-size=SIZE:                    VMS Options.        (line   20)
63014* mpointers-to-nested-functions:         RS/6000 and PowerPC Options.
63015                                                             (line  877)
63016* mpoke-function-name:                   ARM Options.        (line  800)
63017* mpopc:                                 SPARC Options.      (line  281)
63018* mpopcnt:                               x86 Options.        (line  797)
63019* mpopcntb:                              RS/6000 and PowerPC Options.
63020                                                             (line   25)
63021* mpopcntd:                              RS/6000 and PowerPC Options.
63022                                                             (line   25)
63023* mportable-runtime:                     HPPA Options.       (line   71)
63024* mpostinc:                              Adapteva Epiphany Options.
63025                                                             (line  109)
63026* mpostmodify:                           Adapteva Epiphany Options.
63027                                                             (line  109)
63028* mpower8-fusion:                        RS/6000 and PowerPC Options.
63029                                                             (line  189)
63030* mpower8-vector:                        RS/6000 and PowerPC Options.
63031                                                             (line  195)
63032* mpowerpc-gfxopt:                       RS/6000 and PowerPC Options.
63033                                                             (line   25)
63034* mpowerpc-gpopt:                        RS/6000 and PowerPC Options.
63035                                                             (line   25)
63036* mpowerpc64:                            RS/6000 and PowerPC Options.
63037                                                             (line   25)
63038* mprefer-avx128:                        x86 Options.        (line  900)
63039* mprefer-short-insn-regs:               Adapteva Epiphany Options.
63040                                                             (line   13)
63041* mprefer-vector-width:                  x86 Options.        (line  904)
63042* mprefergot:                            SH Options.         (line  268)
63043* mpreferred-stack-boundary:             RISC-V Options.     (line   73)
63044* mpreferred-stack-boundary <1>:         x86 Options.        (line  709)
63045* mprefetchwt1:                          x86 Options.        (line  790)
63046* mprefixed:                             RS/6000 and PowerPC Options.
63047                                                             (line  938)
63048* mpretend-cmove:                        SH Options.         (line  383)
63049* mprfchw:                               x86 Options.        (line  788)
63050* mprint-tune-info:                      ARM Options.        (line  933)
63051* mprioritize-restricted-insns:          RS/6000 and PowerPC Options.
63052                                                             (line  457)
63053* mprolog-function:                      V850 Options.       (line   23)
63054* mprologue-epilogue:                    CRIS Options.       (line   71)
63055* mprototype:                            RS/6000 and PowerPC Options.
63056                                                             (line  592)
63057* mptwrite:                              x86 Options.        (line  781)
63058* mpure-code:                            ARM Options.        (line  943)
63059* mpush-args:                            x86 Options.        (line 1064)
63060* mpushpop:                              C-SKY Options.      (line  114)
63061* MQ:                                    Preprocessor Options.
63062                                                             (line  159)
63063* mq-class:                              ARC Options.        (line  521)
63064* mquad-memory:                          RS/6000 and PowerPC Options.
63065                                                             (line  202)
63066* mquad-memory-atomic:                   RS/6000 and PowerPC Options.
63067                                                             (line  208)
63068* mr0rel-sec:                            Nios II Options.    (line   76)
63069* mr10k-cache-barrier:                   MIPS Options.       (line  714)
63070* mRcq:                                  ARC Options.        (line  525)
63071* mRcw:                                  ARC Options.        (line  529)
63072* mrdpid:                                x86 Options.        (line  789)
63073* mrdrnd:                                x86 Options.        (line  782)
63074* mrdseed:                               x86 Options.        (line  791)
63075* mreadonly-in-sdata:                    RS/6000 and PowerPC Options.
63076                                                             (line  683)
63077* mrecip:                                RS/6000 and PowerPC Options.
63078                                                             (line  784)
63079* mrecip <1>:                            x86 Options.        (line  954)
63080* mrecip-precision:                      RS/6000 and PowerPC Options.
63081                                                             (line  841)
63082* mrecip=opt:                            RS/6000 and PowerPC Options.
63083                                                             (line  797)
63084* mrecip=opt <1>:                        x86 Options.        (line  976)
63085* mrecord-mcount:                        x86 Options.        (line 1288)
63086* mrecord-return:                        x86 Options.        (line 1308)
63087* mred-zone:                             x86 Options.        (line 1433)
63088* mreduced-regs:                         NDS32 Options.      (line   15)
63089* mregister-names:                       IA-64 Options.      (line   37)
63090* mregnames:                             RS/6000 and PowerPC Options.
63091                                                             (line  721)
63092* mregparm:                              x86 Options.        (line  649)
63093* mrelax:                                AVR Options.        (line  231)
63094* mrelax <1>:                            H8/300 Options.     (line    9)
63095* mrelax <2>:                            MN10300 Options.    (line   46)
63096* mrelax <3>:                            MSP430 Options.     (line   88)
63097* mrelax <4>:                            NDS32 Options.      (line   84)
63098* mrelax <5>:                            RX Options.         (line   95)
63099* mrelax <6>:                            SH Options.         (line  137)
63100* mrelax <7>:                            V850 Options.       (line  103)
63101* mrelax-immediate:                      MCore Options.      (line   19)
63102* mrelax-pic-calls:                      MIPS Options.       (line  859)
63103* mrelocatable:                          RS/6000 and PowerPC Options.
63104                                                             (line  408)
63105* mrelocatable-lib:                      RS/6000 and PowerPC Options.
63106                                                             (line  419)
63107* mrenesas:                              SH Options.         (line  152)
63108* mrepeat:                               MeP Options.        (line   96)
63109* mrestrict-it:                          ARM Options.        (line  927)
63110* mreturn-pointer-on-d0:                 MN10300 Options.    (line   36)
63111* mrf16:                                 ARC Options.        (line  324)
63112* mrgf-banked-regs:                      ARC Options.        (line  304)
63113* mrh850-abi:                            V850 Options.       (line  127)
63114* mrl78:                                 RL78 Options.       (line   62)
63115* mrmw:                                  AVR Options.        (line  245)
63116* mror:                                  OpenRISC Options.   (line   49)
63117* mrori:                                 OpenRISC Options.   (line   54)
63118* mround-nearest:                        Adapteva Epiphany Options.
63119                                                             (line   51)
63120* mrtd:                                  M680x0 Options.     (line  236)
63121* mrtd <1>:                              x86 Options.        (line  625)
63122* mrtd <2>:                              x86 Function Attributes.
63123                                                             (line    9)
63124* mrtm:                                  x86 Options.        (line  808)
63125* mrtp:                                  VxWorks Options.    (line   11)
63126* mrtsc:                                 ARC Options.        (line  358)
63127* ms:                                    H8/300 Options.     (line   17)
63128* ms <1>:                                MeP Options.        (line  100)
63129* ms2600:                                H8/300 Options.     (line   24)
63130* msahf:                                 x86 Options.        (line  930)
63131* msatur:                                MeP Options.        (line  105)
63132* msave-acc-in-interrupts:               RX Options.         (line  109)
63133* msave-mduc-in-interrupts:              RL78 Options.       (line   79)
63134* msave-restore:                         RISC-V Options.     (line   87)
63135* msave-toc-indirect:                    RS/6000 and PowerPC Options.
63136                                                             (line  889)
63137* mscc:                                  FRV Options.        (line  173)
63138* msched-ar-data-spec:                   IA-64 Options.      (line  135)
63139* msched-ar-in-data-spec:                IA-64 Options.      (line  157)
63140* msched-br-data-spec:                   IA-64 Options.      (line  128)
63141* msched-br-in-data-spec:                IA-64 Options.      (line  150)
63142* msched-control-spec:                   IA-64 Options.      (line  142)
63143* msched-costly-dep:                     RS/6000 and PowerPC Options.
63144                                                             (line  464)
63145* msched-count-spec-in-critical-path:    IA-64 Options.      (line  185)
63146* msched-fp-mem-deps-zero-cost:          IA-64 Options.      (line  202)
63147* msched-in-control-spec:                IA-64 Options.      (line  164)
63148* msched-max-memory-insns:               IA-64 Options.      (line  211)
63149* msched-max-memory-insns-hard-limit:    IA-64 Options.      (line  217)
63150* msched-prefer-non-control-spec-insns:  IA-64 Options.      (line  178)
63151* msched-prefer-non-data-spec-insns:     IA-64 Options.      (line  171)
63152* msched-prolog:                         ARM Options.        (line   32)
63153* msched-prolog <1>:                     C-SKY Options.      (line  148)
63154* msched-spec-ldc:                       IA-64 Options.      (line  191)
63155* msched-spec-ldc <1>:                   IA-64 Options.      (line  194)
63156* msched-stop-bits-after-every-cycle:    IA-64 Options.      (line  198)
63157* mschedule:                             HPPA Options.       (line   78)
63158* mscore5:                               Score Options.      (line   25)
63159* mscore5u:                              Score Options.      (line   28)
63160* mscore7:                               Score Options.      (line   31)
63161* mscore7d:                              Score Options.      (line   35)
63162* msda:                                  V850 Options.       (line   40)
63163* msdata:                                ARC Options.        (line  422)
63164* msdata <1>:                            IA-64 Options.      (line   42)
63165* msdata <2>:                            RS/6000 and PowerPC Options.
63166                                                             (line  665)
63167* msdata=all:                            C6X Options.        (line   30)
63168* msdata=data:                           RS/6000 and PowerPC Options.
63169                                                             (line  670)
63170* msdata=default:                        C6X Options.        (line   22)
63171* msdata=default <1>:                    RS/6000 and PowerPC Options.
63172                                                             (line  665)
63173* msdata=eabi:                           RS/6000 and PowerPC Options.
63174                                                             (line  646)
63175* msdata=none:                           C6X Options.        (line   35)
63176* msdata=none <1>:                       M32R/D Options.     (line   40)
63177* msdata=none <2>:                       RS/6000 and PowerPC Options.
63178                                                             (line  678)
63179* msdata=sdata:                          M32R/D Options.     (line   49)
63180* msdata=sysv:                           RS/6000 and PowerPC Options.
63181                                                             (line  656)
63182* msdata=use:                            M32R/D Options.     (line   53)
63183* msdram:                                Blackfin Options.   (line  169)
63184* msdram <1>:                            MeP Options.        (line  110)
63185* msecure-plt:                           RS/6000 and PowerPC Options.
63186                                                             (line  155)
63187* msecurity:                             C-SKY Options.      (line   80)
63188* msel-sched-dont-check-control-spec:    IA-64 Options.      (line  207)
63189* msep-data:                             Blackfin Options.   (line  107)
63190* msep-data <1>:                         Blackfin Options.   (line  113)
63191* mserialize-volatile:                   Xtensa Options.     (line   35)
63192* msetlb:                                MN10300 Options.    (line   64)
63193* msext:                                 OpenRISC Options.   (line   59)
63194* msfimm:                                OpenRISC Options.   (line   63)
63195* msgx:                                  x86 Options.        (line  792)
63196* msha:                                  x86 Options.        (line  775)
63197* mshared-library-id:                    Blackfin Options.   (line  100)
63198* mshftimm:                              OpenRISC Options.   (line   68)
63199* mshort:                                M680x0 Options.     (line  216)
63200* mshort-calls:                          AVR Options.        (line  249)
63201* mshstk:                                x86 Options.        (line  944)
63202* mside-effects:                         CRIS Options.       (line   46)
63203* msign-extend-enabled:                  LM32 Options.       (line   18)
63204* msign-return-address:                  AArch64 Options.    (line  267)
63205* msilicon-errata:                       MSP430 Options.     (line  144)
63206* msilicon-errata-warn:                  MSP430 Options.     (line  148)
63207* msim:                                  Blackfin Options.   (line   36)
63208* msim <1>:                              C6X Options.        (line   19)
63209* msim <2>:                              CR16 Options.       (line   18)
63210* msim <3>:                              FT32 Options.       (line    9)
63211* msim <4>:                              M32C Options.       (line   13)
63212* msim <5>:                              MeP Options.        (line  114)
63213* msim <6>:                              MSP430 Options.     (line   77)
63214* msim <7>:                              RL78 Options.       (line    7)
63215* msim <8>:                              RS/6000 and PowerPC Options.
63216                                                             (line  602)
63217* msim <9>:                              RX Options.         (line   71)
63218* msim <10>:                             Visium Options.     (line   13)
63219* msim <11>:                             Xstormy16 Options.  (line    9)
63220* msimd:                                 ARC Options.        (line  141)
63221* msimnovec:                             MeP Options.        (line  117)
63222* msingle-exit:                          MMIX Options.       (line   65)
63223* msingle-float:                         MIPS Options.       (line  284)
63224* msingle-pic-base:                      ARM Options.        (line  779)
63225* msingle-pic-base <1>:                  RS/6000 and PowerPC Options.
63226                                                             (line  451)
63227* msio:                                  HPPA Options.       (line  105)
63228* msize-level:                           ARC Options.        (line  533)
63229* mskip-rax-setup:                       x86 Options.        (line 1321)
63230* mslow-bytes:                           MCore Options.      (line   35)
63231* mslow-flash-data:                      ARM Options.        (line  915)
63232* msmall:                                MSP430 Options.     (line   85)
63233* msmall-data:                           DEC Alpha Options.  (line  187)
63234* msmall-data-limit:                     RISC-V Options.     (line   82)
63235* msmall-data-limit <1>:                 RX Options.         (line   47)
63236* msmall-divides:                        MicroBlaze Options. (line   38)
63237* msmall-exec:                           S/390 and zSeries Options.
63238                                                             (line   79)
63239* msmall-model:                          FR30 Options.       (line    9)
63240* msmall-text:                           DEC Alpha Options.  (line  205)
63241* msmall16:                              Adapteva Epiphany Options.
63242                                                             (line   66)
63243* msmallc:                               Nios II Options.    (line  310)
63244* msmart:                                C-SKY Options.      (line   97)
63245* msmartmips:                            MIPS Options.       (line  366)
63246* msoft-cmpsf:                           Adapteva Epiphany Options.
63247                                                             (line   29)
63248* msoft-div:                             OpenRISC Options.   (line   19)
63249* msoft-float:                           ARC Options.        (line  145)
63250* msoft-float <1>:                       C-SKY Options.      (line   36)
63251* msoft-float <2>:                       DEC Alpha Options.  (line   10)
63252* msoft-float <3>:                       FRV Options.        (line   27)
63253* msoft-float <4>:                       HPPA Options.       (line   91)
63254* msoft-float <5>:                       M680x0 Options.     (line  200)
63255* msoft-float <6>:                       MicroBlaze Options. (line    7)
63256* msoft-float <7>:                       MIPS Options.       (line  270)
63257* msoft-float <8>:                       OpenRISC Options.   (line   29)
63258* msoft-float <9>:                       PDP-11 Options.     (line   13)
63259* msoft-float <10>:                      RS/6000 and PowerPC Options.
63260                                                             (line  333)
63261* msoft-float <11>:                      S/390 and zSeries Options.
63262                                                             (line   11)
63263* msoft-float <12>:                      SPARC Options.      (line   39)
63264* msoft-float <13>:                      V850 Options.       (line  113)
63265* msoft-float <14>:                      Visium Options.     (line   24)
63266* msoft-float <15>:                      x86 Options.        (line  524)
63267* msoft-mul:                             OpenRISC Options.   (line   24)
63268* msoft-quad-float:                      SPARC Options.      (line   59)
63269* msoft-stack:                           Nvidia PTX Options. (line   26)
63270* msp8:                                  AVR Options.        (line  256)
63271* mspace:                                V850 Options.       (line   30)
63272* mspace-regs:                           HPPA Options.       (line   45)
63273* mspecld-anomaly:                       Blackfin Options.   (line   48)
63274* mspecld-anomaly <1>:                   Blackfin Options.   (line   53)
63275* mspfp:                                 ARC Options.        (line  132)
63276* mspfp-compact:                         ARC Options.        (line  133)
63277* mspfp-fast:                            ARC Options.        (line  137)
63278* mspfp_compact:                         ARC Options.        (line  634)
63279* mspfp_fast:                            ARC Options.        (line  637)
63280* msplit:                                PDP-11 Options.     (line   40)
63281* msplit-addresses:                      MIPS Options.       (line  555)
63282* msplit-lohi:                           Adapteva Epiphany Options.
63283                                                             (line  109)
63284* msplit-vecmove-early:                  Adapteva Epiphany Options.
63285                                                             (line  126)
63286* msse:                                  x86 Options.        (line  756)
63287* msse2:                                 x86 Options.        (line  757)
63288* msse2avx:                              x86 Options.        (line 1276)
63289* msse3:                                 x86 Options.        (line  758)
63290* msse4:                                 x86 Options.        (line  760)
63291* msse4.1:                               x86 Options.        (line  762)
63292* msse4.2:                               x86 Options.        (line  763)
63293* msse4a:                                x86 Options.        (line  761)
63294* msseregparm:                           x86 Options.        (line  660)
63295* mssse3:                                x86 Options.        (line  759)
63296* mstack-align:                          CRIS Options.       (line   55)
63297* mstack-bias:                           SPARC Options.      (line  372)
63298* mstack-check-l1:                       Blackfin Options.   (line   74)
63299* mstack-guard:                          S/390 and zSeries Options.
63300                                                             (line  201)
63301* mstack-increment:                      MCore Options.      (line   50)
63302* mstack-offset:                         Adapteva Epiphany Options.
63303                                                             (line   37)
63304* mstack-protector-guard:                AArch64 Options.    (line   64)
63305* mstack-protector-guard <1>:            AArch64 Options.    (line   79)
63306* mstack-protector-guard <2>:            RS/6000 and PowerPC Options.
63307                                                             (line  915)
63308* mstack-protector-guard <3>:            x86 Options.        (line 1347)
63309* mstack-protector-guard-offset:         AArch64 Options.    (line   64)
63310* mstack-protector-guard-offset <1>:     AArch64 Options.    (line   79)
63311* mstack-protector-guard-offset <2>:     RS/6000 and PowerPC Options.
63312                                                             (line  915)
63313* mstack-protector-guard-offset <3>:     x86 Options.        (line 1347)
63314* mstack-protector-guard-reg:            AArch64 Options.    (line   64)
63315* mstack-protector-guard-reg <1>:        AArch64 Options.    (line   79)
63316* mstack-protector-guard-reg <2>:        RS/6000 and PowerPC Options.
63317                                                             (line  915)
63318* mstack-protector-guard-reg <3>:        x86 Options.        (line 1347)
63319* mstack-protector-guard-symbol:         RS/6000 and PowerPC Options.
63320                                                             (line  915)
63321* mstack-size:                           AMD GCN Options.    (line   23)
63322* mstack-size <1>:                       C-SKY Options.      (line  134)
63323* mstack-size <2>:                       S/390 and zSeries Options.
63324                                                             (line  201)
63325* mstackrealign:                         x86 Options.        (line  700)
63326* mstd-struct-return:                    SPARC Options.      (line  102)
63327* mstrict-align:                         AArch64 Options.    (line   52)
63328* mstrict-align <1>:                     M680x0 Options.     (line  280)
63329* mstrict-align <2>:                     RISC-V Options.     (line   93)
63330* mstrict-align <3>:                     RS/6000 and PowerPC Options.
63331                                                             (line  403)
63332* mstrict-X:                             AVR Options.        (line  269)
63333* mstring-compare-inline-limit:          RS/6000 and PowerPC Options.
63334                                                             (line  707)
63335* mstringop-strategy=ALG:                x86 Options.        (line 1224)
63336* mstructure-size-boundary:              ARM Options.        (line  734)
63337* msubxc:                                SPARC Options.      (line  288)
63338* msv-mode:                              Visium Options.     (line   52)
63339* msve-vector-bits:                      AArch64 Options.    (line  288)
63340* msvr4-struct-return:                   RS/6000 and PowerPC Options.
63341                                                             (line  548)
63342* mswap:                                 ARC Options.        (line  152)
63343* mswape:                                ARC Options.        (line  363)
63344* msym32:                                MIPS Options.       (line  453)
63345* msynci:                                MIPS Options.       (line  845)
63346* msys-crt0:                             Nios II Options.    (line  314)
63347* msys-lib:                              Nios II Options.    (line  318)
63348* MT:                                    Preprocessor Options.
63349                                                             (line  144)
63350* mtarget-align:                         Xtensa Options.     (line   74)
63351* mtas:                                  SH Options.         (line  259)
63352* mtbm:                                  x86 Options.        (line  810)
63353* mtda:                                  V850 Options.       (line   34)
63354* mtelephony:                            ARC Options.        (line  368)
63355* mtext-section-literals:                Xtensa Options.     (line   47)
63356* mtf:                                   MeP Options.        (line  121)
63357* mthread:                               x86 Windows Options.
63358                                                             (line   26)
63359* mthreads:                              x86 Options.        (line 1079)
63360* mthumb:                                ARM Options.        (line  822)
63361* mthumb-interwork:                      ARM Options.        (line   24)
63362* mtiny-printf:                          MSP430 Options.     (line  122)
63363* mtiny-stack:                           AVR Options.        (line  283)
63364* mtiny=:                                MeP Options.        (line  125)
63365* mTLS:                                  FRV Options.        (line   90)
63366* mtls:                                  FRV Options.        (line   94)
63367* mtls-dialect:                          ARM Options.        (line  874)
63368* mtls-dialect <1>:                      x86 Options.        (line 1057)
63369* mtls-dialect=desc:                     AArch64 Options.    (line   92)
63370* mtls-dialect=traditional:              AArch64 Options.    (line   96)
63371* mtls-direct-seg-refs:                  x86 Options.        (line 1266)
63372* mtls-markers:                          RS/6000 and PowerPC Options.
63373                                                             (line  776)
63374* mtls-size:                             AArch64 Options.    (line  100)
63375* mtls-size <1>:                         IA-64 Options.      (line  112)
63376* mtoc:                                  RS/6000 and PowerPC Options.
63377                                                             (line  428)
63378* mtomcat-stats:                         FRV Options.        (line  254)
63379* mtoplevel-symbols:                     MMIX Options.       (line   39)
63380* mtp:                                   ARM Options.        (line  866)
63381* mtp-regno:                             ARC Options.        (line  170)
63382* mtpcs-frame:                           ARM Options.        (line  839)
63383* mtpcs-leaf-frame:                      ARM Options.        (line  845)
63384* mtpf-trace:                            S/390 and zSeries Options.
63385                                                             (line  168)
63386* mtpf-trace-skip:                       S/390 and zSeries Options.
63387                                                             (line  174)
63388* mtraceback:                            RS/6000 and PowerPC Options.
63389                                                             (line  541)
63390* mtrap-precision:                       DEC Alpha Options.  (line  109)
63391* mtrust:                                C-SKY Options.      (line   83)
63392* mtune:                                 AArch64 Options.    (line  199)
63393* mtune <1>:                             AMD GCN Options.    (line   10)
63394* mtune <2>:                             ARC Options.        (line  554)
63395* mtune <3>:                             ARC Options.        (line  640)
63396* mtune <4>:                             ARM Options.        (line  571)
63397* mtune <5>:                             CRIS Options.       (line   17)
63398* mtune <6>:                             DEC Alpha Options.  (line  259)
63399* mtune <7>:                             IA-64 Options.      (line  116)
63400* mtune <8>:                             M680x0 Options.     (line   68)
63401* mtune <9>:                             MIPS Options.       (line   66)
63402* mtune <10>:                            MN10300 Options.    (line   30)
63403* mtune <11>:                            RISC-V Options.     (line   59)
63404* mtune <12>:                            RS/6000 and PowerPC Options.
63405                                                             (line  113)
63406* mtune <13>:                            S/390 and zSeries Options.
63407                                                             (line  161)
63408* mtune <14>:                            SPARC Options.      (line  199)
63409* mtune <15>:                            Visium Options.     (line   47)
63410* mtune <16>:                            x86 Options.        (line  398)
63411* mtune-ctrl=FEATURE-LIST:               x86 Options.        (line  867)
63412* muclibc:                               GNU/Linux Options.  (line   14)
63413* muls:                                  Score Options.      (line   18)
63414* multcost:                              ARC Options.        (line  645)
63415* multcost=NUMBER:                       SH Options.         (line  281)
63416* multilib-library-pic:                  FRV Options.        (line  110)
63417* multiply-enabled:                      LM32 Options.       (line   15)
63418* multiply_defined:                      Darwin Options.     (line  196)
63419* multiply_defined_unused:               Darwin Options.     (line  196)
63420* multi_module:                          Darwin Options.     (line  196)
63421* munalign-prob-threshold:               ARC Options.        (line  582)
63422* munaligned-access:                     ARM Options.        (line  899)
63423* munaligned-doubles:                    SPARC Options.      (line   73)
63424* municode:                              x86 Windows Options.
63425                                                             (line   30)
63426* muniform-simt:                         Nvidia PTX Options. (line   38)
63427* muninit-const-in-rodata:               MIPS Options.       (line  525)
63428* munix:                                 VAX Options.        (line    9)
63429* munix-asm:                             PDP-11 Options.     (line   43)
63430* munordered-float:                      OpenRISC Options.   (line   39)
63431* mupdate:                               RS/6000 and PowerPC Options.
63432                                                             (line  350)
63433* muser-enabled:                         LM32 Options.       (line   21)
63434* muser-mode:                            SPARC Options.      (line   85)
63435* muser-mode <1>:                        Visium Options.     (line   57)
63436* musermode:                             SH Options.         (line  274)
63437* mv3push:                               NDS32 Options.      (line   45)
63438* mv850:                                 V850 Options.       (line   49)
63439* mv850e:                                V850 Options.       (line   79)
63440* mv850e1:                               V850 Options.       (line   70)
63441* mv850e2:                               V850 Options.       (line   66)
63442* mv850e2v3:                             V850 Options.       (line   61)
63443* mv850e2v4:                             V850 Options.       (line   57)
63444* mv850e3v5:                             V850 Options.       (line   52)
63445* mv850es:                               V850 Options.       (line   75)
63446* mv8plus:                               SPARC Options.      (line  214)
63447* mvaes:                                 x86 Options.        (line  817)
63448* mvdsp:                                 C-SKY Options.      (line   88)
63449* mveclibabi:                            RS/6000 and PowerPC Options.
63450                                                             (line  850)
63451* mveclibabi <1>:                        x86 Options.        (line 1005)
63452* mvect-double:                          Adapteva Epiphany Options.
63453                                                             (line  115)
63454* mvect8-ret-in-mem:                     x86 Options.        (line  670)
63455* mverbose-cost-dump:                    AArch64 Options.    (line  256)
63456* mverbose-cost-dump <1>:                ARM Options.        (line  939)
63457* mvirt:                                 MIPS Options.       (line  407)
63458* mvis:                                  SPARC Options.      (line  221)
63459* mvis2:                                 SPARC Options.      (line  227)
63460* mvis3:                                 SPARC Options.      (line  235)
63461* mvis4:                                 SPARC Options.      (line  243)
63462* mvis4b:                                SPARC Options.      (line  251)
63463* mvliw-branch:                          FRV Options.        (line  201)
63464* mvms-return-codes:                     VMS Options.        (line    9)
63465* mvolatile-asm-stop:                    IA-64 Options.      (line   32)
63466* mvolatile-cache:                       ARC Options.        (line  427)
63467* mvolatile-cache <1>:                   ARC Options.        (line  431)
63468* mvpclmulqdq:                           x86 Options.        (line  819)
63469* mvr4130-align:                         MIPS Options.       (line  834)
63470* mvrsave:                               RS/6000 and PowerPC Options.
63471                                                             (line  152)
63472* mvsx:                                  RS/6000 and PowerPC Options.
63473                                                             (line  171)
63474* mvx:                                   S/390 and zSeries Options.
63475                                                             (line  112)
63476* mvxworks:                              RS/6000 and PowerPC Options.
63477                                                             (line  623)
63478* mvzeroupper:                           x86 Options.        (line  894)
63479* mwaitpkg:                              x86 Options.        (line  818)
63480* mwarn-devices-csv:                     MSP430 Options.     (line  153)
63481* mwarn-dynamicstack:                    S/390 and zSeries Options.
63482                                                             (line  195)
63483* mwarn-framesize:                       S/390 and zSeries Options.
63484                                                             (line  187)
63485* mwarn-mcu:                             MSP430 Options.     (line   65)
63486* mwarn-multiple-fast-interrupts:        RX Options.         (line  143)
63487* mwbnoinvd:                             x86 Options.        (line  786)
63488* mwide-bitfields:                       MCore Options.      (line   23)
63489* mwin32:                                x86 Windows Options.
63490                                                             (line   35)
63491* mwindows:                              x86 Windows Options.
63492                                                             (line   41)
63493* mword-relocations:                     ARM Options.        (line  885)
63494* mx32:                                  x86 Options.        (line 1413)
63495* mxgot:                                 M680x0 Options.     (line  312)
63496* mxgot <1>:                             MIPS Options.       (line  229)
63497* mxl-barrel-shift:                      MicroBlaze Options. (line   32)
63498* mxl-compat:                            RS/6000 and PowerPC Options.
63499                                                             (line  291)
63500* mxl-float-convert:                     MicroBlaze Options. (line   50)
63501* mxl-float-sqrt:                        MicroBlaze Options. (line   53)
63502* mxl-gp-opt:                            MicroBlaze Options. (line   44)
63503* mxl-multiply-high:                     MicroBlaze Options. (line   47)
63504* mxl-pattern-compare:                   MicroBlaze Options. (line   35)
63505* mxl-reorder:                           MicroBlaze Options. (line   62)
63506* mxl-soft-div:                          MicroBlaze Options. (line   29)
63507* mxl-soft-mul:                          MicroBlaze Options. (line   26)
63508* mxl-stack-check:                       MicroBlaze Options. (line   41)
63509* mxop:                                  x86 Options.        (line  793)
63510* mxpa:                                  MIPS Options.       (line  411)
63511* mxsave:                                x86 Options.        (line  804)
63512* mxsavec:                               x86 Options.        (line  806)
63513* mxsaveopt:                             x86 Options.        (line  805)
63514* mxsaves:                               x86 Options.        (line  807)
63515* mxy:                                   ARC Options.        (line  373)
63516* myellowknife:                          RS/6000 and PowerPC Options.
63517                                                             (line  618)
63518* mzarch:                                S/390 and zSeries Options.
63519                                                             (line   94)
63520* mzda:                                  V850 Options.       (line   45)
63521* mzdcbranch:                            SH Options.         (line  341)
63522* mzero-extend:                          MMIX Options.       (line   26)
63523* mzvector:                              S/390 and zSeries Options.
63524                                                             (line  123)
63525* no-80387:                              x86 Options.        (line  524)
63526* no-canonical-prefixes:                 Directory Options.  (line  164)
63527* no-integrated-cpp:                     Preprocessor Options.
63528                                                             (line  480)
63529* no-pie:                                Link Options.       (line  181)
63530* no-sysroot-suffix:                     Directory Options.  (line  183)
63531* noall_load:                            Darwin Options.     (line  196)
63532* nocpp:                                 MIPS Options.       (line  636)
63533* nodefaultlibs:                         Link Options.       (line  119)
63534* nodevicelib:                           AVR Options.        (line  290)
63535* nodevicespecs:                         AVR Options.        (line  293)
63536* nofixprebinding:                       Darwin Options.     (line  196)
63537* nofpu:                                 RX Options.         (line   17)
63538* nolibc:                                Link Options.       (line  131)
63539* nolibdld:                              HPPA Options.       (line  188)
63540* nomultidefs:                           Darwin Options.     (line  196)
63541* non-static:                            VxWorks Options.    (line   16)
63542* noprebind:                             Darwin Options.     (line  196)
63543* noseglinkedit:                         Darwin Options.     (line  196)
63544* nostartfiles:                          Link Options.       (line  114)
63545* nostdinc:                              Directory Options.  (line  102)
63546* nostdinc++:                            C++ Dialect Options.
63547                                                             (line  487)
63548* nostdinc++ <1>:                        Directory Options.  (line  108)
63549* nostdlib:                              Link Options.       (line  143)
63550* no_dead_strip_inits_and_terms:         Darwin Options.     (line  196)
63551* o:                                     Overall Options.    (line  197)
63552* O:                                     Optimize Options.   (line   39)
63553* O0:                                    Optimize Options.   (line  164)
63554* O1:                                    Optimize Options.   (line   39)
63555* O2:                                    Optimize Options.   (line   95)
63556* O3:                                    Optimize Options.   (line  143)
63557* Ofast:                                 Optimize Options.   (line  180)
63558* Og:                                    Optimize Options.   (line  188)
63559* Os:                                    Optimize Options.   (line  168)
63560* p:                                     Instrumentation Options.
63561                                                             (line   20)
63562* P:                                     Preprocessor Options.
63563                                                             (line  365)
63564* p <1>:                                 Common Function Attributes.
63565                                                             (line  691)
63566* pagezero_size:                         Darwin Options.     (line  196)
63567* param:                                 Optimize Options.   (line 2624)
63568* pass-exit-codes:                       Overall Options.    (line  339)
63569* pedantic:                              Standards.          (line   13)
63570* pedantic <1>:                          Warning Options.    (line   86)
63571* pedantic <2>:                          C Extensions.       (line    6)
63572* pedantic <3>:                          Alternate Keywords. (line   30)
63573* pedantic <4>:                          Warnings and Errors.
63574                                                             (line   25)
63575* pedantic-errors:                       Standards.          (line   13)
63576* pedantic-errors <1>:                   Warning Options.    (line  129)
63577* pedantic-errors <2>:                   Non-bugs.           (line  216)
63578* pedantic-errors <3>:                   Warnings and Errors.
63579                                                             (line   25)
63580* pg:                                    Instrumentation Options.
63581                                                             (line   20)
63582* pg <1>:                                Common Function Attributes.
63583                                                             (line  691)
63584* pie:                                   Link Options.       (line  175)
63585* pipe:                                  Overall Options.    (line  347)
63586* plt:                                   RISC-V Options.     (line   13)
63587* prebind:                               Darwin Options.     (line  196)
63588* prebind_all_twolevel_modules:          Darwin Options.     (line  196)
63589* print-file-name:                       Developer Options.  (line  946)
63590* print-libgcc-file-name:                Developer Options.  (line  980)
63591* print-multi-directory:                 Developer Options.  (line  952)
63592* print-multi-lib:                       Developer Options.  (line  957)
63593* print-multi-os-directory:              Developer Options.  (line  964)
63594* print-multiarch:                       Developer Options.  (line  973)
63595* print-objc-runtime-info:               Objective-C and Objective-C++ Dialect Options.
63596                                                             (line  220)
63597* print-prog-name:                       Developer Options.  (line  977)
63598* print-search-dirs:                     Developer Options.  (line  988)
63599* print-sysroot:                         Developer Options.  (line 1001)
63600* print-sysroot-headers-suffix:          Developer Options.  (line 1008)
63601* private_bundle:                        Darwin Options.     (line  196)
63602* pthread:                               Preprocessor Options.
63603                                                             (line   70)
63604* pthread <1>:                           Link Options.       (line  192)
63605* pthreads:                              Solaris 2 Options.  (line   30)
63606* Q:                                     Developer Options.  (line  850)
63607* Qn:                                    System V Options.   (line   18)
63608* Qy:                                    System V Options.   (line   14)
63609* r:                                     Link Options.       (line  199)
63610* rdynamic:                              Link Options.       (line  203)
63611* read_only_relocs:                      Darwin Options.     (line  196)
63612* remap:                                 Preprocessor Options.
63613                                                             (line  396)
63614* S:                                     Overall Options.    (line  180)
63615* S <1>:                                 Link Options.       (line   20)
63616* s:                                     Link Options.       (line  210)
63617* save-temps:                            Developer Options.  (line  725)
63618* save-temps=obj:                        Developer Options.  (line  751)
63619* sectalign:                             Darwin Options.     (line  196)
63620* sectcreate:                            Darwin Options.     (line  196)
63621* sectobjectsymbols:                     Darwin Options.     (line  196)
63622* sectobjectsymbols <1>:                 Darwin Options.     (line  196)
63623* sectorder:                             Darwin Options.     (line  196)
63624* seg1addr:                              Darwin Options.     (line  196)
63625* segaddr:                               Darwin Options.     (line  196)
63626* seglinkedit:                           Darwin Options.     (line  196)
63627* segprot:                               Darwin Options.     (line  196)
63628* segs_read_only_addr:                   Darwin Options.     (line  196)
63629* segs_read_only_addr <1>:               Darwin Options.     (line  196)
63630* segs_read_write_addr:                  Darwin Options.     (line  196)
63631* segs_read_write_addr <1>:              Darwin Options.     (line  196)
63632* seg_addr_table:                        Darwin Options.     (line  196)
63633* seg_addr_table_filename:               Darwin Options.     (line  196)
63634* shared:                                Link Options.       (line  219)
63635* shared-libgcc:                         Link Options.       (line  227)
63636* short-calls:                           Adapteva Epiphany Options.
63637                                                             (line   61)
63638* sim:                                   CRIS Options.       (line   95)
63639* sim2:                                  CRIS Options.       (line  101)
63640* single_module:                         Darwin Options.     (line  196)
63641* specs:                                 Overall Options.    (line  353)
63642* static:                                Link Options.       (line  214)
63643* static <1>:                            Darwin Options.     (line  196)
63644* static <2>:                            HPPA Options.       (line  192)
63645* static-libasan:                        Link Options.       (line  261)
63646* static-libgcc:                         Link Options.       (line  227)
63647* static-liblsan:                        Link Options.       (line  277)
63648* static-libstdc++:                      Link Options.       (line  294)
63649* static-libtsan:                        Link Options.       (line  269)
63650* static-libubsan:                       Link Options.       (line  285)
63651* static-pie:                            Link Options.       (line  184)
63652* std:                                   Standards.          (line   13)
63653* std <1>:                               C Dialect Options.  (line   46)
63654* std <2>:                               Other Builtins.     (line   31)
63655* std <3>:                               Non-bugs.           (line  107)
63656* sub_library:                           Darwin Options.     (line  196)
63657* sub_umbrella:                          Darwin Options.     (line  196)
63658* symbolic:                              Link Options.       (line  305)
63659* sysroot:                               Directory Options.  (line  168)
63660* T:                                     Link Options.       (line  311)
63661* target-help:                           Overall Options.    (line  229)
63662* threads:                               HPPA Options.       (line  205)
63663* time:                                  Developer Options.  (line  766)
63664* tno-android-cc:                        GNU/Linux Options.  (line   36)
63665* tno-android-ld:                        GNU/Linux Options.  (line   40)
63666* traditional:                           Preprocessor Options.
63667                                                             (line  372)
63668* traditional <1>:                       Incompatibilities.  (line    6)
63669* traditional-cpp:                       Preprocessor Options.
63670                                                             (line  372)
63671* trigraphs:                             Preprocessor Options.
63672                                                             (line  382)
63673* twolevel_namespace:                    Darwin Options.     (line  196)
63674* U:                                     Preprocessor Options.
63675                                                             (line   42)
63676* u:                                     Link Options.       (line  343)
63677* umbrella:                              Darwin Options.     (line  196)
63678* undef:                                 Preprocessor Options.
63679                                                             (line   66)
63680* undefined:                             Darwin Options.     (line  196)
63681* unexported_symbols_list:               Darwin Options.     (line  196)
63682* v:                                     Overall Options.    (line  208)
63683* version:                               Overall Options.    (line  336)
63684* w:                                     Warning Options.    (line   25)
63685* W:                                     Warning Options.    (line  212)
63686* W <1>:                                 Warning Options.    (line 2618)
63687* W <2>:                                 Warning Options.    (line 2726)
63688* W <3>:                                 Incompatibilities.  (line   64)
63689* Wa:                                    Assembler Options.  (line    9)
63690* Wabi:                                  Warning Options.    (line  256)
63691* Wabi-tag:                              C++ Dialect Options.
63692                                                             (line  494)
63693* Wabi-tag <1>:                          C++ Dialect Options.
63694                                                             (line  494)
63695* Wabsolute-value:                       Warning Options.    (line 2147)
63696* Waddr-space-convert:                   AVR Options.        (line  308)
63697* Waddress:                              Warning Options.    (line 2488)
63698* Waddress-of-packed-member:             Warning Options.    (line 2501)
63699* Waggregate-return:                     Warning Options.    (line 2529)
63700* Waggressive-loop-optimizations:        Warning Options.    (line 2534)
63701* Waligned-new:                          C++ Dialect Options.
63702                                                             (line  934)
63703* Wall:                                  Warning Options.    (line  138)
63704* Wall <1>:                              Standard Libraries. (line    6)
63705* Walloc-size-larger-than=:              Warning Options.    (line 1616)
63706* Walloc-zero:                           Warning Options.    (line 1606)
63707* Walloca:                               Warning Options.    (line 1631)
63708* Walloca-larger-than=:                  Warning Options.    (line 1634)
63709* Wanalyzer-double-fclose:               Static Analyzer Options.
63710                                                             (line   47)
63711* Wanalyzer-double-free:                 Static Analyzer Options.
63712                                                             (line   54)
63713* Wanalyzer-exposure-through-output-file: Static Analyzer Options.
63714                                                             (line   61)
63715* Wanalyzer-file-leak:                   Static Analyzer Options.
63716                                                             (line   69)
63717* Wanalyzer-free-of-non-heap:            Static Analyzer Options.
63718                                                             (line   76)
63719* Wanalyzer-malloc-leak:                 Static Analyzer Options.
63720                                                             (line   84)
63721* Wanalyzer-null-argument:               Static Analyzer Options.
63722                                                             (line  106)
63723* Wanalyzer-null-dereference:            Static Analyzer Options.
63724                                                             (line  114)
63725* Wanalyzer-possible-null-argument:      Static Analyzer Options.
63726                                                             (line   91)
63727* Wanalyzer-possible-null-dereference:   Static Analyzer Options.
63728                                                             (line   99)
63729* Wanalyzer-stale-setjmp-buffer:         Static Analyzer Options.
63730                                                             (line  121)
63731* Wanalyzer-tainted-array-index:         Static Analyzer Options.
63732                                                             (line  135)
63733* Wanalyzer-too-complex:                 Static Analyzer Options.
63734                                                             (line   37)
63735* Wanalyzer-unsafe-call-within-signal-handler: Static Analyzer Options.
63736                                                             (line  144)
63737* Wanalyzer-use-after-free:              Static Analyzer Options.
63738                                                             (line  152)
63739* Wanalyzer-use-of-pointer-in-stale-stack-frame: Static Analyzer Options.
63740                                                             (line  159)
63741* Warith-conversion:                     Warning Options.    (line 1699)
63742* Warray-bounds:                         Warning Options.    (line 1712)
63743* Wassign-intercept:                     Objective-C and Objective-C++ Dialect Options.
63744                                                             (line  170)
63745* Wattribute-alias:                      Warning Options.    (line 1729)
63746* Wattribute-warning:                    Warning Options.    (line 2697)
63747* Wattributes:                           Warning Options.    (line 2539)
63748* Wbad-function-cast:                    Warning Options.    (line 2216)
63749* Wbool-compare:                         Warning Options.    (line 1761)
63750* Wbool-operation:                       Warning Options.    (line 1770)
63751* Wbuiltin-declaration-mismatch:         Warning Options.    (line 2545)
63752* Wbuiltin-macro-redefined:              Warning Options.    (line 2566)
63753* Wc++-compat:                           Warning Options.    (line 2244)
63754* Wc++11-compat:                         Warning Options.    (line 2249)
63755* Wc++14-compat:                         Warning Options.    (line 2255)
63756* Wc++17-compat:                         Warning Options.    (line 2259)
63757* Wc++20-compat:                         Warning Options.    (line 2263)
63758* Wc11-c2x-compat:                       Warning Options.    (line 2236)
63759* Wc90-c99-compat:                       Warning Options.    (line 2221)
63760* Wc99-c11-compat:                       Warning Options.    (line 2228)
63761* Wcast-align:                           Warning Options.    (line 2283)
63762* Wcast-align=strict:                    Warning Options.    (line 2289)
63763* Wcast-function-type:                   Warning Options.    (line 2294)
63764* Wcast-qual:                            Warning Options.    (line 2267)
63765* Wcatch-value:                          C++ Dialect Options.
63766                                                             (line  981)
63767* Wchar-subscripts:                      Warning Options.    (line  366)
63768* Wclass-conversion:                     C++ Dialect Options.
63769                                                             (line  912)
63770* Wclass-memaccess:                      C++ Dialect Options.
63771                                                             (line  630)
63772* Wclobbered:                            Warning Options.    (line 2320)
63773* Wcomma-subscript:                      C++ Dialect Options.
63774                                                             (line  499)
63775* Wcomment:                              Warning Options.    (line 2158)
63776* Wcomments:                             Warning Options.    (line 2158)
63777* Wconditionally-supported:              C++ Dialect Options.
63778                                                             (line  989)
63779* Wconversion:                           Warning Options.    (line 2324)
63780* Wconversion-null:                      C++ Dialect Options.
63781                                                             (line 1066)
63782* Wcoverage-mismatch:                    Warning Options.    (line  371)
63783* Wcpp:                                  Warning Options.    (line  385)
63784* Wctor-dtor-privacy:                    C++ Dialect Options.
63785                                                             (line  511)
63786* Wdangling-else:                        Warning Options.    (line 2345)
63787* Wdate-time:                            Warning Options.    (line 2379)
63788* Wdeclaration-after-statement:          Warning Options.    (line 1990)
63789* Wdelete-incomplete:                    C++ Dialect Options.
63790                                                             (line  992)
63791* Wdelete-non-virtual-dtor:              C++ Dialect Options.
63792                                                             (line  518)
63793* Wdeprecated:                           Warning Options.    (line 2704)
63794* Wdeprecated-copy:                      C++ Dialect Options.
63795                                                             (line  525)
63796* Wdeprecated-declarations:              Warning Options.    (line 2708)
63797* Wdesignated-init:                      Warning Options.    (line 2959)
63798* Wdisabled-optimization:                Warning Options.    (line 2910)
63799* Wdiscarded-array-qualifiers:           Warning Options.    (line 1809)
63800* Wdiscarded-qualifiers:                 Warning Options.    (line 1803)
63801* Wdiv-by-zero:                          Warning Options.    (line 1850)
63802* Wdouble-promotion:                     Warning Options.    (line  389)
63803* Wduplicate-decl-specifier:             Warning Options.    (line  407)
63804* Wduplicated-branches:                  Warning Options.    (line 1780)
63805* Wduplicated-cond:                      Warning Options.    (line 1791)
63806* weak_reference_mismatches:             Darwin Options.     (line  196)
63807* Weffc++:                               C++ Dialect Options.
63808                                                             (line  767)
63809* Wempty-body:                           Warning Options.    (line 2384)
63810* Wendif-labels:                         Warning Options.    (line 2202)
63811* Wendif-labels <1>:                     Warning Options.    (line 2388)
63812* Wenum-compare:                         Warning Options.    (line 2391)
63813* Wenum-conversion:                      Warning Options.    (line 2397)
63814* Werror:                                Warning Options.    (line   28)
63815* Werror=:                               Warning Options.    (line   31)
63816* Wexpansion-to-defined:                 Warning Options.    (line 2177)
63817* Wextra:                                Warning Options.    (line  212)
63818* Wextra <1>:                            Warning Options.    (line 2618)
63819* Wextra <2>:                            Warning Options.    (line 2726)
63820* Wextra-semi:                           C++ Dialect Options.
63821                                                             (line  997)
63822* Wfatal-errors:                         Warning Options.    (line   48)
63823* Wfloat-conversion:                     Warning Options.    (line 2424)
63824* Wfloat-equal:                          Warning Options.    (line 1890)
63825* Wformat:                               Warning Options.    (line  412)
63826* Wformat <1>:                           Warning Options.    (line  437)
63827* Wformat <2>:                           Warning Options.    (line 1577)
63828* Wformat <3>:                           Common Function Attributes.
63829                                                             (line  381)
63830* Wformat-contains-nul:                  Warning Options.    (line  451)
63831* Wformat-extra-args:                    Warning Options.    (line  455)
63832* Wformat-nonliteral:                    Warning Options.    (line  548)
63833* Wformat-nonliteral <1>:                Common Function Attributes.
63834                                                             (line  446)
63835* Wformat-overflow:                      Warning Options.    (line  469)
63836* Wformat-overflow <1>:                  Warning Options.    (line  480)
63837* Wformat-security:                      Warning Options.    (line  553)
63838* Wformat-signedness:                    Warning Options.    (line  564)
63839* Wformat-truncation:                    Warning Options.    (line  569)
63840* Wformat-truncation <1>:                Warning Options.    (line  581)
63841* Wformat-y2k:                           Warning Options.    (line  592)
63842* Wformat-zero-length:                   Warning Options.    (line  544)
63843* Wformat=:                              Warning Options.    (line  412)
63844* Wformat=1:                             Warning Options.    (line  437)
63845* Wformat=2:                             Warning Options.    (line  446)
63846* Wframe-address:                        Warning Options.    (line 1797)
63847* Wframe-larger-than=:                   Warning Options.    (line 2059)
63848* Wfree-nonheap-object:                  Warning Options.    (line 2076)
63849* whatsloaded:                           Darwin Options.     (line  196)
63850* Whsa:                                  Warning Options.    (line 2964)
63851* whyload:                               Darwin Options.     (line  196)
63852* Wif-not-aligned:                       Warning Options.    (line  765)
63853* Wignored-attributes:                   Warning Options.    (line  780)
63854* Wignored-qualifiers:                   Warning Options.    (line  769)
63855* Wimplicit:                             Warning Options.    (line  643)
63856* Wimplicit-fallthrough:                 Warning Options.    (line  647)
63857* Wimplicit-fallthrough=:                Warning Options.    (line  652)
63858* Wimplicit-function-declaration:        Warning Options.    (line  637)
63859* Wimplicit-int:                         Warning Options.    (line  632)
63860* Winaccessible-base:                    C++ Dialect Options.
63861                                                             (line 1001)
63862* Wincompatible-pointer-types:           Warning Options.    (line 1815)
63863* Winherited-variadic-ctor:              C++ Dialect Options.
63864                                                             (line 1012)
63865* Winit-list-lifetime:                   C++ Dialect Options.
63866                                                             (line  533)
63867* Winit-self:                            Warning Options.    (line  617)
63868* Winline:                               Warning Options.    (line 2819)
63869* Winline <1>:                           Inline.             (line   60)
63870* Wint-conversion:                       Warning Options.    (line 1821)
63871* Wint-in-bool-context:                  Warning Options.    (line 2832)
63872* Wint-to-pointer-cast:                  Warning Options.    (line 2840)
63873* Winvalid-memory-model:                 Warning Options.    (line 1237)
63874* Winvalid-offsetof:                     C++ Dialect Options.
63875                                                             (line 1017)
63876* Winvalid-pch:                          Warning Options.    (line 2849)
63877* Wjump-misses-init:                     Warning Options.    (line 2401)
63878* Wl:                                    Link Options.       (line  335)
63879* Wlarger-than-BYTE-SIZE:                Warning Options.    (line 2049)
63880* Wlarger-than=:                         Warning Options.    (line 2049)
63881* Wliteral-suffix:                       C++ Dialect Options.
63882                                                             (line  568)
63883* Wlogical-not-parentheses:              Warning Options.    (line 2514)
63884* Wlogical-op:                           Warning Options.    (line 2506)
63885* Wlong-long:                            Warning Options.    (line 2853)
63886* Wlto-type-mismatch:                    Warning Options.    (line 2953)
63887* Wmain:                                 Warning Options.    (line  787)
63888* Wmaybe-uninitialized:                  Warning Options.    (line 1254)
63889* Wmemset-elt-size:                      Warning Options.    (line 2469)
63890* Wmemset-transposed-args:               Warning Options.    (line 2477)
63891* Wmisleading-indentation:               Warning Options.    (line  794)
63892* Wmismatched-tags:                      C++ Dialect Options.
63893                                                             (line  853)
63894* Wmissing-attributes:                   Warning Options.    (line  828)
63895* Wmissing-braces:                       Warning Options.    (line  872)
63896* Wmissing-declarations:                 Warning Options.    (line 2608)
63897* Wmissing-field-initializers:           Warning Options.    (line 2618)
63898* Wmissing-format-attribute:             Warning Options.    (line 1577)
63899* Wmissing-include-dirs:                 Warning Options.    (line  882)
63900* Wmissing-noreturn:                     Warning Options.    (line 1563)
63901* Wmissing-parameter-type:               Warning Options.    (line 2590)
63902* Wmissing-profile:                      Warning Options.    (line  885)
63903* Wmissing-prototypes:                   Warning Options.    (line 2598)
63904* Wmisspelled-isr:                       AVR Options.        (line  313)
63905* Wmultichar:                            Warning Options.    (line 2648)
63906* Wmultiple-inheritance:                 C++ Dialect Options.
63907                                                             (line  878)
63908* Wmultistatement-macros:                Warning Options.    (line  901)
63909* Wnamespaces:                           C++ Dialect Options.
63910                                                             (line  901)
63911* Wnarrowing:                            C++ Dialect Options.
63912                                                             (line  594)
63913* Wnested-externs:                       Warning Options.    (line 2816)
63914* Wno-abi:                               Warning Options.    (line  256)
63915* Wno-absolute-value:                    Warning Options.    (line 2147)
63916* Wno-addr-space-convert:                AVR Options.        (line  308)
63917* Wno-address:                           Warning Options.    (line 2488)
63918* Wno-address-of-packed-member:          Warning Options.    (line 2501)
63919* Wno-aggregate-return:                  Warning Options.    (line 2529)
63920* Wno-aggressive-loop-optimizations:     Warning Options.    (line 2534)
63921* Wno-aligned-new:                       C++ Dialect Options.
63922                                                             (line  934)
63923* Wno-all:                               Warning Options.    (line  138)
63924* Wno-alloc-size-larger-than:            Warning Options.    (line 1616)
63925* Wno-alloc-size-larger-than <1>:        Warning Options.    (line 1627)
63926* Wno-alloc-zero:                        Warning Options.    (line 1606)
63927* Wno-alloca:                            Warning Options.    (line 1631)
63928* Wno-alloca-larger-than:                Warning Options.    (line 1634)
63929* Wno-alloca-larger-than <1>:            Warning Options.    (line 1695)
63930* Wno-analyzer-double-fclose:            Static Analyzer Options.
63931                                                             (line   47)
63932* Wno-analyzer-double-free:              Static Analyzer Options.
63933                                                             (line   54)
63934* Wno-analyzer-exposure-through-output-file: Static Analyzer Options.
63935                                                             (line   61)
63936* Wno-analyzer-file-leak:                Static Analyzer Options.
63937                                                             (line   69)
63938* Wno-analyzer-free-of-non-heap:         Static Analyzer Options.
63939                                                             (line   76)
63940* Wno-analyzer-malloc-leak:              Static Analyzer Options.
63941                                                             (line   84)
63942* Wno-analyzer-null-argument:            Static Analyzer Options.
63943                                                             (line  106)
63944* Wno-analyzer-null-dereference:         Static Analyzer Options.
63945                                                             (line  114)
63946* Wno-analyzer-possible-null-argument:   Static Analyzer Options.
63947                                                             (line   91)
63948* Wno-analyzer-possible-null-dereference: Static Analyzer Options.
63949                                                             (line   99)
63950* Wno-analyzer-stale-setjmp-buffer:      Static Analyzer Options.
63951                                                             (line  121)
63952* Wno-analyzer-tainted-array-index:      Static Analyzer Options.
63953                                                             (line  135)
63954* Wno-analyzer-too-complex:              Static Analyzer Options.
63955                                                             (line   37)
63956* Wno-analyzer-unsafe-call-within-signal-handler: Static Analyzer Options.
63957                                                             (line  144)
63958* Wno-analyzer-use-after-free:           Static Analyzer Options.
63959                                                             (line  152)
63960* Wno-analyzer-use-of-pointer-in-stale-stack-frame: Static Analyzer Options.
63961                                                             (line  159)
63962* Wno-arith-conversion:                  Warning Options.    (line 1699)
63963* Wno-array-bounds:                      Warning Options.    (line 1712)
63964* Wno-assign-intercept:                  Objective-C and Objective-C++ Dialect Options.
63965                                                             (line  170)
63966* Wno-attribute-alias:                   Warning Options.    (line 1729)
63967* Wno-attribute-warning:                 Warning Options.    (line 2697)
63968* Wno-attributes:                        Warning Options.    (line 2539)
63969* Wno-bad-function-cast:                 Warning Options.    (line 2216)
63970* Wno-bool-compare:                      Warning Options.    (line 1761)
63971* Wno-bool-operation:                    Warning Options.    (line 1770)
63972* Wno-builtin-declaration-mismatch:      Warning Options.    (line 2545)
63973* Wno-builtin-macro-redefined:           Warning Options.    (line 2566)
63974* Wno-c++-compat:                        Warning Options.    (line 2244)
63975* Wno-c++11-compat:                      Warning Options.    (line 2249)
63976* Wno-c++14-compat:                      Warning Options.    (line 2255)
63977* Wno-c++17-compat:                      Warning Options.    (line 2259)
63978* Wno-c++20-compat:                      Warning Options.    (line 2263)
63979* Wno-c11-c2x-compat:                    Warning Options.    (line 2236)
63980* Wno-c90-c99-compat:                    Warning Options.    (line 2221)
63981* Wno-c99-c11-compat:                    Warning Options.    (line 2228)
63982* Wno-cast-align:                        Warning Options.    (line 2283)
63983* Wno-cast-function-type:                Warning Options.    (line 2294)
63984* Wno-cast-qual:                         Warning Options.    (line 2267)
63985* Wno-catch-value:                       C++ Dialect Options.
63986                                                             (line  981)
63987* Wno-char-subscripts:                   Warning Options.    (line  366)
63988* Wno-class-conversion:                  C++ Dialect Options.
63989                                                             (line  912)
63990* Wno-class-memaccess:                   C++ Dialect Options.
63991                                                             (line  630)
63992* Wno-clobbered:                         Warning Options.    (line 2320)
63993* Wno-comma-subscript:                   C++ Dialect Options.
63994                                                             (line  499)
63995* Wno-conditionally-supported:           C++ Dialect Options.
63996                                                             (line  989)
63997* Wno-conversion:                        Warning Options.    (line 2324)
63998* Wno-conversion-null:                   C++ Dialect Options.
63999                                                             (line 1066)
64000* Wno-coverage-mismatch:                 Warning Options.    (line  371)
64001* Wno-cpp:                               Warning Options.    (line  385)
64002* Wno-ctor-dtor-privacy:                 C++ Dialect Options.
64003                                                             (line  511)
64004* Wno-dangling-else:                     Warning Options.    (line 2345)
64005* Wno-date-time:                         Warning Options.    (line 2379)
64006* Wno-declaration-after-statement:       Warning Options.    (line 1990)
64007* Wno-delete-incomplete:                 C++ Dialect Options.
64008                                                             (line  992)
64009* Wno-delete-non-virtual-dtor:           C++ Dialect Options.
64010                                                             (line  518)
64011* Wno-deprecated:                        Warning Options.    (line 2704)
64012* Wno-deprecated-copy:                   C++ Dialect Options.
64013                                                             (line  525)
64014* Wno-deprecated-declarations:           Warning Options.    (line 2708)
64015* Wno-designated-init:                   Warning Options.    (line 2959)
64016* Wno-disabled-optimization:             Warning Options.    (line 2910)
64017* Wno-discarded-array-qualifiers:        Warning Options.    (line 1809)
64018* Wno-discarded-qualifiers:              Warning Options.    (line 1803)
64019* Wno-div-by-zero:                       Warning Options.    (line 1850)
64020* Wno-double-promotion:                  Warning Options.    (line  389)
64021* Wno-duplicate-decl-specifier:          Warning Options.    (line  407)
64022* Wno-duplicated-branches:               Warning Options.    (line 1780)
64023* Wno-duplicated-cond:                   Warning Options.    (line 1791)
64024* Wno-effc++:                            C++ Dialect Options.
64025                                                             (line  767)
64026* Wno-empty-body:                        Warning Options.    (line 2384)
64027* Wno-endif-labels:                      Warning Options.    (line 2202)
64028* Wno-endif-labels <1>:                  Warning Options.    (line 2388)
64029* Wno-enum-compare:                      Warning Options.    (line 2391)
64030* Wno-enum-conversion:                   Warning Options.    (line 2397)
64031* Wno-error:                             Warning Options.    (line   28)
64032* Wno-error=:                            Warning Options.    (line   31)
64033* Wno-extra:                             Warning Options.    (line  212)
64034* Wno-extra <1>:                         Warning Options.    (line 2618)
64035* Wno-extra <2>:                         Warning Options.    (line 2726)
64036* Wno-extra-semi:                        C++ Dialect Options.
64037                                                             (line  997)
64038* Wno-fatal-errors:                      Warning Options.    (line   48)
64039* Wno-float-conversion:                  Warning Options.    (line 2424)
64040* Wno-float-equal:                       Warning Options.    (line 1890)
64041* Wno-format:                            Warning Options.    (line  412)
64042* Wno-format <1>:                        Warning Options.    (line 1577)
64043* Wno-format-contains-nul:               Warning Options.    (line  451)
64044* Wno-format-extra-args:                 Warning Options.    (line  455)
64045* Wno-format-nonliteral:                 Warning Options.    (line  548)
64046* Wno-format-overflow:                   Warning Options.    (line  469)
64047* Wno-format-overflow <1>:               Warning Options.    (line  480)
64048* Wno-format-security:                   Warning Options.    (line  553)
64049* Wno-format-signedness:                 Warning Options.    (line  564)
64050* Wno-format-truncation:                 Warning Options.    (line  569)
64051* Wno-format-truncation <1>:             Warning Options.    (line  581)
64052* Wno-format-y2k:                        Warning Options.    (line  592)
64053* Wno-format-zero-length:                Warning Options.    (line  544)
64054* Wno-frame-address:                     Warning Options.    (line 1797)
64055* Wno-frame-larger-than:                 Warning Options.    (line 2059)
64056* Wno-frame-larger-than <1>:             Warning Options.    (line 2072)
64057* Wno-free-nonheap-object:               Warning Options.    (line 2076)
64058* Wno-hsa:                               Warning Options.    (line 2964)
64059* Wno-if-not-aligned:                    Warning Options.    (line  765)
64060* Wno-ignored-attributes:                Warning Options.    (line  780)
64061* Wno-ignored-qualifiers:                Warning Options.    (line  769)
64062* Wno-implicit:                          Warning Options.    (line  643)
64063* Wno-implicit-fallthrough:              Warning Options.    (line  647)
64064* Wno-implicit-function-declaration:     Warning Options.    (line  637)
64065* Wno-implicit-int:                      Warning Options.    (line  632)
64066* Wno-inaccessible-base:                 C++ Dialect Options.
64067                                                             (line 1001)
64068* Wno-incompatible-pointer-types:        Warning Options.    (line 1815)
64069* Wno-inherited-variadic-ctor:           C++ Dialect Options.
64070                                                             (line 1012)
64071* Wno-init-list-lifetime:                C++ Dialect Options.
64072                                                             (line  533)
64073* Wno-init-self:                         Warning Options.    (line  617)
64074* Wno-inline:                            Warning Options.    (line 2819)
64075* Wno-int-conversion:                    Warning Options.    (line 1821)
64076* Wno-int-in-bool-context:               Warning Options.    (line 2832)
64077* Wno-int-to-pointer-cast:               Warning Options.    (line 2840)
64078* Wno-invalid-memory-model:              Warning Options.    (line 1237)
64079* Wno-invalid-offsetof:                  C++ Dialect Options.
64080                                                             (line 1017)
64081* Wno-invalid-pch:                       Warning Options.    (line 2849)
64082* Wno-jump-misses-init:                  Warning Options.    (line 2401)
64083* Wno-larger-than:                       Warning Options.    (line 2055)
64084* Wno-literal-suffix:                    C++ Dialect Options.
64085                                                             (line  568)
64086* Wno-logical-not-parentheses:           Warning Options.    (line 2514)
64087* Wno-logical-op:                        Warning Options.    (line 2506)
64088* Wno-long-long:                         Warning Options.    (line 2853)
64089* Wno-lto-type-mismatch:                 Warning Options.    (line 2953)
64090* Wno-main:                              Warning Options.    (line  787)
64091* Wno-maybe-uninitialized:               Warning Options.    (line 1254)
64092* Wno-memset-elt-size:                   Warning Options.    (line 2469)
64093* Wno-memset-transposed-args:            Warning Options.    (line 2477)
64094* Wno-misleading-indentation:            Warning Options.    (line  794)
64095* Wno-mismatched-tags:                   C++ Dialect Options.
64096                                                             (line  853)
64097* Wno-missing-attributes:                Warning Options.    (line  828)
64098* Wno-missing-braces:                    Warning Options.    (line  872)
64099* Wno-missing-declarations:              Warning Options.    (line 2608)
64100* Wno-missing-field-initializers:        Warning Options.    (line 2618)
64101* Wno-missing-format-attribute:          Warning Options.    (line 1577)
64102* Wno-missing-include-dirs:              Warning Options.    (line  882)
64103* Wno-missing-noreturn:                  Warning Options.    (line 1563)
64104* Wno-missing-parameter-type:            Warning Options.    (line 2590)
64105* Wno-missing-profile:                   Warning Options.    (line  885)
64106* Wno-missing-prototypes:                Warning Options.    (line 2598)
64107* Wno-misspelled-isr:                    AVR Options.        (line  313)
64108* Wno-multichar:                         Warning Options.    (line 2648)
64109* Wno-multiple-inheritance:              C++ Dialect Options.
64110                                                             (line  878)
64111* Wno-multistatement-macros:             Warning Options.    (line  901)
64112* Wno-namespaces:                        C++ Dialect Options.
64113                                                             (line  901)
64114* Wno-narrowing:                         C++ Dialect Options.
64115                                                             (line  594)
64116* Wno-nested-externs:                    Warning Options.    (line 2816)
64117* Wno-noexcept:                          C++ Dialect Options.
64118                                                             (line  610)
64119* Wno-noexcept-type:                     C++ Dialect Options.
64120                                                             (line  616)
64121* Wno-non-template-friend:               C++ Dialect Options.
64122                                                             (line  802)
64123* Wno-non-virtual-dtor:                  C++ Dialect Options.
64124                                                             (line  650)
64125* Wno-nonnull:                           Warning Options.    (line  596)
64126* Wno-nonnull-compare:                   Warning Options.    (line  603)
64127* Wno-normalized:                        Warning Options.    (line 2654)
64128* Wno-null-dereference:                  Warning Options.    (line  610)
64129* Wno-odr:                               Warning Options.    (line 2717)
64130* Wno-old-style-cast:                    C++ Dialect Options.
64131                                                             (line  811)
64132* Wno-old-style-declaration:             Warning Options.    (line 2577)
64133* Wno-old-style-definition:              Warning Options.    (line 2583)
64134* Wno-openmp-simd:                       Warning Options.    (line 2721)
64135* Wno-overflow:                          Warning Options.    (line 2714)
64136* Wno-overlength-strings:                Warning Options.    (line 2930)
64137* Wno-overloaded-virtual:                C++ Dialect Options.
64138                                                             (line  817)
64139* Wno-override-init:                     Warning Options.    (line 2726)
64140* Wno-override-init-side-effects:        Warning Options.    (line 2734)
64141* Wno-packed:                            Warning Options.    (line 2739)
64142* Wno-packed-bitfield-compat:            Warning Options.    (line 2756)
64143* Wno-packed-not-aligned:                Warning Options.    (line 2773)
64144* Wno-padded:                            Warning Options.    (line 2786)
64145* Wno-parentheses:                       Warning Options.    (line  921)
64146* Wno-pedantic:                          Warning Options.    (line   86)
64147* Wno-pedantic-ms-format:                Warning Options.    (line 2114)
64148* Wno-pessimizing-move:                  C++ Dialect Options.
64149                                                             (line  679)
64150* Wno-placement-new:                     C++ Dialect Options.
64151                                                             (line  945)
64152* Wno-pmf-conversions:                   C++ Dialect Options.
64153                                                             (line  836)
64154* Wno-pmf-conversions <1>:               Bound member functions.
64155                                                             (line   35)
64156* Wno-pointer-arith:                     Warning Options.    (line 2120)
64157* Wno-pointer-compare:                   Warning Options.    (line 2127)
64158* Wno-pointer-sign:                      Warning Options.    (line 2919)
64159* Wno-pointer-to-int-cast:               Warning Options.    (line 2845)
64160* Wno-pragmas:                           Warning Options.    (line 1306)
64161* Wno-prio-ctor-dtor:                    Warning Options.    (line 1311)
64162* Wno-property-assign-default:           Objective-C and Objective-C++ Dialect Options.
64163                                                             (line  174)
64164* Wno-protocol:                          Objective-C and Objective-C++ Dialect Options.
64165                                                             (line  178)
64166* Wno-redundant-decls:                   Warning Options.    (line 2793)
64167* Wno-redundant-move:                    C++ Dialect Options.
64168                                                             (line  701)
64169* Wno-redundant-tags:                    C++ Dialect Options.
64170                                                             (line  740)
64171* Wno-register:                          C++ Dialect Options.
64172                                                             (line  658)
64173* Wno-reorder:                           C++ Dialect Options.
64174                                                             (line  665)
64175* Wno-restrict:                          Warning Options.    (line 2797)
64176* Wno-return-local-addr:                 Warning Options.    (line 1001)
64177* Wno-return-type:                       Warning Options.    (line 1005)
64178* Wno-scalar-storage-order:              Warning Options.    (line 2430)
64179* Wno-selector:                          Objective-C and Objective-C++ Dialect Options.
64180                                                             (line  188)
64181* Wno-sequence-point:                    Warning Options.    (line  948)
64182* Wno-shadow:                            Warning Options.    (line 1996)
64183* Wno-shadow-ivar:                       Warning Options.    (line 2007)
64184* Wno-shift-count-negative:              Warning Options.    (line 1026)
64185* Wno-shift-count-overflow:              Warning Options.    (line 1030)
64186* Wno-shift-negative-value:              Warning Options.    (line 1034)
64187* Wno-shift-overflow:                    Warning Options.    (line 1039)
64188* Wno-sign-compare:                      Warning Options.    (line 2412)
64189* Wno-sign-conversion:                   Warning Options.    (line 2418)
64190* Wno-sign-promo:                        C++ Dialect Options.
64191                                                             (line  840)
64192* Wno-sized-deallocation:                C++ Dialect Options.
64193                                                             (line 1029)
64194* Wno-sizeof-array-argument:             Warning Options.    (line 2464)
64195* Wno-sizeof-pointer-div:                Warning Options.    (line 2434)
64196* Wno-sizeof-pointer-memaccess:          Warning Options.    (line 2442)
64197* Wno-stack-protector:                   Warning Options.    (line 2925)
64198* Wno-stack-usage:                       Warning Options.    (line 2080)
64199* Wno-stack-usage <1>:                   Warning Options.    (line 2104)
64200* Wno-strict-aliasing:                   Warning Options.    (line 1319)
64201* Wno-strict-null-sentinel:              C++ Dialect Options.
64202                                                             (line  795)
64203* Wno-strict-overflow:                   Warning Options.    (line 1358)
64204* Wno-strict-prototypes:                 Warning Options.    (line 2571)
64205* Wno-strict-selector-match:             Objective-C and Objective-C++ Dialect Options.
64206                                                             (line  200)
64207* Wno-string-compare:                    Warning Options.    (line 1406)
64208* Wno-stringop-overflow:                 Warning Options.    (line 1427)
64209* Wno-stringop-overflow <1>:             Warning Options.    (line 1466)
64210* Wno-stringop-truncation:               Warning Options.    (line 1504)
64211* Wno-subobject-linkage:                 C++ Dialect Options.
64212                                                             (line  754)
64213* Wno-suggest-attribute=:                Warning Options.    (line 1555)
64214* Wno-suggest-attribute=cold:            Warning Options.    (line 1598)
64215* Wno-suggest-attribute=const:           Warning Options.    (line 1563)
64216* Wno-suggest-attribute=format:          Warning Options.    (line 1577)
64217* Wno-suggest-attribute=malloc:          Warning Options.    (line 1563)
64218* Wno-suggest-attribute=noreturn:        Warning Options.    (line 1563)
64219* Wno-suggest-attribute=pure:            Warning Options.    (line 1563)
64220* Wno-suggest-final-methods:             C++ Dialect Options.
64221                                                             (line 1049)
64222* Wno-suggest-final-types:               C++ Dialect Options.
64223                                                             (line 1040)
64224* Wno-suggest-override:                  C++ Dialect Options.
64225                                                             (line 1059)
64226* Wno-switch:                            Warning Options.    (line 1055)
64227* Wno-switch-bool:                       Warning Options.    (line 1075)
64228* Wno-switch-default:                    Warning Options.    (line 1063)
64229* Wno-switch-enum:                       Warning Options.    (line 1066)
64230* Wno-switch-outside-range:              Warning Options.    (line 1086)
64231* Wno-switch-unreachable:                Warning Options.    (line 1091)
64232* Wno-sync-nand:                         Warning Options.    (line 1115)
64233* Wno-system-headers:                    Warning Options.    (line 1855)
64234* Wno-tautological-compare:              Warning Options.    (line 1866)
64235* Wno-templates:                         C++ Dialect Options.
64236                                                             (line  846)
64237* Wno-terminate:                         C++ Dialect Options.
64238                                                             (line  908)
64239* Wno-traditional:                       Warning Options.    (line 1905)
64240* Wno-traditional-conversion:            Warning Options.    (line 1982)
64241* Wno-trampolines:                       Warning Options.    (line 1880)
64242* Wno-type-limits:                       Warning Options.    (line 2140)
64243* Wno-undeclared-selector:               Objective-C and Objective-C++ Dialect Options.
64244                                                             (line  208)
64245* Wno-undef:                             Warning Options.    (line 2173)
64246* Wno-uninitialized:                     Warning Options.    (line 1216)
64247* Wno-unknown-pragmas:                   Warning Options.    (line 1299)
64248* Wno-unsafe-loop-optimizations:         Warning Options.    (line 2108)
64249* Wno-unsuffixed-float-constants:        Warning Options.    (line 2945)
64250* Wno-unused:                            Warning Options.    (line 1209)
64251* Wno-unused-but-set-parameter:          Warning Options.    (line 1120)
64252* Wno-unused-but-set-variable:           Warning Options.    (line 1129)
64253* Wno-unused-const-variable:             Warning Options.    (line 1176)
64254* Wno-unused-function:                   Warning Options.    (line 1139)
64255* Wno-unused-label:                      Warning Options.    (line 1144)
64256* Wno-unused-local-typedefs:             Warning Options.    (line 1151)
64257* Wno-unused-parameter:                  Warning Options.    (line 1155)
64258* Wno-unused-result:                     Warning Options.    (line 1162)
64259* Wno-unused-value:                      Warning Options.    (line 1199)
64260* Wno-unused-variable:                   Warning Options.    (line 1167)
64261* Wno-useless-cast:                      C++ Dialect Options.
64262                                                             (line 1063)
64263* Wno-varargs:                           Warning Options.    (line 2864)
64264* Wno-variadic-macros:                   Warning Options.    (line 2858)
64265* Wno-vector-operation-performance:      Warning Options.    (line 2869)
64266* Wno-virtual-inheritance:               C++ Dialect Options.
64267                                                             (line  885)
64268* Wno-virtual-move-assign:               C++ Dialect Options.
64269                                                             (line  892)
64270* Wno-vla:                               Warning Options.    (line 2879)
64271* Wno-vla-larger-than:                   Warning Options.    (line 2883)
64272* Wno-vla-larger-than <1>:               Warning Options.    (line 2900)
64273* Wno-volatile:                          C++ Dialect Options.
64274                                                             (line  917)
64275* Wno-volatile-register-var:             Warning Options.    (line 2904)
64276* Wno-write-strings:                     Warning Options.    (line 2307)
64277* Wno-zero-as-null-pointer-constant:     C++ Dialect Options.
64278                                                             (line  930)
64279* Wnoexcept:                             C++ Dialect Options.
64280                                                             (line  610)
64281* Wnoexcept-type:                        C++ Dialect Options.
64282                                                             (line  616)
64283* Wnon-template-friend:                  C++ Dialect Options.
64284                                                             (line  802)
64285* Wnon-virtual-dtor:                     C++ Dialect Options.
64286                                                             (line  650)
64287* Wnonnull:                              Warning Options.    (line  596)
64288* Wnonnull-compare:                      Warning Options.    (line  603)
64289* Wnormalized:                           Warning Options.    (line 2654)
64290* Wnormalized=:                          Warning Options.    (line 2654)
64291* Wnull-dereference:                     Warning Options.    (line  610)
64292* Wodr:                                  Warning Options.    (line 2717)
64293* Wold-style-cast:                       C++ Dialect Options.
64294                                                             (line  811)
64295* Wold-style-declaration:                Warning Options.    (line 2577)
64296* Wold-style-definition:                 Warning Options.    (line 2583)
64297* Wopenmp-simd:                          Warning Options.    (line 2721)
64298* Woverflow:                             Warning Options.    (line 2714)
64299* Woverlength-strings:                   Warning Options.    (line 2930)
64300* Woverloaded-virtual:                   C++ Dialect Options.
64301                                                             (line  817)
64302* Woverride-init:                        Warning Options.    (line 2726)
64303* Woverride-init-side-effects:           Warning Options.    (line 2734)
64304* Wp:                                    Preprocessor Options.
64305                                                             (line  460)
64306* Wpacked:                               Warning Options.    (line 2739)
64307* Wpacked-bitfield-compat:               Warning Options.    (line 2756)
64308* Wpacked-not-aligned:                   Warning Options.    (line 2773)
64309* Wpadded:                               Warning Options.    (line 2786)
64310* Wparentheses:                          Warning Options.    (line  921)
64311* Wpedantic:                             Warning Options.    (line   86)
64312* Wpedantic-ms-format:                   Warning Options.    (line 2114)
64313* Wpessimizing-move:                     C++ Dialect Options.
64314                                                             (line  679)
64315* Wplacement-new:                        C++ Dialect Options.
64316                                                             (line  945)
64317* Wpmf-conversions:                      C++ Dialect Options.
64318                                                             (line  836)
64319* Wpointer-arith:                        Warning Options.    (line 2120)
64320* Wpointer-arith <1>:                    Pointer Arith.      (line   13)
64321* Wpointer-compare:                      Warning Options.    (line 2127)
64322* Wpointer-sign:                         Warning Options.    (line 2919)
64323* Wpointer-to-int-cast:                  Warning Options.    (line 2845)
64324* Wpragmas:                              Warning Options.    (line 1306)
64325* Wprio-ctor-dtor:                       Warning Options.    (line 1311)
64326* Wproperty-assign-default:              Objective-C and Objective-C++ Dialect Options.
64327                                                             (line  174)
64328* Wprotocol:                             Objective-C and Objective-C++ Dialect Options.
64329                                                             (line  178)
64330* wrapper:                               Overall Options.    (line  362)
64331* Wredundant-decls:                      Warning Options.    (line 2793)
64332* Wredundant-move:                       C++ Dialect Options.
64333                                                             (line  701)
64334* Wredundant-tags:                       C++ Dialect Options.
64335                                                             (line  740)
64336* Wregister:                             C++ Dialect Options.
64337                                                             (line  658)
64338* Wreorder:                              C++ Dialect Options.
64339                                                             (line  665)
64340* Wrestrict:                             Warning Options.    (line 2797)
64341* Wreturn-local-addr:                    Warning Options.    (line 1001)
64342* Wreturn-type:                          Warning Options.    (line 1005)
64343* Wscalar-storage-order:                 Warning Options.    (line 2430)
64344* Wselector:                             Objective-C and Objective-C++ Dialect Options.
64345                                                             (line  188)
64346* Wsequence-point:                       Warning Options.    (line  948)
64347* Wshadow:                               Warning Options.    (line 1996)
64348* Wshadow-ivar:                          Warning Options.    (line 2007)
64349* Wshadow=compatible-local:              Warning Options.    (line 2018)
64350* Wshadow=global:                        Warning Options.    (line 2011)
64351* Wshadow=local:                         Warning Options.    (line 2014)
64352* Wshift-count-negative:                 Warning Options.    (line 1026)
64353* Wshift-count-overflow:                 Warning Options.    (line 1030)
64354* Wshift-negative-value:                 Warning Options.    (line 1034)
64355* Wshift-overflow:                       Warning Options.    (line 1039)
64356* Wsign-compare:                         Warning Options.    (line 2412)
64357* Wsign-conversion:                      Warning Options.    (line 2418)
64358* Wsign-promo:                           C++ Dialect Options.
64359                                                             (line  840)
64360* Wsized-deallocation:                   C++ Dialect Options.
64361                                                             (line 1029)
64362* Wsizeof-array-argument:                Warning Options.    (line 2464)
64363* Wsizeof-pointer-div:                   Warning Options.    (line 2434)
64364* Wsizeof-pointer-memaccess:             Warning Options.    (line 2442)
64365* Wstack-protector:                      Warning Options.    (line 2925)
64366* Wstack-usage:                          Warning Options.    (line 2080)
64367* Wstrict-aliasing:                      Warning Options.    (line 1319)
64368* Wstrict-aliasing=n:                    Warning Options.    (line 1326)
64369* Wstrict-null-sentinel:                 C++ Dialect Options.
64370                                                             (line  795)
64371* Wstrict-overflow:                      Warning Options.    (line 1358)
64372* Wstrict-prototypes:                    Warning Options.    (line 2571)
64373* Wstrict-selector-match:                Objective-C and Objective-C++ Dialect Options.
64374                                                             (line  200)
64375* Wstring-compare:                       Warning Options.    (line 1406)
64376* Wstringop-overflow:                    Warning Options.    (line 1427)
64377* Wstringop-overflow <1>:                Warning Options.    (line 1466)
64378* Wstringop-truncation:                  Warning Options.    (line 1504)
64379* Wsubobject-linkage:                    C++ Dialect Options.
64380                                                             (line  754)
64381* Wsuggest-attribute=:                   Warning Options.    (line 1555)
64382* Wsuggest-attribute=cold:               Warning Options.    (line 1598)
64383* Wsuggest-attribute=const:              Warning Options.    (line 1563)
64384* Wsuggest-attribute=format:             Warning Options.    (line 1577)
64385* Wsuggest-attribute=malloc:             Warning Options.    (line 1563)
64386* Wsuggest-attribute=noreturn:           Warning Options.    (line 1563)
64387* Wsuggest-attribute=pure:               Warning Options.    (line 1563)
64388* Wsuggest-final-methods:                C++ Dialect Options.
64389                                                             (line 1049)
64390* Wsuggest-final-types:                  C++ Dialect Options.
64391                                                             (line 1040)
64392* Wsuggest-override:                     C++ Dialect Options.
64393                                                             (line 1059)
64394* Wswitch:                               Warning Options.    (line 1055)
64395* Wswitch-bool:                          Warning Options.    (line 1075)
64396* Wswitch-default:                       Warning Options.    (line 1063)
64397* Wswitch-enum:                          Warning Options.    (line 1066)
64398* Wswitch-outside-range:                 Warning Options.    (line 1086)
64399* Wswitch-unreachable:                   Warning Options.    (line 1091)
64400* Wsync-nand:                            Warning Options.    (line 1115)
64401* Wsystem-headers:                       Warning Options.    (line 1855)
64402* Wtautological-compare:                 Warning Options.    (line 1866)
64403* Wtemplates:                            C++ Dialect Options.
64404                                                             (line  846)
64405* Wterminate:                            C++ Dialect Options.
64406                                                             (line  908)
64407* Wtraditional:                          Warning Options.    (line 1905)
64408* Wtraditional-conversion:               Warning Options.    (line 1982)
64409* Wtrampolines:                          Warning Options.    (line 1880)
64410* Wtrigraphs:                            Warning Options.    (line 2163)
64411* Wtype-limits:                          Warning Options.    (line 2140)
64412* Wundeclared-selector:                  Objective-C and Objective-C++ Dialect Options.
64413                                                             (line  208)
64414* Wundef:                                Warning Options.    (line 2173)
64415* Wuninitialized:                        Warning Options.    (line 1216)
64416* Wunknown-pragmas:                      Warning Options.    (line 1299)
64417* Wunsafe-loop-optimizations:            Warning Options.    (line 2108)
64418* Wunsuffixed-float-constants:           Warning Options.    (line 2945)
64419* Wunused:                               Warning Options.    (line 1209)
64420* Wunused-but-set-parameter:             Warning Options.    (line 1120)
64421* Wunused-but-set-variable:              Warning Options.    (line 1129)
64422* Wunused-const-variable:                Warning Options.    (line 1176)
64423* Wunused-function:                      Warning Options.    (line 1139)
64424* Wunused-label:                         Warning Options.    (line 1144)
64425* Wunused-local-typedefs:                Warning Options.    (line 1151)
64426* Wunused-macros:                        Warning Options.    (line 2183)
64427* Wunused-parameter:                     Warning Options.    (line 1155)
64428* Wunused-result:                        Warning Options.    (line 1162)
64429* Wunused-value:                         Warning Options.    (line 1199)
64430* Wunused-variable:                      Warning Options.    (line 1167)
64431* Wuseless-cast:                         C++ Dialect Options.
64432                                                             (line 1063)
64433* Wvarargs:                              Warning Options.    (line 2864)
64434* Wvariadic-macros:                      Warning Options.    (line 2858)
64435* Wvector-operation-performance:         Warning Options.    (line 2869)
64436* Wvirtual-inheritance:                  C++ Dialect Options.
64437                                                             (line  885)
64438* Wvirtual-move-assign:                  C++ Dialect Options.
64439                                                             (line  892)
64440* Wvla:                                  Warning Options.    (line 2879)
64441* Wvla-larger-than=:                     Warning Options.    (line 2883)
64442* Wvolatile:                             C++ Dialect Options.
64443                                                             (line  917)
64444* Wvolatile-register-var:                Warning Options.    (line 2904)
64445* Wwrite-strings:                        Warning Options.    (line 2307)
64446* Wzero-as-null-pointer-constant:        C++ Dialect Options.
64447                                                             (line  930)
64448* Wzero-length-bounds:                   Warning Options.    (line 1827)
64449* Wzero-length-bounds <1>:               Warning Options.    (line 1827)
64450* x:                                     Overall Options.    (line  138)
64451* Xassembler:                            Assembler Options.  (line   13)
64452* Xbind-lazy:                            VxWorks Options.    (line   26)
64453* Xbind-now:                             VxWorks Options.    (line   30)
64454* Xlinker:                               Link Options.       (line  317)
64455* Xpreprocessor:                         Preprocessor Options.
64456                                                             (line  471)
64457* Ym:                                    System V Options.   (line   26)
64458* YP:                                    System V Options.   (line   22)
64459* z:                                     Link Options.       (line  348)
64460
64461
64462File: gcc.info,  Node: Keyword Index,  Prev: Option Index,  Up: Top
64463
64464Keyword Index
64465*************
64466
64467�[index�]
64468* Menu:
64469
64470* #pragma:                               Pragmas.            (line    6)
64471* #pragma implementation:                C++ Interface.      (line   36)
64472* #pragma implementation, implied:       C++ Interface.      (line   43)
64473* #pragma interface:                     C++ Interface.      (line   17)
64474* $:                                     Dollar Signs.       (line    6)
64475* % in constraint:                       Modifiers.          (line   52)
64476* %include:                              Spec Files.         (line   26)
64477* %include_noerr:                        Spec Files.         (line   30)
64478* %rename:                               Spec Files.         (line   34)
64479* & in constraint:                       Modifiers.          (line   25)
64480* ':                                     Incompatibilities.  (line  116)
64481* *__builtin_alloca:                     Other Builtins.     (line  129)
64482* *__builtin_alloca_with_align:          Other Builtins.     (line  166)
64483* *__builtin_alloca_with_align_and_max:  Other Builtins.     (line  211)
64484* + in constraint:                       Modifiers.          (line   12)
64485* -lgcc, use with -nodefaultlibs:        Link Options.       (line  154)
64486* -lgcc, use with -nostdlib:             Link Options.       (line  154)
64487* -march feature modifiers:              AArch64 Options.    (line  310)
64488* -mcpu feature modifiers:               AArch64 Options.    (line  310)
64489* -nodefaultlibs and unresolved references: Link Options.    (line  154)
64490* -nostdlib and unresolved references:   Link Options.       (line  154)
64491* .sdata/.sdata2 references (PowerPC):   RS/6000 and PowerPC Options.
64492                                                             (line  713)
64493* //:                                    C++ Comments.       (line    6)
64494* 0 in constraint:                       Simple Constraints. (line  125)
64495* < in constraint:                       Simple Constraints. (line   47)
64496* = in constraint:                       Modifiers.          (line    8)
64497* > in constraint:                       Simple Constraints. (line   59)
64498* ?: extensions:                         Conditionals.       (line    6)
64499* ?: side effect:                        Conditionals.       (line   20)
64500* _ in variables in macros:              Typeof.             (line   46)
64501* _Accum data type:                      Fixed-Point.        (line    6)
64502* _Complex keyword:                      Complex.            (line    6)
64503* _Decimal128 data type:                 Decimal Float.      (line    6)
64504* _Decimal32 data type:                  Decimal Float.      (line    6)
64505* _Decimal64 data type:                  Decimal Float.      (line    6)
64506* _Exit:                                 Other Builtins.     (line    6)
64507* _exit:                                 Other Builtins.     (line    6)
64508* _FloatN data types:                    Floating Types.     (line    6)
64509* _FloatNx data types:                   Floating Types.     (line    6)
64510* _Fract data type:                      Fixed-Point.        (line    6)
64511* _get_ssp:                              x86 control-flow protection intrinsics.
64512                                                             (line    6)
64513* _HTM_FIRST_USER_ABORT_CODE:            S/390 System z Built-in Functions.
64514                                                             (line   44)
64515* _inc_ssp:                              x86 control-flow protection intrinsics.
64516                                                             (line   12)
64517* _Sat data type:                        Fixed-Point.        (line    6)
64518* _xabort:                               x86 transactional memory intrinsics.
64519                                                             (line   57)
64520* _xbegin:                               x86 transactional memory intrinsics.
64521                                                             (line   19)
64522* _xend:                                 x86 transactional memory intrinsics.
64523                                                             (line   48)
64524* _xtest:                                x86 transactional memory intrinsics.
64525                                                             (line   53)
64526* __atomic_add_fetch:                    __atomic Builtins.  (line  179)
64527* __atomic_always_lock_free:             __atomic Builtins.  (line  267)
64528* __atomic_and_fetch:                    __atomic Builtins.  (line  183)
64529* __atomic_clear:                        __atomic Builtins.  (line  241)
64530* __atomic_compare_exchange:             __atomic Builtins.  (line  171)
64531* __atomic_compare_exchange_n:           __atomic Builtins.  (line  147)
64532* __atomic_exchange:                     __atomic Builtins.  (line  141)
64533* __atomic_exchange_n:                   __atomic Builtins.  (line  131)
64534* __atomic_fetch_add:                    __atomic Builtins.  (line  204)
64535* __atomic_fetch_and:                    __atomic Builtins.  (line  208)
64536* __atomic_fetch_nand:                   __atomic Builtins.  (line  214)
64537* __atomic_fetch_or:                     __atomic Builtins.  (line  212)
64538* __atomic_fetch_sub:                    __atomic Builtins.  (line  206)
64539* __atomic_fetch_xor:                    __atomic Builtins.  (line  210)
64540* __atomic_is_lock_free:                 __atomic Builtins.  (line  281)
64541* __atomic_load:                         __atomic Builtins.  (line  113)
64542* __atomic_load_n:                       __atomic Builtins.  (line  106)
64543* __atomic_nand_fetch:                   __atomic Builtins.  (line  189)
64544* __atomic_or_fetch:                     __atomic Builtins.  (line  187)
64545* __atomic_signal_fence:                 __atomic Builtins.  (line  260)
64546* __atomic_store:                        __atomic Builtins.  (line  126)
64547* __atomic_store_n:                      __atomic Builtins.  (line  118)
64548* __atomic_sub_fetch:                    __atomic Builtins.  (line  181)
64549* __atomic_test_and_set:                 __atomic Builtins.  (line  229)
64550* __atomic_thread_fence:                 __atomic Builtins.  (line  253)
64551* __atomic_xor_fetch:                    __atomic Builtins.  (line  185)
64552* __builtin_addf128_round_to_odd:        Basic PowerPC Built-in Functions Available on ISA 3.0.
64553                                                             (line   17)
64554* __builtin_add_overflow:                Integer Overflow Builtins.
64555                                                             (line    9)
64556* __builtin_add_overflow_p:              Integer Overflow Builtins.
64557                                                             (line   86)
64558* __builtin_alloca:                      Other Builtins.     (line    6)
64559* __builtin_alloca_with_align:           Other Builtins.     (line    6)
64560* __builtin_alloca_with_align_and_max:   Other Builtins.     (line    6)
64561* __builtin_apply:                       Constructing Calls. (line   29)
64562* __builtin_apply_args:                  Constructing Calls. (line   19)
64563* __builtin_arc_aligned:                 ARC Built-in Functions.
64564                                                             (line   18)
64565* __builtin_arc_brk:                     ARC Built-in Functions.
64566                                                             (line   28)
64567* __builtin_arc_core_read:               ARC Built-in Functions.
64568                                                             (line   32)
64569* __builtin_arc_core_write:              ARC Built-in Functions.
64570                                                             (line   39)
64571* __builtin_arc_divaw:                   ARC Built-in Functions.
64572                                                             (line   46)
64573* __builtin_arc_flag:                    ARC Built-in Functions.
64574                                                             (line   53)
64575* __builtin_arc_lr:                      ARC Built-in Functions.
64576                                                             (line   57)
64577* __builtin_arc_mul64:                   ARC Built-in Functions.
64578                                                             (line   64)
64579* __builtin_arc_mulu64:                  ARC Built-in Functions.
64580                                                             (line   68)
64581* __builtin_arc_nop:                     ARC Built-in Functions.
64582                                                             (line   73)
64583* __builtin_arc_norm:                    ARC Built-in Functions.
64584                                                             (line   77)
64585* __builtin_arc_normw:                   ARC Built-in Functions.
64586                                                             (line   84)
64587* __builtin_arc_rtie:                    ARC Built-in Functions.
64588                                                             (line   91)
64589* __builtin_arc_sleep:                   ARC Built-in Functions.
64590                                                             (line   95)
64591* __builtin_arc_sr:                      ARC Built-in Functions.
64592                                                             (line   99)
64593* __builtin_arc_swap:                    ARC Built-in Functions.
64594                                                             (line  106)
64595* __builtin_arc_swi:                     ARC Built-in Functions.
64596                                                             (line  112)
64597* __builtin_arc_sync:                    ARC Built-in Functions.
64598                                                             (line  116)
64599* __builtin_arc_trap_s:                  ARC Built-in Functions.
64600                                                             (line  120)
64601* __builtin_arc_unimp_s:                 ARC Built-in Functions.
64602                                                             (line  124)
64603* __builtin_assume_aligned:              Other Builtins.     (line  662)
64604* __builtin_bswap16:                     Other Builtins.     (line  983)
64605* __builtin_bswap32:                     Other Builtins.     (line  987)
64606* __builtin_bswap64:                     Other Builtins.     (line  991)
64607* __builtin_call_with_static_chain:      Other Builtins.     (line    6)
64608* __builtin_call_with_static_chain <1>:  Other Builtins.     (line  385)
64609* __builtin_choose_expr:                 Other Builtins.     (line  396)
64610* __builtin_clrsb:                       Other Builtins.     (line  913)
64611* __builtin_clrsbl:                      Other Builtins.     (line  935)
64612* __builtin_clrsbll:                     Other Builtins.     (line  958)
64613* __builtin_clz:                         Other Builtins.     (line  905)
64614* __builtin_clzl:                        Other Builtins.     (line  927)
64615* __builtin_clzll:                       Other Builtins.     (line  950)
64616* __builtin_complex:                     Other Builtins.     (line  490)
64617* __builtin_constant_p:                  Other Builtins.     (line  499)
64618* __builtin_convertvector:               Vector Extensions.  (line  165)
64619* __builtin_cpu_init:                    Basic PowerPC Built-in Functions Available on all Configurations.
64620                                                             (line    6)
64621* __builtin_cpu_init <1>:                x86 Built-in Functions.
64622                                                             (line   68)
64623* __builtin_cpu_is:                      Basic PowerPC Built-in Functions Available on all Configurations.
64624                                                             (line   10)
64625* __builtin_cpu_is <1>:                  x86 Built-in Functions.
64626                                                             (line   96)
64627* __builtin_cpu_supports:                Basic PowerPC Built-in Functions Available on all Configurations.
64628                                                             (line   70)
64629* __builtin_cpu_supports <1>:            x86 Built-in Functions.
64630                                                             (line  234)
64631* __builtin_ctz:                         Other Builtins.     (line  909)
64632* __builtin_ctzl:                        Other Builtins.     (line  931)
64633* __builtin_ctzll:                       Other Builtins.     (line  954)
64634* __builtin_divf128_round_to_odd:        Basic PowerPC Built-in Functions Available on ISA 3.0.
64635                                                             (line   29)
64636* __builtin_expect:                      Other Builtins.     (line  562)
64637* __builtin_expect_with_probability:     Other Builtins.     (line  597)
64638* __builtin_extend_pointer:              Other Builtins.     (line    6)
64639* __builtin_extend_pointer <1>:          Other Builtins.     (line  995)
64640* __builtin_extract_return_addr:         Return Address.     (line   50)
64641* __builtin_ffs:                         Other Builtins.     (line  901)
64642* __builtin_ffsl:                        Other Builtins.     (line  924)
64643* __builtin_ffsll:                       Other Builtins.     (line  946)
64644* __builtin_FILE:                        Other Builtins.     (line  695)
64645* __builtin_fmaf128_round_to_odd:        Basic PowerPC Built-in Functions Available on ISA 3.0.
64646                                                             (line   37)
64647* __builtin_fpclassify:                  Other Builtins.     (line    6)
64648* __builtin_fpclassify <1>:              Other Builtins.     (line  797)
64649* __builtin_frame_address:               Return Address.     (line   62)
64650* __builtin_frob_return_addr:            Return Address.     (line   59)
64651* __builtin_FUNCTION:                    Other Builtins.     (line  687)
64652* __builtin_goacc_parlevel_id:           Other Builtins.     (line 1002)
64653* __builtin_goacc_parlevel_size:         Other Builtins.     (line 1006)
64654* __builtin_has_attribute:               Other Builtins.     (line    6)
64655* __builtin_has_attribute <1>:           Other Builtins.     (line  220)
64656* __builtin_huge_val:                    Other Builtins.     (line  777)
64657* __builtin_huge_valf:                   Other Builtins.     (line  782)
64658* __builtin_huge_valfN:                  Other Builtins.     (line  789)
64659* __builtin_huge_valfNx:                 Other Builtins.     (line  793)
64660* __builtin_huge_vall:                   Other Builtins.     (line  785)
64661* __builtin_huge_valq:                   x86 Built-in Functions.
64662                                                             (line   50)
64663* __builtin_inf:                         Other Builtins.     (line  808)
64664* __builtin_infd128:                     Other Builtins.     (line  818)
64665* __builtin_infd32:                      Other Builtins.     (line  812)
64666* __builtin_infd64:                      Other Builtins.     (line  815)
64667* __builtin_inff:                        Other Builtins.     (line  822)
64668* __builtin_inffN:                       Other Builtins.     (line  831)
64669* __builtin_inffNx:                      Other Builtins.     (line  834)
64670* __builtin_infl:                        Other Builtins.     (line  827)
64671* __builtin_infq:                        x86 Built-in Functions.
64672                                                             (line   47)
64673* __builtin_isfinite:                    Other Builtins.     (line    6)
64674* __builtin_isgreater:                   Other Builtins.     (line    6)
64675* __builtin_isgreaterequal:              Other Builtins.     (line    6)
64676* __builtin_isinf_sign:                  Other Builtins.     (line    6)
64677* __builtin_isinf_sign <1>:              Other Builtins.     (line  837)
64678* __builtin_isless:                      Other Builtins.     (line    6)
64679* __builtin_islessequal:                 Other Builtins.     (line    6)
64680* __builtin_islessgreater:               Other Builtins.     (line    6)
64681* __builtin_isnormal:                    Other Builtins.     (line    6)
64682* __builtin_isunordered:                 Other Builtins.     (line    6)
64683* __builtin_is_constant_evaluated:       Other Builtins.     (line  544)
64684* __builtin_LINE:                        Other Builtins.     (line  680)
64685* __builtin_longjmp:                     Nonlocal Gotos.     (line   37)
64686* __builtin_mulf128_round_to_odd:        Basic PowerPC Built-in Functions Available on ISA 3.0.
64687                                                             (line   25)
64688* __builtin_mul_overflow:                Integer Overflow Builtins.
64689                                                             (line   63)
64690* __builtin_mul_overflow_p:              Integer Overflow Builtins.
64691                                                             (line   90)
64692* __builtin_nan:                         Other Builtins.     (line  845)
64693* __builtin_nand128:                     Other Builtins.     (line  867)
64694* __builtin_nand32:                      Other Builtins.     (line  861)
64695* __builtin_nand64:                      Other Builtins.     (line  864)
64696* __builtin_nanf:                        Other Builtins.     (line  871)
64697* __builtin_nanfN:                       Other Builtins.     (line  878)
64698* __builtin_nanfNx:                      Other Builtins.     (line  881)
64699* __builtin_nanl:                        Other Builtins.     (line  874)
64700* __builtin_nanq:                        x86 Built-in Functions.
64701                                                             (line   54)
64702* __builtin_nans:                        Other Builtins.     (line  884)
64703* __builtin_nansf:                       Other Builtins.     (line  888)
64704* __builtin_nansfN:                      Other Builtins.     (line  895)
64705* __builtin_nansfNx:                     Other Builtins.     (line  898)
64706* __builtin_nansl:                       Other Builtins.     (line  891)
64707* __builtin_nansq:                       x86 Built-in Functions.
64708                                                             (line   57)
64709* __builtin_nds32_isb:                   NDS32 Built-in Functions.
64710                                                             (line   12)
64711* __builtin_nds32_isync:                 NDS32 Built-in Functions.
64712                                                             (line    8)
64713* __builtin_nds32_mfsr:                  NDS32 Built-in Functions.
64714                                                             (line   15)
64715* __builtin_nds32_mfusr:                 NDS32 Built-in Functions.
64716                                                             (line   18)
64717* __builtin_nds32_mtsr:                  NDS32 Built-in Functions.
64718                                                             (line   21)
64719* __builtin_nds32_mtusr:                 NDS32 Built-in Functions.
64720                                                             (line   24)
64721* __builtin_nds32_setgie_dis:            NDS32 Built-in Functions.
64722                                                             (line   30)
64723* __builtin_nds32_setgie_en:             NDS32 Built-in Functions.
64724                                                             (line   27)
64725* __builtin_non_tx_store:                S/390 System z Built-in Functions.
64726                                                             (line   98)
64727* __builtin_object_size:                 Object Size Checking.
64728                                                             (line    6)
64729* __builtin_object_size <1>:             Object Size Checking.
64730                                                             (line   16)
64731* __builtin_object_size <2>:             Other Builtins.     (line    6)
64732* __builtin_object_size <3>:             Other Builtins.     (line  772)
64733* __builtin_offsetof:                    Offsetof.           (line    6)
64734* __builtin_parity:                      Other Builtins.     (line  921)
64735* __builtin_parityl:                     Other Builtins.     (line  942)
64736* __builtin_parityll:                    Other Builtins.     (line  966)
64737* __builtin_popcount:                    Other Builtins.     (line  918)
64738* __builtin_popcountl:                   Other Builtins.     (line  938)
64739* __builtin_popcountll:                  Other Builtins.     (line  962)
64740* __builtin_powi:                        Other Builtins.     (line    6)
64741* __builtin_powi <1>:                    Other Builtins.     (line  970)
64742* __builtin_powif:                       Other Builtins.     (line    6)
64743* __builtin_powif <1>:                   Other Builtins.     (line  975)
64744* __builtin_powil:                       Other Builtins.     (line    6)
64745* __builtin_powil <1>:                   Other Builtins.     (line  979)
64746* __builtin_prefetch:                    Other Builtins.     (line  733)
64747* __builtin_return:                      Constructing Calls. (line   47)
64748* __builtin_return_address:              Return Address.     (line    9)
64749* __builtin_rx_brk:                      RX Built-in Functions.
64750                                                             (line   10)
64751* __builtin_rx_clrpsw:                   RX Built-in Functions.
64752                                                             (line   13)
64753* __builtin_rx_int:                      RX Built-in Functions.
64754                                                             (line   17)
64755* __builtin_rx_machi:                    RX Built-in Functions.
64756                                                             (line   21)
64757* __builtin_rx_maclo:                    RX Built-in Functions.
64758                                                             (line   26)
64759* __builtin_rx_mulhi:                    RX Built-in Functions.
64760                                                             (line   31)
64761* __builtin_rx_mullo:                    RX Built-in Functions.
64762                                                             (line   36)
64763* __builtin_rx_mvfachi:                  RX Built-in Functions.
64764                                                             (line   41)
64765* __builtin_rx_mvfacmi:                  RX Built-in Functions.
64766                                                             (line   45)
64767* __builtin_rx_mvfc:                     RX Built-in Functions.
64768                                                             (line   49)
64769* __builtin_rx_mvtachi:                  RX Built-in Functions.
64770                                                             (line   53)
64771* __builtin_rx_mvtaclo:                  RX Built-in Functions.
64772                                                             (line   57)
64773* __builtin_rx_mvtc:                     RX Built-in Functions.
64774                                                             (line   61)
64775* __builtin_rx_mvtipl:                   RX Built-in Functions.
64776                                                             (line   65)
64777* __builtin_rx_racw:                     RX Built-in Functions.
64778                                                             (line   69)
64779* __builtin_rx_revw:                     RX Built-in Functions.
64780                                                             (line   73)
64781* __builtin_rx_rmpa:                     RX Built-in Functions.
64782                                                             (line   78)
64783* __builtin_rx_round:                    RX Built-in Functions.
64784                                                             (line   82)
64785* __builtin_rx_sat:                      RX Built-in Functions.
64786                                                             (line   87)
64787* __builtin_rx_setpsw:                   RX Built-in Functions.
64788                                                             (line   91)
64789* __builtin_rx_wait:                     RX Built-in Functions.
64790                                                             (line   95)
64791* __builtin_saddll_overflow:             Integer Overflow Builtins.
64792                                                             (line   15)
64793* __builtin_saddl_overflow:              Integer Overflow Builtins.
64794                                                             (line   13)
64795* __builtin_sadd_overflow:               Integer Overflow Builtins.
64796                                                             (line   11)
64797* __builtin_setjmp:                      Nonlocal Gotos.     (line   32)
64798* __builtin_set_thread_pointer:          SH Built-in Functions.
64799                                                             (line    9)
64800* __builtin_shuffle:                     Vector Extensions.  (line  127)
64801* __builtin_sh_get_fpscr:                SH Built-in Functions.
64802                                                             (line   35)
64803* __builtin_sh_set_fpscr:                SH Built-in Functions.
64804                                                             (line   38)
64805* __builtin_smulll_overflow:             Integer Overflow Builtins.
64806                                                             (line   69)
64807* __builtin_smull_overflow:              Integer Overflow Builtins.
64808                                                             (line   67)
64809* __builtin_smul_overflow:               Integer Overflow Builtins.
64810                                                             (line   65)
64811* __builtin_speculation_safe_value:      Other Builtins.     (line    6)
64812* __builtin_speculation_safe_value <1>:  Other Builtins.     (line  261)
64813* __builtin_sqrtf128_round_to_odd:       Basic PowerPC Built-in Functions Available on ISA 3.0.
64814                                                             (line   33)
64815* __builtin_ssubll_overflow:             Integer Overflow Builtins.
64816                                                             (line   49)
64817* __builtin_ssubl_overflow:              Integer Overflow Builtins.
64818                                                             (line   47)
64819* __builtin_ssub_overflow:               Integer Overflow Builtins.
64820                                                             (line   45)
64821* __builtin_subf128_round_to_odd:        Basic PowerPC Built-in Functions Available on ISA 3.0.
64822                                                             (line   21)
64823* __builtin_sub_overflow:                Integer Overflow Builtins.
64824                                                             (line   43)
64825* __builtin_sub_overflow_p:              Integer Overflow Builtins.
64826                                                             (line   88)
64827* __builtin_tabort:                      S/390 System z Built-in Functions.
64828                                                             (line   82)
64829* __builtin_tbegin:                      S/390 System z Built-in Functions.
64830                                                             (line    6)
64831* __builtin_tbeginc:                     S/390 System z Built-in Functions.
64832                                                             (line   73)
64833* __builtin_tbegin_nofloat:              S/390 System z Built-in Functions.
64834                                                             (line   54)
64835* __builtin_tbegin_retry:                S/390 System z Built-in Functions.
64836                                                             (line   60)
64837* __builtin_tbegin_retry_nofloat:        S/390 System z Built-in Functions.
64838                                                             (line   67)
64839* __builtin_tend:                        S/390 System z Built-in Functions.
64840                                                             (line   77)
64841* __builtin_tgmath:                      Other Builtins.     (line  436)
64842* __builtin_thread_pointer:              SH Built-in Functions.
64843                                                             (line   18)
64844* __builtin_trap:                        Other Builtins.     (line  606)
64845* __builtin_truncf128_round_to_odd:      Basic PowerPC Built-in Functions Available on ISA 3.0.
64846                                                             (line   41)
64847* __builtin_tx_assist:                   S/390 System z Built-in Functions.
64848                                                             (line   87)
64849* __builtin_tx_nesting_depth:            S/390 System z Built-in Functions.
64850                                                             (line   93)
64851* __builtin_types_compatible_p:          Other Builtins.     (line  340)
64852* __builtin_uaddll_overflow:             Integer Overflow Builtins.
64853                                                             (line   21)
64854* __builtin_uaddl_overflow:              Integer Overflow Builtins.
64855                                                             (line   19)
64856* __builtin_uadd_overflow:               Integer Overflow Builtins.
64857                                                             (line   17)
64858* __builtin_umulll_overflow:             Integer Overflow Builtins.
64859                                                             (line   75)
64860* __builtin_umull_overflow:              Integer Overflow Builtins.
64861                                                             (line   73)
64862* __builtin_umul_overflow:               Integer Overflow Builtins.
64863                                                             (line   71)
64864* __builtin_unreachable:                 Other Builtins.     (line  613)
64865* __builtin_usubll_overflow:             Integer Overflow Builtins.
64866                                                             (line   55)
64867* __builtin_usubl_overflow:              Integer Overflow Builtins.
64868                                                             (line   53)
64869* __builtin_usub_overflow:               Integer Overflow Builtins.
64870                                                             (line   51)
64871* __builtin_va_arg_pack:                 Constructing Calls. (line   52)
64872* __builtin_va_arg_pack_len:             Constructing Calls. (line   75)
64873* __builtin___clear_cache:               Other Builtins.     (line  720)
64874* __builtin___fprintf_chk:               Object Size Checking.
64875                                                             (line    6)
64876* __builtin___memcpy_chk:                Object Size Checking.
64877                                                             (line    6)
64878* __builtin___memmove_chk:               Object Size Checking.
64879                                                             (line    6)
64880* __builtin___mempcpy_chk:               Object Size Checking.
64881                                                             (line    6)
64882* __builtin___memset_chk:                Object Size Checking.
64883                                                             (line    6)
64884* __builtin___printf_chk:                Object Size Checking.
64885                                                             (line    6)
64886* __builtin___snprintf_chk:              Object Size Checking.
64887                                                             (line    6)
64888* __builtin___sprintf_chk:               Object Size Checking.
64889                                                             (line    6)
64890* __builtin___stpcpy_chk:                Object Size Checking.
64891                                                             (line    6)
64892* __builtin___strcat_chk:                Object Size Checking.
64893                                                             (line    6)
64894* __builtin___strcpy_chk:                Object Size Checking.
64895                                                             (line    6)
64896* __builtin___strncat_chk:               Object Size Checking.
64897                                                             (line    6)
64898* __builtin___strncpy_chk:               Object Size Checking.
64899                                                             (line    6)
64900* __builtin___vfprintf_chk:              Object Size Checking.
64901                                                             (line    6)
64902* __builtin___vprintf_chk:               Object Size Checking.
64903                                                             (line    6)
64904* __builtin___vsnprintf_chk:             Object Size Checking.
64905                                                             (line    6)
64906* __builtin___vsprintf_chk:              Object Size Checking.
64907                                                             (line    6)
64908* __complex__ keyword:                   Complex.            (line    6)
64909* __declspec(dllexport):                 Microsoft Windows Function Attributes.
64910                                                             (line   10)
64911* __declspec(dllimport):                 Microsoft Windows Function Attributes.
64912                                                             (line   42)
64913* __extension__:                         Alternate Keywords. (line   30)
64914* __far M32C Named Address Spaces:       Named Address Spaces.
64915                                                             (line  153)
64916* __far RL78 Named Address Spaces:       Named Address Spaces.
64917                                                             (line  162)
64918* __flash AVR Named Address Spaces:      Named Address Spaces.
64919                                                             (line   44)
64920* __flash1 AVR Named Address Spaces:     Named Address Spaces.
64921                                                             (line   53)
64922* __flash2 AVR Named Address Spaces:     Named Address Spaces.
64923                                                             (line   53)
64924* __flash3 AVR Named Address Spaces:     Named Address Spaces.
64925                                                             (line   53)
64926* __flash4 AVR Named Address Spaces:     Named Address Spaces.
64927                                                             (line   53)
64928* __flash5 AVR Named Address Spaces:     Named Address Spaces.
64929                                                             (line   53)
64930* __float128 data type:                  Floating Types.     (line    6)
64931* __float80 data type:                   Floating Types.     (line    6)
64932* __fp16 data type:                      Half-Precision.     (line    6)
64933* __FUNCTION__ identifier:               Function Names.     (line    6)
64934* __func__ identifier:                   Function Names.     (line    6)
64935* __ibm128 data type:                    Floating Types.     (line    6)
64936* __imag__ keyword:                      Complex.            (line   31)
64937* __int128 data types:                   __int128.           (line    6)
64938* __memx AVR Named Address Spaces:       Named Address Spaces.
64939                                                             (line   59)
64940* __PRETTY_FUNCTION__ identifier:        Function Names.     (line    6)
64941* __real__ keyword:                      Complex.            (line   31)
64942* __seg_fs x86 named address space:      Named Address Spaces.
64943                                                             (line  175)
64944* __seg_gs x86 named address space:      Named Address Spaces.
64945                                                             (line  175)
64946* __STDC_HOSTED__:                       Standards.          (line   13)
64947* __sync_add_and_fetch:                  __sync Builtins.    (line   72)
64948* __sync_and_and_fetch:                  __sync Builtins.    (line   72)
64949* __sync_bool_compare_and_swap:          __sync Builtins.    (line   88)
64950* __sync_fetch_and_add:                  __sync Builtins.    (line   50)
64951* __sync_fetch_and_and:                  __sync Builtins.    (line   50)
64952* __sync_fetch_and_nand:                 __sync Builtins.    (line   50)
64953* __sync_fetch_and_or:                   __sync Builtins.    (line   50)
64954* __sync_fetch_and_sub:                  __sync Builtins.    (line   50)
64955* __sync_fetch_and_xor:                  __sync Builtins.    (line   50)
64956* __sync_lock_release:                   __sync Builtins.    (line  118)
64957* __sync_lock_test_and_set:              __sync Builtins.    (line  100)
64958* __sync_nand_and_fetch:                 __sync Builtins.    (line   72)
64959* __sync_or_and_fetch:                   __sync Builtins.    (line   72)
64960* __sync_sub_and_fetch:                  __sync Builtins.    (line   72)
64961* __sync_synchronize:                    __sync Builtins.    (line   97)
64962* __sync_val_compare_and_swap:           __sync Builtins.    (line   88)
64963* __sync_xor_and_fetch:                  __sync Builtins.    (line   72)
64964* __thread:                              Thread-Local.       (line    6)
64965* AArch64 Options:                       AArch64 Options.    (line    6)
64966* ABI:                                   Compatibility.      (line    6)
64967* abi_tag function attribute:            C++ Attributes.     (line    9)
64968* abi_tag type attribute:                C++ Attributes.     (line    9)
64969* abi_tag variable attribute:            C++ Attributes.     (line    9)
64970* abort:                                 Other Builtins.     (line    6)
64971* abs:                                   Other Builtins.     (line    6)
64972* absdata variable attribute, AVR:       AVR Variable Attributes.
64973                                                             (line  104)
64974* accessing volatiles:                   Volatiles.          (line    6)
64975* accessing volatiles <1>:               C++ Volatiles.      (line    6)
64976* acos:                                  Other Builtins.     (line    6)
64977* acosf:                                 Other Builtins.     (line    6)
64978* acosh:                                 Other Builtins.     (line    6)
64979* acoshf:                                Other Builtins.     (line    6)
64980* acoshl:                                Other Builtins.     (line    6)
64981* acosl:                                 Other Builtins.     (line    6)
64982* Ada:                                   G++ and GCC.        (line    6)
64983* Ada <1>:                               G++ and GCC.        (line   29)
64984* additional floating types:             Floating Types.     (line    6)
64985* address constraints:                   Simple Constraints. (line  152)
64986* address of a label:                    Labels as Values.   (line    6)
64987* address variable attribute, AVR:       AVR Variable Attributes.
64988                                                             (line   97)
64989* address_operand:                       Simple Constraints. (line  156)
64990* alias function attribute:              Common Function Attributes.
64991                                                             (line   75)
64992* alias variable attribute:              Common Variable Attributes.
64993                                                             (line    9)
64994* aligned function attribute:            Common Function Attributes.
64995                                                             (line   94)
64996* aligned type attribute:                Common Type Attributes.
64997                                                             (line    8)
64998* aligned variable attribute:            Common Variable Attributes.
64999                                                             (line   31)
65000* alignment:                             Alignment.          (line    6)
65001* alloca:                                Other Builtins.     (line    6)
65002* alloca vs variable-length arrays:      Variable Length.    (line   35)
65003* alloc_align function attribute:        Common Function Attributes.
65004                                                             (line  122)
65005* alloc_size function attribute:         Common Function Attributes.
65006                                                             (line  142)
65007* alloc_size type attribute:             Common Type Attributes.
65008                                                             (line  136)
65009* alloc_size variable attribute:         Common Variable Attributes.
65010                                                             (line  137)
65011* Allow nesting in an interrupt handler on the Blackfin processor: Blackfin Function Attributes.
65012                                                             (line   45)
65013* Altera Nios II options:                Nios II Options.    (line    6)
65014* alternate keywords:                    Alternate Keywords. (line    6)
65015* altivec type attribute, PowerPC:       PowerPC Type Attributes.
65016                                                             (line   12)
65017* altivec variable attribute, PowerPC:   PowerPC Variable Attributes.
65018                                                             (line   12)
65019* always_inline function attribute:      Common Function Attributes.
65020                                                             (line  168)
65021* AMD GCN Options:                       AMD GCN Options.    (line    6)
65022* AMD1:                                  Standards.          (line   13)
65023* amdgpu_hsa_kernel function attribute, AMD GCN: AMD GCN Function Attributes.
65024                                                             (line    9)
65025* ANSI C:                                Standards.          (line   13)
65026* ANSI C standard:                       Standards.          (line   13)
65027* ANSI C89:                              Standards.          (line   13)
65028* ANSI support:                          C Dialect Options.  (line   10)
65029* ANSI X3.159-1989:                      Standards.          (line   13)
65030* apostrophes:                           Incompatibilities.  (line  116)
65031* application binary interface:          Compatibility.      (line    6)
65032* ARC options:                           ARC Options.        (line    6)
65033* arch= function attribute, AArch64:     AArch64 Function Attributes.
65034                                                             (line   53)
65035* arch= function attribute, ARM:         ARM Function Attributes.
65036                                                             (line   98)
65037* ARM options:                           ARM Options.        (line    6)
65038* ARM [Annotated C++ Reference Manual]:  Backwards Compatibility.
65039                                                             (line    6)
65040* arrays of length zero:                 Zero Length.        (line    6)
65041* arrays of variable length:             Variable Length.    (line    6)
65042* arrays, non-lvalue:                    Subscripting.       (line    6)
65043* artificial function attribute:         Common Function Attributes.
65044                                                             (line  178)
65045* asin:                                  Other Builtins.     (line    6)
65046* asinf:                                 Other Builtins.     (line    6)
65047* asinh:                                 Other Builtins.     (line    6)
65048* asinhf:                                Other Builtins.     (line    6)
65049* asinhl:                                Other Builtins.     (line    6)
65050* asinl:                                 Other Builtins.     (line    6)
65051* asm assembler template:                Extended Asm.       (line  226)
65052* asm clobbers:                          Extended Asm.       (line  693)
65053* asm constraints:                       Constraints.        (line    6)
65054* asm expressions:                       Extended Asm.       (line  598)
65055* asm flag output operands:              Extended Asm.       (line  488)
65056* asm goto labels:                       Extended Asm.       (line  880)
65057* asm inline:                            Size of an asm.     (line   25)
65058* asm input operands:                    Extended Asm.       (line  598)
65059* asm keyword:                           Using Assembly Language with C.
65060                                                             (line    6)
65061* asm output operands:                   Extended Asm.       (line  329)
65062* asm scratch registers:                 Extended Asm.       (line  693)
65063* asm volatile:                          Extended Asm.       (line  116)
65064* assembler names for identifiers:       Asm Labels.         (line    6)
65065* assembly code, invalid:                Bug Criteria.       (line   12)
65066* assembly language in C:                Using Assembly Language with C.
65067                                                             (line    6)
65068* assembly language in C, basic:         Basic Asm.          (line    6)
65069* assembly language in C, extended:      Extended Asm.       (line    6)
65070* assume_aligned function attribute:     Common Function Attributes.
65071                                                             (line  186)
65072* atan:                                  Other Builtins.     (line    6)
65073* atan2:                                 Other Builtins.     (line    6)
65074* atan2f:                                Other Builtins.     (line    6)
65075* atan2l:                                Other Builtins.     (line    6)
65076* atanf:                                 Other Builtins.     (line    6)
65077* atanh:                                 Other Builtins.     (line    6)
65078* atanhf:                                Other Builtins.     (line    6)
65079* atanhl:                                Other Builtins.     (line    6)
65080* atanl:                                 Other Builtins.     (line    6)
65081* attribute of types:                    Type Attributes.    (line    6)
65082* attribute of variables:                Variable Attributes.
65083                                                             (line    6)
65084* attribute syntax:                      Attribute Syntax.   (line    6)
65085* autoincrement/decrement addressing:    Simple Constraints. (line   30)
65086* automatic inline for C++ member fns:   Inline.             (line   68)
65087* aux variable attribute, ARC:           ARC Variable Attributes.
65088                                                             (line    7)
65089* AVR Options:                           AVR Options.        (line    6)
65090* Backwards Compatibility:               Backwards Compatibility.
65091                                                             (line    6)
65092* bank_switch function attribute, M32C:  M32C Function Attributes.
65093                                                             (line    9)
65094* base class members:                    Name lookup.        (line    6)
65095* based type attribute, MeP:             MeP Type Attributes.
65096                                                             (line    6)
65097* based variable attribute, MeP:         MeP Variable Attributes.
65098                                                             (line   16)
65099* basic asm:                             Basic Asm.          (line    6)
65100* bcmp:                                  Other Builtins.     (line    6)
65101* below100 variable attribute, Xstormy16: Xstormy16 Variable Attributes.
65102                                                             (line   10)
65103* binary compatibility:                  Compatibility.      (line    6)
65104* Binary constants using the 0b prefix:  Binary constants.   (line    6)
65105* Blackfin Options:                      Blackfin Options.   (line    6)
65106* bound pointer to member function:      Bound member functions.
65107                                                             (line    6)
65108* branch-protection function attribute, AArch64: AArch64 Function Attributes.
65109                                                             (line   76)
65110* break handler functions:               MicroBlaze Function Attributes.
65111                                                             (line   17)
65112* break_handler function attribute, MicroBlaze: MicroBlaze Function Attributes.
65113                                                             (line   17)
65114* brk_interrupt function attribute, RL78: RL78 Function Attributes.
65115                                                             (line   10)
65116* bug criteria:                          Bug Criteria.       (line    6)
65117* bugs:                                  Bugs.               (line    6)
65118* bugs, known:                           Trouble.            (line    6)
65119* built-in functions:                    C Dialect Options.  (line  266)
65120* built-in functions <1>:                Other Builtins.     (line    6)
65121* bzero:                                 Other Builtins.     (line    6)
65122* C compilation options:                 Invoking GCC.       (line   18)
65123* C intermediate output, nonexistent:    G++ and GCC.        (line   34)
65124* C language extensions:                 C Extensions.       (line    6)
65125* C language, traditional:               Preprocessor Options.
65126                                                             (line  370)
65127* C standard:                            Standards.          (line   13)
65128* C standards:                           Standards.          (line   13)
65129* c++:                                   Invoking G++.       (line   14)
65130* C++:                                   G++ and GCC.        (line   29)
65131* C++ comments:                          C++ Comments.       (line    6)
65132* C++ interface and implementation headers: C++ Interface.   (line    6)
65133* C++ language extensions:               C++ Extensions.     (line    6)
65134* C++ member fns, automatically inline:  Inline.             (line   68)
65135* C++ misunderstandings:                 C++ Misunderstandings.
65136                                                             (line    6)
65137* C++ options, command-line:             C++ Dialect Options.
65138                                                             (line    6)
65139* C++ pragmas, effect on inlining:       C++ Interface.      (line   57)
65140* C++ source file suffixes:              Invoking G++.       (line    6)
65141* C++ static data, declaring and defining: Static Definitions.
65142                                                             (line    6)
65143* C-SKY Options:                         C-SKY Options.      (line    6)
65144* C11:                                   Standards.          (line   13)
65145* C17:                                   Standards.          (line   13)
65146* C1X:                                   Standards.          (line   13)
65147* C2X:                                   Standards.          (line   13)
65148* C6X Options:                           C6X Options.        (line    6)
65149* C89:                                   Standards.          (line   13)
65150* C90:                                   Standards.          (line   13)
65151* C94:                                   Standards.          (line   13)
65152* C95:                                   Standards.          (line   13)
65153* C99:                                   Standards.          (line   13)
65154* C9X:                                   Standards.          (line   13)
65155* cabs:                                  Other Builtins.     (line    6)
65156* cabsf:                                 Other Builtins.     (line    6)
65157* cabsl:                                 Other Builtins.     (line    6)
65158* cacos:                                 Other Builtins.     (line    6)
65159* cacosf:                                Other Builtins.     (line    6)
65160* cacosh:                                Other Builtins.     (line    6)
65161* cacoshf:                               Other Builtins.     (line    6)
65162* cacoshl:                               Other Builtins.     (line    6)
65163* cacosl:                                Other Builtins.     (line    6)
65164* callee_pop_aggregate_return function attribute, x86: x86 Function Attributes.
65165                                                             (line   47)
65166* calling functions through the function vector on SH2A: SH Function Attributes.
65167                                                             (line    9)
65168* calloc:                                Other Builtins.     (line    6)
65169* carg:                                  Other Builtins.     (line    6)
65170* cargf:                                 Other Builtins.     (line    6)
65171* cargl:                                 Other Builtins.     (line    6)
65172* case labels in initializers:           Designated Inits.   (line    6)
65173* case ranges:                           Case Ranges.        (line    6)
65174* casin:                                 Other Builtins.     (line    6)
65175* casinf:                                Other Builtins.     (line    6)
65176* casinh:                                Other Builtins.     (line    6)
65177* casinhf:                               Other Builtins.     (line    6)
65178* casinhl:                               Other Builtins.     (line    6)
65179* casinl:                                Other Builtins.     (line    6)
65180* cast to a union:                       Cast to Union.      (line    6)
65181* catan:                                 Other Builtins.     (line    6)
65182* catanf:                                Other Builtins.     (line    6)
65183* catanh:                                Other Builtins.     (line    6)
65184* catanhf:                               Other Builtins.     (line    6)
65185* catanhl:                               Other Builtins.     (line    6)
65186* catanl:                                Other Builtins.     (line    6)
65187* cb variable attribute, MeP:            MeP Variable Attributes.
65188                                                             (line   46)
65189* cbrt:                                  Other Builtins.     (line    6)
65190* cbrtf:                                 Other Builtins.     (line    6)
65191* cbrtl:                                 Other Builtins.     (line    6)
65192* ccos:                                  Other Builtins.     (line    6)
65193* ccosf:                                 Other Builtins.     (line    6)
65194* ccosh:                                 Other Builtins.     (line    6)
65195* ccoshf:                                Other Builtins.     (line    6)
65196* ccoshl:                                Other Builtins.     (line    6)
65197* ccosl:                                 Other Builtins.     (line    6)
65198* cdecl function attribute, x86-32:      x86 Function Attributes.
65199                                                             (line    9)
65200* ceil:                                  Other Builtins.     (line    6)
65201* ceilf:                                 Other Builtins.     (line    6)
65202* ceill:                                 Other Builtins.     (line    6)
65203* cexp:                                  Other Builtins.     (line    6)
65204* cexpf:                                 Other Builtins.     (line    6)
65205* cexpl:                                 Other Builtins.     (line    6)
65206* cf_check function attribute, x86:      x86 Function Attributes.
65207                                                             (line  625)
65208* character set, execution:              Preprocessor Options.
65209                                                             (line  270)
65210* character set, input:                  Preprocessor Options.
65211                                                             (line  283)
65212* character set, input normalization:    Warning Options.    (line 2654)
65213* character set, wide execution:         Preprocessor Options.
65214                                                             (line  275)
65215* cimag:                                 Other Builtins.     (line    6)
65216* cimagf:                                Other Builtins.     (line    6)
65217* cimagl:                                Other Builtins.     (line    6)
65218* cleanup variable attribute:            Common Variable Attributes.
65219                                                             (line  161)
65220* clog:                                  Other Builtins.     (line    6)
65221* clog10:                                Other Builtins.     (line    6)
65222* clog10f:                               Other Builtins.     (line    6)
65223* clog10l:                               Other Builtins.     (line    6)
65224* clogf:                                 Other Builtins.     (line    6)
65225* clogl:                                 Other Builtins.     (line    6)
65226* cmodel= function attribute, AArch64:   AArch64 Function Attributes.
65227                                                             (line   27)
65228* COBOL:                                 G++ and GCC.        (line   23)
65229* code generation conventions:           Code Gen Options.   (line    6)
65230* code, mixed with declarations:         Mixed Declarations. (line    6)
65231* cold function attribute:               Common Function Attributes.
65232                                                             (line  202)
65233* cold label attribute:                  Label Attributes.   (line   45)
65234* command options:                       Invoking GCC.       (line    6)
65235* comments, C++ style:                   C++ Comments.       (line    6)
65236* common variable attribute:             Common Variable Attributes.
65237                                                             (line  176)
65238* comparison of signed and unsigned values, warning: Warning Options.
65239                                                             (line 2412)
65240* compilation statistics:                Developer Options.  (line    6)
65241* compiler bugs, reporting:              Bug Reporting.      (line    6)
65242* compiler compared to C++ preprocessor: G++ and GCC.        (line   34)
65243* compiler options, C++:                 C++ Dialect Options.
65244                                                             (line    6)
65245* compiler options, Objective-C and Objective-C++: Objective-C and Objective-C++ Dialect Options.
65246                                                             (line    6)
65247* compiler version, specifying:          Invoking GCC.       (line   24)
65248* COMPILER_PATH:                         Environment Variables.
65249                                                             (line   91)
65250* complex conjugation:                   Complex.            (line   38)
65251* complex numbers:                       Complex.            (line    6)
65252* compound literals:                     Compound Literals.  (line    6)
65253* computed gotos:                        Labels as Values.   (line    6)
65254* conditional expressions, extensions:   Conditionals.       (line    6)
65255* conflicting types:                     Disappointments.    (line   21)
65256* conj:                                  Other Builtins.     (line    6)
65257* conjf:                                 Other Builtins.     (line    6)
65258* conjl:                                 Other Builtins.     (line    6)
65259* const applied to function:             Function Attributes.
65260                                                             (line    6)
65261* const function attribute:              Common Function Attributes.
65262                                                             (line  218)
65263* const qualifier:                       Pointers to Arrays. (line    6)
65264* constants in constraints:              Simple Constraints. (line   68)
65265* constraint modifier characters:        Modifiers.          (line    6)
65266* constraint, matching:                  Simple Constraints. (line  137)
65267* constraints, asm:                      Constraints.        (line    6)
65268* constraints, machine specific:         Machine Constraints.
65269                                                             (line    6)
65270* constructing calls:                    Constructing Calls. (line    6)
65271* constructor expressions:               Compound Literals.  (line    6)
65272* constructor function attribute:        Common Function Attributes.
65273                                                             (line  259)
65274* contributors:                          Contributors.       (line    6)
65275* copy function attribute:               Common Function Attributes.
65276                                                             (line  287)
65277* copy type attribute:                   Common Type Attributes.
65278                                                             (line  161)
65279* copy variable attribute:               Common Variable Attributes.
65280                                                             (line  185)
65281* copysign:                              Other Builtins.     (line    6)
65282* copysignf:                             Other Builtins.     (line    6)
65283* copysignl:                             Other Builtins.     (line    6)
65284* core dump:                             Bug Criteria.       (line    9)
65285* cos:                                   Other Builtins.     (line    6)
65286* cosf:                                  Other Builtins.     (line    6)
65287* cosh:                                  Other Builtins.     (line    6)
65288* coshf:                                 Other Builtins.     (line    6)
65289* coshl:                                 Other Builtins.     (line    6)
65290* cosl:                                  Other Builtins.     (line    6)
65291* CPATH:                                 Environment Variables.
65292                                                             (line  127)
65293* CPLUS_INCLUDE_PATH:                    Environment Variables.
65294                                                             (line  129)
65295* cpow:                                  Other Builtins.     (line    6)
65296* cpowf:                                 Other Builtins.     (line    6)
65297* cpowl:                                 Other Builtins.     (line    6)
65298* cproj:                                 Other Builtins.     (line    6)
65299* cprojf:                                Other Builtins.     (line    6)
65300* cprojl:                                Other Builtins.     (line    6)
65301* cpu= function attribute, AArch64:      AArch64 Function Attributes.
65302                                                             (line   63)
65303* CR16 Options:                          CR16 Options.       (line    6)
65304* creal:                                 Other Builtins.     (line    6)
65305* crealf:                                Other Builtins.     (line    6)
65306* creall:                                Other Builtins.     (line    6)
65307* CRIS Options:                          CRIS Options.       (line    6)
65308* critical function attribute, MSP430:   MSP430 Function Attributes.
65309                                                             (line    9)
65310* cross compiling:                       Invoking GCC.       (line   24)
65311* csin:                                  Other Builtins.     (line    6)
65312* csinf:                                 Other Builtins.     (line    6)
65313* csinh:                                 Other Builtins.     (line    6)
65314* csinhf:                                Other Builtins.     (line    6)
65315* csinhl:                                Other Builtins.     (line    6)
65316* csinl:                                 Other Builtins.     (line    6)
65317* csqrt:                                 Other Builtins.     (line    6)
65318* csqrtf:                                Other Builtins.     (line    6)
65319* csqrtl:                                Other Builtins.     (line    6)
65320* ctan:                                  Other Builtins.     (line    6)
65321* ctanf:                                 Other Builtins.     (line    6)
65322* ctanh:                                 Other Builtins.     (line    6)
65323* ctanhf:                                Other Builtins.     (line    6)
65324* ctanhl:                                Other Builtins.     (line    6)
65325* ctanl:                                 Other Builtins.     (line    6)
65326* C_INCLUDE_PATH:                        Environment Variables.
65327                                                             (line  128)
65328* D:                                     G++ and GCC.        (line    6)
65329* Darwin options:                        Darwin Options.     (line    6)
65330* dcgettext:                             Other Builtins.     (line    6)
65331* dd integer suffix:                     Decimal Float.      (line    6)
65332* DD integer suffix:                     Decimal Float.      (line    6)
65333* deallocating variable length arrays:   Variable Length.    (line   22)
65334* debug dump options:                    Developer Options.  (line    6)
65335* debugging GCC:                         Developer Options.  (line    6)
65336* debugging information options:         Debugging Options.  (line    6)
65337* decimal floating types:                Decimal Float.      (line    6)
65338* declaration scope:                     Incompatibilities.  (line   80)
65339* declarations inside expressions:       Statement Exprs.    (line    6)
65340* declarations, mixed with code:         Mixed Declarations. (line    6)
65341* declaring attributes of functions:     Function Attributes.
65342                                                             (line    6)
65343* declaring static data in C++:          Static Definitions. (line    6)
65344* defining static data in C++:           Static Definitions. (line    6)
65345* dependencies for make as output:       Environment Variables.
65346                                                             (line  156)
65347* dependencies for make as output <1>:   Environment Variables.
65348                                                             (line  172)
65349* dependencies, make:                    Preprocessor Options.
65350                                                             (line   77)
65351* DEPENDENCIES_OUTPUT:                   Environment Variables.
65352                                                             (line  155)
65353* dependent name lookup:                 Name lookup.        (line    6)
65354* deprecated enumerator attribute:       Enumerator Attributes.
65355                                                             (line   28)
65356* deprecated function attribute:         Common Function Attributes.
65357                                                             (line  319)
65358* deprecated type attribute:             Common Type Attributes.
65359                                                             (line  189)
65360* deprecated variable attribute:         Common Variable Attributes.
65361                                                             (line  201)
65362* designated initializers:               Designated Inits.   (line    6)
65363* designated_init type attribute:        Common Type Attributes.
65364                                                             (line  223)
65365* designator lists:                      Designated Inits.   (line   96)
65366* designators:                           Designated Inits.   (line   64)
65367* destructor function attribute:         Common Function Attributes.
65368                                                             (line  259)
65369* developer options:                     Developer Options.  (line    6)
65370* df integer suffix:                     Decimal Float.      (line    6)
65371* DF integer suffix:                     Decimal Float.      (line    6)
65372* dgettext:                              Other Builtins.     (line    6)
65373* diagnostic messages:                   Diagnostic Message Formatting Options.
65374                                                             (line    6)
65375* dialect options:                       C Dialect Options.  (line    6)
65376* diff-delete GCC_COLORS capability:     Diagnostic Message Formatting Options.
65377                                                             (line  119)
65378* diff-filename GCC_COLORS capability:   Diagnostic Message Formatting Options.
65379                                                             (line  112)
65380* diff-hunk GCC_COLORS capability:       Diagnostic Message Formatting Options.
65381                                                             (line  115)
65382* diff-insert GCC_COLORS capability:     Diagnostic Message Formatting Options.
65383                                                             (line  122)
65384* digits in constraint:                  Simple Constraints. (line  125)
65385* directory options:                     Directory Options.  (line    6)
65386* disinterrupt function attribute, Epiphany: Epiphany Function Attributes.
65387                                                             (line    9)
65388* disinterrupt function attribute, MeP:  MeP Function Attributes.
65389                                                             (line    9)
65390* dl integer suffix:                     Decimal Float.      (line    6)
65391* DL integer suffix:                     Decimal Float.      (line    6)
65392* dllexport function attribute:          Microsoft Windows Function Attributes.
65393                                                             (line   10)
65394* dllexport variable attribute:          Microsoft Windows Variable Attributes.
65395                                                             (line   12)
65396* dllimport function attribute:          Microsoft Windows Function Attributes.
65397                                                             (line   42)
65398* dllimport variable attribute:          Microsoft Windows Variable Attributes.
65399                                                             (line   12)
65400* dollar signs in identifier names:      Dollar Signs.       (line    6)
65401* double-word arithmetic:                Long Long.          (line    6)
65402* downward funargs:                      Nested Functions.   (line    6)
65403* drem:                                  Other Builtins.     (line    6)
65404* dremf:                                 Other Builtins.     (line    6)
65405* dreml:                                 Other Builtins.     (line    6)
65406* dump options:                          Developer Options.  (line    6)
65407* E in constraint:                       Simple Constraints. (line   87)
65408* earlyclobber operand:                  Modifiers.          (line   25)
65409* eBPF Options:                          eBPF Options.       (line    6)
65410* eight-bit data on the H8/300, H8/300H, and H8S: H8/300 Variable Attributes.
65411                                                             (line    9)
65412* eightbit_data variable attribute, H8/300: H8/300 Variable Attributes.
65413                                                             (line    9)
65414* EIND:                                  AVR Options.        (line  319)
65415* either function attribute, MSP430:     MSP430 Function Attributes.
65416                                                             (line   57)
65417* either variable attribute, MSP430:     MSP430 Variable Attributes.
65418                                                             (line   23)
65419* empty structures:                      Empty Structures.   (line    6)
65420* Enumerator Attributes:                 Enumerator Attributes.
65421                                                             (line    6)
65422* environment variables:                 Environment Variables.
65423                                                             (line    6)
65424* erf:                                   Other Builtins.     (line    6)
65425* erfc:                                  Other Builtins.     (line    6)
65426* erfcf:                                 Other Builtins.     (line    6)
65427* erfcl:                                 Other Builtins.     (line    6)
65428* erff:                                  Other Builtins.     (line    6)
65429* erfl:                                  Other Builtins.     (line    6)
65430* error function attribute:              Common Function Attributes.
65431                                                             (line  343)
65432* error GCC_COLORS capability:           Diagnostic Message Formatting Options.
65433                                                             (line   77)
65434* error messages:                        Warnings and Errors.
65435                                                             (line    6)
65436* escaped newlines:                      Escaped Newlines.   (line    6)
65437* exception function attribute:          NDS32 Function Attributes.
65438                                                             (line    9)
65439* exception handler functions, Blackfin: Blackfin Function Attributes.
65440                                                             (line    9)
65441* exception handler functions, NDS32:    NDS32 Function Attributes.
65442                                                             (line    9)
65443* exception_handler function attribute:  Blackfin Function Attributes.
65444                                                             (line    9)
65445* exit:                                  Other Builtins.     (line    6)
65446* exp:                                   Other Builtins.     (line    6)
65447* exp10:                                 Other Builtins.     (line    6)
65448* exp10f:                                Other Builtins.     (line    6)
65449* exp10l:                                Other Builtins.     (line    6)
65450* exp2:                                  Other Builtins.     (line    6)
65451* exp2f:                                 Other Builtins.     (line    6)
65452* exp2l:                                 Other Builtins.     (line    6)
65453* expf:                                  Other Builtins.     (line    6)
65454* expl:                                  Other Builtins.     (line    6)
65455* explicit register variables:           Explicit Register Variables.
65456                                                             (line    6)
65457* expm1:                                 Other Builtins.     (line    6)
65458* expm1f:                                Other Builtins.     (line    6)
65459* expm1l:                                Other Builtins.     (line    6)
65460* expressions containing statements:     Statement Exprs.    (line    6)
65461* expressions, constructor:              Compound Literals.  (line    6)
65462* extended asm:                          Extended Asm.       (line    6)
65463* extensible constraints:                Simple Constraints. (line  161)
65464* extensions, ?::                        Conditionals.       (line    6)
65465* extensions, C language:                C Extensions.       (line    6)
65466* extensions, C++ language:              C++ Extensions.     (line    6)
65467* external declaration scope:            Incompatibilities.  (line   80)
65468* externally_visible function attribute: Common Function Attributes.
65469                                                             (line  360)
65470* extra NOP instructions at the function entry point: Common Function Attributes.
65471                                                             (line  905)
65472* F in constraint:                       Simple Constraints. (line   92)
65473* fabs:                                  Other Builtins.     (line    6)
65474* fabsf:                                 Other Builtins.     (line    6)
65475* fabsl:                                 Other Builtins.     (line    6)
65476* fallthrough statement attribute:       Statement Attributes.
65477                                                             (line   26)
65478* far function attribute, MeP:           MeP Function Attributes.
65479                                                             (line   25)
65480* far function attribute, MIPS:          MIPS Function Attributes.
65481                                                             (line   63)
65482* far type attribute, MeP:               MeP Type Attributes.
65483                                                             (line    6)
65484* far variable attribute, MeP:           MeP Variable Attributes.
65485                                                             (line   30)
65486* fastcall function attribute, x86-32:   x86 Function Attributes.
65487                                                             (line   15)
65488* fast_interrupt function attribute, M32C: M32C Function Attributes.
65489                                                             (line   14)
65490* fast_interrupt function attribute, MicroBlaze: MicroBlaze Function Attributes.
65491                                                             (line   27)
65492* fast_interrupt function attribute, RX: RX Function Attributes.
65493                                                             (line    9)
65494* fatal signal:                          Bug Criteria.       (line    9)
65495* fdim:                                  Other Builtins.     (line    6)
65496* fdimf:                                 Other Builtins.     (line    6)
65497* fdiml:                                 Other Builtins.     (line    6)
65498* FDL, GNU Free Documentation License:   GNU Free Documentation License.
65499                                                             (line    6)
65500* fentry_name function attribute, x86:   x86 Function Attributes.
65501                                                             (line  637)
65502* fentry_section function attribute, x86: x86 Function Attributes.
65503                                                             (line  643)
65504* ffs:                                   Other Builtins.     (line    6)
65505* file name suffix:                      Overall Options.    (line   14)
65506* file names:                            Link Options.       (line   10)
65507* fix-cortex-a53-835769 function attribute, AArch64: AArch64 Function Attributes.
65508                                                             (line   19)
65509* fixed-point types:                     Fixed-Point.        (line    6)
65510* fixit-delete GCC_COLORS capability:    Diagnostic Message Formatting Options.
65511                                                             (line  109)
65512* fixit-insert GCC_COLORS capability:    Diagnostic Message Formatting Options.
65513                                                             (line  105)
65514* flatten function attribute:            Common Function Attributes.
65515                                                             (line  373)
65516* flexible array members:                Zero Length.        (line    6)
65517* float as function value type:          Incompatibilities.  (line  141)
65518* floating point precision:              Disappointments.    (line   68)
65519* floating-point precision:              Optimize Options.   (line 2199)
65520* floor:                                 Other Builtins.     (line    6)
65521* floorf:                                Other Builtins.     (line    6)
65522* floorl:                                Other Builtins.     (line    6)
65523* fma:                                   Other Builtins.     (line    6)
65524* fmaf:                                  Other Builtins.     (line    6)
65525* fmal:                                  Other Builtins.     (line    6)
65526* fmax:                                  Other Builtins.     (line    6)
65527* fmaxf:                                 Other Builtins.     (line    6)
65528* fmaxl:                                 Other Builtins.     (line    6)
65529* fmin:                                  Other Builtins.     (line    6)
65530* fminf:                                 Other Builtins.     (line    6)
65531* fminl:                                 Other Builtins.     (line    6)
65532* fmod:                                  Other Builtins.     (line    6)
65533* fmodf:                                 Other Builtins.     (line    6)
65534* fmodl:                                 Other Builtins.     (line    6)
65535* force_align_arg_pointer function attribute, x86: x86 Function Attributes.
65536                                                             (line  100)
65537* format function attribute:             Common Function Attributes.
65538                                                             (line  381)
65539* format_arg function attribute:         Common Function Attributes.
65540                                                             (line  446)
65541* Fortran:                               G++ and GCC.        (line    6)
65542* forwarder_section function attribute, Epiphany: Epiphany Function Attributes.
65543                                                             (line   13)
65544* forwarding calls:                      Constructing Calls. (line    6)
65545* fprintf:                               Other Builtins.     (line    6)
65546* fprintf_unlocked:                      Other Builtins.     (line    6)
65547* fputs:                                 Other Builtins.     (line    6)
65548* fputs_unlocked:                        Other Builtins.     (line    6)
65549* FR30 Options:                          FR30 Options.       (line    6)
65550* free:                                  Other Builtins.     (line    6)
65551* freestanding environment:              Standards.          (line   13)
65552* freestanding implementation:           Standards.          (line   13)
65553* frexp:                                 Other Builtins.     (line    6)
65554* frexpf:                                Other Builtins.     (line    6)
65555* frexpl:                                Other Builtins.     (line    6)
65556* FRV Options:                           FRV Options.        (line    6)
65557* fscanf:                                Other Builtins.     (line    6)
65558* fscanf, and constant strings:          Incompatibilities.  (line   17)
65559* FT32 Options:                          FT32 Options.       (line    6)
65560* function addressability on the M32R/D: M32R/D Function Attributes.
65561                                                             (line   15)
65562* function attributes:                   Function Attributes.
65563                                                             (line    6)
65564* function pointers, arithmetic:         Pointer Arith.      (line    6)
65565* function prototype declarations:       Function Prototypes.
65566                                                             (line    6)
65567* function versions:                     Function Multiversioning.
65568                                                             (line    6)
65569* function, size of pointer to:          Pointer Arith.      (line    6)
65570* functions in arbitrary sections:       Common Function Attributes.
65571                                                             (line  989)
65572* functions that are dynamically resolved: Common Function Attributes.
65573                                                             (line  547)
65574* functions that are passed arguments in registers on x86-32: x86 Function Attributes.
65575                                                             (line   76)
65576* functions that behave like malloc:     Common Function Attributes.
65577                                                             (line  674)
65578* functions that have no side effects:   Common Function Attributes.
65579                                                             (line  218)
65580* functions that have no side effects <1>: Common Function Attributes.
65581                                                             (line  923)
65582* functions that never return:           Common Function Attributes.
65583                                                             (line  837)
65584* functions that pop the argument stack on x86-32: x86 Function Attributes.
65585                                                             (line    9)
65586* functions that pop the argument stack on x86-32 <1>: x86 Function Attributes.
65587                                                             (line   15)
65588* functions that pop the argument stack on x86-32 <2>: x86 Function Attributes.
65589                                                             (line   23)
65590* functions that pop the argument stack on x86-32 <3>: x86 Function Attributes.
65591                                                             (line  108)
65592* functions that return more than once:  Common Function Attributes.
65593                                                             (line  980)
65594* functions with non-null pointer arguments: Common Function Attributes.
65595                                                             (line  783)
65596* functions with printf, scanf, strftime or strfmon style arguments: Common Function Attributes.
65597                                                             (line  381)
65598* function_return function attribute, x86: x86 Function Attributes.
65599                                                             (line  562)
65600* function_vector function attribute, H8/300: H8/300 Function Attributes.
65601                                                             (line    9)
65602* function_vector function attribute, M16C/M32C: M32C Function Attributes.
65603                                                             (line   20)
65604* function_vector function attribute, SH: SH Function Attributes.
65605                                                             (line    9)
65606* G in constraint:                       Simple Constraints. (line   96)
65607* g in constraint:                       Simple Constraints. (line  118)
65608* g++:                                   Invoking G++.       (line   14)
65609* G++:                                   G++ and GCC.        (line   29)
65610* gamma:                                 Other Builtins.     (line    6)
65611* gammaf:                                Other Builtins.     (line    6)
65612* gammaf_r:                              Other Builtins.     (line    6)
65613* gammal:                                Other Builtins.     (line    6)
65614* gammal_r:                              Other Builtins.     (line    6)
65615* gamma_r:                               Other Builtins.     (line    6)
65616* GCC:                                   G++ and GCC.        (line    6)
65617* GCC command options:                   Invoking GCC.       (line    6)
65618* GCC_COLORS environment variable:       Diagnostic Message Formatting Options.
65619                                                             (line   40)
65620* GCC_COMPARE_DEBUG:                     Environment Variables.
65621                                                             (line   52)
65622* GCC_EXEC_PREFIX:                       Environment Variables.
65623                                                             (line   57)
65624* gcc_struct type attribute, PowerPC:    PowerPC Type Attributes.
65625                                                             (line    9)
65626* gcc_struct type attribute, x86:        x86 Type Attributes.
65627                                                             (line   11)
65628* gcc_struct variable attribute, PowerPC: PowerPC Variable Attributes.
65629                                                             (line    9)
65630* gcc_struct variable attribute, x86:    x86 Variable Attributes.
65631                                                             (line   11)
65632* GCC_URLS environment variable:         Diagnostic Message Formatting Options.
65633                                                             (line  129)
65634* gcov:                                  Instrumentation Options.
65635                                                             (line   49)
65636* general-regs-only function attribute, AArch64: AArch64 Function Attributes.
65637                                                             (line   12)
65638* general-regs-only function attribute, ARM: ARM Function Attributes.
65639                                                             (line    9)
65640* gettext:                               Other Builtins.     (line    6)
65641* global offset table:                   Code Gen Options.   (line  353)
65642* global register after longjmp:         Global Register Variables.
65643                                                             (line   92)
65644* global register variables:             Global Register Variables.
65645                                                             (line    6)
65646* GNAT:                                  G++ and GCC.        (line   29)
65647* GNU C Compiler:                        G++ and GCC.        (line    6)
65648* GNU Compiler Collection:               G++ and GCC.        (line    6)
65649* gnu_inline function attribute:         Common Function Attributes.
65650                                                             (line  501)
65651* Go:                                    G++ and GCC.        (line    6)
65652* goto with computed label:              Labels as Values.   (line    6)
65653* gprof:                                 Instrumentation Options.
65654                                                             (line   18)
65655* grouping options:                      Invoking GCC.       (line   31)
65656* H in constraint:                       Simple Constraints. (line   96)
65657* half-precision floating point:         Half-Precision.     (line    6)
65658* hardware models and configurations, specifying: Submodel Options.
65659                                                             (line    6)
65660* hex floats:                            Hex Floats.         (line    6)
65661* highlight, color:                      Diagnostic Message Formatting Options.
65662                                                             (line   40)
65663* hk fixed-suffix:                       Fixed-Point.        (line    6)
65664* HK fixed-suffix:                       Fixed-Point.        (line    6)
65665* hosted environment:                    Standards.          (line   13)
65666* hosted environment <1>:                C Dialect Options.  (line  306)
65667* hosted environment <2>:                C Dialect Options.  (line  314)
65668* hosted implementation:                 Standards.          (line   13)
65669* hot function attribute:                Common Function Attributes.
65670                                                             (line  537)
65671* hot label attribute:                   Label Attributes.   (line   38)
65672* hotpatch function attribute, S/390:    S/390 Function Attributes.
65673                                                             (line    9)
65674* HPPA Options:                          HPPA Options.       (line    6)
65675* hr fixed-suffix:                       Fixed-Point.        (line    6)
65676* HR fixed-suffix:                       Fixed-Point.        (line    6)
65677* hypot:                                 Other Builtins.     (line    6)
65678* hypotf:                                Other Builtins.     (line    6)
65679* hypotl:                                Other Builtins.     (line    6)
65680* i in constraint:                       Simple Constraints. (line   68)
65681* I in constraint:                       Simple Constraints. (line   79)
65682* IA-64 Options:                         IA-64 Options.      (line    6)
65683* IBM RS/6000 and PowerPC Options:       RS/6000 and PowerPC Options.
65684                                                             (line    6)
65685* identifier names, dollar signs in:     Dollar Signs.       (line    6)
65686* identifiers, names in assembler code:  Asm Labels.         (line    6)
65687* ifunc function attribute:              Common Function Attributes.
65688                                                             (line  547)
65689* ilogb:                                 Other Builtins.     (line    6)
65690* ilogbf:                                Other Builtins.     (line    6)
65691* ilogbl:                                Other Builtins.     (line    6)
65692* imaxabs:                               Other Builtins.     (line    6)
65693* implementation-defined behavior, C language: C Implementation.
65694                                                             (line    6)
65695* implementation-defined behavior, C++ language: C++ Implementation.
65696                                                             (line    6)
65697* implied #pragma implementation:        C++ Interface.      (line   43)
65698* incompatibilities of GCC:              Incompatibilities.  (line    6)
65699* increment operators:                   Bug Criteria.       (line   17)
65700* index:                                 Other Builtins.     (line    6)
65701* indirect calls, ARC:                   ARC Function Attributes.
65702                                                             (line   27)
65703* indirect calls, ARM:                   ARM Function Attributes.
65704                                                             (line   38)
65705* indirect calls, Blackfin:              Blackfin Function Attributes.
65706                                                             (line   38)
65707* indirect calls, Epiphany:              Epiphany Function Attributes.
65708                                                             (line   57)
65709* indirect calls, MIPS:                  MIPS Function Attributes.
65710                                                             (line   63)
65711* indirect calls, PowerPC:               PowerPC Function Attributes.
65712                                                             (line   10)
65713* indirect functions:                    Common Function Attributes.
65714                                                             (line  547)
65715* indirect_branch function attribute, x86: x86 Function Attributes.
65716                                                             (line  552)
65717* indirect_return function attribute, x86: x86 Function Attributes.
65718                                                             (line  631)
65719* initializations in expressions:        Compound Literals.  (line    6)
65720* initializers with labeled elements:    Designated Inits.   (line    6)
65721* initializers, non-constant:            Initializers.       (line    6)
65722* init_priority variable attribute:      C++ Attributes.     (line   50)
65723* inline assembly language:              Using Assembly Language with C.
65724                                                             (line    6)
65725* inline automatic for C++ member fns:   Inline.             (line   68)
65726* inline functions:                      Inline.             (line    6)
65727* inline functions, omission of:         Inline.             (line   51)
65728* inlining and C++ pragmas:              C++ Interface.      (line   57)
65729* installation trouble:                  Trouble.            (line    6)
65730* instrumentation options:               Instrumentation Options.
65731                                                             (line    6)
65732* integrating function code:             Inline.             (line    6)
65733* interface and implementation headers, C++: C++ Interface.  (line    6)
65734* intermediate C version, nonexistent:   G++ and GCC.        (line   34)
65735* interrupt function attribute, ARC:     ARC Function Attributes.
65736                                                             (line    9)
65737* interrupt function attribute, ARM:     ARM Function Attributes.
65738                                                             (line   16)
65739* interrupt function attribute, AVR:     AVR Function Attributes.
65740                                                             (line    9)
65741* interrupt function attribute, C-SKY:   C-SKY Function Attributes.
65742                                                             (line   10)
65743* interrupt function attribute, CR16:    CR16 Function Attributes.
65744                                                             (line    9)
65745* interrupt function attribute, Epiphany: Epiphany Function Attributes.
65746                                                             (line   20)
65747* interrupt function attribute, M32C:    M32C Function Attributes.
65748                                                             (line   53)
65749* interrupt function attribute, M32R/D:  M32R/D Function Attributes.
65750                                                             (line    9)
65751* interrupt function attribute, m68k:    m68k Function Attributes.
65752                                                             (line   10)
65753* interrupt function attribute, MeP:     MeP Function Attributes.
65754                                                             (line   14)
65755* interrupt function attribute, MIPS:    MIPS Function Attributes.
65756                                                             (line    9)
65757* interrupt function attribute, MSP430:  MSP430 Function Attributes.
65758                                                             (line   19)
65759* interrupt function attribute, NDS32:   NDS32 Function Attributes.
65760                                                             (line   14)
65761* interrupt function attribute, RISC-V:  RISC-V Function Attributes.
65762                                                             (line   19)
65763* interrupt function attribute, RL78:    RL78 Function Attributes.
65764                                                             (line   10)
65765* interrupt function attribute, RX:      RX Function Attributes.
65766                                                             (line   15)
65767* interrupt function attribute, V850:    V850 Function Attributes.
65768                                                             (line   10)
65769* interrupt function attribute, Visium:  Visium Function Attributes.
65770                                                             (line    9)
65771* interrupt function attribute, x86:     x86 Function Attributes.
65772                                                             (line  124)
65773* interrupt function attribute, Xstormy16: Xstormy16 Function Attributes.
65774                                                             (line    9)
65775* interrupt_handler function attribute, Blackfin: Blackfin Function Attributes.
65776                                                             (line   15)
65777* interrupt_handler function attribute, H8/300: H8/300 Function Attributes.
65778                                                             (line   17)
65779* interrupt_handler function attribute, m68k: m68k Function Attributes.
65780                                                             (line   10)
65781* interrupt_handler function attribute, MicroBlaze: MicroBlaze Function Attributes.
65782                                                             (line   27)
65783* interrupt_handler function attribute, SH: SH Function Attributes.
65784                                                             (line   28)
65785* interrupt_handler function attribute, V850: V850 Function Attributes.
65786                                                             (line   10)
65787* interrupt_thread function attribute, fido: m68k Function Attributes.
65788                                                             (line   16)
65789* introduction:                          Top.                (line    6)
65790* invalid assembly code:                 Bug Criteria.       (line   12)
65791* invalid input:                         Bug Criteria.       (line   42)
65792* invoking g++:                          Invoking G++.       (line   22)
65793* io variable attribute, AVR:            AVR Variable Attributes.
65794                                                             (line   73)
65795* io variable attribute, MeP:            MeP Variable Attributes.
65796                                                             (line   36)
65797* io_low variable attribute, AVR:        AVR Variable Attributes.
65798                                                             (line   91)
65799* isalnum:                               Other Builtins.     (line    6)
65800* isalpha:                               Other Builtins.     (line    6)
65801* isascii:                               Other Builtins.     (line    6)
65802* isblank:                               Other Builtins.     (line    6)
65803* iscntrl:                               Other Builtins.     (line    6)
65804* isdigit:                               Other Builtins.     (line    6)
65805* isgraph:                               Other Builtins.     (line    6)
65806* islower:                               Other Builtins.     (line    6)
65807* ISO 9899:                              Standards.          (line   13)
65808* ISO C:                                 Standards.          (line   13)
65809* ISO C standard:                        Standards.          (line   13)
65810* ISO C11:                               Standards.          (line   13)
65811* ISO C17:                               Standards.          (line   13)
65812* ISO C1X:                               Standards.          (line   13)
65813* ISO C2X:                               Standards.          (line   13)
65814* ISO C90:                               Standards.          (line   13)
65815* ISO C94:                               Standards.          (line   13)
65816* ISO C95:                               Standards.          (line   13)
65817* ISO C99:                               Standards.          (line   13)
65818* ISO C9X:                               Standards.          (line   13)
65819* ISO support:                           C Dialect Options.  (line   10)
65820* ISO/IEC 9899:                          Standards.          (line   13)
65821* isprint:                               Other Builtins.     (line    6)
65822* ispunct:                               Other Builtins.     (line    6)
65823* isr function attribute, ARM:           ARM Function Attributes.
65824                                                             (line   33)
65825* isr function attribute, C-SKY:         C-SKY Function Attributes.
65826                                                             (line   10)
65827* isspace:                               Other Builtins.     (line    6)
65828* isupper:                               Other Builtins.     (line    6)
65829* iswalnum:                              Other Builtins.     (line    6)
65830* iswalpha:                              Other Builtins.     (line    6)
65831* iswblank:                              Other Builtins.     (line    6)
65832* iswcntrl:                              Other Builtins.     (line    6)
65833* iswdigit:                              Other Builtins.     (line    6)
65834* iswgraph:                              Other Builtins.     (line    6)
65835* iswlower:                              Other Builtins.     (line    6)
65836* iswprint:                              Other Builtins.     (line    6)
65837* iswpunct:                              Other Builtins.     (line    6)
65838* iswspace:                              Other Builtins.     (line    6)
65839* iswupper:                              Other Builtins.     (line    6)
65840* iswxdigit:                             Other Builtins.     (line    6)
65841* isxdigit:                              Other Builtins.     (line    6)
65842* j0:                                    Other Builtins.     (line    6)
65843* j0f:                                   Other Builtins.     (line    6)
65844* j0l:                                   Other Builtins.     (line    6)
65845* j1:                                    Other Builtins.     (line    6)
65846* j1f:                                   Other Builtins.     (line    6)
65847* j1l:                                   Other Builtins.     (line    6)
65848* jli_always function attribute, ARC:    ARC Function Attributes.
65849                                                             (line   44)
65850* jli_fixed function attribute, ARC:     ARC Function Attributes.
65851                                                             (line   50)
65852* jn:                                    Other Builtins.     (line    6)
65853* jnf:                                   Other Builtins.     (line    6)
65854* jnl:                                   Other Builtins.     (line    6)
65855* k fixed-suffix:                        Fixed-Point.        (line    6)
65856* K fixed-suffix:                        Fixed-Point.        (line    6)
65857* keep_interrupts_masked function attribute, MIPS: MIPS Function Attributes.
65858                                                             (line   34)
65859* kernel attribute, Nvidia PTX:          Nvidia PTX Function Attributes.
65860                                                             (line    9)
65861* keywords, alternate:                   Alternate Keywords. (line    6)
65862* known causes of trouble:               Trouble.            (line    6)
65863* kspisusp function attribute, Blackfin: Blackfin Function Attributes.
65864                                                             (line   21)
65865* l1_data variable attribute, Blackfin:  Blackfin Variable Attributes.
65866                                                             (line   11)
65867* l1_data_A variable attribute, Blackfin: Blackfin Variable Attributes.
65868                                                             (line   11)
65869* l1_data_B variable attribute, Blackfin: Blackfin Variable Attributes.
65870                                                             (line   11)
65871* l1_text function attribute, Blackfin:  Blackfin Function Attributes.
65872                                                             (line   26)
65873* l2 function attribute, Blackfin:       Blackfin Function Attributes.
65874                                                             (line   32)
65875* l2 variable attribute, Blackfin:       Blackfin Variable Attributes.
65876                                                             (line   19)
65877* Label Attributes:                      Label Attributes.   (line    6)
65878* labeled elements in initializers:      Designated Inits.   (line    6)
65879* labels as values:                      Labels as Values.   (line    6)
65880* labs:                                  Other Builtins.     (line    6)
65881* LANG:                                  Environment Variables.
65882                                                             (line   21)
65883* LANG <1>:                              Environment Variables.
65884                                                             (line  106)
65885* language dialect options:              C Dialect Options.  (line    6)
65886* LC_ALL:                                Environment Variables.
65887                                                             (line   21)
65888* LC_CTYPE:                              Environment Variables.
65889                                                             (line   21)
65890* LC_MESSAGES:                           Environment Variables.
65891                                                             (line   21)
65892* ldexp:                                 Other Builtins.     (line    6)
65893* ldexpf:                                Other Builtins.     (line    6)
65894* ldexpl:                                Other Builtins.     (line    6)
65895* leaf function attribute:               Common Function Attributes.
65896                                                             (line  637)
65897* length-zero arrays:                    Zero Length.        (line    6)
65898* lgamma:                                Other Builtins.     (line    6)
65899* lgammaf:                               Other Builtins.     (line    6)
65900* lgammaf_r:                             Other Builtins.     (line    6)
65901* lgammal:                               Other Builtins.     (line    6)
65902* lgammal_r:                             Other Builtins.     (line    6)
65903* lgamma_r:                              Other Builtins.     (line    6)
65904* Libraries:                             Link Options.       (line   82)
65905* LIBRARY_PATH:                          Environment Variables.
65906                                                             (line   97)
65907* link options:                          Link Options.       (line    6)
65908* linker script:                         Link Options.       (line  311)
65909* lk fixed-suffix:                       Fixed-Point.        (line    6)
65910* LK fixed-suffix:                       Fixed-Point.        (line    6)
65911* LL integer suffix:                     Long Long.          (line    6)
65912* llabs:                                 Other Builtins.     (line    6)
65913* llk fixed-suffix:                      Fixed-Point.        (line    6)
65914* LLK fixed-suffix:                      Fixed-Point.        (line    6)
65915* llr fixed-suffix:                      Fixed-Point.        (line    6)
65916* LLR fixed-suffix:                      Fixed-Point.        (line    6)
65917* llrint:                                Other Builtins.     (line    6)
65918* llrintf:                               Other Builtins.     (line    6)
65919* llrintl:                               Other Builtins.     (line    6)
65920* llround:                               Other Builtins.     (line    6)
65921* llroundf:                              Other Builtins.     (line    6)
65922* llroundl:                              Other Builtins.     (line    6)
65923* LM32 options:                          LM32 Options.       (line    6)
65924* load address instruction:              Simple Constraints. (line  152)
65925* local labels:                          Local Labels.       (line    6)
65926* local variables in macros:             Typeof.             (line   46)
65927* local variables, specifying registers: Local Register Variables.
65928                                                             (line    6)
65929* locale:                                Environment Variables.
65930                                                             (line   21)
65931* locale definition:                     Environment Variables.
65932                                                             (line  106)
65933* locus GCC_COLORS capability:           Diagnostic Message Formatting Options.
65934                                                             (line   98)
65935* log:                                   Other Builtins.     (line    6)
65936* log10:                                 Other Builtins.     (line    6)
65937* log10f:                                Other Builtins.     (line    6)
65938* log10l:                                Other Builtins.     (line    6)
65939* log1p:                                 Other Builtins.     (line    6)
65940* log1pf:                                Other Builtins.     (line    6)
65941* log1pl:                                Other Builtins.     (line    6)
65942* log2:                                  Other Builtins.     (line    6)
65943* log2f:                                 Other Builtins.     (line    6)
65944* log2l:                                 Other Builtins.     (line    6)
65945* logb:                                  Other Builtins.     (line    6)
65946* logbf:                                 Other Builtins.     (line    6)
65947* logbl:                                 Other Builtins.     (line    6)
65948* logf:                                  Other Builtins.     (line    6)
65949* logl:                                  Other Builtins.     (line    6)
65950* long:                                  BPF Built-in Functions.
65951                                                             (line    8)
65952* long <1>:                              BPF Built-in Functions.
65953                                                             (line   13)
65954* long <2>:                              BPF Built-in Functions.
65955                                                             (line   18)
65956* long long data types:                  Long Long.          (line    6)
65957* longcall function attribute, Blackfin: Blackfin Function Attributes.
65958                                                             (line   38)
65959* longcall function attribute, PowerPC:  PowerPC Function Attributes.
65960                                                             (line   10)
65961* longjmp:                               Global Register Variables.
65962                                                             (line   92)
65963* longjmp incompatibilities:             Incompatibilities.  (line   39)
65964* longjmp warnings:                      Warning Options.    (line 1284)
65965* long_call function attribute, ARC:     ARC Function Attributes.
65966                                                             (line   27)
65967* long_call function attribute, ARM:     ARM Function Attributes.
65968                                                             (line   38)
65969* long_call function attribute, Epiphany: Epiphany Function Attributes.
65970                                                             (line   57)
65971* long_call function attribute, MIPS:    MIPS Function Attributes.
65972                                                             (line   63)
65973* lower function attribute, MSP430:      MSP430 Function Attributes.
65974                                                             (line   57)
65975* lower variable attribute, MSP430:      MSP430 Variable Attributes.
65976                                                             (line   27)
65977* lr fixed-suffix:                       Fixed-Point.        (line    6)
65978* LR fixed-suffix:                       Fixed-Point.        (line    6)
65979* lrint:                                 Other Builtins.     (line    6)
65980* lrintf:                                Other Builtins.     (line    6)
65981* lrintl:                                Other Builtins.     (line    6)
65982* lround:                                Other Builtins.     (line    6)
65983* lroundf:                               Other Builtins.     (line    6)
65984* lroundl:                               Other Builtins.     (line    6)
65985* m in constraint:                       Simple Constraints. (line   17)
65986* M32C options:                          M32C Options.       (line    6)
65987* M32R/D options:                        M32R/D Options.     (line    6)
65988* M680x0 options:                        M680x0 Options.     (line    6)
65989* machine specific constraints:          Machine Constraints.
65990                                                             (line    6)
65991* machine-dependent options:             Submodel Options.   (line    6)
65992* macro with variable arguments:         Variadic Macros.    (line    6)
65993* macros, inline alternative:            Inline.             (line    6)
65994* macros, local labels:                  Local Labels.       (line    6)
65995* macros, local variables in:            Typeof.             (line   46)
65996* macros, statements in expressions:     Statement Exprs.    (line    6)
65997* macros, types of arguments:            Typeof.             (line    6)
65998* make:                                  Preprocessor Options.
65999                                                             (line   77)
66000* malloc:                                Other Builtins.     (line    6)
66001* malloc function attribute:             Common Function Attributes.
66002                                                             (line  674)
66003* matching constraint:                   Simple Constraints. (line  137)
66004* may_alias type attribute:              Common Type Attributes.
66005                                                             (line  234)
66006* MCore options:                         MCore Options.      (line    6)
66007* medium_call function attribute, ARC:   ARC Function Attributes.
66008                                                             (line   27)
66009* member fns, automatically inline:      Inline.             (line   68)
66010* memchr:                                Other Builtins.     (line    6)
66011* memcmp:                                Other Builtins.     (line    6)
66012* memcpy:                                Other Builtins.     (line    6)
66013* memory references in constraints:      Simple Constraints. (line   17)
66014* mempcpy:                               Other Builtins.     (line    6)
66015* memset:                                Other Builtins.     (line    6)
66016* MeP options:                           MeP Options.        (line    6)
66017* Mercury:                               G++ and GCC.        (line   23)
66018* message formatting:                    Diagnostic Message Formatting Options.
66019                                                             (line    6)
66020* messages, warning:                     Warning Options.    (line    6)
66021* messages, warning and error:           Warnings and Errors.
66022                                                             (line    6)
66023* MicroBlaze Options:                    MicroBlaze Options. (line    6)
66024* micromips function attribute:          MIPS Function Attributes.
66025                                                             (line   91)
66026* middle-operands, omitted:              Conditionals.       (line    6)
66027* MIPS options:                          MIPS Options.       (line    6)
66028* mips16 function attribute, MIPS:       MIPS Function Attributes.
66029                                                             (line   75)
66030* misunderstandings in C++:              C++ Misunderstandings.
66031                                                             (line    6)
66032* mixed declarations and code:           Mixed Declarations. (line    6)
66033* mixing assembly language and C:        Using Assembly Language with C.
66034                                                             (line    6)
66035* mktemp, and constant strings:          Incompatibilities.  (line   13)
66036* MMIX Options:                          MMIX Options.       (line    6)
66037* MN10300 options:                       MN10300 Options.    (line    6)
66038* mode type attribute:                   Common Type Attributes.
66039                                                             (line  270)
66040* mode variable attribute:               Common Variable Attributes.
66041                                                             (line  225)
66042* model function attribute, M32R/D:      M32R/D Function Attributes.
66043                                                             (line   15)
66044* model variable attribute, IA-64:       IA-64 Variable Attributes.
66045                                                             (line    9)
66046* model-name variable attribute, M32R/D: M32R/D Variable Attributes.
66047                                                             (line    9)
66048* modf:                                  Other Builtins.     (line    6)
66049* modff:                                 Other Builtins.     (line    6)
66050* modfl:                                 Other Builtins.     (line    6)
66051* modifiers in constraints:              Modifiers.          (line    6)
66052* Moxie Options:                         Moxie Options.      (line    6)
66053* MSP430 Options:                        MSP430 Options.     (line    6)
66054* ms_abi function attribute, x86:        x86 Function Attributes.
66055                                                             (line   34)
66056* ms_hook_prologue function attribute, x86: x86 Function Attributes.
66057                                                             (line   59)
66058* ms_struct type attribute, PowerPC:     PowerPC Type Attributes.
66059                                                             (line    9)
66060* ms_struct type attribute, x86:         x86 Type Attributes.
66061                                                             (line   11)
66062* ms_struct variable attribute, PowerPC: PowerPC Variable Attributes.
66063                                                             (line    9)
66064* ms_struct variable attribute, x86:     x86 Variable Attributes.
66065                                                             (line   11)
66066* multiple alternative constraints:      Multi-Alternative.  (line    6)
66067* multiprecision arithmetic:             Long Long.          (line    6)
66068* n in constraint:                       Simple Constraints. (line   73)
66069* naked function attribute, ARC:         ARC Function Attributes.
66070                                                             (line   59)
66071* naked function attribute, ARM:         ARM Function Attributes.
66072                                                             (line   48)
66073* naked function attribute, AVR:         AVR Function Attributes.
66074                                                             (line   23)
66075* naked function attribute, C-SKY:       C-SKY Function Attributes.
66076                                                             (line   20)
66077* naked function attribute, MCORE:       MCORE Function Attributes.
66078                                                             (line    9)
66079* naked function attribute, MSP430:      MSP430 Function Attributes.
66080                                                             (line   34)
66081* naked function attribute, NDS32:       NDS32 Function Attributes.
66082                                                             (line   35)
66083* naked function attribute, RISC-V:      RISC-V Function Attributes.
66084                                                             (line    9)
66085* naked function attribute, RL78:        RL78 Function Attributes.
66086                                                             (line   20)
66087* naked function attribute, RX:          RX Function Attributes.
66088                                                             (line   39)
66089* naked function attribute, x86:         x86 Function Attributes.
66090                                                             (line   66)
66091* Named Address Spaces:                  Named Address Spaces.
66092                                                             (line    6)
66093* names used in assembler code:          Asm Labels.         (line    6)
66094* naming convention, implementation headers: C++ Interface.  (line   43)
66095* NDS32 Options:                         NDS32 Options.      (line    6)
66096* near function attribute, MeP:          MeP Function Attributes.
66097                                                             (line   20)
66098* near function attribute, MIPS:         MIPS Function Attributes.
66099                                                             (line   63)
66100* near type attribute, MeP:              MeP Type Attributes.
66101                                                             (line    6)
66102* near variable attribute, MeP:          MeP Variable Attributes.
66103                                                             (line   24)
66104* nearbyint:                             Other Builtins.     (line    6)
66105* nearbyintf:                            Other Builtins.     (line    6)
66106* nearbyintl:                            Other Builtins.     (line    6)
66107* nested function attribute, NDS32:      NDS32 Function Attributes.
66108                                                             (line   19)
66109* nested functions:                      Nested Functions.   (line    6)
66110* nested_ready function attribute, NDS32: NDS32 Function Attributes.
66111                                                             (line   23)
66112* nesting function attribute, Blackfin:  Blackfin Function Attributes.
66113                                                             (line   45)
66114* newlines (escaped):                    Escaped Newlines.   (line    6)
66115* nextafter:                             Other Builtins.     (line    6)
66116* nextafterf:                            Other Builtins.     (line    6)
66117* nextafterl:                            Other Builtins.     (line    6)
66118* nexttoward:                            Other Builtins.     (line    6)
66119* nexttowardf:                           Other Builtins.     (line    6)
66120* nexttowardl:                           Other Builtins.     (line    6)
66121* NFC:                                   Warning Options.    (line 2654)
66122* NFKC:                                  Warning Options.    (line 2654)
66123* Nios II options:                       Nios II Options.    (line    6)
66124* nmi function attribute, NDS32:         NDS32 Function Attributes.
66125                                                             (line   50)
66126* NMI handler functions on the Blackfin processor: Blackfin Function Attributes.
66127                                                             (line   50)
66128* nmi_handler function attribute, Blackfin: Blackfin Function Attributes.
66129                                                             (line   50)
66130* nocf_check function attribute:         x86 Function Attributes.
66131                                                             (line  571)
66132* noclone function attribute:            Common Function Attributes.
66133                                                             (line  752)
66134* nocommon variable attribute:           Common Variable Attributes.
66135                                                             (line  176)
66136* nocompression function attribute, MIPS: MIPS Function Attributes.
66137                                                             (line  108)
66138* noinit variable attribute:             Common Variable Attributes.
66139                                                             (line  397)
66140* noinit variable attribute, MSP430:     MSP430 Variable Attributes.
66141                                                             (line    7)
66142* noinline function attribute:           Common Function Attributes.
66143                                                             (line  758)
66144* noipa function attribute:              Common Function Attributes.
66145                                                             (line  769)
66146* nomicromips function attribute:        MIPS Function Attributes.
66147                                                             (line   91)
66148* nomips16 function attribute, MIPS:     MIPS Function Attributes.
66149                                                             (line   75)
66150* non-constant initializers:             Initializers.       (line    6)
66151* non-static inline function:            Inline.             (line   82)
66152* nonlocal gotos:                        Nonlocal Gotos.     (line    6)
66153* nonnull function attribute:            Common Function Attributes.
66154                                                             (line  783)
66155* nonstring variable attribute:          Common Variable Attributes.
66156                                                             (line  237)
66157* noplt function attribute:              Common Function Attributes.
66158                                                             (line  813)
66159* noreturn function attribute:           Common Function Attributes.
66160                                                             (line  837)
66161* nosave_low_regs function attribute, SH: SH Function Attributes.
66162                                                             (line   34)
66163* note GCC_COLORS capability:            Diagnostic Message Formatting Options.
66164                                                             (line   83)
66165* nothrow function attribute:            Common Function Attributes.
66166                                                             (line  871)
66167* notshared type attribute, ARM:         ARM Type Attributes.
66168                                                             (line    6)
66169* not_nested function attribute, NDS32:  NDS32 Function Attributes.
66170                                                             (line   21)
66171* no_caller_saved_registers function attribute, x86: x86 Function Attributes.
66172                                                             (line  113)
66173* no_gccisr function attribute, AVR:     AVR Function Attributes.
66174                                                             (line   33)
66175* no_icf function attribute:             Common Function Attributes.
66176                                                             (line  687)
66177* no_instrument_function function attribute: Common Function Attributes.
66178                                                             (line  691)
66179* no_profile_instrument_function function attribute: Common Function Attributes.
66180                                                             (line  697)
66181* no_reorder function attribute:         Common Function Attributes.
66182                                                             (line  702)
66183* no_sanitize function attribute:        Common Function Attributes.
66184                                                             (line  710)
66185* no_sanitize_address function attribute: Common Function Attributes.
66186                                                             (line  722)
66187* no_sanitize_thread function attribute: Common Function Attributes.
66188                                                             (line  730)
66189* no_sanitize_undefined function attribute: Common Function Attributes.
66190                                                             (line  735)
66191* no_split_stack function attribute:     Common Function Attributes.
66192                                                             (line  741)
66193* no_stack_limit function attribute:     Common Function Attributes.
66194                                                             (line  747)
66195* Nvidia PTX options:                    Nvidia PTX Options. (line    6)
66196* nvptx options:                         Nvidia PTX Options. (line    6)
66197* o in constraint:                       Simple Constraints. (line   23)
66198* OBJC_INCLUDE_PATH:                     Environment Variables.
66199                                                             (line  130)
66200* Objective-C:                           G++ and GCC.        (line    6)
66201* Objective-C <1>:                       Standards.          (line  189)
66202* Objective-C and Objective-C++ options, command-line: Objective-C and Objective-C++ Dialect Options.
66203                                                             (line    6)
66204* Objective-C++:                         G++ and GCC.        (line    6)
66205* Objective-C++ <1>:                     Standards.          (line  189)
66206* offsettable address:                   Simple Constraints. (line   23)
66207* old-style function definitions:        Function Prototypes.
66208                                                             (line    6)
66209* omit-leaf-frame-pointer function attribute, AArch64: AArch64 Function Attributes.
66210                                                             (line   41)
66211* omitted middle-operands:               Conditionals.       (line    6)
66212* open coding:                           Inline.             (line    6)
66213* OpenACC accelerator programming:       C Dialect Options.  (line  325)
66214* OpenACC accelerator programming <1>:   C Dialect Options.  (line  334)
66215* OpenMP parallel:                       C Dialect Options.  (line  340)
66216* OpenMP SIMD:                           C Dialect Options.  (line  349)
66217* OpenRISC Options:                      OpenRISC Options.   (line    6)
66218* operand constraints, asm:              Constraints.        (line    6)
66219* optimize function attribute:           Common Function Attributes.
66220                                                             (line  879)
66221* optimize options:                      Optimize Options.   (line    6)
66222* options to control diagnostics formatting: Diagnostic Message Formatting Options.
66223                                                             (line    6)
66224* options to control warnings:           Warning Options.    (line    6)
66225* options, C++:                          C++ Dialect Options.
66226                                                             (line    6)
66227* options, code generation:              Code Gen Options.   (line    6)
66228* options, debugging:                    Debugging Options.  (line    6)
66229* options, dialect:                      C Dialect Options.  (line    6)
66230* options, directory search:             Directory Options.  (line    6)
66231* options, GCC command:                  Invoking GCC.       (line    6)
66232* options, grouping:                     Invoking GCC.       (line   31)
66233* options, linking:                      Link Options.       (line    6)
66234* options, Objective-C and Objective-C++: Objective-C and Objective-C++ Dialect Options.
66235                                                             (line    6)
66236* options, optimization:                 Optimize Options.   (line    6)
66237* options, order:                        Invoking GCC.       (line   35)
66238* options, preprocessor:                 Preprocessor Options.
66239                                                             (line    6)
66240* options, profiling:                    Instrumentation Options.
66241                                                             (line    6)
66242* options, program instrumentation:      Instrumentation Options.
66243                                                             (line    6)
66244* options, run-time error checking:      Instrumentation Options.
66245                                                             (line    6)
66246* order of evaluation, side effects:     Non-bugs.           (line  196)
66247* order of options:                      Invoking GCC.       (line   35)
66248* OS_main function attribute, AVR:       AVR Function Attributes.
66249                                                             (line   56)
66250* OS_task function attribute, AVR:       AVR Function Attributes.
66251                                                             (line   56)
66252* other register constraints:            Simple Constraints. (line  161)
66253* outline-atomics function attribute, AArch64: AArch64 Function Attributes.
66254                                                             (line   82)
66255* output file option:                    Overall Options.    (line  196)
66256* overloaded virtual function, warning:  C++ Dialect Options.
66257                                                             (line  817)
66258* p in constraint:                       Simple Constraints. (line  152)
66259* packed type attribute:                 Common Type Attributes.
66260                                                             (line  282)
66261* packed variable attribute:             Common Variable Attributes.
66262                                                             (line  270)
66263* parameter forward declaration:         Variable Length.    (line   66)
66264* partial_save function attribute, NDS32: NDS32 Function Attributes.
66265                                                             (line   31)
66266* patchable_function_entry function attribute: Common Function Attributes.
66267                                                             (line  905)
66268* path GCC_COLORS capability:            Diagnostic Message Formatting Options.
66269                                                             (line   86)
66270* pcs function attribute, ARM:           ARM Function Attributes.
66271                                                             (line   58)
66272* PDP-11 Options:                        PDP-11 Options.     (line    6)
66273* persistent variable attribute, MSP430: MSP430 Variable Attributes.
66274                                                             (line   12)
66275* PIC:                                   Code Gen Options.   (line  353)
66276* picoChip options:                      picoChip Options.   (line    6)
66277* pmf:                                   Bound member functions.
66278                                                             (line    6)
66279* pointer arguments:                     Common Function Attributes.
66280                                                             (line  247)
66281* pointer arguments in variadic functions: Variadic Pointer Args.
66282                                                             (line    6)
66283* pointer to member function:            Bound member functions.
66284                                                             (line    6)
66285* pointers to arrays:                    Pointers to Arrays. (line    6)
66286* portions of temporary objects, pointers to: Temporaries.   (line    6)
66287* pow:                                   Other Builtins.     (line    6)
66288* pow10:                                 Other Builtins.     (line    6)
66289* pow10f:                                Other Builtins.     (line    6)
66290* pow10l:                                Other Builtins.     (line    6)
66291* PowerPC options:                       PowerPC Options.    (line    6)
66292* powf:                                  Other Builtins.     (line    6)
66293* powl:                                  Other Builtins.     (line    6)
66294* pragma GCC ivdep:                      Loop-Specific Pragmas.
66295                                                             (line    7)
66296* pragma GCC optimize:                   Function Specific Option Pragmas.
66297                                                             (line   21)
66298* pragma GCC pop_options:                Function Specific Option Pragmas.
66299                                                             (line   33)
66300* pragma GCC push_options:               Function Specific Option Pragmas.
66301                                                             (line   33)
66302* pragma GCC reset_options:              Function Specific Option Pragmas.
66303                                                             (line   41)
66304* pragma GCC target:                     Function Specific Option Pragmas.
66305                                                             (line    7)
66306* pragma GCC unroll N:                   Loop-Specific Pragmas.
66307                                                             (line   37)
66308* pragma, address:                       M32C Pragmas.       (line   15)
66309* pragma, align:                         Solaris Pragmas.    (line   11)
66310* pragma, call:                          MeP Pragmas.        (line   48)
66311* pragma, coprocessor available:         MeP Pragmas.        (line   13)
66312* pragma, coprocessor call_saved:        MeP Pragmas.        (line   20)
66313* pragma, coprocessor subclass:          MeP Pragmas.        (line   28)
66314* pragma, ctable_entry:                  PRU Pragmas.        (line    7)
66315* pragma, custom io_volatile:            MeP Pragmas.        (line    7)
66316* pragma, diagnostic:                    Diagnostic Pragmas. (line   14)
66317* pragma, diagnostic <1>:                Diagnostic Pragmas. (line   57)
66318* pragma, diagnostic <2>:                Diagnostic Pragmas. (line   77)
66319* pragma, diagnostic <3>:                Diagnostic Pragmas. (line   99)
66320* pragma, disinterrupt:                  MeP Pragmas.        (line   38)
66321* pragma, fini:                          Solaris Pragmas.    (line   20)
66322* pragma, init:                          Solaris Pragmas.    (line   26)
66323* pragma, longcall:                      RS/6000 and PowerPC Pragmas.
66324                                                             (line   14)
66325* pragma, long_calls:                    ARM Pragmas.        (line   11)
66326* pragma, long_calls_off:                ARM Pragmas.        (line   17)
66327* pragma, mark:                          Darwin Pragmas.     (line   11)
66328* pragma, memregs:                       M32C Pragmas.       (line    7)
66329* pragma, no_long_calls:                 ARM Pragmas.        (line   14)
66330* pragma, options align:                 Darwin Pragmas.     (line   14)
66331* pragma, pop_macro:                     Push/Pop Macro Pragmas.
66332                                                             (line   15)
66333* pragma, push_macro:                    Push/Pop Macro Pragmas.
66334                                                             (line   11)
66335* pragma, redefine_extname:              Symbol-Renaming Pragmas.
66336                                                             (line   13)
66337* pragma, segment:                       Darwin Pragmas.     (line   21)
66338* pragma, unused:                        Darwin Pragmas.     (line   24)
66339* pragma, visibility:                    Visibility Pragmas. (line    8)
66340* pragma, weak:                          Weak Pragmas.       (line   10)
66341* pragmas:                               Pragmas.            (line    6)
66342* pragmas in C++, effect on inlining:    C++ Interface.      (line   57)
66343* pragmas, interface and implementation: C++ Interface.      (line    6)
66344* pragmas, warning of unknown:           Warning Options.    (line 1299)
66345* precompiled headers:                   Precompiled Headers.
66346                                                             (line    6)
66347* preprocessing numbers:                 Incompatibilities.  (line  173)
66348* preprocessing tokens:                  Incompatibilities.  (line  173)
66349* preprocessor options:                  Preprocessor Options.
66350                                                             (line    6)
66351* printf:                                Other Builtins.     (line    6)
66352* printf_unlocked:                       Other Builtins.     (line    6)
66353* prof:                                  Instrumentation Options.
66354                                                             (line   18)
66355* profiling options:                     Instrumentation Options.
66356                                                             (line    6)
66357* progmem variable attribute, AVR:       AVR Variable Attributes.
66358                                                             (line    7)
66359* program instrumentation options:       Instrumentation Options.
66360                                                             (line    6)
66361* promotion of formal parameters:        Function Prototypes.
66362                                                             (line    6)
66363* PRU Options:                           PRU Options.        (line    6)
66364* pure function attribute:               Common Function Attributes.
66365                                                             (line  923)
66366* push address instruction:              Simple Constraints. (line  152)
66367* putchar:                               Other Builtins.     (line    6)
66368* puts:                                  Other Builtins.     (line    6)
66369* q floating point suffix:               Floating Types.     (line    6)
66370* Q floating point suffix:               Floating Types.     (line    6)
66371* qsort, and global register variables:  Global Register Variables.
66372                                                             (line   75)
66373* quote GCC_COLORS capability:           Diagnostic Message Formatting Options.
66374                                                             (line  102)
66375* r fixed-suffix:                        Fixed-Point.        (line    6)
66376* R fixed-suffix:                        Fixed-Point.        (line    6)
66377* r in constraint:                       Simple Constraints. (line   64)
66378* RAMPD:                                 AVR Options.        (line  430)
66379* RAMPX:                                 AVR Options.        (line  430)
66380* RAMPY:                                 AVR Options.        (line  430)
66381* RAMPZ:                                 AVR Options.        (line  430)
66382* range1 GCC_COLORS capability:          Diagnostic Message Formatting Options.
66383                                                             (line   92)
66384* range2 GCC_COLORS capability:          Diagnostic Message Formatting Options.
66385                                                             (line   95)
66386* ranges in case statements:             Case Ranges.        (line    6)
66387* read-only strings:                     Incompatibilities.  (line    9)
66388* realloc:                               Other Builtins.     (line    6)
66389* reentrant function attribute, MSP430:  MSP430 Function Attributes.
66390                                                             (line   44)
66391* register variable after longjmp:       Global Register Variables.
66392                                                             (line   92)
66393* registers for local variables:         Local Register Variables.
66394                                                             (line    6)
66395* registers in constraints:              Simple Constraints. (line   64)
66396* registers, global allocation:          Global Register Variables.
66397                                                             (line    6)
66398* registers, global variables in:        Global Register Variables.
66399                                                             (line    6)
66400* regparm function attribute, x86:       x86 Function Attributes.
66401                                                             (line   76)
66402* relocation truncated to fit (ColdFire): M680x0 Options.    (line  322)
66403* relocation truncated to fit (MIPS):    MIPS Options.       (line  237)
66404* remainder:                             Other Builtins.     (line    6)
66405* remainderf:                            Other Builtins.     (line    6)
66406* remainderl:                            Other Builtins.     (line    6)
66407* remquo:                                Other Builtins.     (line    6)
66408* remquof:                               Other Builtins.     (line    6)
66409* remquol:                               Other Builtins.     (line    6)
66410* renesas function attribute, SH:        SH Function Attributes.
66411                                                             (line   40)
66412* reordering, warning:                   C++ Dialect Options.
66413                                                             (line  665)
66414* reporting bugs:                        Bugs.               (line    6)
66415* resbank function attribute, SH:        SH Function Attributes.
66416                                                             (line   44)
66417* reset function attribute, NDS32:       NDS32 Function Attributes.
66418                                                             (line   45)
66419* reset handler functions:               NDS32 Function Attributes.
66420                                                             (line   45)
66421* rest argument (in macro):              Variadic Macros.    (line    6)
66422* restricted pointers:                   Restricted Pointers.
66423                                                             (line    6)
66424* restricted references:                 Restricted Pointers.
66425                                                             (line    6)
66426* restricted this pointer:               Restricted Pointers.
66427                                                             (line    6)
66428* returns_nonnull function attribute:    Common Function Attributes.
66429                                                             (line  970)
66430* returns_twice function attribute:      Common Function Attributes.
66431                                                             (line  980)
66432* rindex:                                Other Builtins.     (line    6)
66433* rint:                                  Other Builtins.     (line    6)
66434* rintf:                                 Other Builtins.     (line    6)
66435* rintl:                                 Other Builtins.     (line    6)
66436* RISC-V Options:                        RISC-V Options.     (line    6)
66437* RL78 Options:                          RL78 Options.       (line    6)
66438* round:                                 Other Builtins.     (line    6)
66439* roundf:                                Other Builtins.     (line    6)
66440* roundl:                                Other Builtins.     (line    6)
66441* RS/6000 and PowerPC Options:           RS/6000 and PowerPC Options.
66442                                                             (line    6)
66443* RTTI:                                  Vague Linkage.      (line   42)
66444* run-time error checking options:       Instrumentation Options.
66445                                                             (line    6)
66446* run-time options:                      Code Gen Options.   (line    6)
66447* RX Options:                            RX Options.         (line    6)
66448* s in constraint:                       Simple Constraints. (line  100)
66449* S/390 and zSeries Options:             S/390 and zSeries Options.
66450                                                             (line    6)
66451* saddr variable attribute, RL78:        RL78 Variable Attributes.
66452                                                             (line    6)
66453* save all registers on the Blackfin:    Blackfin Function Attributes.
66454                                                             (line   56)
66455* save all registers on the H8/300, H8/300H, and H8S: H8/300 Function Attributes.
66456                                                             (line   23)
66457* saveall function attribute, Blackfin:  Blackfin Function Attributes.
66458                                                             (line   56)
66459* saveall function attribute, H8/300:    H8/300 Function Attributes.
66460                                                             (line   23)
66461* save_all function attribute, NDS32:    NDS32 Function Attributes.
66462                                                             (line   28)
66463* save_volatiles function attribute, MicroBlaze: MicroBlaze Function Attributes.
66464                                                             (line    9)
66465* scalar_storage_order type attribute:   Common Type Attributes.
66466                                                             (line  317)
66467* scalb:                                 Other Builtins.     (line    6)
66468* scalbf:                                Other Builtins.     (line    6)
66469* scalbl:                                Other Builtins.     (line    6)
66470* scalbln:                               Other Builtins.     (line    6)
66471* scalblnf:                              Other Builtins.     (line    6)
66472* scalblnf <1>:                          Other Builtins.     (line    6)
66473* scalbn:                                Other Builtins.     (line    6)
66474* scalbnf:                               Other Builtins.     (line    6)
66475* scanf, and constant strings:           Incompatibilities.  (line   17)
66476* scanfnl:                               Other Builtins.     (line    6)
66477* scope of a variable length array:      Variable Length.    (line   22)
66478* scope of declaration:                  Disappointments.    (line   21)
66479* scope of external declarations:        Incompatibilities.  (line   80)
66480* Score Options:                         Score Options.      (line    6)
66481* sda variable attribute, V850:          V850 Variable Attributes.
66482                                                             (line    9)
66483* search path:                           Directory Options.  (line    6)
66484* section function attribute:            Common Function Attributes.
66485                                                             (line  989)
66486* section variable attribute:            Common Variable Attributes.
66487                                                             (line  292)
66488* secure_call function attribute, ARC:   ARC Function Attributes.
66489                                                             (line   54)
66490* selectany variable attribute:          Microsoft Windows Variable Attributes.
66491                                                             (line   16)
66492* sentinel function attribute:           Common Function Attributes.
66493                                                             (line 1006)
66494* setjmp:                                Global Register Variables.
66495                                                             (line   92)
66496* setjmp incompatibilities:              Incompatibilities.  (line   39)
66497* shared attribute, Nvidia PTX:          Nvidia PTX Variable Attributes.
66498                                                             (line    9)
66499* shared strings:                        Incompatibilities.  (line    9)
66500* shared variable attribute:             Microsoft Windows Variable Attributes.
66501                                                             (line   37)
66502* shortcall function attribute, Blackfin: Blackfin Function Attributes.
66503                                                             (line   38)
66504* shortcall function attribute, PowerPC: PowerPC Function Attributes.
66505                                                             (line   10)
66506* short_call function attribute, ARC:    ARC Function Attributes.
66507                                                             (line   27)
66508* short_call function attribute, ARM:    ARM Function Attributes.
66509                                                             (line   38)
66510* short_call function attribute, Epiphany: Epiphany Function Attributes.
66511                                                             (line   57)
66512* short_call function attribute, MIPS:   MIPS Function Attributes.
66513                                                             (line   63)
66514* side effect in ?::                     Conditionals.       (line   20)
66515* side effects, macro argument:          Statement Exprs.    (line   35)
66516* side effects, order of evaluation:     Non-bugs.           (line  196)
66517* sign-return-address function attribute, AArch64: AArch64 Function Attributes.
66518                                                             (line   69)
66519* signal function attribute, AVR:        AVR Function Attributes.
66520                                                             (line   80)
66521* signbit:                               Other Builtins.     (line    6)
66522* signbitd128:                           Other Builtins.     (line    6)
66523* signbitd32:                            Other Builtins.     (line    6)
66524* signbitd64:                            Other Builtins.     (line    6)
66525* signbitf:                              Other Builtins.     (line    6)
66526* signbitl:                              Other Builtins.     (line    6)
66527* signed and unsigned values, comparison warning: Warning Options.
66528                                                             (line 2412)
66529* significand:                           Other Builtins.     (line    6)
66530* significandf:                          Other Builtins.     (line    6)
66531* significandl:                          Other Builtins.     (line    6)
66532* SIMD:                                  C Dialect Options.  (line  349)
66533* simd function attribute:               Common Function Attributes.
66534                                                             (line 1033)
66535* simple constraints:                    Simple Constraints. (line    6)
66536* sin:                                   Other Builtins.     (line    6)
66537* sincos:                                Other Builtins.     (line    6)
66538* sincosf:                               Other Builtins.     (line    6)
66539* sincosl:                               Other Builtins.     (line    6)
66540* sinf:                                  Other Builtins.     (line    6)
66541* sinh:                                  Other Builtins.     (line    6)
66542* sinhf:                                 Other Builtins.     (line    6)
66543* sinhl:                                 Other Builtins.     (line    6)
66544* sinl:                                  Other Builtins.     (line    6)
66545* sizeof:                                Typeof.             (line    6)
66546* smaller data references:               M32R/D Options.     (line   57)
66547* smaller data references <1>:           Nios II Options.    (line    9)
66548* smaller data references (PowerPC):     RS/6000 and PowerPC Options.
66549                                                             (line  713)
66550* snprintf:                              Other Builtins.     (line    6)
66551* Solaris 2 options:                     Solaris 2 Options.  (line    6)
66552* SOURCE_DATE_EPOCH:                     Environment Variables.
66553                                                             (line  177)
66554* SPARC options:                         SPARC Options.      (line    6)
66555* Spec Files:                            Spec Files.         (line    6)
66556* specified registers:                   Explicit Register Variables.
66557                                                             (line    6)
66558* specifying compiler version and target machine: Invoking GCC.
66559                                                             (line   24)
66560* specifying hardware config:            Submodel Options.   (line    6)
66561* specifying machine version:            Invoking GCC.       (line   24)
66562* specifying registers for local variables: Local Register Variables.
66563                                                             (line    6)
66564* speed of compilation:                  Precompiled Headers.
66565                                                             (line    6)
66566* sprintf:                               Other Builtins.     (line    6)
66567* sp_switch function attribute, SH:      SH Function Attributes.
66568                                                             (line   58)
66569* sqrt:                                  Other Builtins.     (line    6)
66570* sqrtf:                                 Other Builtins.     (line    6)
66571* sqrtl:                                 Other Builtins.     (line    6)
66572* sscanf:                                Other Builtins.     (line    6)
66573* sscanf, and constant strings:          Incompatibilities.  (line   17)
66574* sseregparm function attribute, x86:    x86 Function Attributes.
66575                                                             (line   93)
66576* stack_protect function attribute:      Common Function Attributes.
66577                                                             (line 1052)
66578* Statement Attributes:                  Statement Attributes.
66579                                                             (line    6)
66580* statements inside expressions:         Statement Exprs.    (line    6)
66581* static data in C++, declaring and defining: Static Definitions.
66582                                                             (line    6)
66583* stdcall function attribute, x86-32:    x86 Function Attributes.
66584                                                             (line  108)
66585* stpcpy:                                Other Builtins.     (line    6)
66586* stpncpy:                               Other Builtins.     (line    6)
66587* strcasecmp:                            Other Builtins.     (line    6)
66588* strcat:                                Other Builtins.     (line    6)
66589* strchr:                                Other Builtins.     (line    6)
66590* strcmp:                                Other Builtins.     (line    6)
66591* strcpy:                                Other Builtins.     (line    6)
66592* strcspn:                               Other Builtins.     (line    6)
66593* strdup:                                Other Builtins.     (line    6)
66594* strfmon:                               Other Builtins.     (line    6)
66595* strftime:                              Other Builtins.     (line    6)
66596* strict-align function attribute, AArch64: AArch64 Function Attributes.
66597                                                             (line   33)
66598* string constants:                      Incompatibilities.  (line    9)
66599* strlen:                                Other Builtins.     (line    6)
66600* strncasecmp:                           Other Builtins.     (line    6)
66601* strncat:                               Other Builtins.     (line    6)
66602* strncmp:                               Other Builtins.     (line    6)
66603* strncpy:                               Other Builtins.     (line    6)
66604* strndup:                               Other Builtins.     (line    6)
66605* strnlen:                               Other Builtins.     (line    6)
66606* strpbrk:                               Other Builtins.     (line    6)
66607* strrchr:                               Other Builtins.     (line    6)
66608* strspn:                                Other Builtins.     (line    6)
66609* strstr:                                Other Builtins.     (line    6)
66610* struct:                                Unnamed Fields.     (line    6)
66611* struct __htm_tdb:                      S/390 System z Built-in Functions.
66612                                                             (line   49)
66613* structures:                            Incompatibilities.  (line  146)
66614* structures, constructor expression:    Compound Literals.  (line    6)
66615* submodel options:                      Submodel Options.   (line    6)
66616* subscripting:                          Subscripting.       (line    6)
66617* subscripting and function values:      Subscripting.       (line    6)
66618* suffixes for C++ source:               Invoking G++.       (line    6)
66619* SUNPRO_DEPENDENCIES:                   Environment Variables.
66620                                                             (line  171)
66621* suppressing warnings:                  Warning Options.    (line    6)
66622* surprises in C++:                      C++ Misunderstandings.
66623                                                             (line    6)
66624* syntax checking:                       Warning Options.    (line   13)
66625* syscall_linkage function attribute, IA-64: IA-64 Function Attributes.
66626                                                             (line    9)
66627* system headers, warnings from:         Warning Options.    (line 1855)
66628* sysv_abi function attribute, x86:      x86 Function Attributes.
66629                                                             (line   34)
66630* tan:                                   Other Builtins.     (line    6)
66631* tanf:                                  Other Builtins.     (line    6)
66632* tanh:                                  Other Builtins.     (line    6)
66633* tanhf:                                 Other Builtins.     (line    6)
66634* tanhl:                                 Other Builtins.     (line    6)
66635* tanl:                                  Other Builtins.     (line    6)
66636* target function attribute:             Common Function Attributes.
66637                                                             (line 1057)
66638* target function attribute <1>:         ARM Function Attributes.
66639                                                             (line   77)
66640* target function attribute <2>:         Nios II Function Attributes.
66641                                                             (line    9)
66642* target function attribute <3>:         PowerPC Function Attributes.
66643                                                             (line   21)
66644* target function attribute <4>:         S/390 Function Attributes.
66645                                                             (line   22)
66646* target function attribute <5>:         x86 Function Attributes.
66647                                                             (line  180)
66648* target machine, specifying:            Invoking GCC.       (line   24)
66649* target("3dnow") function attribute, x86: x86 Function Attributes.
66650                                                             (line  186)
66651* target("3dnowa") function attribute, x86: x86 Function Attributes.
66652                                                             (line  190)
66653* target("abm") function attribute, x86: x86 Function Attributes.
66654                                                             (line  195)
66655* target("adx") function attribute, x86: x86 Function Attributes.
66656                                                             (line  200)
66657* target("aes") function attribute, x86: x86 Function Attributes.
66658                                                             (line  204)
66659* target("align-stringops") function attribute, x86: x86 Function Attributes.
66660                                                             (line  529)
66661* target("altivec") function attribute, PowerPC: PowerPC Function Attributes.
66662                                                             (line   28)
66663* target("arch=ARCH") function attribute, x86: x86 Function Attributes.
66664                                                             (line  538)
66665* target("arm") function attribute, ARM: ARM Function Attributes.
66666                                                             (line   87)
66667* target("avoid-indexed-addresses") function attribute, PowerPC: PowerPC Function Attributes.
66668                                                             (line  142)
66669* target("avx") function attribute, x86: x86 Function Attributes.
66670                                                             (line  208)
66671* target("avx2") function attribute, x86: x86 Function Attributes.
66672                                                             (line  212)
66673* target("avx5124fmaps") function attribute, x86: x86 Function Attributes.
66674                                                             (line  216)
66675* target("avx5124vnniw") function attribute, x86: x86 Function Attributes.
66676                                                             (line  221)
66677* target("avx512bitalg") function attribute, x86: x86 Function Attributes.
66678                                                             (line  226)
66679* target("avx512bw") function attribute, x86: x86 Function Attributes.
66680                                                             (line  231)
66681* target("avx512cd") function attribute, x86: x86 Function Attributes.
66682                                                             (line  235)
66683* target("avx512dq") function attribute, x86: x86 Function Attributes.
66684                                                             (line  239)
66685* target("avx512er") function attribute, x86: x86 Function Attributes.
66686                                                             (line  243)
66687* target("avx512f") function attribute, x86: x86 Function Attributes.
66688                                                             (line  247)
66689* target("avx512ifma") function attribute, x86: x86 Function Attributes.
66690                                                             (line  251)
66691* target("avx512pf") function attribute, x86: x86 Function Attributes.
66692                                                             (line  255)
66693* target("avx512vbmi") function attribute, x86: x86 Function Attributes.
66694                                                             (line  259)
66695* target("avx512vbmi2") function attribute, x86: x86 Function Attributes.
66696                                                             (line  263)
66697* target("avx512vl") function attribute, x86: x86 Function Attributes.
66698                                                             (line  267)
66699* target("avx512vnni") function attribute, x86: x86 Function Attributes.
66700                                                             (line  271)
66701* target("avx512vpopcntdq") function attribute, x86: x86 Function Attributes.
66702                                                             (line  275)
66703* target("bmi") function attribute, x86: x86 Function Attributes.
66704                                                             (line  280)
66705* target("bmi2") function attribute, x86: x86 Function Attributes.
66706                                                             (line  284)
66707* target("cld") function attribute, x86: x86 Function Attributes.
66708                                                             (line  505)
66709* target("cldemote") function attribute, x86: x86 Function Attributes.
66710                                                             (line  288)
66711* target("clflushopt") function attribute, x86: x86 Function Attributes.
66712                                                             (line  292)
66713* target("clwb") function attribute, x86: x86 Function Attributes.
66714                                                             (line  296)
66715* target("clzero") function attribute, x86: x86 Function Attributes.
66716                                                             (line  300)
66717* target("cmpb") function attribute, PowerPC: PowerPC Function Attributes.
66718                                                             (line   34)
66719* target("cpu=CPU") function attribute, PowerPC: PowerPC Function Attributes.
66720                                                             (line  157)
66721* target("crc32") function attribute, x86: x86 Function Attributes.
66722                                                             (line  304)
66723* target("custom-fpu-cfg=NAME") function attribute, Nios II: Nios II Function Attributes.
66724                                                             (line   25)
66725* target("custom-INSN=N") function attribute, Nios II: Nios II Function Attributes.
66726                                                             (line   16)
66727* target("cx16") function attribute, x86: x86 Function Attributes.
66728                                                             (line  308)
66729* target("default") function attribute, x86: x86 Function Attributes.
66730                                                             (line  311)
66731* target("dlmzb") function attribute, PowerPC: PowerPC Function Attributes.
66732                                                             (line   40)
66733* target("f16c") function attribute, x86: x86 Function Attributes.
66734                                                             (line  316)
66735* target("fancy-math-387") function attribute, x86: x86 Function Attributes.
66736                                                             (line  509)
66737* target("fma") function attribute, x86: x86 Function Attributes.
66738                                                             (line  320)
66739* target("fma4") function attribute, x86: x86 Function Attributes.
66740                                                             (line  324)
66741* target("fpmath=FPMATH") function attribute, x86: x86 Function Attributes.
66742                                                             (line  546)
66743* target("fprnd") function attribute, PowerPC: PowerPC Function Attributes.
66744                                                             (line   47)
66745* target("fpu=") function attribute, ARM: ARM Function Attributes.
66746                                                             (line   93)
66747* target("friz") function attribute, PowerPC: PowerPC Function Attributes.
66748                                                             (line  133)
66749* target("fsgsbase") function attribute, x86: x86 Function Attributes.
66750                                                             (line  328)
66751* target("fxsr") function attribute, x86: x86 Function Attributes.
66752                                                             (line  332)
66753* target("gfni") function attribute, x86: x86 Function Attributes.
66754                                                             (line  336)
66755* target("hard-dfp") function attribute, PowerPC: PowerPC Function Attributes.
66756                                                             (line   53)
66757* target("hle") function attribute, x86: x86 Function Attributes.
66758                                                             (line  340)
66759* target("ieee-fp") function attribute, x86: x86 Function Attributes.
66760                                                             (line  514)
66761* target("inline-all-stringops") function attribute, x86: x86 Function Attributes.
66762                                                             (line  519)
66763* target("inline-stringops-dynamically") function attribute, x86: x86 Function Attributes.
66764                                                             (line  523)
66765* target("isel") function attribute, PowerPC: PowerPC Function Attributes.
66766                                                             (line   59)
66767* target("longcall") function attribute, PowerPC: PowerPC Function Attributes.
66768                                                             (line  152)
66769* target("lwp") function attribute, x86: x86 Function Attributes.
66770                                                             (line  344)
66771* target("lzcnt") function attribute, x86: x86 Function Attributes.
66772                                                             (line  348)
66773* target("mfcrf") function attribute, PowerPC: PowerPC Function Attributes.
66774                                                             (line   63)
66775* target("mmx") function attribute, x86: x86 Function Attributes.
66776                                                             (line  352)
66777* target("movbe") function attribute, x86: x86 Function Attributes.
66778                                                             (line  356)
66779* target("movdir64b") function attribute, x86: x86 Function Attributes.
66780                                                             (line  360)
66781* target("movdiri") function attribute, x86: x86 Function Attributes.
66782                                                             (line  364)
66783* target("mulhw") function attribute, PowerPC: PowerPC Function Attributes.
66784                                                             (line   70)
66785* target("multiple") function attribute, PowerPC: PowerPC Function Attributes.
66786                                                             (line   77)
66787* target("mwaitx") function attribute, x86: x86 Function Attributes.
66788                                                             (line  368)
66789* target("no-custom-INSN") function attribute, Nios II: Nios II Function Attributes.
66790                                                             (line   16)
66791* target("paired") function attribute, PowerPC: PowerPC Function Attributes.
66792                                                             (line  147)
66793* target("pclmul") function attribute, x86: x86 Function Attributes.
66794                                                             (line  372)
66795* target("pconfig") function attribute, x86: x86 Function Attributes.
66796                                                             (line  376)
66797* target("pku") function attribute, x86: x86 Function Attributes.
66798                                                             (line  380)
66799* target("popcnt") function attribute, x86: x86 Function Attributes.
66800                                                             (line  384)
66801* target("popcntb") function attribute, PowerPC: PowerPC Function Attributes.
66802                                                             (line   88)
66803* target("popcntd") function attribute, PowerPC: PowerPC Function Attributes.
66804                                                             (line   95)
66805* target("powerpc-gfxopt") function attribute, PowerPC: PowerPC Function Attributes.
66806                                                             (line  101)
66807* target("powerpc-gpopt") function attribute, PowerPC: PowerPC Function Attributes.
66808                                                             (line  107)
66809* target("prefetchwt1") function attribute, x86: x86 Function Attributes.
66810                                                             (line  388)
66811* target("prfchw") function attribute, x86: x86 Function Attributes.
66812                                                             (line  392)
66813* target("ptwrite") function attribute, x86: x86 Function Attributes.
66814                                                             (line  396)
66815* target("rdpid") function attribute, x86: x86 Function Attributes.
66816                                                             (line  400)
66817* target("rdrnd") function attribute, x86: x86 Function Attributes.
66818                                                             (line  404)
66819* target("rdseed") function attribute, x86: x86 Function Attributes.
66820                                                             (line  408)
66821* target("recip") function attribute, x86: x86 Function Attributes.
66822                                                             (line  533)
66823* target("recip-precision") function attribute, PowerPC: PowerPC Function Attributes.
66824                                                             (line  113)
66825* target("rtm") function attribute, x86: x86 Function Attributes.
66826                                                             (line  412)
66827* target("sahf") function attribute, x86: x86 Function Attributes.
66828                                                             (line  416)
66829* target("sgx") function attribute, x86: x86 Function Attributes.
66830                                                             (line  420)
66831* target("sha") function attribute, x86: x86 Function Attributes.
66832                                                             (line  424)
66833* target("shstk") function attribute, x86: x86 Function Attributes.
66834                                                             (line  428)
66835* target("sse") function attribute, x86: x86 Function Attributes.
66836                                                             (line  432)
66837* target("sse2") function attribute, x86: x86 Function Attributes.
66838                                                             (line  436)
66839* target("sse3") function attribute, x86: x86 Function Attributes.
66840                                                             (line  440)
66841* target("sse4") function attribute, x86: x86 Function Attributes.
66842                                                             (line  444)
66843* target("sse4.1") function attribute, x86: x86 Function Attributes.
66844                                                             (line  449)
66845* target("sse4.2") function attribute, x86: x86 Function Attributes.
66846                                                             (line  453)
66847* target("sse4a") function attribute, x86: x86 Function Attributes.
66848                                                             (line  457)
66849* target("ssse3") function attribute, x86: x86 Function Attributes.
66850                                                             (line  461)
66851* target("string") function attribute, PowerPC: PowerPC Function Attributes.
66852                                                             (line  119)
66853* target("tbm") function attribute, x86: x86 Function Attributes.
66854                                                             (line  465)
66855* target("thumb") function attribute, ARM: ARM Function Attributes.
66856                                                             (line   83)
66857* target("tune=TUNE") function attribute, PowerPC: PowerPC Function Attributes.
66858                                                             (line  164)
66859* target("tune=TUNE") function attribute, x86: x86 Function Attributes.
66860                                                             (line  542)
66861* target("update") function attribute, PowerPC: PowerPC Function Attributes.
66862                                                             (line   82)
66863* target("vaes") function attribute, x86: x86 Function Attributes.
66864                                                             (line  469)
66865* target("vpclmulqdq") function attribute, x86: x86 Function Attributes.
66866                                                             (line  473)
66867* target("vsx") function attribute, PowerPC: PowerPC Function Attributes.
66868                                                             (line  125)
66869* target("waitpkg") function attribute, x86: x86 Function Attributes.
66870                                                             (line  477)
66871* target("wbnoinvd") function attribute, x86: x86 Function Attributes.
66872                                                             (line  481)
66873* target("xop") function attribute, x86: x86 Function Attributes.
66874                                                             (line  485)
66875* target("xsave") function attribute, x86: x86 Function Attributes.
66876                                                             (line  489)
66877* target("xsavec") function attribute, x86: x86 Function Attributes.
66878                                                             (line  493)
66879* target("xsaveopt") function attribute, x86: x86 Function Attributes.
66880                                                             (line  497)
66881* target("xsaves") function attribute, x86: x86 Function Attributes.
66882                                                             (line  501)
66883* target-dependent options:              Submodel Options.   (line    6)
66884* target_clones function attribute:      Common Function Attributes.
66885                                                             (line 1126)
66886* TC1:                                   Standards.          (line   13)
66887* TC2:                                   Standards.          (line   13)
66888* TC3:                                   Standards.          (line   13)
66889* tda variable attribute, V850:          V850 Variable Attributes.
66890                                                             (line   13)
66891* Technical Corrigenda:                  Standards.          (line   13)
66892* Technical Corrigendum 1:               Standards.          (line   13)
66893* Technical Corrigendum 2:               Standards.          (line   13)
66894* Technical Corrigendum 3:               Standards.          (line   13)
66895* template instantiation:                Template Instantiation.
66896                                                             (line    6)
66897* temporaries, lifetime of:              Temporaries.        (line    6)
66898* tentative definitions:                 Code Gen Options.   (line  231)
66899* TERM_URLS environment variable:        Diagnostic Message Formatting Options.
66900                                                             (line  129)
66901* tgamma:                                Other Builtins.     (line    6)
66902* tgammaf:                               Other Builtins.     (line    6)
66903* tgammal:                               Other Builtins.     (line    6)
66904* thiscall function attribute, x86-32:   x86 Function Attributes.
66905                                                             (line   23)
66906* Thread-Local Storage:                  Thread-Local.       (line    6)
66907* thunks:                                Nested Functions.   (line    6)
66908* TILE-Gx options:                       TILE-Gx Options.    (line    6)
66909* TILEPro options:                       TILEPro Options.    (line    6)
66910* tiny data section on the H8/300H and H8S: H8/300 Variable Attributes.
66911                                                             (line   19)
66912* tiny type attribute, MeP:              MeP Type Attributes.
66913                                                             (line    6)
66914* tiny variable attribute, MeP:          MeP Variable Attributes.
66915                                                             (line   20)
66916* tiny_data variable attribute, H8/300:  H8/300 Variable Attributes.
66917                                                             (line   19)
66918* TLS:                                   Thread-Local.       (line    6)
66919* tls-dialect= function attribute, AArch64: AArch64 Function Attributes.
66920                                                             (line   48)
66921* tls_model variable attribute:          Common Variable Attributes.
66922                                                             (line  337)
66923* TMPDIR:                                Environment Variables.
66924                                                             (line   45)
66925* toascii:                               Other Builtins.     (line    6)
66926* tolower:                               Other Builtins.     (line    6)
66927* toupper:                               Other Builtins.     (line    6)
66928* towlower:                              Other Builtins.     (line    6)
66929* towupper:                              Other Builtins.     (line    6)
66930* traditional C language:                Preprocessor Options.
66931                                                             (line  370)
66932* transparent_union type attribute:      Common Type Attributes.
66933                                                             (line  357)
66934* trapa_handler function attribute, SH:  SH Function Attributes.
66935                                                             (line   73)
66936* trap_exit function attribute, SH:      SH Function Attributes.
66937                                                             (line   68)
66938* trunc:                                 Other Builtins.     (line    6)
66939* truncf:                                Other Builtins.     (line    6)
66940* truncl:                                Other Builtins.     (line    6)
66941* tune= function attribute, AArch64:     AArch64 Function Attributes.
66942                                                             (line   58)
66943* two-stage name lookup:                 Name lookup.        (line    6)
66944* type alignment:                        Alignment.          (line    6)
66945* type attributes:                       Type Attributes.    (line    6)
66946* type-diff GCC_COLORS capability:       Diagnostic Message Formatting Options.
66947                                                             (line  125)
66948* typedef names as function parameters:  Incompatibilities.  (line   97)
66949* typeof:                                Typeof.             (line    6)
66950* type_info:                             Vague Linkage.      (line   42)
66951* uhk fixed-suffix:                      Fixed-Point.        (line    6)
66952* UHK fixed-suffix:                      Fixed-Point.        (line    6)
66953* uhr fixed-suffix:                      Fixed-Point.        (line    6)
66954* UHR fixed-suffix:                      Fixed-Point.        (line    6)
66955* uk fixed-suffix:                       Fixed-Point.        (line    6)
66956* UK fixed-suffix:                       Fixed-Point.        (line    6)
66957* ulk fixed-suffix:                      Fixed-Point.        (line    6)
66958* ULK fixed-suffix:                      Fixed-Point.        (line    6)
66959* ULL integer suffix:                    Long Long.          (line    6)
66960* ullk fixed-suffix:                     Fixed-Point.        (line    6)
66961* ULLK fixed-suffix:                     Fixed-Point.        (line    6)
66962* ullr fixed-suffix:                     Fixed-Point.        (line    6)
66963* ULLR fixed-suffix:                     Fixed-Point.        (line    6)
66964* ulr fixed-suffix:                      Fixed-Point.        (line    6)
66965* ULR fixed-suffix:                      Fixed-Point.        (line    6)
66966* uncached type attribute, ARC:          ARC Type Attributes.
66967                                                             (line    6)
66968* undefined behavior:                    Bug Criteria.       (line   17)
66969* undefined function value:              Bug Criteria.       (line   17)
66970* underscores in variables in macros:    Typeof.             (line   46)
66971* union:                                 Unnamed Fields.     (line    6)
66972* union, casting to a:                   Cast to Union.      (line    6)
66973* unions:                                Incompatibilities.  (line  146)
66974* unknown pragmas, warning:              Warning Options.    (line 1299)
66975* unresolved references and -nodefaultlibs: Link Options.    (line  154)
66976* unresolved references and -nostdlib:   Link Options.       (line  154)
66977* unused function attribute:             Common Function Attributes.
66978                                                             (line 1153)
66979* unused label attribute:                Label Attributes.   (line   31)
66980* unused type attribute:                 Common Type Attributes.
66981                                                             (line  410)
66982* unused variable attribute:             Common Variable Attributes.
66983                                                             (line  346)
66984* upper function attribute, MSP430:      MSP430 Function Attributes.
66985                                                             (line   57)
66986* upper variable attribute, MSP430:      MSP430 Variable Attributes.
66987                                                             (line   23)
66988* ur fixed-suffix:                       Fixed-Point.        (line    6)
66989* UR fixed-suffix:                       Fixed-Point.        (line    6)
66990* urls:                                  Diagnostic Message Formatting Options.
66991                                                             (line  129)
66992* used function attribute:               Common Function Attributes.
66993                                                             (line 1158)
66994* used variable attribute:               Common Variable Attributes.
66995                                                             (line  351)
66996* User stack pointer in interrupts on the Blackfin: Blackfin Function Attributes.
66997                                                             (line   21)
66998* use_debug_exception_return function attribute, MIPS: MIPS Function Attributes.
66999                                                             (line   39)
67000* use_shadow_register_set function attribute, MIPS: MIPS Function Attributes.
67001                                                             (line   28)
67002* V in constraint:                       Simple Constraints. (line   43)
67003* V850 Options:                          V850 Options.       (line    6)
67004* vague linkage:                         Vague Linkage.      (line    6)
67005* value after longjmp:                   Global Register Variables.
67006                                                             (line   92)
67007* variable addressability on the M32R/D: M32R/D Variable Attributes.
67008                                                             (line    9)
67009* variable alignment:                    Alignment.          (line    6)
67010* variable attributes:                   Variable Attributes.
67011                                                             (line    6)
67012* variable number of arguments:          Variadic Macros.    (line    6)
67013* variable-length array in a structure:  Variable Length.    (line   26)
67014* variable-length array scope:           Variable Length.    (line   22)
67015* variable-length arrays:                Variable Length.    (line    6)
67016* variables in specified registers:      Explicit Register Variables.
67017                                                             (line    6)
67018* variables, local, in macros:           Typeof.             (line   46)
67019* variadic functions, pointer arguments: Variadic Pointer Args.
67020                                                             (line    6)
67021* variadic macros:                       Variadic Macros.    (line    6)
67022* VAX options:                           VAX Options.        (line    6)
67023* vector function attribute, RX:         RX Function Attributes.
67024                                                             (line   49)
67025* vector types, using with x86 intrinsics: Vector Extensions.
67026                                                             (line  188)
67027* vector_size type attribute:            Common Type Attributes.
67028                                                             (line  419)
67029* vector_size variable attribute:        Common Variable Attributes.
67030                                                             (line  360)
67031* version_id function attribute, IA-64:  IA-64 Function Attributes.
67032                                                             (line   16)
67033* vfprintf:                              Other Builtins.     (line    6)
67034* vfscanf:                               Other Builtins.     (line    6)
67035* visibility function attribute:         Common Function Attributes.
67036                                                             (line 1168)
67037* visibility type attribute:             Common Type Attributes.
67038                                                             (line  446)
67039* visibility variable attribute:         Common Variable Attributes.
67040                                                             (line  388)
67041* Visium options:                        Visium Options.     (line    6)
67042* VLAs:                                  Variable Length.    (line    6)
67043* vliw function attribute, MeP:          MeP Function Attributes.
67044                                                             (line   30)
67045* void pointers, arithmetic:             Pointer Arith.      (line    6)
67046* void, size of pointer to:              Pointer Arith.      (line    6)
67047* volatile access:                       Volatiles.          (line    6)
67048* volatile access <1>:                   C++ Volatiles.      (line    6)
67049* volatile applied to function:          Function Attributes.
67050                                                             (line    6)
67051* volatile asm:                          Extended Asm.       (line  116)
67052* volatile read:                         Volatiles.          (line    6)
67053* volatile read <1>:                     C++ Volatiles.      (line    6)
67054* volatile write:                        Volatiles.          (line    6)
67055* volatile write <1>:                    C++ Volatiles.      (line    6)
67056* vprintf:                               Other Builtins.     (line    6)
67057* vscanf:                                Other Builtins.     (line    6)
67058* vsnprintf:                             Other Builtins.     (line    6)
67059* vsprintf:                              Other Builtins.     (line    6)
67060* vsscanf:                               Other Builtins.     (line    6)
67061* vtable:                                Vague Linkage.      (line   27)
67062* VxWorks Options:                       VxWorks Options.    (line    6)
67063* w floating point suffix:               Floating Types.     (line    6)
67064* W floating point suffix:               Floating Types.     (line    6)
67065* wakeup function attribute, MSP430:     MSP430 Function Attributes.
67066                                                             (line   49)
67067* warm function attribute, NDS32:        NDS32 Function Attributes.
67068                                                             (line   52)
67069* warning for comparison of signed and unsigned values: Warning Options.
67070                                                             (line 2412)
67071* warning for overloaded virtual function: C++ Dialect Options.
67072                                                             (line  817)
67073* warning for reordering of member initializers: C++ Dialect Options.
67074                                                             (line  665)
67075* warning for unknown pragmas:           Warning Options.    (line 1299)
67076* warning function attribute:            Common Function Attributes.
67077                                                             (line  343)
67078* warning GCC_COLORS capability:         Diagnostic Message Formatting Options.
67079                                                             (line   80)
67080* warning messages:                      Warning Options.    (line    6)
67081* warnings from system headers:          Warning Options.    (line 1855)
67082* warnings vs errors:                    Warnings and Errors.
67083                                                             (line    6)
67084* warn_if_not_aligned type attribute:    Common Type Attributes.
67085                                                             (line   91)
67086* warn_if_not_aligned variable attribute: Common Variable Attributes.
67087                                                             (line  106)
67088* warn_unused type attribute:            C++ Attributes.     (line   71)
67089* warn_unused_result function attribute: Common Function Attributes.
67090                                                             (line 1268)
67091* weak function attribute:               Common Function Attributes.
67092                                                             (line 1285)
67093* weak variable attribute:               Common Variable Attributes.
67094                                                             (line  393)
67095* weakref function attribute:            Common Function Attributes.
67096                                                             (line 1297)
67097* whitespace:                            Incompatibilities.  (line  112)
67098* Windows Options for x86:               x86 Windows Options.
67099                                                             (line    6)
67100* X in constraint:                       Simple Constraints. (line  122)
67101* X3.159-1989:                           Standards.          (line   13)
67102* x86 named address spaces:              Named Address Spaces.
67103                                                             (line  170)
67104* x86 Options:                           x86 Options.        (line    6)
67105* x86 Windows Options:                   x86 Windows Options.
67106                                                             (line    6)
67107* Xstormy16 Options:                     Xstormy16 Options.  (line    6)
67108* Xtensa Options:                        Xtensa Options.     (line    6)
67109* y0:                                    Other Builtins.     (line    6)
67110* y0f:                                   Other Builtins.     (line    6)
67111* y0l:                                   Other Builtins.     (line    6)
67112* y1:                                    Other Builtins.     (line    6)
67113* y1f:                                   Other Builtins.     (line    6)
67114* y1l:                                   Other Builtins.     (line    6)
67115* yn:                                    Other Builtins.     (line    6)
67116* ynf:                                   Other Builtins.     (line    6)
67117* ynl:                                   Other Builtins.     (line    6)
67118* zda variable attribute, V850:          V850 Variable Attributes.
67119                                                             (line   17)
67120* zero-length arrays:                    Zero Length.        (line    6)
67121* zero-size structures:                  Empty Structures.   (line    6)
67122* zSeries options:                       zSeries Options.    (line    6)
67123
67124
67125
67126Tag Table:
67127Node: Top2135
67128Node: G++ and GCC4093
67129Node: Standards6153
67130Node: Invoking GCC19770
67131Node: Option Summary24946
67132Node: Overall Options79977
67133Node: Invoking G++95305
67134Node: C Dialect Options96828
67135Node: C++ Dialect Options116060
67136Node: Objective-C and Objective-C++ Dialect Options165202
67137Node: Diagnostic Message Formatting Options176598
67138Node: Warning Options202319
67139Ref: Wtrigraphs298379
67140Node: Static Analyzer Options334064
67141Node: Debugging Options346773
67142Node: Optimize Options366022
67143Ref: Type-punning435591
67144Node: Instrumentation Options542439
67145Node: Preprocessor Options582339
67146Ref: dashMF587186
67147Ref: fdollars-in-identifiers591765
67148Node: Assembler Options604145
67149Node: Link Options604836
67150Ref: Link Options-Footnote-1621712
67151Node: Directory Options622048
67152Node: Code Gen Options630451
67153Node: Developer Options658816
67154Node: Submodel Options700730
67155Node: AArch64 Options702540
67156Ref: aarch64-feature-modifiers716832
67157Node: Adapteva Epiphany Options721944
67158Node: AMD GCN Options727896
67159Node: ARC Options728790
67160Node: ARM Options750016
67161Node: AVR Options790781
67162Node: Blackfin Options817303
67163Node: C6X Options825195
67164Node: CRIS Options826738
67165Node: CR16 Options830477
67166Node: C-SKY Options831389
67167Node: Darwin Options836249
67168Node: DEC Alpha Options843690
67169Node: eBPF Options855306
67170Node: FR30 Options856348
67171Node: FT32 Options856908
67172Node: FRV Options857854
67173Node: GNU/Linux Options864618
67174Node: H8/300 Options865999
67175Node: HPPA Options867451
67176Node: IA-64 Options876983
67177Node: LM32 Options885111
67178Node: M32C Options885634
67179Node: M32R/D Options886907
67180Node: M680x0 Options890452
67181Node: MCore Options904527
67182Node: MeP Options906029
67183Node: MicroBlaze Options909989
67184Node: MIPS Options913079
67185Node: MMIX Options949618
67186Node: MN10300 Options952095
67187Node: Moxie Options954638
67188Node: MSP430 Options955125
67189Node: NDS32 Options962221
67190Node: Nios II Options964391
67191Node: Nvidia PTX Options976553
67192Node: OpenRISC Options979022
67193Node: PDP-11 Options981542
67194Node: picoChip Options982791
67195Node: PowerPC Options984929
67196Node: PRU Options985149
67197Node: RISC-V Options987358
67198Node: RL78 Options992862
67199Node: RS/6000 and PowerPC Options996637
67200Node: RX Options1037589
67201Node: S/390 and zSeries Options1046191
67202Node: Score Options1056954
67203Node: SH Options1057803
67204Node: Solaris 2 Options1072943
67205Node: SPARC Options1074181
67206Node: System V Options1089807
67207Node: TILE-Gx Options1090635
67208Node: TILEPro Options1091653
67209Node: V850 Options1092157
67210Node: VAX Options1098844
67211Node: Visium Options1099382
67212Node: VMS Options1101690
67213Node: VxWorks Options1102506
67214Node: x86 Options1103658
67215Node: x86 Windows Options1165768
67216Node: Xstormy16 Options1168573
67217Node: Xtensa Options1168867
67218Node: zSeries Options1174016
67219Node: Spec Files1174212
67220Node: Environment Variables1196380
67221Node: Precompiled Headers1205106
67222Node: C Implementation1211295
67223Node: Translation implementation1212985
67224Node: Environment implementation1213576
67225Node: Identifiers implementation1214130
67226Node: Characters implementation1215216
67227Node: Integers implementation1218866
67228Node: Floating point implementation1220915
67229Node: Arrays and pointers implementation1223978
67230Ref: Arrays and pointers implementation-Footnote-11225438
67231Node: Hints implementation1225564
67232Node: Structures unions enumerations and bit-fields implementation1227059
67233Node: Qualifiers implementation1229283
67234Node: Declarators implementation1231062
67235Node: Statements implementation1231403
67236Node: Preprocessing directives implementation1231729
67237Node: Library functions implementation1234050
67238Node: Architecture implementation1234699
67239Node: Locale-specific behavior implementation1236344
67240Node: C++ Implementation1236649
67241Node: Conditionally-supported behavior1237932
67242Node: Exception handling1238549
67243Node: C Extensions1239016
67244Node: Statement Exprs1244220
67245Node: Local Labels1249592
67246Node: Labels as Values1252565
67247Ref: Labels as Values-Footnote-11255092
67248Node: Nested Functions1255277
67249Node: Nonlocal Gotos1259231
67250Node: Constructing Calls1261497
67251Node: Typeof1266212
67252Node: Conditionals1270141
67253Node: __int1281271030
67254Node: Long Long1271555
67255Node: Complex1273046
67256Node: Floating Types1275814
67257Node: Half-Precision1279281
67258Node: Decimal Float1281692
67259Node: Hex Floats1283546
67260Node: Fixed-Point1284620
67261Node: Named Address Spaces1287878
67262Ref: AVR Named Address Spaces1288559
67263Node: Zero Length1295171
67264Node: Empty Structures1299352
67265Node: Variable Length1299758
67266Node: Variadic Macros1302476
67267Node: Escaped Newlines1304854
67268Node: Subscripting1305715
67269Node: Pointer Arith1306440
67270Node: Variadic Pointer Args1307017
67271Node: Pointers to Arrays1307742
67272Node: Initializers1308495
67273Node: Compound Literals1308996
67274Node: Designated Inits1312563
67275Node: Case Ranges1316487
67276Node: Cast to Union1317168
67277Node: Mixed Declarations1318891
67278Node: Function Attributes1319401
67279Node: Common Function Attributes1323829
67280Node: AArch64 Function Attributes1388670
67281Node: AMD GCN Function Attributes1394864
67282Node: ARC Function Attributes1397917
67283Node: ARM Function Attributes1400854
67284Node: AVR Function Attributes1405993
67285Node: Blackfin Function Attributes1410528
67286Node: CR16 Function Attributes1413026
67287Node: C-SKY Function Attributes1413550
67288Node: Epiphany Function Attributes1414847
67289Node: H8/300 Function Attributes1417602
67290Node: IA-64 Function Attributes1418800
67291Node: M32C Function Attributes1419842
67292Node: M32R/D Function Attributes1422180
67293Node: m68k Function Attributes1423654
67294Node: MCORE Function Attributes1424598
67295Node: MeP Function Attributes1425409
67296Node: MicroBlaze Function Attributes1426710
67297Node: Microsoft Windows Function Attributes1428217
67298Node: MIPS Function Attributes1432786
67299Node: MSP430 Function Attributes1438404
67300Node: NDS32 Function Attributes1442483
67301Node: Nios II Function Attributes1444907
67302Node: Nvidia PTX Function Attributes1446204
67303Node: PowerPC Function Attributes1446819
67304Node: RISC-V Function Attributes1453593
67305Node: RL78 Function Attributes1455009
67306Node: RX Function Attributes1456248
67307Node: S/390 Function Attributes1458795
67308Node: SH Function Attributes1460623
67309Node: Symbian OS Function Attributes1464051
67310Node: V850 Function Attributes1464387
67311Node: Visium Function Attributes1464932
67312Node: x86 Function Attributes1465460
67313Node: Xstormy16 Function Attributes1487949
67314Node: Variable Attributes1488456
67315Node: Common Variable Attributes1489989
67316Node: ARC Variable Attributes1508119
67317Node: AVR Variable Attributes1508501
67318Node: Blackfin Variable Attributes1513663
67319Node: H8/300 Variable Attributes1514521
67320Node: IA-64 Variable Attributes1515594
67321Node: M32R/D Variable Attributes1516345
67322Node: MeP Variable Attributes1517128
67323Node: Microsoft Windows Variable Attributes1519221
67324Node: MSP430 Variable Attributes1521674
67325Node: Nvidia PTX Variable Attributes1523628
67326Node: PowerPC Variable Attributes1524245
67327Node: RL78 Variable Attributes1524802
67328Node: V850 Variable Attributes1525221
67329Node: x86 Variable Attributes1525854
67330Node: Xstormy16 Variable Attributes1526910
67331Node: Type Attributes1527480
67332Node: Common Type Attributes1529144
67333Node: ARC Type Attributes1550637
67334Node: ARM Type Attributes1551109
67335Node: MeP Type Attributes1551891
67336Node: PowerPC Type Attributes1552293
67337Node: x86 Type Attributes1553282
67338Node: Label Attributes1554274
67339Node: Enumerator Attributes1556207
67340Node: Statement Attributes1557526
67341Node: Attribute Syntax1559009
67342Node: Function Prototypes1570267
67343Node: C++ Comments1572047
67344Node: Dollar Signs1572566
67345Node: Character Escapes1573031
67346Node: Alignment1573315
67347Node: Inline1574968
67348Node: Volatiles1579785
67349Node: Using Assembly Language with C1582684
67350Node: Basic Asm1583921
67351Node: Extended Asm1589371
67352Ref: Volatile1593470
67353Ref: AssemblerTemplate1597590
67354Ref: OutputOperands1601830
67355Ref: FlagOutputOperands1608793
67356Ref: InputOperands1611740
67357Ref: Clobbers and Scratch Registers1616008
67358Ref: GotoLabels1624649
67359Ref: x86Operandmodifiers1626784
67360Ref: x86floatingpointasmoperands1629941
67361Node: Constraints1633270
67362Node: Simple Constraints1634376
67363Node: Multi-Alternative1641690
67364Node: Modifiers1643365
67365Node: Machine Constraints1646163
67366Node: Asm Labels1702388
67367Node: Explicit Register Variables1704008
67368Ref: Explicit Reg Vars1704222
67369Node: Global Register Variables1704831
67370Ref: Global Reg Vars1705039
67371Node: Local Register Variables1709821
67372Ref: Local Reg Vars1710041
67373Node: Size of an asm1713669
67374Node: Alternate Keywords1715147
67375Node: Incomplete Enums1716652
67376Node: Function Names1717409
67377Node: Return Address1719313
67378Node: Vector Extensions1723900
67379Node: Offsetof1733665
67380Node: __sync Builtins1734498
67381Node: __atomic Builtins1740941
67382Node: Integer Overflow Builtins1754566
67383Node: x86 specific memory model extensions for transactional memory1761049
67384Node: Object Size Checking1762315
67385Node: Other Builtins1768571
67386Node: Target Builtins1818022
67387Node: AArch64 Built-in Functions1819763
67388Node: Alpha Built-in Functions1820218
67389Node: Altera Nios II Built-in Functions1823266
67390Node: ARC Built-in Functions1827635
67391Node: ARC SIMD Built-in Functions1832847
67392Node: ARM iWMMXt Built-in Functions1841743
67393Node: ARM C Language Extensions (ACLE)1848739
67394Node: ARM Floating Point Status and Control Intrinsics1850078
67395Node: ARM ARMv8-M Security Extensions1850563
67396Node: AVR Built-in Functions1851908
67397Node: Blackfin Built-in Functions1855669
67398Node: BPF Built-in Functions1856287
67399Node: BPF Kernel Helpers1857182
67400Node: FR-V Built-in Functions1866910
67401Node: Argument Types1867769
67402Node: Directly-mapped Integer Functions1869523
67403Node: Directly-mapped Media Functions1870607
67404Node: Raw read/write Functions1878813
67405Node: Other Built-in Functions1879721
67406Node: MIPS DSP Built-in Functions1880907
67407Node: MIPS Paired-Single Support1893404
67408Node: MIPS Loongson Built-in Functions1894903
67409Node: Paired-Single Arithmetic1901425
67410Node: Paired-Single Built-in Functions1902373
67411Node: MIPS-3D Built-in Functions1905040
67412Node: MIPS SIMD Architecture (MSA) Support1910434
67413Node: MIPS SIMD Architecture Built-in Functions1913274
67414Node: Other MIPS Built-in Functions1940128
67415Node: MSP430 Built-in Functions1941137
67416Node: NDS32 Built-in Functions1942538
67417Node: picoChip Built-in Functions1943831
67418Node: Basic PowerPC Built-in Functions1945180
67419Node: Basic PowerPC Built-in Functions Available on all Configurations1945980
67420Node: Basic PowerPC Built-in Functions Available on ISA 2.051954489
67421Node: Basic PowerPC Built-in Functions Available on ISA 2.061959324
67422Node: Basic PowerPC Built-in Functions Available on ISA 2.071961404
67423Node: Basic PowerPC Built-in Functions Available on ISA 3.01962258
67424Node: PowerPC AltiVec/VSX Built-in Functions1969174
67425Node: PowerPC AltiVec Built-in Functions on ISA 2.051972856
67426Node: PowerPC AltiVec Built-in Functions Available on ISA 2.062062094
67427Node: PowerPC AltiVec Built-in Functions Available on ISA 2.072086539
67428Node: PowerPC AltiVec Built-in Functions Available on ISA 3.02107743
67429Node: PowerPC Hardware Transactional Memory Built-in Functions2142879
67430Node: PowerPC Atomic Memory Operation Functions2151394
67431Node: PowerPC Matrix-Multiply Assist Built-in Functions2153957
67432Node: RX Built-in Functions2159952
67433Node: S/390 System z Built-in Functions2163978
67434Node: SH Built-in Functions2169208
67435Node: SPARC VIS Built-in Functions2170936
67436Node: TI C6X Built-in Functions2179468
67437Node: TILE-Gx Built-in Functions2180499
67438Node: TILEPro Built-in Functions2181618
67439Node: x86 Built-in Functions2182718
67440Node: x86 transactional memory intrinsics2246524
67441Node: x86 control-flow protection intrinsics2249791
67442Node: Target Format Checks2251562
67443Node: Solaris Format Checks2251994
67444Node: Darwin Format Checks2252420
67445Node: Pragmas2253383
67446Node: AArch64 Pragmas2254324
67447Node: ARM Pragmas2254781
67448Node: M32C Pragmas2255408
67449Node: MeP Pragmas2256480
67450Node: PRU Pragmas2258532
67451Node: RS/6000 and PowerPC Pragmas2259110
67452Node: S/390 Pragmas2259850
67453Node: Darwin Pragmas2260416
67454Node: Solaris Pragmas2261469
67455Node: Symbol-Renaming Pragmas2262633
67456Node: Structure-Layout Pragmas2264270
67457Node: Weak Pragmas2266550
67458Node: Diagnostic Pragmas2267285
67459Node: Visibility Pragmas2271476
67460Node: Push/Pop Macro Pragmas2272161
67461Node: Function Specific Option Pragmas2273134
67462Node: Loop-Specific Pragmas2275100
67463Node: Unnamed Fields2276700
67464Node: Thread-Local2278897
67465Node: C99 Thread-Local Edits2281003
67466Node: C++98 Thread-Local Edits2283001
67467Node: Binary constants2286446
67468Node: C++ Extensions2287117
67469Node: C++ Volatiles2288747
67470Node: Restricted Pointers2291095
67471Node: Vague Linkage2292686
67472Node: C++ Interface2296309
67473Ref: C++ Interface-Footnote-12300106
67474Node: Template Instantiation2300244
67475Node: Bound member functions2306335
67476Node: C++ Attributes2307867
67477Node: Function Multiversioning2311939
67478Node: Type Traits2313746
67479Node: C++ Concepts2320696
67480Node: Deprecated Features2322202
67481Node: Backwards Compatibility2324027
67482Node: Objective-C2325099
67483Node: GNU Objective-C runtime API2325706
67484Node: Modern GNU Objective-C runtime API2326713
67485Node: Traditional GNU Objective-C runtime API2329149
67486Node: Executing code before main2329876
67487Node: What you can and what you cannot do in +load2332620
67488Node: Type encoding2334990
67489Node: Legacy type encoding2340131
67490Node: @encode2341221
67491Node: Method signatures2341766
67492Node: Garbage Collection2343758
67493Node: Constant string objects2346448
67494Node: compatibility_alias2348957
67495Node: Exceptions2349682
67496Node: Synchronization2352392
67497Node: Fast enumeration2353576
67498Node: Using fast enumeration2353888
67499Node: c99-like fast enumeration syntax2355099
67500Node: Fast enumeration details2355802
67501Node: Fast enumeration protocol2358142
67502Node: Messaging with the GNU Objective-C runtime2361294
67503Node: Dynamically registering methods2362666
67504Node: Forwarding hook2364357
67505Node: Compatibility2367397
67506Node: Gcov2373953
67507Node: Gcov Intro2374488
67508Node: Invoking Gcov2377206
67509Node: Gcov and Optimization2400041
67510Node: Gcov Data Files2403784
67511Node: Cross-profiling2405193
67512Node: Gcov-tool2407047
67513Node: Gcov-tool Intro2407472
67514Node: Invoking Gcov-tool2409442
67515Node: Gcov-dump2412020
67516Node: Gcov-dump Intro2412343
67517Node: Invoking Gcov-dump2412610
67518Node: lto-dump2413211
67519Node: lto-dump Intro2413510
67520Node: Invoking lto-dump2413760
67521Node: Trouble2414856
67522Node: Actual Bugs2416273
67523Node: Interoperation2416720
67524Node: Incompatibilities2423611
67525Node: Fixed Headers2431763
67526Node: Standard Libraries2433421
67527Node: Disappointments2434793
67528Node: C++ Misunderstandings2439152
67529Node: Static Definitions2439963
67530Node: Name lookup2441016
67531Ref: Name lookup-Footnote-12445797
67532Node: Temporaries2445986
67533Node: Copy Assignment2447962
67534Node: Non-bugs2449769
67535Node: Warnings and Errors2460275
67536Node: Bugs2462037
67537Node: Bug Criteria2462504
67538Node: Bug Reporting2464714
67539Node: Service2464932
67540Node: Contributing2465752
67541Node: Funding2466493
67542Node: GNU Project2468983
67543Node: Copying2469629
67544Node: GNU Free Documentation License2507137
67545Node: Contributors2532255
67546Node: Option Index2573228
67547Node: Keyword Index2852561
67548
67549End Tag Table
67550